Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA ListBox Zeilen in Tabelle löschen

VBA ListBox Zeilen in Tabelle löschen
28.11.2020 20:12:54
Chris
Guten Abend zusammen,
ich habe ein Problem mit dem Löschen von Inhalten aus meiner Tabelle anhand der Auswahl in der ListBox.
Ich lese die Daten der ListBox aus einem Tabellenblatt ein. Multiselect ist aktiviert. Ich würde gerne für jede ausgewählte Zeile aus der ListBox, die entsprechende Zeile aus der Tabelle löschen.
Die Tabelle hat den ersten Eintrag in F6 und geht bis in die Spalte K.
Mein bisheriger Code löscht immer nur einen Eintrag, obwohl ich mehrere Zeilen in der ListBox auswähle.
Ich wäre euch sehr dankbar, wenn ihr mir weiterhelfen könntet.
Mein Code:
Private Sub CommandButton_Positionenloeschen_Click()
Dim i As Long
For i = 0 To ListBox_Positionen.ListCount - 1   '(-1 wegen Row.Source)
If ListBox_Positionen.Selected(i) = True Then
Rows(ListBox_Positionen.ListIndex + 6).Columns("F:K").Delete Shift:=xlUp
End If
Next
End Sub
Vielen Dank und beste Grüße
Chris
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA ListBox Zeilen in Tabelle löschen
28.11.2020 20:14:53
Hajo_Zi
Hallo Chris,
Deine Schleife sollte vom letzten zum erstenm laufen.
Zu Deiner Datei kann ich nichts schreiben, was wohl daran liegt das ich nicht auf fremde Rechner schaue.Ich baue keine Datei nach.
Sollte die Datei verlinkt werden?
Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, kannst du diese Daten
http://www.ms-office-forum.de/forum/showthread.php?t=322895
ändern.
Bilder lade ich mir nicht runter, da Excel damit nichts anfangen kann.
http://www.excel-ist-sexy.de/bilder-statt-datei/
Hochgeladene Bilder können zwar als solche in Excel importiert werden, sind jedoch bei der Lösung von Problemen nicht sehr hilfreich, da man die eigentlichen Daten nicht ohne große und zeitraubende Umwege direkt in die Tabelle übertragen kann.
Das ist nur meine Meinung zu dem Thema.
http://www.excel-ist-sexy.de/bilder-statt-datei/
Hochgeladene Bilder können zwar als solche in Excel importiert werden, sind jedoch bei der Lösung von Problemen nicht sehr hilfreich, da man die eigentlichen Daten nicht ohne große und zeitraubende Umwege direkt in die Tabelle übertragen kann.
Das ist nur meine Meinung zu dem Thema.

Anzeige
AW: VBA ListBox Zeilen in Tabelle löschen
28.11.2020 20:17:03
ralf_b
wie wird die Listbox gefüllt?
mittels rowsource?
AW: VBA ListBox Zeilen in Tabelle löschen
29.11.2020 12:48:26
Chris
Hallo zusammen,
vielen Dank für eure Nachrichten.
Beispieldatei: https://www.herber.de/bbs/user/141924.xlsm
Die Listbox wird mittels rowsource gefüllt.
Wie ich bereits erwähnt habe, würde ich gerne für jede ausgewählte Zeile in der ListBox, die entsprechende Zeile aus der Tabelle löschen. Wenn ich mehrere Zeilen in der ListBox auswähle, sollen auch alle entsprechenden Zeilen in der Tabelle gelöscht werden.
Vielen Dank für eure Hilfe.
Grüße
Chris
Anzeige
AW: VBA ListBox Zeilen in Tabelle löschen
29.11.2020 18:11:25
ralf_b
wenn man eine Zeile löscht dann gehen die markierungen verloren.
hier mal ein Beispiel wie es hoffentlich gut funktioniert.
das unload vom Anfang hab ich ans Ende gestellt.
Die Markierungsindizees werden in ein Array eingelesen und dieses dann rückwärts abgearbeitet.
Anschließend wird die Rowsource angepasst.
Private Sub CommandButton_Positionenloeschen_Click()
'Unload Me
Dim i As Long, x As Integer
Dim fund As Range
Dim ArIndx() As Variant
For i = 0 To ListBox_Positionen.ListCount - 1 '(-1 wegen Row.Source)
If ListBox_Positionen.Selected(i) = True Then
ReDim Preserve ArIndx(0 To x)
ArIndx(x) = i
x = x + 1
End If
Next
For i = UBound(ArIndx) To LBound(ArIndx) Step -1
Rows(5 + ArIndx(i)).Columns("F:K").Delete Shift:=xlUp
Next
With ListBox_Positionen
.RowSource = Range(.RowSource).Resize(Range(.RowSource).Rows.Count - (UBound(ArIndx) + 1)). _
Address(0, 0, xlA1, True)
End With
Erase ArIndx
Unload Me
End Sub

