VBAでRangeオブジェクトの場所に連番フィールドを挿入する(Word)

VBAでRangeオブジェクトの場所に連番フィールドを挿入する(Word)

ちょっとした覚書。

Fields.Addメソッドでフィールド追加

文書内にフィールドを追加するには、Fields.Addメソッドを使う。(参考

Fields.Addメソッドには、引数が四つ。

  • Range
  • Type
  • Text
  • PreserveFormatting

一つ目のRangeは挿入する箇所、二つ目のTypeはフィールドの種類(WdFieldType列挙体で指定できる。)、三つ目のTextプロパティは、フィールドコード文字列のうち、フィールド名以外の部分。

ここまでは、上の「参考」のところを読んだらすぐにわかる。

四つ目のPreserveFormattingというのがよくわからん。

知っている人がいたら教えろえてください。

丸囲み数字の連番フィールドをカーソル位置に挿入するマクロ

リスト1
Private Sub test01()
  Dim tgtDoc As Document
  Set tgtDoc = ActiveDocument
  Dim fld As Field
  Set fld = tgtDoc.Fields.Add(Range:=Selection.Range, _
                              Type:=wdFieldSequence, _
                              Text:="傍線番号 \* circlenum")
End Sub

ほとんど手探りでコードを書いた。(最後、無駄に変数fldを使っていますけど、特に意味はないです。Call tgtDoc.Fields.Add〔以下略〕でいいです。)

連番フィールドのフィールド名は「SEQ」なので、引数TypeにはwdFieldSequenceを指定。

Textプロパティには、とりあえずガチでフィールドコードを書くときの「SEQ」以外の部分を書いた。

(一般書式)スイッチ(「\*」以下の部分。)を指定することによって、色んなタイプの連番が使えるので実によい。

スイッチについては、コチラで勉強した。実にありがたい。

実行結果

リスト1を実行すると、カーソル位置に丸数字で連番が挿入される。

f:id:akashi_keirin:20210823085917p:plain

それぞれ、下線部の先頭でリスト1を実行したところ。

ちなみに、引数Textに渡した文字列の「circlenum」を「iroha」に変えると、

f:id:akashi_keirin:20210823085914p:plain

こんなふうにイロハになる。まあ素敵。(連番にカッコとか付ける方法を学ばねばならぬ。)

おわりに

フィールドコードも、面白いですね。