Home » ワードマクロ・Word VBAの使い方 » Word.Rangeオブジェクト » StoryRanges経由でテキストボックスの文字列を取得するWordマクロ

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

動作検証バージョン:Windows 11 Home + 64bit Word バージョン 2403(ビルド17425.20000クイック実行)ベータチャネル

Word VBAで、Shape-TextFrame-TextRangeといったオブジェクトモデル経由で、テキストボックスの文字列を取得するマクロをご紹介しています。

これとは全く異なるオブジェクトモデルでも、テキストボックスの文字列を取得できます。

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

テキストボックスの存在するWord文書がアクティブな状態で以下のWordマクロを実行すると、テキストボックス内の文字列がイミディエイトウィンドウに出力されます。

Sub StoryRanges経由でテキストボックスの文字列を取得する()
 Dim rng As Range
 Set rng = ActiveDocument.StoryRanges(wdTextFrameStory)
 
 Dim txt As String
 Do Until rng Is Nothing
  txt = rng.Text
  Debug.Print Left(txt, Len(txt) - 1)
  Set rng = rng.NextStoryRange
 Loop
End Sub

拙著『Excel VBAユーザーのためのWord VBA入門(1)』で基本を解説している、Rangeオブジェクトの高度な使い方したマクロと言えます。

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

上記のWordマクロでは、以下の処理を行っています。

Document.StoryRanges(wdTextFrameStory)

Document.StoryRangesプロパティで取得できる、StoryRangesコレクションの既定メンバーであるItemメソッドの引数に

WdStoryType列挙型に定義されている定数wdTextFrameStory(直値:5)を指定すると、

1つ目のTextFrameストーリーを表すRange(1つ目のテキストボックス内の文字列範囲を表すRange)オブジェクトが取得できます。

その取得したRangeオブジェクトを変数rngに代入しておきます。

Set rng = ActiveDocument.StoryRanges(wdTextFrameStory)

Do Until~LoopとRange.NextStoryRange

StoryRanges(wdTextFrameStory)で取得できるRangeオブジェクトは、Range.NextStoryRangeプロパティを使って、

次のTextFrameストーリーを表すRangeが取得できます。
ですから、以下の構造のDo Until~Loopで、

Dim rng As Range
Do Until rng Is Nothing
 ' 何らかの処理
 Set rng = rng.NextStoryRange
Loop

最後のTextFrameストーリに含まれるRangeまで次々に取得できます。
この方法を使って、上記マクロではテキストボックス内の文字列をイミディエイトウィンドウに出力しています。

段落記号の削除

イミディエイトウィンドウへの出力を行う際に、Rangeの末尾に存在する段落記号を削除して出力するために、Do Until~Loop内で以下の処理を入れています。

 txt = rng.Text
 Debug.Print Left(txt, Len(txt) - 1)

Rangeオブジェクトに段落記号などの編集記号が含まれることについては、『Excel VBAユーザーのためのWord VBA入門(1)』の[3-2. Document.RangeメソッドでRangeを取得する]でも解説しています。

もしも、イミディエイトウィンドウへの出力時に空白行が入って問題なければ、上記マクロの、

Dim txt As String
Do Until rng Is Nothing
 txt = rng.Text
 Debug.Print Left(txt, Len(txt) - 1)
 Set rng = rng.NextStoryRange
Loop

の部分は、

Do Until rng Is Nothing
 Debug.Print rng.Text
 Set rng = rng.NextStoryRange
Loop

のようにシンプルにしてOKです。

最終更新日時:2024-03-05 10:19

[スポンサードリンク]

Home » ワードマクロ・Word VBAの使い方 » Word.Rangeオブジェクト » StoryRanges経由でテキストボックスの文字列を取得するWordマクロ

「Word.Rangeオブジェクト」の記事一覧

検索


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

.