mehrspaltige ListBox bearbeiten und speichern über Textboxen
#1
Hallo,

ich brauche mal wieder Hilfe, weil ich komme mit meinen minimalen Kenntnissen gerade nicht weiter und ich habe schon einiges probiert.

Ich erkläre kurz mal was ich meine und ich habe auch die Datei auch mitgesendet.

Ich habe eine Userform mit einer mehrspaltigen Listbox und zwar mit 4 Spalten aus einen Bereich einer Tabelle. Die Listbox möchte ich verwenden um die Anrede, Name und Vorname einzugeben.

Die Userform mit der Listbox öffnet sich auf der Startseite über die Schaltfläche "Eingabe". Die Listbox hat sich beim öffnen schon automatisch die vorhanden Daten aus der Tabelle geladen.
Durch ein Doppelklick in der Listbox auf die jeweilige Person, werden die Daten darunter in 4 Textboxen zur Bearbeitung angezeigt. Nach der Änderung oder Eingabe einer neuen Person, sollen die Änderungen in die Listbox übernommen werden und  automatisch natürlich auch in die Tabelle übernommen werden. Nur. Die Spalte "Nr." soll nicht verändert werden. Dafür habe ich einen Schaltfläche zum "Speichern".

Bis auf Speichern der Daten in die Listbox und dann in die Tabelle, klappt alles super und läuft.
Ich habe die Datei mitgesendet:

.xlsm   Prüfung_Check_ Vorlage_20200412_neu_übung.xlsm (Größe: 66,49 KB / Downloads: 12)
Hier aber auch meine Codes: 
'*************************************************************
Dieser Befehl funktioniert nicht!
 Private Sub CommandButton1_Click() 'Speichern in Listbox
    With ListBox1
    .AddItem TextBox1 'erste Spalte in Listbox
    .List(ListCount - 1, 1) = TextBox2 'dritte Spalte in Listbox
    .List(ListCount - 1, 2) = TextBox3 'dritte Spalte in Listbox
    .List(ListCount - 1, 3) = TextBox4 'vierte Spalte in Listbox
    End With
   
   'TextBox1 Nr. bleibt unverändert, nicht löschen
    TextBox2 = ""TextBox3 = ""
    TextBox4 = ""
   
 
End Sub
 '*************************************************************
'Von ListBox in die TextBoxen übertragen um Address Daten zu bearbeiten
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  
    TextBox1.Value = ListBox1.Column(0, ListBox1.ListIndex)
    TextBox2.Value = ListBox1.Column(1, ListBox1.ListIndex)
    TextBox3.Value = ListBox1.Column(2, ListBox1.ListIndex)
    TextBox4.Value = ListBox1.Column(3, ListBox1.ListIndex)
 
End Sub
 
Private Sub UserForm_Initialize()
'*************************************************************
'Eingabefenster Listenfeld TN Namen und übertragen in Datenbank
    With Me.ListBox1
        .ColumnCount = 4
        .ColumnWidths = "50;60;150;150"
        .RowSource = "Datenbank!B2:E37"
        .MultiSelect = fmMultiSelectSingle
        .TextColumn = 1
        .BoundColumn = 4
    End With
End Sub
 
'**************************************************************


Ich komme nicht weiter, weil er es nicht übernehmen möchte beim Speichern.

Hoffe jemand hat eine Idee.

Schönen Tag
Top
#2
Hallo Carino73,

soweit ich weiß, hängt der Inhalt Deiner ListBox an einer fixen Quelle, bei dir also .RowSource = "Datenbank!B2:E37".

Ich würde die Tabellendaten zu Beginn in ein Array schreiben. Weiterhin eine ListBox-Füllen-Routine einbauen, die die Daten aus dem Array in die ListBox schreibt.

Dann einen weiteren Knopf zur Übernahme Deiner TextBox-Daten ins Array. Nach dem Klick die Daten ins Array, neu sortieren und ListBox-Fülen-Routine.
Mit dem Klick auf abbrechen einfach beenden.
Mit dem Klick auf Übernehmen die daten vom Array in die Tabelle zurückschreiben.

Damit kannst Du in Deinen Daten bis zur Übernahme rumspielen, ohne dass etwas passiert. Erst wenn Du übernehmen klickst, werden die Änderungen auch gespeichert.

Gruß,
Lutz
Top
#3
Hallo Lutz,

vielen Dank für Deine Antwort und Deine Idee.

Ich als noch VBA Laie bin jetzt gerade völlig verwirrt was Du genau meinst und wie. Dazu sind glaube ich meine Kenntnisse noch zu gering um das nachzuvollziehen.

Aber Danke für Deine Mühe
Top
#4
Hallo,
Private Sub CommandButton1_Click() 'Speichern in Listbox
    With ListBox1
      Range(.RowSource).Cells(TextBox1, 2) = TextBox2  'zweite Spalte in Listbox
      Range(.RowSource).Cells(TextBox1, 3) = TextBox3  'dritte Spalte in Listbox
      Range(.RowSource).Cells(TextBox1, 4) = TextBox4  'vierte Spalte in Listbox
    End With
End Sub
Gruß Uwe
Top
#5
Hallo,

vielen Dank! Jetzt klappt es vielen dafür. Da habe ich eine lange Leitung gehabt. So einfach manchmal.

Schönen Abend noch
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste