Home » ワードマクロ・Word VBAの使い方 » Word VBAのFind.ParentはRangeまたはSelection

動作検証バージョン:64bit Windows 10 Pro + 32bit Word(バージョン2012 ビルド13530.20440 Microsoft Store)

階層の親に該当するオブジェクトを返すParentプロパティは、どの階層構造を辿ったとしても、同じオブジェクトを返すケースも少なくないのですが、そうではないオブジェクトがあるので、記事にしておきます。

その代表といえるのが、Word VBAのFindオブジェクトです。

FindオブジェクトのParentを確認するサンプル

Word.FindオブジェクトのParentプロパティは、どの経路を辿ってFindオブジェクトを取得したかによって、戻り値が変化します。

Sub FindオブジェクトのParentを確認する()
 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)

End Sub

上記の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オブジェクトから取得した場合とで挙動が異なるので、納得といえば納得なのですが。

最終更新日時:2022-09-23 05:26

[スポンサードリンク]

Home » ワードマクロ・Word VBAの使い方 » Word VBAのFind.ParentはRangeまたはSelection

「ワードマクロ・Word VBAの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.