Anzeige
Archiv - Navigation
1900to1904
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zwei Dimensionales Array füllen

Zwei Dimensionales Array füllen
29.09.2022 15:23:03
Thomas
Hallo,
ich möchte für eine Listbox Daten aus einem Tabellenblatt in ein Array einlesen und dann an eine zweispaltige Listbox übergeben.
Ich bekomme auch Werte in die Listbox, allerdings nur in die zweite Spalte wird gefüllt, mit den Werten aus der Tabelle aus Spalte 3
Die Werte für die erste Spalte stehen in der Tabelle in der Spalte 3 und die Werte für die zweite Spalte in der Listbox stehen in der Tabelle in Spalte 4.
Was mache ich falsch?

Sub ListMitarbeiterFuellen()
Dim arrMitarbeiter(0 To 200, 0 To 4) As Variant
Dim lngRow As Long
Dim lngLastRow As Long
Dim lngCol As Long
Dim lngLastCol As Long
Dim I As Integer
With tblDaten
lngLastRow = .Cells(Rows.Count, 1).End(xlUp).Row
For lngRow = 3 To lngLastRow
I = 1
For lngCol = 3 To 4
arrMitarbeiter(lngRow - 2, I) = .Cells(lngRow, lngCol)
I = I + 1
Next lngCol
Next lngRow
End With
forMitarbeiter.libMitarbeiter.ColumnCount = 2
forMitarbeiter.libMitarbeiter.ColumnWidths = "4cm;2cm"
forMitarbeiter.libMitarbeiter.BackColor = &H80000002
forMitarbeiter.libMitarbeiter.List() = arrMitarbeiter
End Sub
Danke

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zwei Dimensionales Array füllen
29.09.2022 15:33:59
Rudi
Hallo,
das geht ohne Schleife.

Sub ListMitarbeiterFuellen()
Dim arrMitarbeiter As Variant
Dim lngLastRow As Long
With tblDaten
lngLastRow = .Cells(Rows.Count, 1).End(xlUp).Row
arrMitarbeiter = .Range(.Cells(3, 3), .Cells(lngLastRow, 4)).Value
End With
forMitarbeiter.libMitarbeiter.ColumnCount = 2
forMitarbeiter.libMitarbeiter.ColumnWidths = "4cm;2cm"
forMitarbeiter.libMitarbeiter.BackColor = &H80000002
forMitarbeiter.libMitarbeiter.List() = arrMitarbeiter
End Sub
Gruß
Rudi
AW: Zwei Dimensionales Array füllen
29.09.2022 15:38:47
Daniel
Hi
naja, dein Array hat 5 Spalten und nicht 2
außerdem schreibst du die Werte nicht in die erste und zweite Spalte des Arrays, sondern in die zweite und dritte, da dein Array mit dem Index 0 beginnt
wenn, dann schon I = 0 und lngrow - 3
oder du dimensionierst dein Array nicht 0 to 200 und 0 to 4, sondern 1 to 200 und 1 to 5
aber eigentlich reicht auch:

lngLastRow = .Cells(Rows.Count, 1).End(xlUp).Row
forMitarbeiter.libMitarbeiter.List = Range(TblDaten.Cells(3, 3), TblDaten.Cells(lngLastRow, 3)).value
Gruß Daniel
Gruß Daniel
Anzeige
AW: Zwei Dimensionales Array füllen
29.09.2022 18:21:58
snb
Verwende Userform_initialize:

Private Sub Userform_initialize()
With tblDaten.Cells(1).CurrentRegion
listbox1.List = .Offset(2).Resize(.Rows.Count - 2, 2).Value
End With
End Sub
Die Listbox Eigenschaften sollte man im Design Mode einstellen:
Listbox1.ColumnCount = 2
Listbox1.ColumnWidths = "90;90"
Und weiter:
https://www.snb-vba.eu/VBA_Fill_combobox_listbox_en.html
AW: Zwei Dimensionales Array füllen
30.09.2022 14:08:35
Thomas
Hallo zusammen,
vielen Dank für eure Rückmeldungen und Tips, aber so richtig klappt es noch nicht wie ich es brauche, mir ist auch noch aufgefallen das ich "wahrscheinlich" noch ein IF brauche, da die Listbox nur mit den Werten aus der Tabelle gefüllt werden sollen, wo der Wert in Spalte 5 gleich dem Wert in einer Kombobox (cobAuswahl) ist,
wieso auch immer wird mir nur ein einziger Wert in das Listfeld geschrieben und der auch noch mit viele Platz zwischen vor und Nachname....
Userbild

Sub ListMitarbeiterFuellen()
Dim arrMitarbeiter As Variant
Dim lngRow As Long
Dim lngLastRow As Long
With tblDaten
lngLastRow = .Cells(Rows.Count, 1).End(xlUp).Row
For lngRow = 3 To lngLastRow
If .Cells(lngRow, 5) = forMitarbeiter.cobAuswah.Value Then
arrMitarbeiter = .Range(.Cells(lngRow, 3), .Cells(lngRow, 4))
End If
Next lngRow
End With
forMitarbeiter.libMitarbeiter.ColumnCount = 2
forMitarbeiter.libMitarbeiter.ColumnWidths = "4cm;2cm"
forMitarbeiter.libMitarbeiter.BackColor = &H80000002
forMitarbeiter.libMitarbeiter.List = arrMitarbeiter
End Sub

Anzeige
AW: Zwei Dimensionales Array füllen
30.09.2022 17:27:38
Daniel
Bei zu viel Platz zwischen den Spalten musst du bei
Columnwidth kleinere Werte verwenden.
Gefilterte Listboxen, deren Inhahlt nicht 1:1 mit einem Zellbereich übereinstimmt, musst du per Schleife und AddItem füllen

For i = 3 to lngLastRow
If .Cells(i, 5).value = forMitarbeiter.cobAuswah.Value then
forMitarbeiter.libMitarbeiter.Additem .Cells(i, 3).value
forMitarbeiter.libMitarbeiter.List(forMitarbeiter.libMitarbeiter.ListCount - 1) = .Cells(i, 4).value
End if
Next
Gruß Daniel

AW: Zwei Dimensionales Array füllen
04.10.2022 12:31:57
Thomas
Hi Daniel,
danke, musste noch eine kleinigkeit anpassen, damit die zweite Spalte korrekt befüllt wird, aber jetzt klappt es.

With tblDaten
lngLastRow = .Cells(Rows.Count, 1).End(xlUp).Row
For lngRow = 3 To lngLastRow
If .Cells(lngRow, 5) = forMitarbeiter.cobStandortAuswahl.Value Then
forMitarbeiter.libMitarbeiter.AddItem .Cells(lngRow, 3).Value
forMitarbeiter.libMitarbeiter.List(forMitarbeiter.libMitarbeiter.ListCount - 1, 1) = .Cells(lngRow, 4).Value
End If
Next lngRow
End With

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige