Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Eintrag aus Listbox löschen bzw ändern

Eintrag aus Listbox löschen bzw ändern
26.12.2013 10:56:27
Marc
Morgen zusammen,
diese Listbox macht mich fertig.
Ich möchte gerne die Listbox eintrage mit einem Button löschen, bzw mit einem anderen Button den Eintrag ändern. Die Textboxen zeigen das Datum - das funktioniert auch.
Aufbau der Userform
Private Sub ListBox1_Click()
TextBox1.Value = ListBox1.List(ListBox1.ListIndex, 1)
TextBox2.Value = ListBox1.List(ListBox1.ListIndex, 2)
End Sub
Private Sub UserForm_Initialize()
ListBox1.RowSource = "Bu8:BW37"
End Sub
In BV steht das von-Datum in BW das bis-Datum, in Bu steht 1,2,3 also nur eine die Anzahl der Einträge
zum löschen hab ich bisher den Code
Private Sub CommandButton2_Click()
'markierte Einträge löschen
Dim lngZeile As Long
Dim intItem As Integer
With Me.ListBox1
For intItem = 0 To .ListCount - 1
If .Selected(intItem) Then
lngZeile = .List(intItem, 1)
With Worksheets("Gesamtübersicht")
.Range(Cells(lngZeile + 8, 74), Cells(lngZeile, 75)).ClearContents
End With
End If
Next intItem
End With
Call Tagesort
UserForm1.Repaint
End Sub
Wenn ich ein Eintrag auswähle und den cmb2 klicke passiert aber nichts :/... es wird nur sortiert (call Tagesort)
Um Hilfe bin ich sehr dankbar!!

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Eintrag aus Listbox löschen bzw ändern
26.12.2013 22:06:16
fcs
Hallo Marc,
hier kann es verschiedene Probleme geben:
1. Dein Code zum Löschen von Einträgen in der Tabelle ist geeignet für eine Listbox mit Mehrfachauswahl (Eigenschaft MultiSelect der Listbox ist nicht "0-fmMultiSelectSingle).
Bei einer Listbox mit Einfachauswahl ist er wirkungslos.
2. Da du für die Datenquelle der Listbox einen Zellbereich in einem Tabellenblatt festlegst kommt es zu Rückkopplungseffekten, wenn die Werte in der Tabelle geändert/gelöscht werden
- das Click-Ereignis wird gestartet
- eine Mehrfachauswahl in der Listbox wird zurückgesetzt.
Das Clickereignis kann man noch umgehen. Das Zurücksetzen der Mehrfachauswahl nicht.
Du solltest also deine Listbox für einzelauswahl konfigurieren.
Außerdem sollten die Textboxen für die Datumswerte so konfiguriert werden, dass auf gültige Eingaben geprüft wird und der Code des Commandbuttons sollte nicht die Textboxinhalte sondern den entsprechenden Datumswert in die Tabelle schreiben. Nur so funktioniert auch das Sortieren korrekt.
Nachfolgend der Code des Userforms, wie er etwa aussehen müßte.
Gruß
Franz
'Code des Userforms - erstellt/bearbeitet unter Excel 2010
Option Explicit
Private bolNoAction As Boolean
Private Sub Tagesort()
bolNoAction = True
With Worksheets("Gesamtübersicht").Range("BU8:BW37")
.Sort key1:=.Cells(1, 2), order1:=xlAscending, _
key2:=.Cells(1, 3), order2:=xlAscending, _
key3:=.Cells(1, 1), order3:=xlAscending, Header:=xlNo
End With
bolNoAction = False
End Sub
Private Sub CommandButton1_Click()
'Daten zum selektierten Listeneintrag ändern - Textboxinhalte in Tabelle eintragen
Dim lngZeile As Long
Dim intItem As Integer
bolNoAction = True
With Me.ListBox1
lngZeile = .ListIndex + 8
End With
With Worksheets("Gesamtübersicht")
'von-Datum
If Me.TextBox1 = "" Then
.Cells(lngZeile, 74).ClearContents
ElseIf IsDate(Me.TextBox1) Then
.Cells(lngZeile, 74).Value = CDate(Me.TextBox1)
Else
.Cells(lngZeile, 74).Value = Me.TextBox1
End If
'bis-Datum
If Me.TextBox2 = "" Then
.Cells(lngZeile, 75).ClearContents
ElseIf IsDate(Me.TextBox2) Then
.Cells(lngZeile, 75).Value = CDate(Me.TextBox2)
Else
.Cells(lngZeile, 75).Value = Me.TextBox2
End If
End With
Call Tagesort
UserForm1.Repaint
bolNoAction = False
Me.ListBox1.ListIndex = -1
TextBox1.Value = ""
TextBox2.Value = ""
End Sub
Private Sub CommandButton2_Click()
'markierten Eintrag löschen
Dim lngZeile As Long
Dim intItem As Integer
bolNoAction = True
With Me.ListBox1
lngZeile = .ListIndex + 8
End With
With Worksheets("Gesamtübersicht")
.Range(.Cells(lngZeile, 74), .Cells(lngZeile, 75)).ClearContents
End With
Call Tagesort
UserForm1.Repaint
bolNoAction = False
Me.ListBox1.ListIndex = -1
TextBox1.Value = ""
TextBox2.Value = ""
End Sub
Private Sub ListBox1_Click()
'Daten des selektierten Listeneintrag in Textboxen eintragen
If bolNoAction = True Then Exit Sub
With ListBox1
If .ListIndex = -1 Then
TextBox1.Value = ""
TextBox2.Value = ""
Else
'von-Datum
If .List(.ListIndex, 1) = "" Then
TextBox1.Value = ""
ElseIf IsNumeric(.List(.ListIndex, 1)) Then
TextBox1.Value = Format(.List(.ListIndex, 1), "DD.MM.YYYY")
Else
TextBox1.Value = .List(.ListIndex, 1)
End If
'bis-Datum
If .List(.ListIndex, 2) = "" Then
TextBox2.Value = ""
ElseIf IsNumeric(.List(.ListIndex, 2)) Then
TextBox2.Value = Format(.List(.ListIndex, 2), "DD.MM.YYYY")
Else
TextBox2.Value = .List(.ListIndex, 2)
End If
End If
End With
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Prüfung der Eingabe auf gültiges Datum
With Me.TextBox1
If .Value = "" Then
'do nothing
ElseIf IsDate(.Value) Then
.Value = Format(CDate(.Value), "DD.MM.YYYY")
Else
MsgBox "Eingabe ist kein gültiges Datum", vbInformation + vbOKOnly, _
"Prüfung Eingabe - Von-Datum"
Cancel = True
End If
End With
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Prüfung der Eingabe auf gültiges Datum
With Me.TextBox2
If .Value = "" Then
'do nothing
ElseIf IsDate(.Value) Then
.Value = Format(CDate(.Value), "DD.MM.YYYY")
Else
MsgBox "Eingabe ist kein gültiges Datum", vbInformation + vbOKOnly, _
"Prüfung Eingabe - Bis-Datum"
Cancel = True
End If
End With
End Sub
Private Sub UserForm_Initialize()
ListBox1.RowSource = "Gesamtübersicht!BU8:BW37"
End Sub

Anzeige
AW: Eintrag aus Listbox löschen bzw ändern
28.12.2013 09:26:08
Marc
Morgen,
danke dir erst mal für den Code und vor allem für die Erklärung, Der code hat auch so weit funktioniert.
Musste die Userform aber doch etwas abändern.
Wünsch dir ein guten Rutsch!!
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Eintrag aus Listbox löschen oder ändern in Excel


Schritt-für-Schritt-Anleitung

  1. UserForm erstellen: Erstelle eine UserForm in Excel mit einer ListBox und zwei TextBoxen für die Datumswerte.
  2. ListBox konfigurieren: Setze den Zellbereich für die ListBox, um die Daten anzuzeigen. Verwende dafür folgenden VBA-Code:
    Private Sub UserForm_Initialize()
       ListBox1.RowSource = "Gesamtübersicht!BU8:BW37"
    End Sub
  3. Eintrag in TextBoxen anzeigen: Nutze den Click-Event der ListBox, um den ausgewählten Eintrag in die TextBoxen zu übertragen:
    Private Sub ListBox1_Click()
       TextBox1.Value = ListBox1.List(ListBox1.ListIndex, 1)
       TextBox2.Value = ListBox1.List(ListBox1.ListIndex, 2)
    End Sub
  4. Eintrag ändern: Implementiere einen Button, um den ausgewählten Eintrag in der Tabelle zu ändern:
    Private Sub CommandButton1_Click()
       ' Code zum Ändern des Eintrags
    End Sub
  5. Eintrag löschen: Füge einen weiteren Button hinzu, der den markierten Eintrag löscht:
    Private Sub CommandButton2_Click()
       ' Code zum Löschen des Eintrags
    End Sub
  6. Validierung der Eingaben: Stelle sicher, dass die eingegebenen Daten in den TextBoxen gültige Datumswerte sind.

Häufige Fehler und Lösungen

  • Problem: Der Lösch-Button funktioniert nicht.

    • Lösung: Stelle sicher, dass die ListBox auf Mehrfachauswahl eingestellt ist, wenn Du mehrere Einträge löschen möchtest. Bei einer Einfachauswahl funktioniert der Lösch-Button nur für den aktuell ausgewählten Eintrag.
  • Problem: Nach dem Löschen wird die ListBox nicht aktualisiert.

    • Lösung: Füge nach dem Löschen den Befehl UserForm1.Repaint hinzu, um die Benutzeroberfläche zu aktualisieren.
  • Problem: Die Eingaben in den TextBoxen werden nicht korrekt in die Tabelle geschrieben.

    • Lösung: Überprüfe die Logik in Deinem Code. Stelle sicher, dass die entsprechenden Zellen in der Tabelle korrekt referenziert werden.

Alternative Methoden

Falls Du die Daten nicht direkt aus einer ListBox bearbeiten möchtest, kannst Du auch:

  • Daten in einer Tabelle: Statt einer ListBox eine Tabelle verwenden, in der Du direkt die Daten eingeben und bearbeiten kannst.
  • Dynamische Filter: Mit Pivot-Tabellen arbeiten, um Daten anzuzeigen und zu bearbeiten.

Praktische Beispiele

Hier ist ein einfaches Beispiel für die Implementierung eines Lösch-Buttons:

Private Sub CommandButton2_Click()
    Dim lngZeile As Long
    lngZeile = ListBox1.ListIndex + 8 ' Beispiel für Zeilenanpassung
    Worksheets("Gesamtübersicht").Rows(lngZeile).ClearContents
    Call Tagesort
    UserForm1.Repaint
End Sub

Mit diesem Code wird der gewählte Eintrag aus der Tabelle gelöscht und die Liste neu sortiert.


Tipps für Profis

  • Fehlermeldungen anzeigen: Implementiere MsgBoxen, um den Benutzern Rückmeldungen über den Erfolg oder das Scheitern von Aktionen zu geben.
  • Datenvalidierung: Setze Datenvalidierungen in den TextBoxen ein, um sicherzustellen, dass nur gültige Datumswerte eingegeben werden.
  • Benutzerfreundliche Oberfläche: Achte darauf, dass die UserForm eine klare und benutzerfreundliche Struktur hat, um die Nutzung zu erleichtern.

FAQ: Häufige Fragen

1. Wie kann ich die ListBox für Mehrfachauswahl konfigurieren?
Du kannst die Eigenschaft MultiSelect der ListBox auf fmMultiSelectMulti setzen, um die Mehrfachauswahl zu aktivieren.

2. Was mache ich, wenn die Datenquelle der ListBox nicht aktualisiert wird?
Stelle sicher, dass Du den RowSource korrekt aktualisierst, wenn Daten in der zugrunde liegenden Tabelle geändert werden. Verwende UserForm_Initialize zur Initialisierung.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige