階層の親に該当するオブジェクトを返すParentプロパティは、どの階層構造を辿ったとしても、同じオブジェクトを返すケースも少なくないのですが、そうではないオブジェクトがあるので、記事にしておきます。
その代表といえるのが、Word VBAのFindオブジェクトです。
FindオブジェクトのParentを確認するサンプル
Word.FindオブジェクトのParentプロパティは、どの経路を辿ってFindオブジェクトを取得したかによって、戻り値が変化します。
Dim fnd_Range As Find
Set fnd_Range = ActiveDocument.Range(0, 0).Find
MsgBox TypeName(fnd_Range.Parent)
Dim fnd_Selection As Find
Set fnd_Selection = Selection.Find
MsgBox TypeName(fnd_Selection.Parent)
上記のSubプロシージャを実行すると、
Range
Selection
と2回メッセージボックスが表示されます。
Find.Parentの何が面白いのか
Parentプロパティの戻り値を気にしたことのない方にとっては、私が何を面白がっているのか、わからないかもしれません。
Word VBAのもっとも重要なオブジェクトのひとつRangeの場合、どのような経路をたどって取得したとしてもRange.Parentプロパティは、Dcoumentオブジェクトを返します。
DocumentオブジェクトのRangeメソッドを使って、
MsgBox TypeName(ActiveDocument.Range.Parent)
取得した場合でも、
Wordsコレクションを経由して、
MsgBox TypeName(ActiveDocument.Words(1).Parent)
の形で取得した場合でも、
ParagraphオブジェクトのRangeプロパティを使って、
MsgBox TypeName(ActiveDocument.Paragraphs(1).Range.Parent)
取得した場合でも、実行すると「Document」と表示されます。
この仕様のほうに慣れている私にとって、Find.Parentプロパティの挙動は興味深く感じます。
Findオブジェクトは、Selectionオブジェクトから取得した場合と、Rangeオブジェクトから取得した場合とで挙動が異なるので、納得といえば納得なのですが。
- 『Excel VBAユーザーのためのWord VBA入門(1)』出ました。
- 『Word VBA入門』に登場するオブジェクトごとのプロパティ一覧
- 『Word VBA入門』に登場するオブジェクトごとのメソッド一覧
最終更新日時:2022-09-23 05:26
Home » ワードマクロ・Word VBAの使い方 » Word VBAのFind.ParentはRangeまたはSelection