Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » Excel VBAでWordのアクティブページ上の表を取得する

Excel VBAでWordのアクティブページ上の表を取得する

動作検証バージョン:64bit Windows 10 Pro + 32bit Excel & Word(バージョン2206 ビルド15330.20264 Microsoft Store)

「excel vba word 表 開いているページ」
といった検索キーワードでアクセスがあることに気がつきました。

Word文書のアクティブなページにある表を、Excel VBAを使って取得するには、どのようなコードを書けばいいのかを調べていらしたのでしょうか。

Wordのアクティブページ上の表を取得するサンプルマクロ

Wordで、表が存在するページをアクティブにしておいてから、以下のExcelマクロを実行してください。

Sub Wordのアクティブページの1つ目の表を取得する()
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 Sub
ErrHandl:
 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のアクティブページ上の表を取得する

「Office連携」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.