Quote Originally Posted by The trick View Post
You can't use a circular declarations in UDTs because it doesn't make sense (the size of UDT tends to infinity). Just use a flat array with your nodes and store the index of its siblings in each node.

Why wouldn't it make sense?
It's a basic setup for linked lists stemming from a time there were no "classes" (remember "struct" in C)
The difference is: for that to work you actually need a pointer to such a structure

IMO it's the reason why it works with classes in vb6/vba, because a class-variable IS basically a pointer

To stay in OP's sample
Untested
Code:
Type tNode
    Parent As Long
    FirstSibling As Long
    LastSibling As Long
End Type
And then VarPtr / CopyMemory the hell out of it, and store it in the Members

That said: I'd stay with classes in vb6/vba. Too much hassle