AW: wir brauche eure Hilfe
03.07.2023 20:31:02
Yal
Moin Moni,
Eigentlich ist die Schaltfläche "Vom Listbox ins Textbox überschreiben" überflüssig, weil diese Aktion bereits erfolgt, wenn ein Element aus Listbox angeklickt wird.
Es sind 3 Aktionen:
_ von der Listbox in den Textboxen
_ von Textboxen in die Liste auf Blatt Tabelle2 (was eigentlich eine "intelligente Tabelle", die "Tabelle1" heisst. Die Namen sind äusserst unglücklich)
_ von der Liste auf Tabelle2 in die Listbox
Aber nur 2 Ereignisse:
_ klicken auf der Listbox
_ klicken auf "Speichern auf Blatt Tabelle2"
aber noch dem Wechseln zum Blatt "Tabelle1"
Daher sollte man die Aktionen-Prozedure von den Ereignis-Prozedure trennen.
Die 2+1 Ereignis-Prozeduren sind folgende:
Private Sub CommandButton1_Click()
TextBoxInsTabelle_speichern
Listbox_befuellen
End Sub
Private Sub ListBox1_click()
VonListboxInsTextbox_übertragen
End Sub
Private Sub Worksheet_Activate()
Listbox_befuellen
End Sub
Man sieht: Listbox_befuellen kommt zweimal vor!
Die 3 Aktion-Prozeduren:
Private Sub Listbox_befuellen()
'Die letzte befüllte Zeile aus Tabelle2 wird an erster Stelle in der Listbox auf Tabellenblatt 1 angezeigt
Dim X As Long
With ListBox1
.Clear
.ColumnCount = 3
End With
With Worksheets("Tabelle2").ListObjects("Tabelle1")
For X = .ListRows.Count To 1 Step -1
If .ListRows(X).Range(1) > "" Then
ListBox1.AddItem .ListRows(X).Range(1).Value
ListBox1.List(ListBox1.ListCount - 1, 1) = .ListRows(X).Range(2).Value
ListBox1.List(ListBox1.ListCount - 1, 2) = .ListRows(X).Range(3).Value
End If
Next
End With
End Sub
Private Sub TextBoxInsTabelle_speichern()
With Worksheets("Tabelle2").ListObjects("Tabelle1").ListRows.Add
.Range(1) = TextBox1.Text
.Range(2) = TextBox2.Text
.Range(3) = TextBox3.Text
End With
End Sub
Private Sub VonListboxInsTextbox_übertragen()
'Die Textboxen werden mit der Markierten Zeile der Listbox gefüllt
Dim R As Long
With ListBox1
TextBox1.Text = .List(.ListIndex, 0)
TextBox2.Text = .List(.ListIndex, 1)
TextBox3.Text = .List(.ListIndex, 2)
End With
End Sub
CommandButton2 mit der aktuelle Funktion "markiertes auf Listbox in die Textboxen" ist überflüssig. Man könnte es verwenden, um den im Listbox markierte Eintrag zu löschen:
Private Sub CommandButton2_Click()
Dim R As Long
With ListBox1
For R = 0 To .ListCount - 1
If .Selected(R) Then
ZeileInTabelle_löschen .List(R, 0) & ";" & .List(R, 1) & ";" & .List(R, 2)
Listbox_befuellen
Exit For
End If
Next
End With
End Sub
Private Sub ZeileInTabelle_löschen(ByVal Eintrag As String)
Dim L
For Each L In Worksheets("Tabelle2").ListObjects("Tabelle1").ListRows
If L.Range(1) & ";" & L.Range(2) & ";" & L.Range(3) = Eintrag Then
L.Delete
Exit Sub
End If
Next
End Sub
VG
Yal