Custom Collection Classのすすめ(1)
Custom Collection Classのすすめ(1)
PersonクラスとPersonsクラス
ちょっと次のコードをご覧いただきたい。
リスト1
Private Sub test01() Dim proWrestlers As Persons Set proWrestlers = New Persons With proWrestlers Call .Add Call .Add("阿修羅原", "ラリアート") Call .Add("平田淳嗣") End With Dim pw As Person For Each pw In proWrestlers With pw Debug.Print .Name & " : " & .FavoriteHold End With Next End Sub
ちょっとだけ解説すると、Person
とPersons
という自作のクラスがあり、Person
オブジェクトのAdd
メソッドを実行すれば、Persons
オブジェクトにPerson
オブジェクトが追加されるようにしている。
この説明だけ見れば、丁度Persons
コレクションの要素がPerson
オブジェクト、という関係である。
で、上掲コードの
For Each pw In proWrestlers With pw Debug.Print .Name & " : " & .FavoriteHold End With Next
の部分。
変数pw
にはPerson
クラスのインスタンスが入り、変数proWrestlers
にはPersons
クラスのインスタンスが入っている。
で、通常このリスト1を実行するとどうなるか。
当然こうなるのである。
原因は
当然ここ。
Persons
は所詮勝手に作ったクラスに過ぎず、Collection
ではないからだ。
For Eachが使える?!
ところが、『VBA Developer's Handbook Second Edition』で紹介されていたテクニックをちょこちょこっと使うと、
こんなふうにフツーに動く。
まるで、Persons
オブジェクトがPerson
オブジェクトのCollection
であるかのように振る舞うのである!
おわりに
ちょっとスゴくないですか?
次回に続く!
続かないかも知れんけどw