「excel vba word 表 開いているページ」
といった検索キーワードでアクセスがあることに気がつきました。
Word文書のアクティブなページにある表を、Excel VBAを使って取得するには、どのようなコードを書けばいいのかを調べていらしたのでしょうか。
Wordのアクティブページ上の表を取得するサンプルマクロ
Wordで、表が存在するページをアクティブにしておいてから、以下のExcelマクロを実行してください。
On Error GoTo ErrHandl
With GetObject(Class:="Word.Application")
Dim r As Long, c As Long, txt As String
With .ActiveDocument.Bookmarks("\Page").Range.Tables(1)
For r = 1 To .Rows.Count
For c = 1 To .Columns.Count
txt = .Cell(r, c).Range.Text
MsgBox Left(txt, Len(txt) - 2)
Next c
Next r
End With
End With
Exit SubErrHandl:
Select Case Err.Number
Case 429
MsgBox "Wordが起動していないようです。"
Case 4248
MsgBox "Wordファイルが開かれていないようです。"
Case 5941
MsgBox "Wordのアクティブページには表が存在しないようです。"
Case Else
MsgBox Err.Description & vbCrLf & Err.Number
End Select
Err.Clear
End Sub
実際には上記のマクロにExcel VBAと呼べる箇所はありませんから、VBAが使える環境ならどこからでも実行できるはずです。
Wordのアクティブページ上に存在する1つ目の表内の、各セルの文字列が順番にメッセージボックスに表示されます。
サンプルマクロで行っている処理
VBAのGetObject関数を使って、
With GetObject(Class:="Word.Application")
起動しているWord.Applicationオブジェクトへの参照を取得した後は、実質的にWord VBAです。
Wordのアクティブページに存在する1つ目の表を表すWord.Tableオブジェクトを取得しているのは、
With .ActiveDocument.Bookmarks("\Page").Range.Tables(1)
の部分です。
Word.Tableを取得しただけでは何が起きているのかわからないので、上記のExcelマクロでは、その表の各セルを順番に取得してその文字列をメッセージボックスに表示しています。
拙著『Excel VBAユーザーのためのWord VBA入門(2):Tableの基本編』の、「11-3. アクティブページに存在する表の取得」で、以下のようなWordマクロを解説しています。
Sub セルのデータを順番に取得する_Cellメソッド() With ActiveDocument.Bookmarks("\Page").Range.Tables If .Count = 0 Then Exit Sub Dim r As Long, c As Long, txt As String With .Item(1) For r = 1 To .Rows.Count For c = 1 To .Columns.Count .Cell(r, c).Select txt = .Cell(r, c).Range.Text MsgBox Left(txt, Len(txt) - 2) Next c Next r End With End With End Sub
このWordマクロで行っているのと同様の処理を行っているのが、本記事で紹介しているマクロの
Dim r As Long, c As Long, txt As String With .ActiveDocument.Bookmarks("\Page").Range.Tables(1) For r = 1 To .Rows.Count For c = 1 To .Columns.Count txt = .Cell(r, c).Range.Text MsgBox Left(txt, Len(txt) - 2) Next c Next r End With
の部分です。
最終更新日時:2022-08-18 17:31
Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » Excel VBAでWordのアクティブページ上の表を取得する