|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2001
Città: Lido di Ostia
Messaggi: 1612
|
[VBA] Alberi binari su Excel
Ho un applicazione su Excel strutturata nel seguente modo :
![]() dove abbiamo : La colonna ID contenente tutti gli identificativi (rami e fogliei). La colonna Parent_ID che contiene gli id dei rispettivi rami, e G dove si trova il ramo. Il mio problema è questo : Devo fare una funzione che dato un ID rimuova il ramo e tutte le foglie sottostanti. Da qui ho realizzato 2 Sub di cui una ricorsiva. La prima Remove_Leaf che altro non fa che eliminare la riga contenente una foglia. Codice:
Private Sub Remove_Leaf(rmv_gate)
i = 1
With Worksheets("FTA")
While .Range("id").Cells(i).Value <> rmv_gate And .Range("id").Cells(i).Value <> ""
If .Range("id").Cells(i).Value = rmv_gate Then
.Range("id").Cells(i).Select
Selection.EntireRow.Delete
End If
i = i + 1
Wend
Worksheets("FTA").Calculate
End With
End Sub
Codice:
Public Sub Remove_Node(rmv_gate As String)
i = 1
' se è una foglia toglila con il Remove_Leaf
If IsLeaf(rmv_gate) Then
Remove_Leaf (rmv_gate)
Exit Sub
Else
With Worksheets("FTA")
' cerca tutte le foglie che hanno come id padre l'id del nodo
While (.Range("parent_id").Cells(i).Value <> "")
' se tra gli id padre trovo una G e il corrispettivo id è quello del nodo, elimino l'intera riga
If (.Range("parent_id").Cells(i + 1).Value = "G") And (.Range("id").Cells(i + 1).Value = rmv_gate) Then
.Range("id").Cells(i + 1).Select
Selection.EntireRow.Delete
End If
' se la cella corrente è uguale all'id del nodo richiama ricorsivamente Remove_Node
If (.Range("parent_id").Cells(i).Value = rmv_gate) Then
Remove_Node (.Range("id").Cells(i).Value)
End If
i = i + 1
Wend
End With
End If
End Sub
il problema è che se al posto di quella riga (nella Remove_Node) inserisco una MsgBox funziona correttamente e mi riporta esattamente TUTTI gli id da rimuovere. Se la lascio così non funziona Al primo nodo che rimuove si ferma... come se facesse un exit sub. qualcuno mi può aiutare ? Che cos'ha la Selection.EntireRow.Delete che non va ?
__________________
|Mac Mini i7 2,6 GHz 16 GB - OS Yosemite| |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2001
Città: Lido di Ostia
Messaggi: 1612
|
up
__________________
|Mac Mini i7 2,6 GHz 16 GB - OS Yosemite| |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:12.




















