Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Möglichkeit Range an Listbox zu übergeben?

Forumthread: Möglichkeit Range an Listbox zu übergeben?

Möglichkeit Range an Listbox zu übergeben?
Martin
Hallo Excelfreunde,
ich verwende eine UserForm als Suchmaske, die mir aus hunderten von Zeilen das Suchergebnis über eine Listbox anzeigt. Die Eigenschaft der UserForm ShowModal ist auf "False" gestellt, daher können im Hintergrund also weiterhin die Daten bearbeitet (z. B. Zeilen hinzugefügt / gelöscht) werden.
Meine Frage: Kann ich einem Listbox-Eintrag (wie einem Array z.B. "Set ArrBereich(5) = Cells(15,3)") eine Zelle zuweisen? Mein Ziel wäre es, dass ich beim Klick auf den Listbox-Eintag dann in die ensprechende Zeile springe. Im Augenblick habe ich das über eine Suchfunktion mit Find gelöst, aber da manche Datensätze doppelt vorkommen, ist das keine optimale Lösung.
Viele Grüße
Martin
Userbild
Anzeige

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

Betreff
Benutzer
Anzeige
AW: Möglichkeit Range an Listbox zu übergeben?
21.03.2010 22:46:13
Uduuh
Hallo,
wie wird die LB gefüllt?
Evtl. kannst du den Listindex nutzen.
Gruß aus’m Pott
Udo

AW: Möglichkeit Range an Listbox zu übergeben?
21.03.2010 23:04:07
Martin
Hallo Udo,
die Listbox wird ganz einfach nach dem Prinzip "ListBox1.List(0, 0) = Cells(x, y).Text" gefüllt. Mein Wunsch geht in die Richtung "Set Listbox1.List(x, 7) = Cells(x, y)". Ich möchte mit Absicht nicht die Zellenadresse speichern, da diese aufgrund der UserForm-Eigenschaft "ShowModal = False" sich bei Änderungen im Hintergrund ändern könnte.
Viele Grüße
Martin
Anzeige
Beispiel
22.03.2010 02:23:10
Uwe
Hallo Martin,
hier mal ein Beispiel:

'  Modul:  UserForm1  Typ = Userform
Option Explicit
Dim rngFound As Variant
Private Sub CommandButton1_Click()
Dim rngTemp As Range
ReDim rngFound(0) As Range
ListBox1.Clear
For Each rngTemp In Range("A1:A10")
If rngTemp.Value Like TextBox1 Then
ListBox1.AddItem rngTemp.Value
ReDim Preserve rngFound(UBound(rngFound) + 1)
Set rngFound(UBound(rngFound)) = rngTemp.EntireRow
End If
Next rngTemp
End Sub
Private Sub ListBox1_Change()
If ListBox1.ListIndex > -1 Then Application.Goto rngFound(ListBox1.ListIndex + 1)
End Sub
'  Modul:  Modul1  Typ = Allgemeines Modul
Option Explicit
Sub ZeigeForm()
UserForm1.Show 0
End Sub

https://www.herber.de/bbs/user/68702.xls
Gruß Uwe
Anzeige
Vielen Dank, das habe ich gesucht!
22.03.2010 09:17:49
Martin
Hallo Uwe,
ich hatte schon Sorge, dass ich mich Problem unverständlich formuliert hätte. Deine Lösung mit dem "externen" rngFound-Array ist sehr interessant!
Viele Grüße
Martin
ich würde es eventuell so machen...
22.03.2010 08:33:23
Tino
Hallo,
hier ein Beispiel wie ich es angehen würde.
https://www.herber.de/bbs/user/68704.xls
Gruß Tino
Anzeige
AW: ich würde es eventuell so machen...
22.03.2010 09:37:59
Martin
Hallo Tino,
vielen Dank für deine Mühe. Ich muss aber zugeben, dass ich mit dem Code von Uwe besser klarkomme. Ich bin immer für jeden Vorschlag sehr dankbar und weiß, dass du hier im Forum sehr aktiv bist und zu den Profis zählst. Ich freue mich, dass ich hier bei Fragen stets so kompetent beraten werden!
Viele Grüße
Martin
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Listbox in Excel: Range übergeben und Zeilen springen


