ich habe noch eine Frage zu Arrays. Ich befülle meine Listbox mit einem Array, dazu verwende ich folgenden Code im Userform:
Private Sub Listbox1_fuellen()
Dim lzeile As Long
Dim lZeileMaximum As Long
Dim i As Integer
Dim lAnzahl As Long
Dim col As New Collection
lZeileMaximum = Tabelle3.UsedRange.Rows.Count + 1
'Anzahl der nicht leeren Zeilen ermitteln
lAnzahl = 0
For lzeile = 5 To lZeileMaximum
'Nur wenn die Zeile benutzt / nicht leer ist, in List übernehmen
If IST_ZEILE_LEER(lzeile) = False Then
lAnzahl = lAnzahl + 1
col.Add lzeile
End If
Next
If lAnzahl > 0 Then
ReDim arrListeAlle(1 To lAnzahl, 1 To 18)
'Listendaten in Array einlesen
For lAnzahl = 1 To col.Count
lzeile = col(lAnzahl)
array(lAnzahl, 1) = lzeile
array(lAnzahl, 2) = CStr(Tabelle1.Cells(lzeile, 3).Text)
array(lAnzahl, 3) = CStr(Tabelle1.Cells(lzeile, 4).Text)
arrayAnzahl, 4) = CStr(Tabelle1.Cells(lzeile, 5).Text)
array(lAnzahl, 5) = CStr(Tabelle1.Cells(lzeile, 6).Text)
' ..... usw
End If
Next lAnzahl
Else
End If
Set col = Nothing
End Sub
Diesen Code habe ich aus einem früheren Projekt, die Daten lasse ich mir in einer Listbox anzeigen. Funktioniert soweit auch (zumindest wenn mindest 1 Eintrag in der Tabelle ist).
Ich würde nun gerne über einen Button auch einen Eintrag aus der Listbox löschen wollen. Dazu habe ich derzeit immer folgendes verwendet.
Private Sub CommandButton3_Click()
' Schaltfläche zum Löschen eines Datensatzes
Dim zeile As Long
'Listbox Einträge aktualisieren, falls etwas verändert wurde
ListBox1.List(ListBox1.ListIndex, 1) = Textbox1
ListBox1.List(ListBox1.ListIndex, 2) = TextBox2
ListBox1.List(ListBox1.ListIndex, 3) = ComboBox1
'...usw
If ListBox1.ListIndex = -1 Then Exit Sub
If MsgBox("Möchten Sie den Datensatz wirklich löschen?", vbQuestion + vbYesNo) = vbYes Then
'Zum Löschen benötigen wir die Zeilennummer des ausgewählten Datensatzes
zeile = ListBox1.List(ListBox1.ListIndex, 0)
'Die ganze Zeile wird nun gelöscht
Tabelle3.Rows(CStr(zeile & ":" & zeile)).Delete
'Und den Eintrag in der Liste müssen wir auch noch entfernen
ListBox1.RemoveItem ListBox1.ListIndex
End If
End Sub
Wie ihr sicherlich schon ahnt, funktioniert das nicht richtig und verschiebt meine nachfolgenden Datensätze, nachdem eine Zeile mittig gelöscht wurde... mir ist es bislang gar nicht aufgefallen. Vermutlich werden die Einträge in der Listbox nicht mit RemoveItem entfernt. Wenn ich nämlich in Zeile 5 lösche, sind alle nachfolgenden Zeilen um 1 Zeile verschoben (ist ja auch klar, die Zeile hab ich ja gelöscht). Der Letzte Eintrag wird also gar nicht mehr in meine Textboxen geladen...
Erst wenn ich das Userform neu öffne, wird es wieder neu befüllt und die Einträge stimmen wieder (weil er sich ja auf die Zeilennummern bezieht).
Für mich zum Verständnis daher... Gibt es einen Weg, mit dem ich das umgehen kann? Ich denke mal, ich müsste logischerweise im Array löschen, nicht in der Listbox. Auch ein Call Listbox1_fuellen brachte nicht den gewünschten Erfolg.
VIelen Dank für Eure Hilfe.