Anzeige
AW: VBA ListBox Zeilen in Tabelle löschen
29.11.2020 18:42:04
Chris
Guten Abend Ralf,
vielen Dank für deinen Code.
Ich habe den folgenden Teil weglassen müssen, ansonsten hat Excel mir einen Fehler ausgegeben.
With ListBox_Positionen
.RowSource = Range(.RowSource).Resize(Range(.RowSource).Rows.Count - (UBound(ArIndx) + 1)). _
_
Address(0, 0, xlA1, True)
End With

Was macht dieser Teil?
Danke für die Hilfe. Der obere Teil des Codes macht genau das was ich brauche!!!
Einen schönen Sonntag noch!
Gruß
Chris
Anzeige
AW: VBA ListBox Zeilen in Tabelle löschen
29.11.2020 18:58:11
ralf_b
der code reduziert die Rowsource auf die veränderte Größe nach dem Löschen. Möglicherweise ist ja noch der Zeilenumbruch durch die Forensoftware,drin. der code sollte auf einer Zeile stehen ohne Unterstriche.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zeilen in Excel-Tabelle aus VBA ListBox löschen


Schritt-für-Schritt-Anleitung

Um mehrere Zeilen aus einer Tabelle in Excel zu löschen, basierend auf der Auswahl in einer ListBox, befolge diese Schritte:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. UserForm erstellen: Füge eine UserForm hinzu und platziere eine ListBox und einen Button darauf.
  3. ListBox füllen: Stelle sicher, dass die ListBox mit Daten gefüllt ist, z.B. über die RowSource-Eigenschaft.
  4. Code für das Löschen erstellen: Verwende den folgenden VBA-Code für den Button, um die ausgewählten Zeilen zu löschen:
Private Sub CommandButton_Positionenloeschen_Click()
    Dim i As Long, x As Integer
    Dim ArIndx() As Variant
    For i = 0 To ListBox_Positionen.ListCount - 1
        If ListBox_Positionen.Selected(i) = True Then
            ReDim Preserve ArIndx(0 To x)
            ArIndx(x) = i
            x = x + 1
        End If
    Next
    For i = UBound(ArIndx) To LBound(ArIndx) Step -1
        Rows(5 + ArIndx(i)).Columns("F:K").Delete Shift:=xlUp
    Next
    ' Optional: Die RowSource anpassen, wenn nötig
    With ListBox_Positionen
        .RowSource = Range(.RowSource).Resize(Range(.RowSource).Rows.Count - (UBound(ArIndx) + 1)).Address(0, 0, xlA1, True)
    End With
    Erase ArIndx
End Sub
  1. Button testen: Klicke auf den Button, um die markierten Zeilen zu löschen.

Häufige Fehler und Lösungen

  • Fehler: Nur eine Zeile wird gelöscht
    Lösung: Stelle sicher, dass die Schleife vom letzten zur ersten Zeile läuft, um die Indizes nicht zu verschieben.

  • Fehler: "Index außerhalb des Bereichs"
    Lösung: Überprüfe, ob die ListBox korrekt gefüllt ist und dass der Code nicht auf eine nicht existierende Zeile zugreift.


Alternative Methoden

Eine alternative Methode zum Löschen von Zeilen ist die Nutzung von Excel-Formeln oder Makros, die direkt auf die Daten in der Tabelle zugreifen. Du kannst auch eine Schleife verwenden, um die Daten zu filtern und anschließend die nicht benötigten Zeilen zu entfernen.


Praktische Beispiele

Wenn du beispielsweise eine ListBox mit den Werten aus den Zeilen 6 bis 10 hast und mehrere Zeilen auswählst, dann wird der oben genannte Code alle entsprechenden Zeilen aus der Tabelle löschen, indem er die Indizes der ausgewählten Elemente speichert und rückwärts durchläuft.


Tipps für Profis

  • Effizienz steigern: Wenn du viele Zeilen löschen möchtest, arbeite mit Arrays, um die Leistung zu verbessern.
  • Daten sichern: Überlege, eine Sicherungskopie der Tabelle zu machen, bevor du Löschvorgänge durchführst, um Datenverlust zu vermeiden.

FAQ: Häufige Fragen

1. Frage
Was macht der Code, der die RowSource anpasst?
Antwort: Dieser Teil des Codes passt die RowSource der ListBox an die neue Größe an, nachdem Zeilen gelöscht wurden. Damit wird sichergestellt, dass die ListBox die richtigen Daten anzeigt.

2. Frage
Wie kann ich sicherstellen, dass das Löschen nicht zu Datenverlust führt?
Antwort: Du kannst vor dem Löschen eine Bestätigungsnachricht einfügen oder die Daten in einer temporären Tabelle sichern, bevor du die Löschoperation durchführst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige