Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » Excel VBAでWordのテキストボックスを取得する

Excel VBAでWordのテキストボックスを取得する

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

「excel vba word テキストボックス取得」
という検索キーワードでアクセスがありました。

「テキストボックス取得」と表現されているのが、本当のところ何なのかわかりませんので、参考になりそうな簡単なExcelマクロをご紹介します。

[スポンサードリンク]

Wordのテキストボックスを取得するExcelマクロ

テキストボックスに文字列の入力されているWordファイルが1つ開かれている状態で、以下のExcelマクロを実行してください(参照設定は不要です)。

Sub Wordのテキストボックスを取得する()
On Error GoTo ErrHandl

 With GetObject(Class:="Word.Application")
  Dim shp As Object ' Word.Shape
  For Each shp In .ActiveDocument.Shapes
   If shp.Type = msoTextBox Then
    MsgBox shp.TextFrame.TextRange.Text
   End If
  Next
 End With

Exit Sub
ErrHandl:
 Select Case Err.Number
  Case 429
   MsgBox "Wordが起動していないようです。"
  Case 4248
   MsgBox "Wordファイルが開かれていないようです。"
  Case Else
   MsgBox Err.Description & vbCrLf & Err.Number
 End Select
 Err.Clear
End Sub

Word文書内のテキストボックスに入力されている文字列が、順番にメッセージボックスに表示されます。

サンプルマクロで行っている処理について

アクティブ文書内に存在するテキストボックスに入力されている文字列を、イミディエイトウィンドウに出力するWordマクロをご紹介しています。ご紹介済みのWordマクロと基本構造は同じで、Excel VBAからWordを操作するためにコードをいくつか追加しています。

VBAのGetObject関数を使って、起動済みWord.Applicationへの参照を取得します。

With GetObject(Class:="Word.Application")

Word.Applicationへの参照が取得できてしまえば、実質的にWord VBAです。

アクティブ文書内の全ShapeにFor Each~Nextループを回して、テキストボックスだったら、テキストボックス内の文字列をメッセージボックスに表示しています。

 Dim shp As Object
 For Each shp In .ActiveDocument.Shapes
  If shp.Type = msoTextBox Then
   MsgBox shp.TextFrame.TextRange.Text

ShapeオブジェクトはExcel VBAにも存在しますが、ここで使っているのはWordのShapeで参照設定を行っていない前提ですから、

Dim shp As Object

と宣言しています。また、ActiveDocumentプロパティはWordのプロパティですから、

For Each shp In .ActiveDocument.Shapes

の部分「ActiveDocument」の直前の「.」が必須です。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » Excel VBAでWordのテキストボックスを取得する

「Office連携」の記事一覧

検索


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

.