「word vba 表 選択」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。
Wordでマクロ記録を開始すると、ドラッグ操作では表を選択することはできなくなってします。そのため、表を選択するVBA(Visual Basic for Applications)のコードをどう書けばいいのか疑問に感じる方がいらっしゃるのは、とても納得できます。
ここでは表を選択するWordマクロを2つご紹介しておきます。
ただし、Word VBAで表を操作するときに、本当に選択しなければいけないのか、選択処理がそもそも必要なのか、Rangeオブジェクトを使った処理ではダメなのかについて、まずは、しっかりと考えてください。
カーソルの置かれている表を選択するサンプルマクロ
本当に表を選択するマクロが欲しいという状況を想像すると、カーソルの置かれている表を選択するという、操作性を向上するためのマクロのニーズはありそうです。
If .Count = 0 Then Exit Sub
.Item(1).Select
End With
End Sub
以上のようなマクロで、カーソルが置かれている表全体を選択することができます。
本当は、
Selection.Tables(1).Select
という1行だけでOKなのですが、この1行だけでは表の中にカーソルがない状態で実行されたときに、実行時エラーが発生してしまいます。この実行時エラーを回避するためにIf文を入れてあります。
このマクロで利用しているオブジェクトモデルの階層関係を図にすると以下のとおりです。
このマクロの階層関係はそれほど複雑なものではありません。
コードの意味は以下のとおりです。
選択範囲・カーソル位置を表すSelectionオブジェクトの、Tablesコレクションオブジェクトを取得して、
With Selection.Tables
表の数がゼロだったときにはマクロを終了しています。
If .Count = 0 Then Exit Sub
カーソル位置に表が存在していたときには、
With Selection.Tables
.Item(1).Select
Tablesコレクションオブジェクトの、Itemメソッドの引数に「1」を指定することで、1つ目のテーブルを表すTableオブジェクトを取得して、
TableオブジェクトのSelectメソッドで選択を行っています。
アクティブページの1つ目の表を選択するサンプルマクロ
もう一つ本当に表を選択するマクロが欲しいという状況を想像すると、アクティブなページの表を選択するマクロもニーズがありそうです。
With ActiveDocument.Bookmarks("\Page").Range.Tables
If .Count = 0 Then Exit Sub
.Item(1).Select
End With
このマクロで利用しているオブジェクトモデルの階層図は以下のとおりです。
先にご紹介した、カーソルの置かれている表全体を選択するマクロよりも階層関係がかなり深くなっています。このマクロに限らず、アクティブなページに対するWordマクロの場合は必ずこの程度の階層になってしまいます。
先のマクロどこが違うのかというと、
With ActiveDocument.Bookmarks("\Page").Range.Tables
の部分です。先のマクロでは、
With Selection.Tables
となっていた部分が変更になっています。
この部分の意味は以下のとおりです。
ActiveDocumentプロパティで、アクティブな文書を表すDocumentオブジェクトを取得して、
DocumentオブジェクトのBookmarksプロパティで、Bookmarksコレクションオブジェクトを取得して、
BookmarksコレクションオブジェクトのデフォルトメソッドであるItemメソッドの引数に「\Page」を指定することで、アクティブなページを表すBookmarkオブジェクトを取得して、
BookmarkオブジェクトのRangeプロパティで、ページ全体を表すRangeオブジェクトを取得して、
RangeオブジェクトのTablesプロパティで、アクティブなページ全体に存在するすべての表を表すTablesコレクションオブジェクトを取得しています。
このあとの、
If .Count = 0 Then Exit Sub
.Item(1).Select
については、先のマクロと同じです。
Home » ワードマクロ・Word VBAの使い方 » 表・テーブル » 表を選択するWordマクロ
TrackBack:1
- TrackBack URL
- 表のセルを選択するWord VBAのコード from インストラクターのネタ帳
- 対象:Word2007, Word2010, Word2013 「word v...