Clever-Excel-Forum

Normale Version: Zuweisung von Teilen von zweidimensionalem Array zu einer Combobox
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo

Wenn ich Daten von einem Array zu einer Combobox hinzufügen möchte geht das doch mit:

UserForm_Mast1.ComboBox1.Column = komponenten


wenn ich jetzt zb habe:

komponenten(0,0) = a
komponenten(0,1) = b
komponenten(0,2) = c
komponenten(0,0) = x
komponenten(1,1) = y
komponenten(2,2) = z

Wie kann ich nun der Combox nur die Daten der ersten Spalte (0) übergeben und die der zweiten Spalte (1) zu einer zweiten Combobox?

Danke im Voraus
Hallo,

wenn du das Array nicht noch für etwas anderes brauchst, finde ich das recht umständlich.
Hallo,

ungetestet: das könnte mit Application.Index(komponenten, 0, 1) für die erste Spalte und Application.Index(komponenten, 0, 2) für die zweite Spalte funktionieren.
1 column einer Array in Listbox


Code:
Sub M_Listbox()
   sn = Sheet1.Cells(1).CurrentRegion

   With CreateObject("New:{8BD21D20-EC42-11CE-9E0D-00AA006002F3}")
       .List = Application.Index(sn, Evaluate("row(1:" & UBound(sn) & ")"), 1)     ' Spalte 1 in erster Listbox
       MsgBox .List(.ListCount - 1, 0)
   End With

   With CreateObject("New:{8BD21D20-EC42-11CE-9E0D-00AA006002F3}")
       .List = Application.Index(sn, Evaluate("row(1:" & UBound(sn) & ")"), 2)     ' Spalte 2 in zweiter Listbox
       MsgBox .List(.ListCount - 1, 0)
   End With
End Sub
(20.02.2019, 17:50)Der Steuerfuzzi schrieb: [ -> ]Hallo,

ungetestet: das könnte mit Application.Index(komponenten, 0, 1) für die erste Spalte und Application.Index(komponenten, 0, 2) für die zweite Spalte funktionieren.

Fast. Mit (..., 0, 1) wird in der Combobox nur das erste Elemten der ersten Spalte angezeigt. Wenn ich nur (..., 0) nehme klappts mit der ganzen ersten Spalte. Jedoch zeigt mir die Combobox wenn ich (..., 1) nehme, auch nur das erste Elemten der ersten Spalte angezeigt. Bei (..., 2) wird mir auch nur das erste Element der 2. Spalte übertragen, wieso ist das so?

Hier der volständige Code:


Dim finden As Range                'Durchsucht Spalte 1 nach Suchbegriff
    Dim treffer As String              'Wo wurde der Begriff gefunden? Angabe der Zelle
    Dim komponenten()                  'Array: Speichert die gewünschten Einträge
    Dim size As Integer                'Passt Array-Grösse an
   
    'Sucht nach "Mast HEB"-Zellen für Ausfüllen/Entfernen
        Set finden = Columns(4).Find(what:="Mast HEB*")
        If Not finden Is Nothing Then
            treffer = finden.Address        'Speichert die erste Adresse
            Do
            ReDim Preserve komponenten(1, size)
                komponenten(0, size) = finden.Value
                komponenten(1, size) = finden.Address
                size = size + 1
            'Sucht in der 4. Spalte der Excel-Tabelle
            Set finden = Columns(4).FindNext(finden)
            Loop While Not finden Is Nothing And treffer <> finden.Address
        End If
        
'Next

UserForm_Mast1.ComboBox1.Column = Application.Index(komponenten, 0, 0)       'Sollte 0. Spalte von komponenten in 1. Combox füllen
UserForm_Mast1.ComboBox2.Column = Application.Index(komponenten, 0, 1)       'Sollte 1. Spalte von komponenten in 2. Combox füllen

UserForm_Mast1.ComboBox1.ListIndex = 0
UserForm_Mast1.ComboBox2.ListIndex = 0
Dann lass die Argumente mit 0 einfach ganz weg, d.h. es ist dann leer:
Code:
Application.Index(komponenten, , 1)
und
Application.Index(komponenten, , 2)
(21.02.2019, 09:16)Der Steuerfuzzi schrieb: [ -> ]Dann lass die Argumente mit 0 einfach ganz weg, d.h. es ist dann leer:
Code:
Application.Index(komponenten, , 1)
und
Application.Index(komponenten, , 2)

In diesem Fall kriegt die 1. Combox das erste Element der 1. Spalte und die 2. Combox kriegt das 2. Element der 1. Spalte.

Im Bild siehste nen Ausschnitt, wie die Matrix von komponenten aussieht.
Danke, aber deinen Code versteh ich nicht. Auch nicht, was die MsgBoxen und das Zeugs in den {} sollen...
Also bei mir funktioniert es. Application.Index(Array, ,1) ergibt die erste Spalte der Daten und Application.Index(Array, ,2) ergibt die zweite Spalte. Das funktioniert auch mit der Zuweisung an die List-Eigenschaft einer Combobox.

Vielleicht hast Du Zeilen und Spalten vertauscht?

Lade doch mal eine Beispieldatei hoch, damit man das Problem sehen kann.
Seiten: 1 2