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である伊藤さんのブログ「インストラクターのネタ帳」に色々な記事がありますので、そちらをどうぞご参照ください。
この記事へのコメントはありません。