Hallo Zusammen!
Ich möchte aus einer Excel-Tabelle Daten herauslesen und in einem Treeview darstellen. Dies wird anhand folgenden Codes durchgeführt:
Dim InputArray As Variant
Dim InputArraySorted As Variant
Dim Flip() As Integer
Sub MakeTreeView()
Dim SortOrderBy As Integer
Sheets("Steine").Activate
Range("A3:G95").Select
GetInputArray
AddNodes
frmTreeView.Show
End Sub
Sub AddNodes()
Dim NewNode As Node
Dim OldText() As String
Dim NodeParent() As String
ReDim Flip(1 To UBound(InputArray, 1), 1 To UBound(InputArray, 2))
ReDim NodeParent(1 To UBound(InputArray, 1), 1 To UBound(InputArray, 2))
frmTreeView.TreeView1.Nodes.Clear
For j = 1 To UBound(InputArray, 2)
Flip(1, j) = 1
Next
For i = 2 To UBound(InputArray, 1)
For j = 1 To UBound(InputArray, 2)
If InputArray(i, j) = InputArray(i - 1, j) Then
If j > 1 Then
If Flip(i, j - 1) = 1 Then
Flip(i, j) = 1
Else
Flip(i, j) = 0
End If
Else
Flip(i, j) = 0
End If
Else
Flip(i, j) = 1
End If
Next
Next
For j = 1 To UBound(InputArray, 2)
NodeCount = 1
For i = 1 To UBound(InputArray, 1)
NodeKey = "NK" & j & NodeCount
If j = 1 Then
If Flip(i, j) = 1 Then
Set NewNode = frmTreeView.TreeView1.Nodes.Add(, , NodeKey, _
InputArray(i, j))
NodeCount = NodeCount + 1
NodeParent(i, j + 1) = NodeKey
Else
NodeParent(i, j + 1) = NodeParent(i - 1, j + 1)
End If
Else
Debug.Print i, j, NodeKey, InputArray(i, j)
If Flip(i, j) = 1 Then
Set NewNode = frmTreeView.TreeView1.Nodes.Add(NodeParent(i, j), _
tvwChild, NodeKey, InputArray(i, j))
NodeCount = NodeCount + 1
If j < UBound(InputArray, 2) Then NodeParent(i, j + 1) = NodeKey
Else
If j < UBound(InputArray, 2) Then NodeParent(i, j + 1) = NodeParent( _
i - 1, j + 1)
End If
End If
Next
Next
End Sub
Sub GetInputArray()
InputArray = Selection.Value
End Sub Nun habe ich das Problem, dass manche Zeilen weniger Daten und somit leere Zellen enthalten. Für diese leeren Zellen werden aber dennoch Nodes erzeugt. Da der Code nicht von mir ist und ich nicht gerade der VBA-Crack bin, habe ich arge Schwierigkeiten das Problem zu lösen. Gedacht habe ich mir das jeweils die Daten nur bis zur Leerzelle in der Zeile durchlaufen oder mehere Arrays eingelesen werden. Bin aber beide Male leider gescheitert....
Für Tipps oder Anstöße wäre ich sehr dankbar!
Gruß
Chris |