Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1840to1844
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

Zeile aus Array löschen Userform

Zeile aus Array löschen Userform
02.08.2021 16:25:48
Andreas
Hallo,
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.

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeile aus Array löschen Userform
02.08.2021 17:19:37
onur
Hier fehlt eine Klammer hinter array:
arrayAnzahl, 4) = CStr(Tabelle1.Cells(lzeile, 5).Text)
"array" ist ein reserviertes Wort, NICHT für Variablennamen benutzen.
Für mehr musst du schon eine Datei posten, denn der Code ohne die Datei ist ja nicht lauffähig.
AW: Zeile aus Array löschen Userform
02.08.2021 17:42:22
Andreas
Mit der Datei wird es schwierig... Mir gehts gerade ehr um das Verständnis, wie man anstatt diesem RemoveItem es hinbekommt, eine Zeile aus dem Array zu löschen....
AW: Zeile aus Array löschen Userform
02.08.2021 17:46:27
onur
Was ist daran so schwierig, eine Beispielsdatei zu posten? Sollen wir denn Eine erstellen, um deinen Code testen zu können?
AW: Zeile aus Array löschen Userform
02.08.2021 18:11:13
Andreas
Ich wollte ja nicht, dass mir jemand die Datei nachbaut, sondern dass ich verstehe, wie sowas funktioniert. Mir würde schon ein Link reichen, wo ich es nachlesen kann.
Bislang habe ich ja aus der Listbox mit RemoveItem die Einträge aus der Listbox gelöscht. Aber es verschiebt eben die nachfolgendne Zeilen...
Anzeige
AW: Zeile aus Array löschen Userform
02.08.2021 18:18:43
Yal
Hallo Andreas,
wir sind auch kein Allwissenden, die jeglichen unbekannte Coding sofort überblicken.
Fehlersuche läuft so: man lässt den Code laufen, bis der Fehler kommt, oder wie bei Dir, die Verschiebung.
Dann setzen wir ein Haltepunkt und gehen weiter im Schritt-Modus unter geöffnete Lokal-Fenster, um die Zustand der Variablen zu beobachten.
Die Verschiebung ist nicht nachvollziehbar. Es ist sogar so nicht nachvollziehbar, dass wir uns nicht genau vorstellen, was Du damit meinst (es ist zugegeben schwierig ein Problem genau zu beschreiben).
Und nun, wie geht es weiter?
VG
Yal
Anzeige
AW: Zeile aus Array löschen Userform
03.08.2021 07:00:45
ralf_b
Hallo,
nach dem Löschen der Tabellenzeile reicht es aus die sub listboxfüllen nochmal aufzurufen. Damit wird automatisch der nun restliche Tabellenbereich neu eingelesen und somit die Listbox neu gefüllt. Leider geht dann auch die bis dahin aktuell ausgewählte DatensatzNr verloren. Diese sollte man sich irgendwo merken und dann den Listindex entsprechend setzen sofern noch soviel Liste übrig ist.
Das hier ist Nonsens.

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
Wenn du auf den Löschenbutton klickst, ist es egal was in den Textboxen steht. Du löscht den Datensatz. Und der nächste wird dann in die Textboxen geladen. Etwaige Änderungen muß man dann nicht noch übernehmen. Und schon gar nicht in die Listbox. Dann hast du unterschiedliche Datenstände in der Listbox und der Tabelle. Wann würdest du denn die Änderungen in die Tabelle schreiben wollen?
Ich rate dir dazu nach Änderungen den Datensatz per Button in die Tabelle zu schreiben. Und dann die Tabelle neu in die Listbox einlesen. Listindex setzen und fertig.
gruß
rb
Anzeige
AW: Zeile aus Array löschen Userform
03.08.2021 10:53:11
Andreas
Hey RB,
vielen Dank. Das war der Wink mit dem Zaunpfahl. Funktioniert so, wie du beschrieben hast. Hat mich auf den richtigen Weg gebracht.
LG Andy
danke für die rückmeldung -owT
03.08.2021 18:05:59
ralf_b

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige