I want to add a feature to my classes so I can use them in for-each loops.
I wrote hashmaps, arraylists, queues, sets and so on that I want to iterate over. Now I'm looking for a way to implement the IUnknown class to build custom iterators.
I already know how to use
private objPeople as Collection
Public Property Get NewEnum() As IUnknown
Attribute NewEnum.VB_UserMemId = -4
Attribute NewEnum.VB_MemberFlags = "40"
Set NewEnum = objPeople.[_NewEnum]
End Property
but all those examples out there are based on the Collection class, which I do not want to use.
What I want to focus on is trying to implement the IUnknown interface, but I haven't found any references on how to do that.
I have vast experience in Java, C++, C# and so on, so I assume that THERE HAS TO BE A WAY to implement that even in VBA, maybe even with API calls stuff like that.
The answer is that it can be done, but it is ugly (requires and IDL
, two .BAS
modules and two .cls
modules (one of which is your Collection Class module).
For full information see this link:
Create Your Own "Super Collections" in VB
Good luck! It seemed to complicated for what I needed to do, so for now I just iterate over the Collection object enumerator.