VBA(Visual Basic for Applications)でExcelマクロを作成するようなときに、Cellsプロパティで自動メンバー表示させる方法をご紹介しました。
この記事を読んだ方の中には、他の自動メンバー表示されないプロパティでも、この方法が使えると思ってしまう方がいらっしゃるはずです。
例えば、Worksheetsプロパティです。
Worksheets().で自動的に表示されるメンバーは何なのか?
一番左のワークシートは、Worksheetsプロパティを使って「Worksheets(1)」という記述で取得することができます。
しかし、「Worksheets(1).」と入力したときは、「Cells(1, 1).」と記述したときと同じように自動メンバー表示されません。
そのため、プロパティとオブジェクトのことを理解していない場合、Cellsプロパティと同じ方法で自動メンバー表示されると思ってしまうはずです。
そして実際、「worksheets().」といった記述をVBE(Visual Basic Editor)上で行うと、確かに自動メンバー表示が行われるのです。
しかし、ここで注意していただきたいのは、その表示されているメンバーの中身です。
「worksheets().」という記述で自動的に表示されているメンバーは、本当に必要なメンバーでしょうか?今から入力したいプロパティやメソッドがそこに表示されているでしょうか?
違うはずです。
「worksheets().」といった記述から自動的に表示されるメンバーは、あくまでもWorksheetsコレクションオブジェクトのメンバーです。
上図はオブジェクトブラウザで、Worksheetsクラスを選択したところで、右側のメンバーペインに表示されているメンバーが「worksheets().」という記述のときに自動的に表示されていることが確認できます。
Worksheet(1).で表示して欲しいのはWorksheetオブジェクトのメンバーでしょ?
けれども、「Worksheets(1).」という記述で表示して欲しいのはWorksheetオブジェクトのメンバーのはずです。
Worksheetオブジェクトを取得するためにWorksheetsプロパティを利用したときには、Cellsプロパティのときにご紹介した方法は使えないのです。
「Worksheets」というのはあくまでもプロパティで、「Worksheets(1)」という記述が、Worksheetsコレクションを使って一つ目のWorksheetオブジェクトを取得している、ということが理解できていない限り、この件は納得できないはずです。
コード上に書かれているのはあくまでもプロパティであって、そのプロパティを使ってオブジェクトを取得しているのだということをまだ理解できていない方は、「Worksheets(1).」のあとに自動メンバー表示されないときに、「cells().」で自動メンバー表示させる方法は使えないということを、まずは知っておいてください。
Cellsプロパティが特殊なため「cells().」でRangeオブジェクトのメンバーを表示できるだけで、他の自動メンバー表示されないプロパティでは、ほとんど使えない技だというということを、知っておいてください。
そもそも、どうして自動メンバー表示されるプロパティと、されないプロパティがあるのかは、別記事でご紹介させていただきます。※自動メンバー表示されるものとされないものの違いについての解説記事を公開しました。(2013-01-23 追記)
Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » Worksheetsで自動メンバー表示されない場合Cellsで使った技を使えない