特定の文字列範囲
ある連続した領域
を指定するには、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」とあるので、これはプロパティではなく、メソッドです。
![](https://blogimg.goo.ne.jp/user_image/2e/9a/2a352e02a2b00cf10d343dd64102fd54.jpg)
私がWord VBA を独学で習得し始めた当時、この説明に苦しみました。なぜメソッドなのか。いったい、これをどのように理解すればよいのか、と。
おそらく、多くの人が戸惑うはずです。「ええ?なんでぇ?」ってなるはずです。
一般的に、親(上位)オブジェクトから子(下位)オブジェクトを取得するにはプロパティを使いますから。プロパティは、そのためのものだろう、と理解しているはずです。なぜDocumentのRangeは、プロパティではなく、メソッドなのか。
今では、
「オブジェクトブラウザーにおいて、DocumentのRangeはメソッドだと決められているんだから。」
つまり、
「そうなっているんだから。」
として、メソッドであることを受け入れることができます。
要は、メソッドだろうと、プロパティだろうと、どうでもよいのです。「そう決まってんだから」と、悟ることが(あきらめることが?)できるようになりました。
ただし、どうしてMicrosoftが、DocumentのRangeを、プロパティに分類せずに、メソッドとしたのか、今だにその理由、その辺の事情は知りません。
いったい、どうしてなんでしょうねぇ?Microsoftさん。
このように、あるオブジェクトのメンバーに関する情報を得るには、オブジェクトブラウザーを見るに限ります。このことを、伊藤潔人著「Word VBA入門」においては力説されています。
◆ Word VBA入門(1)
それでは、また次の記事で
■■■■ goosyun ■■■■
![](https://blogimg.goo.ne.jp/user_image/7d/9b/25ed8d7661e46207334a227721c5c391.png)
《2023年2月9日追記》
Documentオブジェクトに用意されているRnageはメソッドか、プロパティかについて、はっきりと結論が出ました。
⇒ こちらの記事をご覧ください。