Schritt-für-Schritt-Anleitung

Um die Range an eine Listbox in einer UserForm zu übergeben und beim Klicken auf einen Eintrag in die entsprechende Zeile zu springen, kannst du folgende Schritte befolgen:

  1. UserForm erstellen: Öffne Excel und erstelle eine neue UserForm. Füge eine Listbox (ListBox1) und einen Button (CommandButton1) hinzu.

  2. Daten in die Listbox laden: Verwende den folgenden VBA-Code, um die Listbox mit Daten zu füllen. Der Code durchläuft einen festgelegten Bereich (z.B. A1:A10) und fügt die passenden Werte hinzu.

    Dim rngFound As Variant
    
    Private Sub CommandButton1_Click()
       Dim rngTemp As Range
       ReDim rngFound(0) As Range
       ListBox1.Clear
       For Each rngTemp In Range("A1:A10")
           If rngTemp.Value Like TextBox1 Then
               ListBox1.AddItem rngTemp.Value
               ReDim Preserve rngFound(UBound(rngFound) + 1)
               Set rngFound(UBound(rngFound)) = rngTemp.EntireRow
           End If
       Next rngTemp
    End Sub
  3. Zeilen springen: Füge den folgenden Code in die ListBox1_Change-Ereignisprozedur ein, um bei Auswahl eines Listbox-Eintrags zur entsprechenden Zeile zu springen.

    Private Sub ListBox1_Change()
       If ListBox1.ListIndex > -1 Then Application.Goto rngFound(ListBox1.ListIndex + 1)
    End Sub

Häufige Fehler und Lösungen

  • Fehler: Listbox bleibt leer
    Lösung: Stelle sicher, dass die CommandButton1_Click-Prozedur korrekt ausgeführt wird. Überprüfe, ob die TextBox1 Werte enthält, die im Bereich A1:A10 existieren.

  • Fehler: Anwendung stürzt ab
    Lösung: Überprüfe, ob du beim Zugriff auf rngFound den richtigen Index verwendest. Achte darauf, dass der Index nicht kleiner als 0 ist.


Alternative Methoden

Eine andere Methode, um Zeilen aus einer Excel-Tabelle in eine Listbox zu laden, besteht darin, die List-Eigenschaft direkt zu verwenden. Du kannst auch die AddItem-Methode in einer Schleife verwenden, um mehrere Werte hinzuzufügen.

For i = 1 To 10
    ListBox1.AddItem Cells(i, 1).Value
Next i

Praktische Beispiele

Hier ist eine einfache Anwendung, wie du die UserForm nutzen kannst:

  1. Füge eine TextBox hinzu, um nach bestimmten Werten zu filtern.
  2. Verwende den obigen Code, um nur die relevanten Werte in die Listbox zu laden.
  3. Wenn du auf einen Eintrag in der Listbox klickst, wird die Anwendung direkt zur relevanten Zeile in der Tabelle springen.

Tipps für Profis

  • Nutze die With-Anweisung, um den Code zu optimieren und die Lesbarkeit zu erhöhen. Zum Beispiel:

    With ListBox1
       .AddItem "Beispiel"
       .AddItem "Test"
    End With
  • Achte darauf, die ShowModal-Eigenschaft der UserForm auf False zu setzen, damit du gleichzeitig an den Daten arbeiten kannst, während die UserForm geöffnet ist.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Spalten in der Listbox anzeigen?
Du kannst die ColumnCount-Eigenschaft der Listbox verwenden, um mehrere Spalten zu aktivieren und entsprechende Werte in einer Schleife hinzuzufügen.

2. Was mache ich, wenn ich keine Daten in der Listbox sehe?
Überprüfe, ob der Filter in der TextBox korrekt funktioniert und dass der Bereich, den du durchsuchst, tatsächlich Daten enthält.

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