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.