■オブジェクトとは・・・■
エクセルVBAの世界だけに限って言えば、エクセルそのもの、ワークブック、ワークシ
ート、セル、各種ボタン類、 オートシェープ、グラフ、など具体的な”もの”のこ
とです。
ここにあげた例で考えてみると、ワークブックはエクセルの中にあり、ワークシートは
ワークブックの中にあるという「階層構造」になっていることに注意してください。
現在開いている”ワークブック(MyBook.xls)の中のワークシート(Sheet1)上のセ
ルA1”を階層構造の上からたどれば・・・
(例)Workbooks("MyBook.xls").Worksheets("Sheet1").Range("A1")
となります。WorkbookとWorksheetはそれぞれ英語の複数形のように"s”がついていま
すが、Workbooksはブックの集まり、Worksheetsはシートの集まり、を表しています。
言い換えれば、具体的な”もの(オブジェクト)”の集合体(コレクション)なのです。
例えば、"集合住宅"を考えてみてください。いくつもの部屋があり、部屋番号がつけ
られています。さらに住人の名前でも他の部屋と区別されるでしょう。各部屋には入り
口や、子供部屋だとか書斎だとかキッチンなどの個室があります。この集合住宅の名前
は”コーポラスOFFICE”。部屋数は現在7、この中には”エクセル”さんや”ワード”
さんがいるとしましょう。
VBA風に子供部屋のありかを記述すれば・・・
Apartments("Office").Rooms("Excel").PrivateRooms("Child")
このように表現するとエクセルさん宅の子供部屋がどこに属しているのかを明示するこ
とができます。エクセルさん宅には個室が何部屋かあって、個室の集合体を表すのが
PrivateRoomsコレクション。さらに、コーポラスOfficeにある部屋の集合体がRooms
コレクションなのです。
表現を変えてみます。コーポラスOfficeが存在する区画にはいくつもの集合住宅があっ
て、住所の上からは識別番号として”3”が与えられ、Excelさん宅の部屋番号は”7”
、子供部屋は入り口から数えて”2”番目の部屋であったとします。
Apartments(3).Rooms(7).PrivateRooms(2)
としても子供部屋を識別することが可能です。つまり、集合体としてのRoomsコレクション
にインデックス番号や住人の名前などを付加することで個々の部屋を識別することができ
るということなのです。ApartmentオブジェクトはApartmentsコレクションにインデックス
、もしくはアパート名を、RoomオブジェクトはRoomsコレクションにインデックス、もしく
は住人の名前を与えることで他のアパートや部屋から識別することが可能となるのです。
エクセルの世界に戻りましょう。上記の(例)が現在開いている3つのブックのうち
2番目で、一番目のワークシートを表現するのであれば・・・
Workbooks(2).Worksheets(1).Range("A1")
となるでしょう。
■オブジェクトの操作■
上記の例でワークシートを一枚追加するという場合・・・
Workbooks("MyBook.xls").Worksheets.Add
さらに、ブックを追加するのであれば、・・・
Workbooks.Add
というように、オブジェクトの集合としてのコレクションにブックやシートを加え(Add)
ていることが分かります。
今度は既に作成してあるブックを開いてみます。
Workbooks.Open "XXX.xls"
開いたブック"XXX.xls"を閉じます。
Workbooks("XXX.xls").Close
Addにせよ、Openにせよ、ブックの集合体への動作であり、Workbooksコレクションに対す
る操作が行われ、対して、特定のブックを閉じる行為は、Workbooks("XXX.xls")というよ
うに、コレクションに識別のための情報を与えることで閉じるべきブックを特定している
のです。
このように、オブジェクトはオブジェクトの集合体(コレクション)の中でインデックス
や名前を与えられることで他とは異なるものとして識別され、特定のオブジェクトが操作
可能となるのです。このことは”ブックAのシート3”のような階層構造のなかでも同じ
です。”A”という名前、”3”というインデックスによって、どこに何があるのかを特
定することができるのです。
|