パソコン悪戦苦闘記録

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はメソッドか、プロパティかについて、はっきりと結論が出ました。
  こちらの記事をご覧ください。
名前:
コメント:

※文字化け等の原因になりますので顔文字の投稿はお控えください。

コメント利用規約に同意の上コメント投稿を行ってください。

 

  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「VBAプログラミング・マクロ」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事