【意味】Paragraphオブジェクトの謎挙動【不明】(Word)

【意味】Paragraphオブジェクトの謎挙動【不明】

WordのVBAで、ParagraphオブジェクトのRange.Textプロパティを書き換えたら、わけのわからないことが起こったので報告。

もとの文書

もとのWord文書は、

f:id:akashi_keirin:20210808163624p:plain

このとおり。何の変哲もない、至ってフツーのドキュメントである。

f:id:akashi_keirin:20210808163629p:plain

1段落目のスタイルは、「表題」。

f:id:akashi_keirin:20210808163632p:plain

2段落目のスタイルは、「副題」である。

各段落のRange.Textプロパティを書き換えるマクロ

この文書に対して、次のようなマクロを実行してみる。

リスト1
Private Sub test01()
  Dim tgtDoc As Document
  Set tgtDoc = ActiveDocument
  Dim para As Paragraph
  Dim tmp As String
  For Each para In tgtDoc.Paragraphs
    tmp = para.Range.Text  '……①'
    para.Range.Text = tmp  '……②'
    Debug.Print para.Range.Text  '……③'
  Next
End Sub

アクティブドキュメントからParagraphsコレクションを取得し、Paragraphオブジェクト一つ一つに対して、まずはそのRange.Textプロパティを取得し(①)、直後に取得した文字列をRange.Textプロパティにセットし直す(②)、というアホみたいなマクロだ。

また、一連のアホな処理が終わった後は、ParagraphオブジェクトのRange.Textプロパティの値をイミディエイトに表示する(③)。

さて、こいつを実行するとどうなるとお思いだろうか?

衝撃の実行結果

実は、次のような奇想天外な結果が得られる。

上記リスト1の①のところを実行した時点では、当然何も起こらない。

問題は、②の実行後である。

f:id:akashi_keirin:20210808163636p:plain

なんと、こうなってしまうのである。

なんでやねん。

続けて③を実行してみる。

当然1段落目の文字列が表示されると思いきや、

f:id:akashi_keirin:20210808163640p:plain

このように、2段落目の文字列が表示されるのである。

いつの間にか、変数paraが2段落目のParagraphオブジェクトを指し示すようになっているのである。

おわりに

どうも、私はまだParagraphオブジェクトについて、満足に理解できていないらしい。

なんとも、WordのVBAというものは、

男坂

である!

f:id:akashi_keirin:20210808163653p:plain