「Word VBA フィールドコード 取得」
といった検索キーワードで、このサイト『インストラクターのネタ帳』へのアクセスが時折あります。
フィールドコードを順番に取得するサンプルマクロ
以下のWordマクロが参考になるでしょうか。
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でフィールドコードを取得する