「word vba 表の1行目を除いて選択」
といった検索でアクセスがありました。
Word VBAで、表の1行目を除外して2行目以降・2行目から最後の行までを選択するには、どのようなコードを書けばいいのかを探していた方による検索でしょう。
表の複数行を表すオブジェクトの取得が、Word VBAとExcel VBAとでは、かなり異なります。
表の2行目以降を選択するサンプルマクロ
行が、2行以上存在している表の中にカーソルを置いた状態で、以下のWordマクロを実行してみてください。
On Error GoTo ErrHandl
Dim rng As Range
With Selection.Tables.Item(1)
Set rng = .Rows.Item(2).Range
rng.End = .Rows.Last.Range.End
End With
rng.Select
ErrHandl:
Select Case Err.Number
Case 5941
MsgBox "行が2行以上存在する表の中にカーソルを置いてから実行してください。"
Case Else
MsgBox Err.Description & vbCrLf & Err.Number
End Select
Err.Clear
End Sub
表の2行目以降を選択するマクロで行っている処理
上記のWordマクロで行っている処理は以下のとおりです。
SelectionオブジェクトのTablesプロパティで選択範囲内にあるすべての表を表すTablesコレクションを取得し、
With Selection.Tables.Item(1)
TablesコレクションのItemメソッドで、選択範囲内の1つ目の表を表すTableオブジェクトを取得します。
With Selection.Tables.Item(1)
その表内のすべての行を表すRowsコレクションを、TableオブジェクトのRowsプロパティで取得し、その2行目を表すRowオブジェクトをRowsコレクションのItemメソッドで取得して、
Set rng = .Rows.Item(2).Range
Row.Rangeプロパティで取得した2行目全体を表すRangeオブジェクトを、オブジェクト変数rngに代入します。
Set rng = .Rows.Item(2).Range
つづいて、RowsコレクションのLastプロパティで最終行を表すRowオブジェクトを取得して、
rng.End = .Rows.Last.Range.End
RowオブジェクトのRangeプロパティで取得したRangeオブジェクトの
rng.End = .Rows.Last.Range.End
末尾位置を、オブジェクト変数rngのEndプロパティに代入します。
rng.End = .Rows.Last.Range.End
ここまでの処理で、オブジェクト変数rngには表の2行目から最終行の末尾までが格納されています。
最後に、Range.Selectメソッドを使って選択を行っています。
rng.Select
Excel VBAとは趣きがかなり異なる、Word VBAらしいコードです。
拙著『Excel VBAユーザーのためのWord VBA入門(1)』の「chapter 3. WordのRangeは文字列範囲を表す」「7-8. RangeとSelectionは機能面で似ている」、『Excel VBAユーザーのためのWord VBA入門(2)』の「11-1. 選択されている表の取得」「chapter 13. WordのRowは表の行を表す」あたりも、よろしければ参考にしてください。
- 『Word VBA入門』に登場するオブジェクトごとのプロパティ一覧
- 『Excel VBAユーザーのためのWord VBA入門(1)』出ました。
- 『Excel VBAユーザーのためのWord VBA入門(2):Tableの基本編』も出ました。
最終更新日時:2022-07-27 11:23
Home » ワードマクロ・Word VBAの使い方 » 表・テーブル » 表の複数行(2行目以降)をWord VBAで選択する