Microsoft Excel

Herbers Excel/VBA-Archiv

Probleme mit mehrdimensionalem Array

Betrifft: Probleme mit mehrdimensionalem Array von: Kasimir
Geschrieben am: 09.11.2014 13:56:57

Hallo an alle Helfer!

Mit folgendem Code-Schnipsel fülle ich ein Array und gebe den Inhalt in einer ComboBox mit 2 Spalten aus.

Dim arr()               As String

lngEintrgasnummer = 0

For lngRowPatienten = 2 To Patientenliste.Cells(Rows.Count, 1).End(xlUp).Row
    
    If WorksheetFunction.CountIf(Patientenliste.Range("D2:D" & lngRowPatienten), _
        Patientenliste.Cells(lngRowPatienten, 4)) = 1 Then
        
        lngEintrgasnummer = lngEintrgasnummer + 1
        
        ReDim Preserve arr(1 To 2, 1 To lngEintrgasnummer)
                    
        arr(1, lngEintrgasnummer) = Patientenliste.Cells(lngRowPatienten, 4)
        arr(2, lngEintrgasnummer) = lngRowPatienten
    End If
Next


With ComboBox1
    .Clear
    .ColumnCount = 2
    .ColumnWidths = "4cm; 0cm"
    If lngRowPatienten > 0 Then _
        .List() = WorksheetFunction.Transpose(arr)
End With
Das funktioniert soweit auch gut. Außer, in dem Array gibt es nur einen Eintrag. Dann werden mir nicht 2 Spalten in der ComboBox gefüllt, wie sonst, sondern der Arrayinhalt steht dann untereinander in der ComboBox. Wie kann ich das ändern?

Danke Euch schon mal,
Kasimir

  

Betrifft: AW: Probleme mit mehrdimensionalem Array von: Daniel
Geschrieben am: 09.11.2014 14:17:31

Hi
Das Problem ist, dass die Transpose-Funktion aus 2-d-Arrays mit nur einer Spalte ein 1-d-Array macht, welches dann wieder als Zeilen in die Listbox geschrieben wird.

Die möglichen Lösungen wären hier:
a) mache eine Fallunterscheidung und schreibe die Werte per .AddItem in die Listbox wenn nur ein Eintrag vorhanden ist

If lngRowPatienten > 1 Then 
        .List() = WorksheetFunction.Transpose(arr)
     ElseIf lngRowPatienten = 1 then
        .AddItem arr(1, 1)
        .List(0, 1) = arr(2, 1)
     end If
b) nimm nicht Transpose, sondern wandle das Array per Schleife. Das ist bei größeren Datenmengen sowieso die bessere Methode.
redim arr2(1 to ubound(arr, 2), 1 to ubound(arr, 1))
For x = 1 to ubound(arr, 1)
   for y = 1 to ubound(arr, 2)
       arr2(y, x) =arr(x, y)
   next y
Next x
Combobox1.list =arr2


Gruß Daniel


  

Betrifft: AW: Probleme mit mehrdimensionalem Array von: Kasimir
Geschrieben am: 09.11.2014 14:34:59

Hallo Daniel!

Danke Dir für Deine Antwort. Die hat mich sehr viel weitergebracht. Noch einen schönen Sonntag.

Gruß,
Kasimir