Home » ワードマクロ・Word VBAの使い方 » Shape・図形 » Word VBAでテキストボックスの文字列を取得

Word VBAでテキストボックスの文字列を取得

対象:Word2007, Word2010, Word2013

「word vba テキストボックス 文字取得」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。

テキストボックスの文字列を取得するWord VBA(Visual Basic for Applications)のコードを探している方による検索です。

どのテキストボックスの文字列を取得したいのか、取得したあとにその文字列をどうしたいのかによって、実際に作成するマクロの仕様は変わってきますが、参考になりそうな簡単なマクロをご紹介しておきます。

[スポンサードリンク]

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

以下のようなマクロで、アクティブ文書の中の(描画キャンバスに含まれない)すべてのテキストボックスの文字列を取得して、イミディエイトウィンドウに出力できます。

Sub アクティブ文書の全テキストボックスの文字列を取得する()
 Dim shp As Shape
 Dim txt As String
 For Each shp In ActiveDocument.Shapes
  If shp.Type = msoTextBox Then
   txt = shp.TextFrame.TextRange.Text
   Debug.Print Left(txt, Len(txt) - 1)
  End If
 Next
End Sub

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

そもそもテキストボックスはShapeの一種です。

ですからこのマクロでは、アクティブな文書の、すべてのShapeに対してFor Each~Nextループを回して、

For Each shp In ActiveDocument.Shapes

Shape種別がテキストボックスだったときに、

 If shp.Type = msoTextBox Then

文字列を取得するという構造にしています。

Shapeから文字列を取得する処理は、どうしてもオブジェクトモデルの階層が深くなります。ShapeオブジェクトのTextFrameオブジェクトを取得して、TextFrameオブジェクトのTextRangeオブジェクトを取得して、TextRangeオブジェクトのTextプロパティを取得しています。

  txt = shp.TextFrame.TextRange.Text

ここで取得した文字列をそのままDebug.Printしてもいいのですが、最後に段落記号が入っている関係で、そのままDebug.Printすると、無駄な空白行が出力されてしまいますから、ここでは、

  Debug.Print Left(txt, Len(txt) - 1)

と、VBAのLeft関数とLen関数を組み合わせて、最後の1文字を削除した文字列をイミディエイトウィンドウに出力しています。

処理対象を変更するには

上記のマクロでは、

For Each shp In ActiveDocument.Shapes

と、For Each~Nextループを、アクティブな文書の全Shapeに回していますが、例えば、

For Each shp In Selection.ShapeRange

としてやれば、選択されているテキストボックスの文字列が取得できます。

また、定義済みブックマーク「\Page」を利用して、

For Each shp In ActiveDocument.Bookmarks("\Page").Range.ShapeRange

としてやれば、アクティブなページ上のテキストボックスの文字列を取得できます。

なお上記のコードは、いずれも描画キャンバス内のテキストボックスは処理対象になりません。

最終更新日時:2024-03-01 04:52

[スポンサードリンク]

Home » ワードマクロ・Word VBAの使い方 » Shape・図形 » Word VBAでテキストボックスの文字列を取得

「Shape・図形」の記事一覧

検索


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

.