Premetto che non uso Activex da 15 anni, sono PERICOLOSI con VBA in quanto non Espongono correttamente tutti gli EVENTI ed i DataTipe specifici...!
Semplifichiamo...
Come hai fatto ad aggiungere il 2° livello...?
Set tmpnode = Me.TreeView0.Nodes.Add(, , "ClA", "Classe A")
tmpnode.Expanded = True
Set tmpnode = Me.TreeView0.Nodes.Add("ClA", 4, "ClAliv1A", "Livello 1A")
tmpnode.Expanded = True
La sintassi deriva da
TreeView1.Nodes.Add Relative, Relationship, Key, Text, Image, SelectedImage
In questo caso la logica diventa questa
Private Sub Form_Load()
Dim objRoot As Node
With TreeView1
.Nodes.Clear
Call .Nodes.Add(, , "root", "Top of List")
Call .Nodes.Add("root", tvwChild, "A", "Item One")
Call .Nodes.Add("A", tvwChild, "AA", "Item A1")
Call .Nodes.Add("AA", tvwChild, "AA1", "Item AA1")
Call .Nodes.Add("AA", tvwChild, "AA2", "Item AA2")
Call .Nodes.Add("AA", tvwChild, "AA3", "Item AA3")
Call .Nodes.Add("A", tvwChild, "AB", "Item B1")
Call .Nodes.Add("AB", tvwChild, "AB1", "Item AB1")
Call .Nodes.Add("A", tvwChild, "AC", "Item C1")
Call .Nodes.Add("AC", tvwChild, "AC1", "Item AC1")
Call .Nodes.Add("root", tvwChild, "B", "Item Two")
Call .Nodes.Add("B", tvwChild, "BA", "Item A2")
Call .Nodes.Add("B", tvwChild, "BB", "Item B2")
Call .Nodes.Add("B", tvwChild, "BC", "Item C2")
End With
Set objRoot = TreeView1.Nodes("root")
End Sub
Nel tuo caso specifico il 2° livello che hai aggiunto diventa figlio del ROOT..., usando il Paramtro "ClA"...
Ora il 3° Livello deve essere il figlio del 2° quindi potrebbe essere che il parametro da aggregare
sia "ClAliv1A"...?
Poi ovviamente l'indentazione... 2*Level diventa più Flessibile...!
A questo proposito perchè non ti crei una Funzione che accetta come parametri il PADRE, il LIVELLO ed i Parametri del NODO in modo che pensa lei ad aggiungere un CHILD...?
Questo potrebbe venirti utile in un'ottica di chiamata RICORSIVA che con i TREEVIEW è estremamente naturale implementare per non dover scrivere centinaia di righe di codice...!