Aktuell kann es Probleme bei der Anmeldung mit dem Chrome oder Edge Browser geben. Ihr müsstet in die Einstellungen des Browsers gehen und Cache, Cookies und sofern vorhanden, gespeicherte Passwörter vom CEF löschen oder alternativ auf einen anderen Browser ausweichen. Ursache sind vermutlich kürzliche Browserupdates. x

Zuweisung von Teilen von zweidimensionalem Array zu einer Combobox
#1
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
Top
#2
Hallo,

wenn du das Array nicht noch für etwas anderes brauchst, finde ich das recht umständlich.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Top
#3
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.
Gruß
Michael
Top
#4
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
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Top
#5
(20.02.2019, 18: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
Top
#6
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)
Gruß
Michael
Top
#7
(21.02.2019, 10: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.


Angehängte Dateien Thumbnail(s)
   
Top
#8
Die Antwort steht schon hier: https://www.clever-excel-forum.de/thread...#pid151536

und hier: https://www.snb-vba.eu/VBA_Arrays_en.html#L_6.0.3
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • Lopezoli
Top
#9
Danke, aber deinen Code versteh ich nicht. Auch nicht, was die MsgBoxen und das Zeugs in den {} sollen...
Top
#10
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.
Gruß
Michael
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste