つれづれ電脳記(日くらしPCに向かひて)

つれづれなるままに、日くらしPCに向かひて、その悪戦苦闘ぶりをそこはかとなく書き付くるおじさん。たまに雑談[管理人:goosyun]

つれづれなるままに、日くらしPCに向かひて、デジタル関係の悪戦苦闘ぶりをそこはかとなく書き付くるおじさんです。
たまに雑談してます。連絡・問い合わせフォームは、ページ最下部に置いています。[著者(運営人):goosyun]

(当ブログには本文中に広告リンクが含まれています。)

DocumentのRangeはメソッド~WordマクロVBA

 Word VBA で、Word文書内の
  特定の文字列範囲
  ある連続した領域
を指定するには、Rangeを使用します。 

 Rangeは、Documentオブジェクトのメンバーで、
 例えば、
  ActiveDocument.Range
とすると、アクティブな(つまり作業中の)文書の、本文全体を指すRangeオブジェクトを取得できます。
 また、
  ActiveDocument.Range(0,5)
とすると、文書先頭から5文字目までの文字列範囲、領域を指すRangeオブジェクトを取得できます。

 このように、文書(Documentオブジェクト)から、特定の文字列範囲、ある連続した領域を取得するためにRangeが使われます。
 その「Range」ですが、多くの初心者は、Documentオブジェクトの「プロパティ」と考えるはずです。

 ところがどっこい、プロパティではありません。実は、Documentオブジェクトに用意されている「メソッド」なのです。
 オブジェクトブラウザーで、
 クラスDocumentのメンバーRangeの詳細ペインを見てみると、
   Function Range([Start], [End]) As Range
   Word.Document のメンバー
と説明されています。「Function」とあるので、これはプロパティではなく、メソッドです。




 
 私がWord VBA を独学で習得し始めた当時、この説明に苦しみました。なぜメソッドなのか。いったい、これをどのように理解すればよいのか、と。
 おそらく、多くの人が戸惑うはずです。「ええ?なんでぇ?」ってなるはずです。
 一般的に、親(上位)オブジェクトから子(下位)オブジェクトを取得するにはプロパティを使いますから。プロパティは、そのためのものだろう、と理解しているはずです。なぜDocumentのRangeは、プロパティではなく、メソッドなのか。

 今では、
 「オブジェクトブラウザーにおいて、DocumentのRangeはメソッドだと決められているんだから。」
つまり、
 「そうなっているんだから。」
として、メソッドであることを受け入れることができます。
 要は、メソッドだろうと、プロパティだろうと、どうでもよいのです。「そう決まってんだから」と、悟ることが(あきらめることが?)できるようになりました。

 ただし、どうしてMicrosoftが、DocumentのRangeを、プロパティに分類せずに、メソッドとしたのか、今だにその理由、その辺の事情は知りません。
 いったい、どうしてなんでしょうねぇ?Microsoftさん。


 このように、あるオブジェクトのメンバーに関する情報を得るには、オブジェクトブラウザーを見るに限ります。このことを、伊藤潔人著「Word VBA入門」においては力説されています。



Word VBA入門(1)



それでは、また次の記事で
goosyun



《2023年2月9日追記》
 Documentオブジェクトに用意されているRnageはメソッドか、プロパティかについて、はっきりと結論が出ました。
  こちらの記事をご覧ください。