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

Userform zwei Listboxes gemeinsam scrollen

Forumthread: Userform zwei Listboxes gemeinsam scrollen

Userform zwei Listboxes gemeinsam scrollen
12.05.2017 17:20:42
Peter
Hallo ihr Excelspezialisten,
jetzt habe ich eine für mich gesehen spezielle Frage.
Ich habe eine UF mit zwei Listboxes. Ist es möglich, dass diese synchron gescrollt werden können?
Besten Dank für Eure Hilfe.
Gruss
Peter
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform zwei Listboxes gemeinsam scrollen
12.05.2017 17:28:13
ChrisL
Hi Peter
Der Chef-Googler schlägt zu ;)
https://www.experts-exchange.com/questions/22847861/vba-synchronize-2-listbox-scrollbars.html
Private nFocus As Long

Private Sub CommandButton1_Click()
For X = 1 To 300
ListBox1.AddItem "abc " & Rnd()
ListBox2.AddItem "abc " & Rnd()
Next X
Do While UserForm1.Visible
DoEvents
If nFocus = 1 Then
ListBox2.TopIndex = ListBox1.TopIndex
ElseIf nFocus = 2 Then
ListBox1.TopIndex = ListBox2.TopIndex
End If
Loop
End Sub

Private Sub ListBox1_Enter()
nFocus = 1
End Sub

Private Sub ListBox2_Enter()
nFocus = 2
End Sub

Ich hätte nicht gedacht, dass es geht und würde auch nicht zu solchen "Spielereien" raten. Alternative: ListBox mit zwei Spalten.
cu
Chris
Anzeige
AW: Userform zwei Listboxes gemeinsam scrollen
13.05.2017 03:45:42
Peter
Guten Morgen Chris,
besten Dank für Deine Antwort. Ganz blicke ich noch nicht durch, wie ich dies installieren soll.
Warum würdest Du zu solchen "Spielereien" nicht raten?
Problem ich habe eine Tabelle zum Ausfüllen mit 41 Spalten. Diese soll zur Bearbeitung betrachtet werden können. Ich habe hierzu eine Userform mit zwei Listboxes angelegt.
ListBox1 mit Spalte A bis Spalte U
ListBox2 mit Spalte A und Spalte V bis Spalte AO.
Jeweils ca. 70 bis 100 Zeilen.
Diese beiden ListBoxes sind untereinander und sollten über eine der beiden synchron gescrollt werden.
Daher meine spezielle Frage!!!
Oder kannst Du mir eine andere Lösung für mein Problem benennen?
Besten Dank für Deine Hilfe.
Gruss
Peter
Anzeige
AW: Userform zwei Listboxes gemeinsam scrollen
13.05.2017 08:33:39
Hajo_Zi
Hallo Peter,
wähle einen Eintrag aus und Listbox2.listindex=listbox1.listindex

AW: Userform zwei Listboxes gemeinsam scrollen
13.05.2017 17:30:38
Werner
Hallo Peter,
@Chris: nette Spielerei
wie befüllst du denn deine beiden Listboxen? Mit RowSource im Eigenschaftenfenster der jeweiligen ListBox?
Ich habs mal getestet, funktioniert tatsächlich - hätte ich auch nicht gedacht.
Ich habe zum Testen eine Userform1 angelegt mit zwei ListBoxen -ListBox1 und ListBox2
Die beiden ListBoxen werden über das jeweilige Eigenschaftenfenster mit RowSource mit Daten gefüllt.
Den folgenden Code komplett ins Codefenster der Userform1 kopieren:
Doppelklick auf die UserForm1 und Code dann rechts ins Codefenster kopieren.
Private nFocus As Long
Private Sub ListBox1_Enter()
nFocus = 1
End Sub
Private Sub ListBox2_Enter()
nFocus = 2
End Sub
Private Sub UserForm_Activate()
Do While UserForm1.Visible
DoEvents
If nFocus = 1 Then
ListBox2.TopIndex = ListBox1.TopIndex
ElseIf nFocus = 2 Then
ListBox1.TopIndex = ListBox2.TopIndex
End If
Loop
End Sub
Gruß Werner
Anzeige
AW: Userform zwei Listboxes gemeinsam scrollen
14.05.2017 10:10:33
ChrisL
Hi Peter
Probiere mal Werners Variante, da ist der Code schon im Activate-Ereignis integriert.
Tabellen und Steuerelemente bieten standardmässig schon unzählige Gestaltungsmöglichkeiten. In deinem Fall wäre eine mehrspaltige ListBox die bessere Wahl, wobei ich dein Problem mit den 40+ Spalten noch nicht kannte.
Vom Standard abweichende Lösungen sind nicht immer intuitiv und (liegt vielleicht an mir) bleiben meistens ein "gebastel". Im vorliegenden Code läuft permanent eine Endlosschleife damit auf das Scrollen reagiert werden kann. Kein Problem, bis es plötzlich doch zum Problem wird, weil es z.B. einen anderen Prozess stört.
Wenn eine Tabelle so gross ist, dass man darin navigieren muss, dann ist das Tabellenformat perfekt. Mit Autofilter können die meisten umgehen und Ctrl+F kennt inzwischen auch jeder. Zugegeben nicht so sexy wie zwei synchronisierte ListBox, aber dafür stabil, einfach, wartungsarm... ;)
cu
Chris
Anzeige
;
Anzeige

