2011-08-29 110 views
11

我希望能夠運行一個VBA模塊來操作我當前所在的表格(即光標位於該表格的某處)。 VBA代碼將在您運行時所在的每個表上執行相同的操作。例如,假設我有一個需要加粗每個表格(標題)頂部行的模塊。它需要找到您當前所在的表格對象(稱爲whatever),以便它可以操作whatever.rows(0)如何獲取MS Word VBA中的當前表格?

如何從光標位置獲取表格對象?我還需要在表格中檢測我是不是而不是,並且什麼都不做(或引發錯誤對話框)。

回答

11

此答案底部的VBA子例程顯示瞭如何執行此操作。

它使用當前的選擇,它崩潰的起點第一,從而不必擔心多段選擇:

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