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

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

対象:Word2007, Word2010, Word2013

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

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

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

[スポンサードリンク]

テキストボックスの文字列を取得するサンプルマクロ

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


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 shp

End Sub

サンプルマクロの解説

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

ですからこのマクロでは、
アクティブな文書の、すべてのShapeに対してFor Each~Nextループを回して、
 For Each shp In ActiveDocument.Shapes
Shape種別がテキストボックスだったときに、
  If shp.Type = msoTextBox Then
文字列を取得するという構造になっています。

Shapeから文字列を取得する処理は、どうしてもオブジェクトモデルの階層が深くなります。
   txt = shp.TextFrame.TextRange.Text
ShapeオブジェクトのTextFrameオブジェクトを取得して、TextFrameオブジェクトのTextRangeオブジェクトを取得して、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
としてやれば、アクティブなページ上のテキストボックスの文字列を取得できます。

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

[スポンサードリンク]

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

TrackBack:1

TrackBack URL
Word VBAでヘッダー内のテキストボックスを処理する from インストラクターのネタ帳
ヘッダーにテキストボックスを挿入するWordマクロと、ヘッダー内のテキストボックスの文字列を取得するWordマクロをご紹介しています。

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

「Shape・図形」の記事一覧

検索


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

.