「word vba テキストボックス 文字取得」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。
テキストボックスの文字列を取得するWord VBA(Visual Basic for Applications)のコードを探している方による検索です。
どのテキストボックスの文字列を取得したいのか、取得したあとにその文字列をどうしたいのかによって、実際に作成するマクロの仕様は変わってきますが、参考になりそうな簡単なマクロをご紹介しておきます。
テキストボックスの文字列を取得するWordマクロ
以下のようなマクロで、アクティブ文書の中の(描画キャンバスに含まれない)すべてのテキストボックスの文字列を取得して、イミディエイトウィンドウに出力できます。
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でテキストボックスの文字列を取得