【意味】Paragraphオブジェクトの謎挙動【不明】(Word)
【意味】Paragraphオブジェクトの謎挙動【不明】
WordのVBAで、Paragraph
オブジェクトのRange.Text
プロパティを書き換えたら、わけのわからないことが起こったので報告。
もとの文書
もとのWord文書は、
このとおり。何の変哲もない、至ってフツーのドキュメントである。
1段落目のスタイルは、「表題」。
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の①のところを実行した時点では、当然何も起こらない。
問題は、②の実行後である。
なんと、こうなってしまうのである。
なんでやねん。
続けて③を実行してみる。
当然1段落目の文字列が表示されると思いきや、
このように、2段落目の文字列が表示されるのである。
いつの間にか、変数para
が2段落目のParagraph
オブジェクトを指し示すようになっているのである。
おわりに
どうも、私はまだParagraph
オブジェクトについて、満足に理解できていないらしい。