Home » ワードマクロ・Word VBAの使い方 » Documentオブジェクト » Word VBAでフィールドコードを取得する

Word VBAでフィールドコードを取得する

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

「Word VBA フィールドコード 取得」
といった検索キーワードで、このサイト『インストラクターのネタ帳』へのアクセスが時折あります。

フィールドコードを順番に取得するサンプルマクロ

以下のWordマクロが参考になるでしょうか。

Sub フィールドコードを順番に取得する()
 Dim fld As Field
 For Each fld In ActiveDocument.Fields
  fld.Select
  Debug.Print _
    fld.Code.Text; vbTab; _
    fld.Result.Text
  Stop
 Next
End Sub

本文にフィールドが存在するWord文書がアクティブな状態で上記のマクロを実行すると、本文のフィールドが選択された状態で中断し、そのフィールドコードと結果がイミディエイトウィンドウに出力されます。

サンプルマクロの実行例

例えば、下図のようにファイル名と日付を表示するフィールドコードがあり、

その結果が下図のような状態のときに

先ほどのWordマクロを実行すると、下図のようにWord文書で1つ目のフィールドが選択され、そのフィールドコードと結果がVBEのイミディエイトウィンドウに出力された状態で中断します。

ショートカットキー[F5]などで実行を再開すると、次のフィールドが選択されてフィールドコードと結果が出力されます。

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

本文の全フィールドを表すFieldsコレクションを取得する

Fieldsプロパティが、Word文書を表すDocumentオブジェクトに用意されています。

上記のマクロは、For Each~Nextループで、Fieldsコレクションの要素である、単独のフィールドを表すFieldオブジェクトを順番に取得する構造になっています。

For Each fld In ActiveDocument.Fields

For Each~Nextブロック内では、Field.Codeプロパティを使って取得できる

 Debug.Print _
   fld.Code.Text; vbTab; _
   fld.Result.Text

RangeオブジェクトのTextプロパティでフィールドコードと、

Field.Resultプロパティを使って取得できる

 Debug.Print _
   fld.Code.Text; vbTab; _
   fld.Result.Text

RangeオブジェクトのTextプロパティでフィールドの実行結果を取得して、Debug.Printしています。

 Debug.Print _
   fld.Code.Text; vbTab; _
   fld.Result.Text

Field.Codeプロパティ、Field.Resultプロパティで取得できるのは、CodeオブジェクトやResultオブジェクトではなく、拙著『Excel VBAユーザーのためのWord VBA入門(1)』で、その基本を解説している、Word.Rangeオブジェクトであることは、Word VBAでフィールドを操作したことがないと驚く箇所かもしれません。

「Word VBA フィールドコード 取得」
と検索なさった方への要望は、ここまで説明してきたfld.Code.Textとfld.Result.Textで十分なはずですが、どのフィールドコードを取得しているのかをWord文書上で確認しやすくするために、Field.Selectメソッドを使って選択を行い、

For Each fld In ActiveDocument.Fields
 fld.Select
 Debug.Print _
   fld.Code.Text; vbTab; _
   fld.Result.Text
 Stop

Stopステートメントで中断する形にしています。

[スポンサードリンク]

Home » ワードマクロ・Word VBAの使い方 » Documentオブジェクト » Word VBAでフィールドコードを取得する

「Documentオブジェクト」の記事一覧

検索


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

.