すべてApplicationオブジェクトの配下?
「…でも、ApplicationオブジェクトがExcelそのものを参照するのなら、ワークシートやセル、フォーム
なんかも、すべてApplicationオブジェクトの配下のオブジェクトになるんじゃないんですか?」
「いいところに気がついたわね」
岬さんは、テキストをパラパラとめくります。
階層構造の特例
対象(オブジェクト)は、階層構造で表されます。VBAでは、正確に階層構造を指定しないと、マクロが正しく動作しません。エラーになるケースも多いです。しかし、Excelのマクロで最も多く使うであろうセルを対象として指定するときに、いつも
ブック1.シート1.セルA1
と記述するのは煩雑です。毎回、階層構造を正しく記述するのがVBAの原則なのですが「ブック」と「シート」に関しては省略してもいいという特例が許されています。
< ベーシック公式テキスト P44 >
「ここに書かれているように、階層構造を省略できる特例があるんだけど、
これ、Applicationオブジェクトに対しても同じなのよ」
「えっ!?そうだったんですか?
……でもそうすると、さっきの"Application.DisplayAlerts"なんかは、なんで省略できないんです?」
「チョット待ってね…」
岬さんがVBE上でF2キーを押し、オブジェクトブラウザを表示させます。
「これはオブジェクトブラウザと言って、VBAで使うことができるすべてのオブジェクトを
参照できる画面なんだけど…。
この中で"グローバル"に出てくるメンバーが、Applicationを省略できるメソッドやプロパティ、
ここに出てこないのは省略ができないメソッドやプロパティということになるわ」
「WorkbooksやWorksheetsなんかはあって、DisplayAlertsはありませんね。
なるほど…」
「ただ、なぜこのように分類しているかは、Microsoftがそう決めているとしか言いようがないわ。
まあ…普通に考えて、シートやセルに命令を出すのに、Applicationから記述しなければならない
となると、開発効率が悪すぎてナンセンスよね」
森川くんは岬さんの解説に、ウンウンと相槌を打ちます。