【vba】自作コレクションクラスの備忘録
概要
自作コレクションクラスにインスタンスをNewから直Addして、For Each又はIndexでアクセスする備忘録
前提
クラスの属性については、他のサイトで十分に解説されています。
コンストラクタに引数を持たせる方法については、自前の下記記事を参照願います。
コード
Personクラス
Option Explicit
Private mName As String
Public Function Init(Name_ As String) As Person
mName = Name_
Set Init = Me
End Function
Public Property Get Name() As String
Name = mName
End Property
Personsクラス
Option Explicit
Private mItems As Collection
Private Sub Class_Initialize()
Set mItems = New Collection
End Sub
Public Property Get Item(Index_ As Long) As Person
'Attribute Item.VB_UserMemId = 0
Set Item = mItems(Index_)
End Property
Public Property Get NewEnum() As stdole.IUnknown
'Attribute NewEnum.VB_UserMemId = -4
Set NewEnum = mItems.[_NewEnum]
End Property
Public Sub Add(Item_ As Person)
mItems.Add Item_
End Sub
Public Function Count() As Long
Count = mItems.Count
End Function
※コメントアウトしている部分はclsファイルに記述している内容
New_モジュール(標準モジュール)
Option Explicit
Public Property Get Person(Name_ As String) As Person
Dim x___ As New Person
Set Person = x___.Init(Name_)
End Property
実行(標準モジュール)
Public Sub test()
Dim Persons As Persons
Set Persons = New Persons
Persons.Add New_.Person("Taro")
Persons.Add New_.Person("Jiro")
Persons.Add New_.Person("Sabu")
Dim p As Person
For Each p In Persons
Debug.Print p.Name
Next
Dim i As Long
For i = 1 To Persons.Count
Debug.Print Persons(i).Name
Next
End Sub
//(出力)
//Taro
//Jiro
//Sabu
//Taro
//Jiro
//Sabu
使用感
コレクションにNewして直接Addできるのが気持ちいい。
取り出しも楽だね。