2011-08-29 6 views
11

मैं एक वीबीए मॉड्यूल चलाने में सक्षम होना चाहता हूं जो उस तालिका में हेरफेर करता है जिसमें मैं वर्तमान में हूं (यानी, कर्सर उस तालिका के भीतर कहीं है)। वीबीए कोड प्रत्येक टेबल पर एक समान ऑपरेशन करेगा जो आप इसे चलाने के दौरान करते हैं।आप एमएस वर्ड वीबीए में वर्तमान तालिका कैसे प्राप्त कर सकते हैं?

तो, उदाहरण के लिए, मान लें कि मेरे पास एक मॉड्यूल है जिसे प्रत्येक तालिका (शीर्षलेख) की शीर्ष पंक्ति को बोल्ड करने की आवश्यकता होती है। इसे टेबल ऑब्जेक्ट (whatever कहा जाता है) का पता लगाने की आवश्यकता होगी, जिसमें आप वर्तमान में हैं ताकि यह whatever.rows(0) में हेरफेर कर सके।

मैं कर्सर की स्थिति से टेबल ऑब्जेक्ट कैसे प्राप्त कर सकता हूं? मुझे यह पता लगाने की भी आवश्यकता है कि क्या मैं तालिका में नहीं हूं और कुछ भी नहीं (या एक त्रुटि संवाद उठाएं)।

उत्तर

11

इस उत्तर के निचले हिस्से में वीबीए सबराउटिन दिखाता है कि यह कैसे करें।

यह वर्तमान चयन का उपयोग करता प्रारंभिक बिंदु के लिए यह गिर पहले इतनी के रूप में बहु खंड चयन के बारे में चिंता करने की जरूरत नहीं करने के लिए:

Selection.Collapse Direction:=wdCollapseStart 

यह तो जाँच करता चयन यह एक तालिका के अंदर है यह सुनिश्चित करें कि

If Not Selection.Information(wdWithInTable) Then 
     MsgBox "Can only run this within a table" 
     Exit Sub 
    End If 

तालिका को Selection.Tables(1) का संदर्भ देकर पहुंच योग्य है। नीचे


कोड अवधारणा का एक सरल सबूत जो केवल या तो डालने या एक लंबवत बार मार्कर को हटाने के लिए तालिका की प्रत्येक पंक्ति में शुरू होने वाले कोशिकाओं में से प्रत्येक के लिए टॉगल था।

Sub VertBar() 
    ' Collapse the range to start so as to not have to deal with ' 
    ' multi-segment ranges. Then check to make sure cursor is ' 
    ' within a table. ' 
    Selection.Collapse Direction:=wdCollapseStart 
    If Not Selection.Information(wdWithInTable) Then 
     MsgBox "Can only run this within a table" 
     Exit Sub 
    End If 

    ' Process every row in the current table. ' 
    Dim row As Integer 
    Dim rng As Range 

    For row = 1 To Selection.Tables(1).Rows.Count 
     ' Get the range for the leftmost cell. ' 
     Set rng = Selection.Tables(1).Rows(row).Cells(1).Range 

     ' For each, toggle text in leftmost cell. ' 
     If Left(rng.Text, 2) = "| " Then 
      ' Change range to first two characters and delete them. ' 
      rng.Collapse Direction:=wdCollapseStart 
      rng.MoveEnd Unit:=wdCharacter, Count:=2 
      rng.Delete 
     Else 
      ' Just insert the vertical bar. ' 
      rng.InsertBefore ("| ") 
     End If 
    Next 
End Sub 
3

मुझे एहसास है कि यह एक पुराना सवाल है, लेकिन मैं कुछ कोड में ठोकर खाई जो अगले व्यक्ति को ऐसी ही समस्या का सामना कर रहा है।

ActiveDocument.Range(0, Selection.Tables(1).Range.End).Tables.count 

इस तालिका में कर्सर में है के सूचकांक वापस आ जाएगी कौन सा फिर परिवर्तन जानकारी कर सकते हैं या पुनः प्राप्त करने के लिए इस्तेमाल किया जा सकता है:।

dim numberOfColumnsInCurrentTable as Integer 
dim currentTableIndex as Integer 

currentTableIndex = ActiveDocument.Range(0, Selection.Tables(1).Range.End).Tables.count 
numberOfColumns = ActiveDocument.Tables(currentTableIndex).Columns.count 

जाहिर चेकों कर्सर सुनिश्चित करने के लिए जोड़ा जाना चाहिए के भीतर है मेज़।

+0

बिल्कुल सही! यह वही है जो मुझे @enifeder की आवश्यकता है: ActiveDocument.Range (0, Selection.Tables (1) .Range.End) .Tables.count – DRC

संबंधित मुद्दे