Infobox / Tutorial

Userform mit zwei Listboxes synchron scrollen


Schritt-für-Schritt-Anleitung

Um zwei Listboxes in einer Userform synchron scrollen zu lassen, kannst Du den folgenden VBA-Code verwenden:

  1. Öffne die Excel-Datei und gehe in den VBA-Editor (Alt + F11).
  2. Erstelle eine Userform und füge zwei Listboxes (ListBox1 und ListBox2) hinzu.
  3. Füge einen CommandButton hinzu, um die Listboxen mit Daten zu befüllen.
  4. Kopiere den folgenden VBA-Code in das Codefenster der Userform:
Private nFocus As Long

Private Sub CommandButton1_Click()
    For X = 1 To 300
        ListBox1.AddItem "abc " & Rnd()
        ListBox2.AddItem "abc " & Rnd()
    Next X
End Sub

Private Sub ListBox1_Enter()
    nFocus = 1
End Sub

Private Sub ListBox2_Enter()
    nFocus = 2
End Sub

Private Sub UserForm_Activate()
    Do While UserForm1.Visible
        DoEvents
        If nFocus = 1 Then
            ListBox2.TopIndex = ListBox1.TopIndex
        ElseIf nFocus = 2 Then
            ListBox1.TopIndex = ListBox2.TopIndex
        End If
    Loop
End Sub
  1. Schließe den VBA-Editor und teste die Userform, indem Du sie ausführst.

Häufige Fehler und Lösungen

  • Fehler: Listboxen scrollen nicht synchron.

    • Lösung: Stelle sicher, dass der Code im UserForm_Activate-Ereignis korrekt implementiert ist und dass nFocus richtig gesetzt wird, wenn Du in die Listboxes klickst.
  • Fehler: Userform friert ein.

    • Lösung: Achte darauf, dass der Code keine Endlosschleife erzeugt oder dass DoEvents korrekt verwendet wird, um die Benutzeroberfläche nicht zu blockieren.

Alternative Methoden

Eine alternative Methode, um die Daten in den Listboxes zu verwalten, wäre die Verwendung einer mehrspaltigen ListBox. Hierbei kannst Du die Daten in einer einzigen ListBox anzeigen, was möglicherweise stabiler und einfacher zu handhaben ist:

  1. Füge eine ListBox hinzu und stelle im Eigenschaftenfenster die ColumnCount auf die Anzahl der Spalten ein.
  2. Fülle die ListBox mit Daten aus der Tabelle, indem Du die RowSource-Eigenschaft nutzt.

Praktische Beispiele

Wenn Du eine Tabelle mit vielen Spalten hast, wie in Peters Beispiel mit 41 Spalten, kannst Du die Daten in einer mehrspaltigen ListBox anzeigen. Dies könnte so aussehen:

ListBox1.RowSource = "A1:U100"
ListBox2.RowSource = "A1:AO100"

Hiermit füllst Du die beiden Listboxes in der Userform direkt mit Daten aus einem Excel-Arbeitsblatt.


Tipps für Profis

  • Verwende With...End With, um den Code effizienter zu gestalten, wenn Du mehrere Eigenschaften einer ListBox bearbeiten möchtest.
  • Denke daran, dass große Datenmengen in Listboxes die Performance beeinträchtigen können. Überlege, ob es sinnvoller wäre, die Daten in einer Tabelle zu filtern oder zu sortieren, anstatt sie in Listboxes anzuzeigen.

FAQ: Häufige Fragen

1. Wie kann ich die Listboxes mit einer Tabelle verknüpfen? Um eine ListBox mit einer Tabelle zu verknüpfen, kannst Du die RowSource-Eigenschaft verwenden, um einen Bereich in der Tabelle anzugeben.

2. Kann ich die Listboxes auch in einer Excel-Version vor 2016 verwenden? Ja, der bereitgestellte VBA-Code funktioniert auch in früheren Versionen von Excel, solange die Userform und ListBoxen vorhanden sind.

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