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

Forumthread: Listboxen mit daten aus anderem Tabellenblatt füllen und eintragen.

Listboxen mit daten aus anderem Tabellenblatt füllen und eintragen.
22.10.2019 12:26:42
Flip
Hallo zusammen
Ich möchte Werte aus zwei voneinander abhängigen Listboxen mittels Doppelklick und cmd Button in ein Tabellenblatt eintragen. Die Listboxen sollen sich anhand von Spalten aus einem anderen Tabellenblatt füllen. Eingetragen werden immer nur die Werte aus der 2 Listbox.
Ich habe mir die Beispieldateien: https://www.herber.de/mailing/Zweite_ListBox_in_Abhaengigkeit_der_ersten_fuellen.htm
https://www.herber.de/mailing/Wert_aus_UserForm-ListBox_in_Tabellenblatt_eintragen.htm
als Grundlage genommen.
Allerdings komme ich einfach nicht mit der Zusammenführung klar.
In der Beispieldatei öffnet sich das Dialogfeld im selben Tabellenblatt. Ich möchte allerdings aus einem anderen Tabellenblatt auf diese Tabellenblatt zugreifen (Tabelle1)
Den Verweis auf die erste Listbox bekomme ich beim initialisieren noch hin. Die zweite bleibt allerdings immer leer. Der Umbau der Userform ist auch nicht das Problem. Ich möchte allerdings wenn möglich durch Doppelklick des gewählten Wertes in der Listbox das dieser in die erste freie Zeile beginnend bei B17 im Tabellenblatt eingetragen wird. Wenn es mit Doppelklick nicht möglich ist dann natürlich mit dem Button cmdEintragen
Vielen Dank schonmal im Voraus!!
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listboxen mit daten aus anderem Tabellenblatt
22.10.2019 13:32:51
Flip
Hab das mit dem eintragen hinbekommen.
Allerdings schaffe ich es nicht das sich die zweite Listbox im anderen Tabellenblatt füllt. Wenn ich die Userform in dem Tabellenblatt öffne wo ich die Werte stehen haben funktioniert alles.
Hier der Code:
Option Explicit
Private Sub cmdAbbrechen_Click()
Unload Me
End Sub
Private Sub cmdEintragen_Click()
Dim iRow As Integer
If IsEmpty(Cells(1, 1)) Then
iRow = 1
Else
iRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
End If
Cells(iRow, 1) = lstB.Value
End Sub
Private Sub lstA_Click()
Dim iRow As Integer
iRow = 2
lstB.Clear
Do Until IsEmpty(Cells(iRow, 1))
lstB.AddItem Cells(iRow, lstA.ListIndex + 1)
iRow = iRow + 1
Loop
End Sub
Private Sub UserForm_Initialize()
lstA.Column = Sheets("Tabelle1").Range("A1").CurrentRegion.Rows(1).Value
End Sub

Anzeige
AW: Listboxen mit daten aus anderem Tabellenblatt
22.10.2019 14:05:32
Flip
Ok ein weiteres Problem welches ich gerade bemerkt habe ist:
Wenn in der Spalte A z.B 4 Werte eingetragen sind und in Spalte B z.B 7 werden in die Listbox trotzdem nur 4 Werte angezeigt.
Spalten können ja unzählige sein. in der ersten Zeile sollen immer nur die Überschriften (Kategorien) stehen und darunter eben die zugehörigen Artikel. mir sollen dann in der 2 Listbox immer nur die jeweiligen Artikel der angewählten Kategorie angezeigt werden. In dem Blatt "Tabelle2" funktioniert das ganz nicht, was eig das Ziel sein sollte. Ich häng mal eine Beispieldatei dazu.
https://www.herber.de/bbs/user/132655.xls
Anzeige
AW: Listboxen mit daten aus anderem Tabellenblatt
22.10.2019 16:23:14
Flip
Konnte das Problem jetzt über andere Wege doch selbst lösen. Hab auch noch eine weitere ListBox hinzugefügt. Vl gibt es eine bessere Lösung aber soweit funktioniert es mal.
Private Sub cmdAbbrechen_Click()
Unload Me
End Sub
Private Sub cmdEintragen_Click()
Dim iRow As Integer
If IsEmpty(Cells(1, 1)) Then
iRow = 1
Else
iRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
End If
Cells(iRow, 1) = ListBox2.Value
End Sub
Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim iRow As Integer
If IsEmpty(Cells(1, 1)) Then
iRow = 1
Else
iRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
End If
Cells(iRow, 1) = ListBox2.Value
End Sub
Private Sub ListBox1_Click()
ListBox2.Clear
ListBox3.Clear
For i = 10 To Sheets(1).Cells(Cells.Rows.Count, ListBox1.ListIndex + 1).End(xlUp).Row
ListBox2.AddItem Sheets(1).Cells(i, ListBox1.ListIndex + 1)
Next
End Sub
Private Sub ListBox2_Click()
ListBox3.Clear
For i = 3 To 9
ListBox3.AddItem Sheets(1).Cells(i, ListBox1.ListIndex + 1)
Next
End Sub
Private Sub UserForm_Initialize()
For i = 1 To Sheets(1).Cells(1, Cells.Columns.Count).End(xlToLeft).Column
ListBox1.AddItem Sheets(1).Cells(1, i)
Next
End Sub

Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Listboxen mit Daten aus einem anderen Tabellenblatt füllen und eintragen


Schritt-für-Schritt-Anleitung

  1. UserForm erstellen: Öffne Excel und erstelle eine UserForm. Füge zwei Listboxen (lstA und lstB) und einen Button (cmdEintragen) hinzu.

  2. Verbindung zur Datenquelle: Stelle sicher, dass Deine Daten in "Tabelle1" korrekt strukturiert sind. Die erste Zeile sollte die Überschriften (Kategorien) enthalten und die darunterliegenden Zeilen die zugehörigen Werte.

  3. Code für die UserForm: Füge den folgenden VBA-Code in die UserForm ein:

    Option Explicit
    
    Private Sub cmdAbbrechen_Click()
       Unload Me
    End Sub
    
    Private Sub cmdEintragen_Click()
       Dim iRow As Integer
       If IsEmpty(Cells(1, 1)) Then
           iRow = 1
       Else
           iRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
       End If
       Cells(iRow, 1) = lstB.Value
    End Sub
    
    Private Sub lstA_Click()
       Dim iRow As Integer
       iRow = 2
       lstB.Clear
       Do Until IsEmpty(Cells(iRow, 1))
           lstB.AddItem Cells(iRow, lstA.ListIndex + 1)
           iRow = iRow + 1
       Loop
    End Sub
    
    Private Sub UserForm_Initialize()
       lstA.Column = Sheets("Tabelle1").Range("A1").CurrentRegion.Rows(1).Value
    End Sub
  4. Listboxen aktualisieren: Wenn Du auf die erste Listbox (lstA) klickst, wird die zweite Listbox (lstB) automatisch mit den entsprechenden Werten gefüllt.

  5. Daten eintragen: Du kannst die ausgewählten Werte durch einen Doppelklick auf die zweite Listbox (lstB) oder durch Klicken auf den Button cmdEintragen in die erste freie Zeile von "Tabelle1" eintragen.


Häufige Fehler und Lösungen

  • Leere Listbox: Wenn die zweite Listbox (lstB) leer bleibt, überprüfe, ob die Daten in "Tabelle1" korrekt angeordnet sind. Achte darauf, dass die Werte unter der richtigen Kategorie stehen.

  • Werte nicht vollständig angezeigt: Wenn nur einige Werte in der Listbox angezeigt werden, stelle sicher, dass Du mit Cells auf die richtige Zeile zugreifst. Die Schleife sollte alle relevanten Zeilen durchlaufen.

  • Falsches Tabellenblatt: Wenn die UserForm nicht die Daten aus "Tabelle1" anzeigt, überprüfe den Namen des Tabellenblatts im VBA-Code und stelle sicher, dass es korrekt referenziert wird.


Alternative Methoden

Eine alternative Methode zur Befüllung der Listboxen könnte die Verwendung von Datenvalidierung und Dropdown-Listen sein. Dabei kannst Du ebenfalls Werte aus einem anderen Tabellenblatt nutzen und sie in eine Zelle eintragen, anstatt eine UserForm zu verwenden.


Praktische Beispiele

Hier ist ein einfaches Beispiel, um die Funktionsweise zu demonstrieren. Angenommen, Du hast folgende Daten in "Tabelle1":

Kategorie Artikel
Obst Apfel
Obst Banane
Gemüse Karotte
Gemüse Brokkoli

In diesem Fall wird die erste Listbox (lstA) die Kategorien "Obst" und "Gemüse" anzeigen. Wenn Du "Obst" auswählst, wird die zweite Listbox (lstB) mit "Apfel" und "Banane" gefüllt.


Tipps für Profis

  • Dynamisches Füllen: Verwende Range-Objekte, um Listboxen dynamisch zu füllen, anstatt feste Zellbezüge zu verwenden. So bleibt Dein Code flexibler.

  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung im VBA-Code, um unerwartete Fehler beim Zugriff auf Zellen oder beim Eintragen von Werten zu vermeiden.

  • Benutzerfreundlichkeit: Nutze Tooltipps oder Labels, um den Benutzern zu helfen, zu verstehen, welche Werte sie auswählen sollen.


FAQ: Häufige Fragen

1. Wie kann ich die UserForm so anpassen, dass sie beim Öffnen die Listboxen automatisch füllt?
Du kannst die Methode UserForm_Initialize verwenden, um die Listboxen beim Laden der UserForm automatisch mit Werten zu befüllen.

2. Ist es möglich, die Listboxen mit Werten aus mehreren Tabellenblättern zu füllen?
Ja, das ist möglich. Du kannst die entsprechenden Datenquellen in Deinem VBA-Code angeben und die Listboxen entsprechend füllen.

3. Wie kann ich die Werte aus der Listbox in einer bestimmten Zelle eintragen?
Du kannst die Variable iRow anpassen, um die Werte in eine spezifische Zelle einzutragen, anstatt immer in die erste freie Zeile.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige