How to implement custom iterable class in VBA

class, excel, foreach, iunknown, vba

Solution

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.

Problem

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.

Original source

Related problems