2017-02-07 4 views
2

Ich habe versucht, mein Problem zu lösen, wie folgt:Wie Rückgabewerte von mehrdimensionalen Arrays in Listenansicht (VBA)

intFirstIdx = UBound(arrDetailInfo, 1) 
intSecIdx = UBound(arrDetailInfo, 2) 

With Me.lvDetaillist 
    With .ColumnHeaders 
     .Clear 
     .Add , , "#", 20 
     .Add , , "ID", 50 
     .Add , , "Assets", 50 
     .Add , , "Day Count", 50 
     .Add , , "Result", 150 
    End With 
    .ListItems.Clear 
End With 

cnt = 1 
With Me.lvDetaillist 
    For i = 0 To intFirstIdx 
     Set li = .ListItems.Add(, , cnt) 
     For k = 0 To intSecIdx 
      li.SubItems(cnt) = arrDetailInfo(i, k) 
     Next k 
     cnt = cnt + 1 
    Next i 
End With 

Und hier ist mein Array mit Inhalt:

enter image description here

jemand tun kennt einen Ansatz, wie man es löst?

Antwort

1

li.SubItems(cnt) = arrDetailInfo(i, k)

Versuchen Sie stattdessen:

li.SubItems(k+1) = arrDetailInfo(i, k) 

Sie es ohne diese Zähler tun konnte cnt und bytRowCnt:

With Me.lvDetaillist 
    For i = 0 To intFirstIdx 
     Set li = .ListItems.Add(, , i+1) 
     For k = 0 To intSecIdx 
      li.SubItems(k+1) = arrDetailInfo(i, k) 
     Next k 
    Next i 
End With 
+1

Dank war es auch hilfreich :) ein wenig kleiner als mein Code! :) – yuro

+1

@Yuro ja. Komisch, du hast deine eigene Lösung in der gleichen Minute gefunden, in der ich meine Antwort gepostet habe (erster Teil). Freut mich zu wissen, dass es gelöst war. –

1

ich dies wie folgt gelöst:

intFirstIdx = UBound(arrDetailInfo, 2) 
intSecIdx = UBound(arrDetailInfo, 1) 

bytRowCnt = 1 
With Me.lvDetaillist 
    For i = 0 To intFirstIdx 
     Set li = .ListItems.Add(, , bytRowCnt) 

     cnt = 1 
     For k = 0 To intSecIdx 
      li.SubItems(cnt) = arrDetailInfo(k, i) 
      cnt = cnt + 1 
     Next k 
     bytRowCnt = bytRowCnt + 1 
    Next i 
End With 

Und es funktioniert sehr toll :)

+0

Sie brauchen diese zusätzlichen Zähler sowieso nicht, 'i' und' k' sollten ausreichen. Siehe meine Antwort unten :) –

Verwandte Themen