Excel VBA オブジェクト階層図のウソ
今までなんとかVBAを使った開発を逃げてきたのだが、今回ばかりはどうしてもExcel VBAでの開発になってしまった。Excel VBAを触ったことがないわけではないのだが、まともにやるのは今回が初。そこで文法とかAPIとかオブジェクトとか適当に勉強していたのだが、よくわからなかったのが、この「オブジェクト階層図」。これは、こんな風になっているのだが、
┌──────┐ |Application | └──────┘ ┃┌──────┐ ┗|Workbook(s) | └──────┘ ┃┌──────┐ ┗|Worksheet(s)| └──────┘ ┃┌──────┐ ┗|Range | └──────┘
これは、どう見ても RangeはApplicationのサブクラス、に見えるのだが…。しかし、どう考えてもRangeがApplicationであるはずがない。そこで3分でできる!Excel VBA、という本をよく見てみたら、ApllicatonはWorkbook(s)オブジェクトを持っている、とか書いてあるし。つまりExcel VBAのオブジェクト階層図は、すべてhas-a関係を表している、ということだ。だからApplicationがもっているメソッドやらプロパティやらはRangeに継承される、ということはないのである。
こんなことは、VBAを使っている人には当然なのだろうが…。クラスの継承と同じ表記にするなと。上にあるクラスを「親クラス」と呼ぶなと。見た目がMFCとそっくりというのが、なんともMSらしい書き方です。