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

Listbox Daten übergeben und bearbeiten

Forumthread: Listbox Daten übergeben und bearbeiten

Listbox Daten übergeben und bearbeiten
21.12.2022 07:55:18
Marcus
Guten Morgen zusammen,
ich habe eine Zelle, wo man reinklickt und dann öffnet sich eine Userform mit einer Listbox. Diese Listbox zieht sich die Daten aus einer Tabelle im zweiten Worksheet. Diese Listbox soll aber nur die Spalteninformation von "Aufgaben" und nur die ersten 3 Informationen (Brot backen. Küche sauber machen. Tisch decken.) anzeigen, nicht die "Nr." aus der Tabelle.
Wenn z.B. die Auswahl getroffen wurde "1.1 Brot backen" und "1.3 Tisch decken" und auf den Button "Übernehmen" geklickt wird, sollen die Informationen im Worksheet "Tabelle1" in einer Zelle hintereinander geschrieben werden (das funktioniert auch). Jetzt möchte ich aber, dass ich in diese Zelle reinklicke und den Text ändern, z.B. aus "Brot backen" --> "Brot einkaufen" manuell abändern. Wenn ich dann die Userform nochmal öffne, möchte ich dann einen den Punkt "1.2 Küche sauber machen" markieren und einfach in die gleiche Zelle ans Ende geschrieben bekommen, ohne das sich mein manuell geänderter Text gelöscht wird. Wenn ich die Userform im Anschluss wieder öffne und dann den geänderten Punkt nicht mehr haben möchte, soll ich diesen abwählen können und soll nicht mehr in der Zelle angezeigt werden. Der Punkt "1.1 Brot backen" soll aber nicht in der Tabelle, wo die Listbox die Daten hernimmt überschrieben werden, soll dauerhaft gleich bleiben.
Ein letzter Punkt noch, die Zelle, die ich anklicke, um die Userform zu öffnen, soll immer wenn ich darauf klicke geöffnet werden, ohne das ich immer in ein anderes Feld klicken muss.
Könnt ihr mir hierbei weiterhelfen (https://www.herber.de/bbs/user/156873.xlsm)? Vielen vielen Dank.
Viele Grüße Marcus
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox Daten übergeben und bearbeiten
21.12.2022 10:31:31
Alwin
Hallo Marcus,
mit RowSource wird das so nichts, ohne Änderung der dazu korrelierenden Tabelle.
Mittels .List kann man den Inhalt der Listbox wie folgt manipulieren:
Wenn du durch klicken in die Zelle via TextBox eine Änderung nur in der Zelle der Listbox willst, geht das über die Zeile und der X Koordinate zu berechnen. Dann kann man in Array der Listbox die entsprechende Zelle ändern und in die Listbox zurück schreiben.
Dann sind deine Spaltenüberschriften in der Listbox weg. Weils dies eben mit RowSource geht.
Gruß Uwe
Anzeige
AW: Listbox Daten übergeben und bearbeiten
21.12.2022 10:43:27
Alwin
Beim nochmals lesen ist mir aufgefallen, dass ja nur die Zellen der 2. Spalte in Frage kommen. Da brauchs die Berechnung aus der X Koordinate gar nicht.
AW: Listbox Daten übergeben und bearbeiten
21.12.2022 10:56:23
Alwin
auf die Schnelle so:
https://www.herber.de/bbs/user/156876.xlsm
Mache einen Doppelklick in die Zeile.
Gruß Uwe
Anzeige
AW: Listbox Daten übergeben und bearbeiten
21.12.2022 17:44:01
Marcus
Vielen Dank für die schnelle Unterstützung. Ich habe mir die Datei jetzt runtergeladen, kann diese zwar öffnen, aber die hat keine Funktion. Ich kann die Userform nicht starten.
AW: Listbox Daten übergeben und bearbeiten
21.12.2022 20:11:02
Alwin
Hallo Marcus,
die runtergeladene Datei mit der rechten Maustaste anklicken --> auf Eigenschaften gehen --> und zulassen. Dann sollte es gehen.

Option Explicit
Dim iZeile&
Private Sub btnTabellenblatt_Click()
Dim i&, Daten$
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then Daten = Daten & " " & ListBox1.List(i, 1)
Next
Sheets("Tabelle1").Range("C2").Value = Mid(Daten, 2)
UserForm1.Hide
End Sub
Private Sub CommandButton1_Click()
UserForm1.Hide
End Sub
Private Sub CommandButton2_Click()
WertAendern
End Sub
Private Sub WertAendern()
Dim arrList()
arrList = ListBox1.List
arrList(iZeile, 1) = TextBox1
ListBox1.List = arrList
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
With ListBox1
TextBox1 = .List(.ListIndex, 1)
iZeile = .ListIndex
End With
End Sub
Private Sub UserForm_Initialize()
Dim arrSpalten()
arrSpalten = Array(30, 300)
With ListBox1
.List = Tabelle2.ListObjects("Tabelle2").DataBodyRange.Value
.ColumnWidths = Join(arrSpalten, "; ")
End With
End Sub
Neu hinzugekommen sind eine TextBox und ein Button. Mit Doppelklick wird der Text der Zeile in die Textbox geladen, kann dann geändert werden und mit dem neuen Button geändert in die Listbox zurückgeschrieben werden.
https://www.herber.de/bbs/user/156885.xlsm
Gruß Uwe
Anzeige
AW: Listbox Daten übergeben und bearbeiten
22.12.2022 07:44:53
Marcus
Guten Morgen Uwe,
vielen Dank, hat funktioniert.
Würde es technisch funktionieren, dass der geänderte Text als Zusatzpunkt einfach zu den anderen Punkten in der oberen Listbox unterhalb hinzugefügt werden kann? So dass ich quasi den Standardkatalog nicht verändere (Die geänderten Texte sollen nur in der Listbox dann verfügbar sein und nicht in den Standardkatalog übernommen werden). Besteht auch die Möglichkeit, dass die Listbox nur die ersten 3 Punkte aus dem Standardkatalog anzeigt und nicht alle 5 Einträge der Tabelle?
Vielen vielen Dank für deine Unterstützung.
Viele Grüße Marcus
Anzeige
AW: Listbox Daten übergeben und bearbeiten
22.12.2022 09:31:40
Marcus
Guten Morgen Uwe,
ja Mega geil, vielen vielen Dank. Genau so. Gibt es noch die Möglichkeit, dass die Listbox nur die ersten 3 Einträge lädt und nicht alle 5 Einträge aus der Stammdatentabelle (Tabelle2 aus dem Worksheet 2)?
Viele Grüße Marcus
Anzeige
Ändere im Initialize das Laden der Listbox so:
22.12.2022 10:24:57
Alwin
.List = Tabelle2.Range("A2:B4").Value
AW: Ändere im Initialize das Laden der Listbox so:
22.12.2022 10:33:02
Marcus
Klasse, vielen Dank. Eine kleine Sache hätte ich noch, entschuldige bitte. Wenn ich Excel schließe und wieder öffne und die Listbox öffne, sind die bearbeiteten Texte wieder gelöscht. Funktioniert das, dass die in der Listbox hinterlegt bleiben und das die Texte die in der Zelle stehen und die Userform öffne, die schon als markiert wieder aufgerufen werden?
Wenn du zu aufwendig ist, ist das kein Problem.
Vielen Dank nochmal für deine Unterstützung.
Anzeige
;
Anzeige

Infobox / Tutorial

Listbox-Daten übergeben und bearbeiten in Excel


Schritt-für-Schritt-Anleitung

  1. Userform erstellen: Erstelle eine Userform in Excel mit einer Listbox und einer TextBox.
  2. Listbox initialisieren: Im Code der Userform, im UserForm_Initialize, lade die ersten drei Einträge aus deiner Tabelle (z.B. Tabelle2):
    With ListBox1
       .List = Tabelle2.Range("A2:B4").Value
       .ColumnWidths = "30;300"
    End With
  3. Daten übergeben: Füge einen Button hinzu, der die ausgewählten Daten in die Zielzelle (z.B. C2 in Tabelle1) schreibt:
    Dim i As Integer
    Dim Daten As String
    For i = 0 To ListBox1.ListCount - 1
       If ListBox1.Selected(i) Then Daten = Daten & " " & ListBox1.List(i, 1)
    Next
    Sheets("Tabelle1").Range("C2").Value = Mid(Daten, 2)
  4. Text ändern: Implementiere einen Doppelklick auf die Listbox, um den Text in der TextBox zu ändern. Speichere die Änderungen zurück in die Listbox:
    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
       With ListBox1
           TextBox1 = .List(.ListIndex, 1)
           iZeile = .ListIndex
       End With
    End Sub
  5. Zusatzpunkte hinzufügen: Erlaube es dem Benutzer, geänderte Texte der Listbox hinzuzufügen, ohne den Originalkatalog zu verändern.

Häufige Fehler und Lösungen

  • Userform lässt sich nicht öffnen: Überprüfe die Datei-Eigenschaften. Klicke mit der rechten Maustaste auf die Datei, gehe zu Eigenschaften und aktiviere "Inhalt entsperren".
  • Daten verschwinden beim Schließen von Excel: Stelle sicher, dass du die geänderten Texte in einer separaten Datenstruktur speicherst, wenn die Userform geschlossen wird.
  • Listbox zeigt nicht die richtigen Daten an: Achte darauf, dass der Range in UserForm_Initialize korrekt gesetzt ist (z.B. Range("A2:B4")).

Alternative Methoden

  • Verwendung von Arrays: Anstelle von ListBox1.List kannst du auch ein Array verwenden, um die Listbox-Daten dynamisch zu manipulieren.
  • Datenbindung: Anstelle des manuellen Ladens der Daten könntest du auch eine Datenbindung an die Listbox verwenden.

Praktische Beispiele

  • Beispiel für das Hinzufügen eines neuen Eintrags: Wenn ein Benutzer einen Text manuell ändert, kannst du ihn mit einem Button in die Listbox einfügen:
    ListBox1.AddItem TextBox1.Text
  • Beispiel für das Entfernen eines Eintrags: Ermögliche es den Benutzern, einen Eintrag abzuwählen und aus der Listbox zu entfernen:
    If ListBox1.Selected(i) Then ListBox1.RemoveItem i

Tipps für Profis

  • Verwende Option Explicit: Dies hilft, Fehler durch Tippfehler in Variablennamen zu vermeiden.
  • Dokumentation: Kommentiere deinen Code ausreichend, damit andere Benutzer oder Du selbst später den Code besser verstehen.
  • Testen: Teste die Userform regelmäßig, um sicherzustellen, dass Änderungen nicht zu unerwarteten Fehlern führen.

FAQ: Häufige Fragen

1. Wie kann ich die Userform automatisch öffnen, wenn ich auf eine Zelle klicke?
Du kannst das Worksheet_SelectionChange-Ereignis verwenden, um die Userform zu öffnen, wenn eine bestimmte Zelle ausgewählt wird.

2. Wie speichere ich die geänderten Texte dauerhaft?
Du kannst die geänderten Texte in einem versteckten Arbeitsblatt oder in einer separaten Datei speichern und beim Öffnen der Userform wieder laden.

3. Warum funktioniert die Listbox nicht wie erwartet?
Überprüfe, ob die Datenquelle korrekt gesetzt ist und ob die Listbox-Elemente korrekt geladen werden.

4. Kann ich die Listbox auch mit Daten aus einer externen Quelle füllen?
Ja, du kannst Daten aus einer externen Datenbank oder einer anderen Excel-Datei laden, indem du die entsprechenden Verbindungen herstellst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige