2011-08-29 12 views
11

私が現在使っているテーブルを操作する(つまり、カーソルがそのテーブルのどこかにある)VBAモジュールを実行できるようにします。 VBAコードは、実行している各テーブルで同じ操作を実行します。MS Word VBAで現在のテーブルを取得するにはどうすればよいですか?

たとえば、各テーブルの一番上の行(見出し)を太字にする必要があるモジュールがあるとします。 whatever.rows(0)を操作できるように、現在使用しているテーブルオブジェクト(whatever)を見つける必要があります。

テーブルオブジェクトをカーソル位置から取得するにはどうすればよいですか?また、私がではないことを検出して、テーブル内のを検索し、何もしない(またはエラーダイアログを表示する)必要があります。

答えて

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

関連する問題