SentencesコレクションとCharactersコレクション(Word)

SentencesコレクションとCharactersコレクション

SentencesコレクションとCharactersコレクションって、ちょっと変わっているよな、というだけの話。

Sentencesコレクションの要素はSentenceオブジェクトに非ず

たとえば、コード・ウインドウ上で、

Dim targetSentence As Sent

まで打ち込んだときに表示されるヒントは、

f:id:akashi_keirin:20181017071836j:plain

この通り。

つまり、Sentence型のオブジェクトはない。

では、Sentencesコレクションの要素は何型なのか。

イミディエイト・ウインドウに、

?TypeName(ActiveDocument.Sentences(1))

と打ち込んで、[Enter]を激しく殴打。

f:id:akashi_keirin:20181017071846j:plain

Range」が返った。つまり、Sentencesコレクションの要素は、Rangeオブジェクトなのである。

Charactersオブジェクトの要素はCharacterオブジェクトに非ず

同じく、コード・ウインドウ上で、

Dim targetCharacter As Char

まで打ち込んだときに表示されるヒントは、

f:id:akashi_keirin:20181017071859j:plain

この通り。

つまり、Character型のオブジェクトはない。

では、Charactersコレクションの要素は何型なのか。

同じくイミディエイト・ウインドウに、

?TypeName(ActiveDocument.Characters(1))

と打ち込んで、[Enter]をそっと押し込む。

f:id:akashi_keirin:20181017071911j:plain

Range」が返った。つまり、Charactersコレクションの要素もまた、Rangeオブジェクトなのである。

おわりに

だから何やねん、と言われても困るのだが、イマイチ分かりにくいWordVBAのオブジェクトモデルが、少しづつ分かってくるのではないか、という気がしてきた。

Rangeオブジェクトの概念が、Excelと違いすぎる(というか、ExcelRangeオブジェクトが独特すぎるのかな?)のが、分かりにくさの原因なのかも知れない。

追記

ちなみに、Wordsコレクションの要素もWordオブジェクトではなく、Rangeオブジェクトです。