Listbox-eintrag lässt sich nicht löschen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Listbox-eintrag lässt sich nicht löschen
von: peter
Geschrieben am: 24.06.2015 11:24:35

Hey Leute,
ich habe gerade Probleme beim Arbeiten mit einer Listbox. Ich habe eine Tabelle mit veschiedenen Einträgen und zeige von dieser Tabelle 2 Spalten in einer Listbox an:

Private Sub UserForm_Initialize()
    With ListBox1
        .ColumnCount = 2
        .ColumnWidths = "2cm;2cm"
        .ColumnHeads = True
    ListBox1.RowSource = "Historie!B4:C10"
    'oder:
    'ListBox1.RowSource = "Tabelle1!A2:F" & loletzte
    End With
End Sub
Nun möchte ich eine Befehlsschaltfläche löschen einfügen wo der selektierte Eintrag der Listbox !und! die dazugehörige zeile in der Tabelle gelöscht wird.
Dazu habe ich folgenden Code bereits probiert:
Private Sub CommandButton2_Click()
 Dim idx As Integer
 idx = ListBox1.ListIndex
 ListBox1.RemoveItem idx
End Sub
bekomme aber eine Fehlermeldung!
VG Peter

Bild

Betrifft: AW: Listbox-eintrag lässt sich nicht löschen
von: Rudi Maintaire
Geschrieben am: 24.06.2015 12:11:58
hallo,
du musst erst den Eintrag in der Tabelle löschen und dann die RowSource neu festlegen.
Gruß
Rudi

Bild

Betrifft: AW: Listbox-eintrag lässt sich nicht löschen
von: peter
Geschrieben am: 24.06.2015 12:50:35
Hallo Rudi,
ja ist mir auch aufgefallen habe jetzt folgende Änderungen vorgenommen:

Private Sub UserForm_Initialize()
    With ListBox1
        .ColumnCount = 1
        .ColumnWidths = "2cm"
        .ColumnHeads = True
    ListBox1.RowSource = "Historie!A4:A100"
    End With
End Sub
wobei Spalte A mit Datums gefüllt ist und der lösch-button:
Private Sub CommandButton2_Click()
'Löschen Schaltfläche Ereignisroutine
  Dim lZeile As Long
  
    'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet
    If ListBox1.ListIndex = -1 Then Exit Sub
  
    'Zum Löschen benötigen wir die Zeilennummer des ausgewählten Datensatzes
    lZeile = 4 'Start in Zeile 4
    'Schleife solange etwas in der ersten Spalte in Tabelle "Historie" drin steht
    Do While Trim(CStr(Worksheets("Historie").Cells(lZeile, 1).Value)) <> ""
    
        'Datensatz ID Spalte mit selektiertem Eintrag der ListBox vergleichen
        If ListBox1.Text = Trim(CStr(Worksheets("Historie").Cells(lZeile, 1).Value)) Then
            
            'Eintrag gefunden, die ganze Zeile wird nun gelöscht
            Worksheets("Historie").Rows(CStr(lZeile & ":" & lZeile)).Delete
            
            'Die ListBox muss nun neu geladen werden!
            Call UserForm_Initialize
            If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
            
            Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
            
        End If
    
        lZeile = lZeile + 1 'Nächste Zeile bearbeiten
    Loop
    
End Sub

jetzt bekomm ich zwar keine Fehlermeldung aber es passiert einfach gar nichts wenn ich auf die Schaltfläche klicke...
Gruß Peter

Bild

Betrifft: AW: Listbox-eintrag lässt sich nicht löschen
von: Rudi Maintaire
Geschrieben am: 24.06.2015 13:17:07
Hallo,
aber es passiert einfach gar nichts
Woher weißt du das?
Ich vermute, dein Vergleich passt nicht.
Versuchs mal mit
If ListBox1.Text = Worksheets("Historie").Cells(lZeile, 1).Text) Then
Gruß
Rudi

Bild

Betrifft: AW: Listbox-eintrag lässt sich nicht löschen
von: peter
Geschrieben am: 24.06.2015 13:37:48
Vermutlich passiert schon etwas, nur nichts für mich sichtbares und somit nicht das gewünschte...
Klappt leider auch nicht mit deiner Änderung

Bild

Betrifft: AW: Listbox-eintrag lässt sich nicht löschen
von: Rudi Maintaire
Geschrieben am: 24.06.2015 13:43:17
Hallo,
dann setz mal einen Haltepunkt (F9) und geh den Code mit F8 durch.
Gruß
Rudi

Bild

Betrifft: erledigt
von: peter
Geschrieben am: 24.06.2015 14:25:25
danke die Methode kannte ich noch nicht da ich neu in VBA unterwegs bin jetzt hat es geklappt!

Bild

Betrifft: AW: Listbox-eintrag lässt sich nicht löschen
von: Rudi Maintaire
Geschrieben am: 24.06.2015 14:11:06
bei mir geht das so:

Private Sub UserForm_Initialize()
  ListBox1.RowSource = "Historie!A4:A" & Sheets("Historie").Cells(Rows.Count, 1).End(xlUp).Row
End Sub
Private Sub CommandButton2_Click()
'Löschen Schaltfläche Ereignisroutine
  Dim r As Range
  
    'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet
    If ListBox1.ListIndex = -1 Then Exit Sub
  
    'Zum Löschen benötigen wir die Zeilennummer des ausgewählten Datensatzes
    'Schleife solange etwas in der ersten Spalte in Tabelle "Historie" drin steht
    For Each r In Range(ListBox1.RowSource)
    
        'Datensatz ID Spalte mit selektiertem Eintrag der ListBox vergleichen
        If CLng(r) = ListBox1 Then
            
            'Eintrag gefunden, die ganze Zeile wird nun gelöscht
            r.EntireRow.Delete
            
            'Die ListBox muss nun neu geladen werden!
            Call UserForm_Initialize
            If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
            
            Exit For 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
        End If
    Next
    
End Sub

Gruß
Rudi

 Bild

Beiträge aus den Excel-Beispielen zum Thema " Listbox-eintrag lässt sich nicht löschen"