Yahoo!知恵袋で、「Wordマクロでテキストボックスの中にある表の文字列を取得したい」との質問がありました。
コードとしては、下記のようなコードで対応できるかと思います。
Option Explicit
Public Sub Sample()
With ActiveDocument.Shapes("Text Box 1") 'Shapeオブジェクト指定
With .TextFrame.TextRange
If .Tables.Count > 0 Then
With .Tables(1) 'テキスト ボックスの中の表指定
Debug.Print .Cell(1, 1).Range.Text '指定したセルの文字列取得
With .Cell(2, 2).Shading '指定したセルの背景色設定
.Texture = wdTextureNone
.BackgroundPatternColor = wdColorYellow
End With
End With
End If
End With
End With
End Sub
上記コードを実行すると、下図のようにテキストボックスの中にある表の、左上のセル(Cell(1, 1))の文字列をイミディエイト ウィンドウに出力し、真ん中のセル(Cell(2, 2))の背景を黄色で塗りつぶします。
Wordマクロでよく引っ掛かるのが、こういった入れ子になっているオブジェクトの対応ですね。
構造が下記のように深くなっているので、普通に「ActiveDocument.Tables」と書いただけでは対応できません。
- Shape
- └TextFrame
- └TextRange (Range)
- └Tables
- └Table (Tables.Item(n))
- └Tables
- └TextRange (Range)
- └TextFrame
このように深い階層のオブジェクトを調べる場合には、下図のようにローカル ウィンドウが活用できるでしょう。
ローカル ウィンドウの使い方は、Excel MVPである伊藤さんのブログ「インストラクターのネタ帳」に色々な記事がありますので、そちらをどうぞご参照ください。



















この記事へのコメントはありません。