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

Forumthread: Listbox mit Überschriften

Listbox mit Überschriften
29.01.2015 15:08:21
Christoph
Hallo,
ich habe folgendes Makro für eine Listbox innerhalb einer userform. Ich habe nun das Problem, dass ich gerne die Überschriften der jeweiligen Spalte auch in der Listbox abbilden würde.
Nachfolgend das Makro:
Private Sub UserForm_Initialize()
Dim lZeile As Long
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
TextBox4 = ""
TextBox5 = ""
TextBox6 = ""
ListBox1.Clear
lZeile = 6
With Me.ListBox1
.ColumnCount = 3
.ColumnWidths = "2,5cm;2,5cm;2,5cm"
Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value))  ""
.AddItem
.List(.ListCount - 1, 0) = Trim(CStr(Tabelle1.Cells(lZeile, 1).Value))
.List(.ListCount - 1, 1) = Trim(CStr(Tabelle1.Cells(lZeile, 2).Value))
.List(.ListCount - 1, 2) = Trim(CStr(Tabelle1.Cells(lZeile, 5).Value))
lZeile = lZeile + 1
Loop
End With
End Sub

Den Befehl.ColumnHeads = True kann ich ja leider nur verwenden, wenn ich die Listbox mit .RowSource befülle. Der Bereich ist allerdings nicht variabel sondern wird über die userform auch mit neuen Einträgen erweitert.
Ist in Falle meines Makros (welches ich mit Foren- und Buchhilfe erstellt habe - ich bin mehr Laie als Profi) auch eine andere Lsg. möglich?
Gerne nehme ich Tipps entgegen. Eine vollständige Lsg ist nicht notwendig. Ich möchte meinen Horizont ja erweitern.
Tausend Dank und einen guten Tag.
VG, Christoph

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Listbox mit Überschriften
29.01.2015 15:33:15
Rudi
Hallo,
setze über die Listbox Labels mit den Überschriften.
Gruß
Rudi

AW: Listbox mit Überschriften
29.01.2015 15:44:36
Christoph
Eine Möglichkeit dass das Makro sich die Überschriften selber ziehe alla columheads. ist mit meinem Makro nicht möglich, oder? Das heißt ich kommme nicht um Labels herum?
Danke Danke

Anzeige
AW: Listbox mit Überschriften
29.01.2015 15:50:33
Rudi
Hallo,
du könntest die Daten für die LBx erst in ein Array einlesen, dieses inkl. Überschriften in ein ausgeblendetes Blatt schreiben und die RowSource entsprechend setzen. Dann funktioniert auch ColumnHeads.
Gruß
Rudi

AW: Listbox mit Überschriften
29.01.2015 16:25:26
Daniel
Die eingebauten Überschriften bei Listboxen funktionieren nur, wenn du die Listbox mit .RowSource direkt mit einem Zellbereich verknüpst.
Dann wird die Zeile direkt über dem Bereich als Überschrift verwendet.
wenn ich eine Listbox mit Überschrift benötigte, dann erstelle ich die Überschriften nicht mit Labels, sondern erstelle eine zweite Listbox und platziere sie direkt über der ersten Listbox.
Diese Listbox enthält dann eine Datenzeile und als Werte die Überschriftentexte.
Vorteil dieser Methode ist, dass du einfach nur die ColumnWidth aus der einen Listbox in die andere kopieren musst, damit die Überschriften passend über den Spalten stehen.
Damit entfällt das aufwendige Platzieren von Hand, du kannst dann das angleichen einfach per Code machen, auch nach veränderungen:
ListboxÜB.Top = Listbox1.Top - ListboxÜB.Height
ListboxÜB.Left = Listbox1.Left
ListboxÜB.Width = Listbox1.Width
ListboxÜB.ColumnWidth = Listbox1.ColumnWidth
mit diesen vier einfachen Codezeilen sind dann deine Überschriften perfekt über der Datenlistbox ausgerichtet.
Gruß Daniel

Anzeige
Genau so mache ich es auch immer :-) oT
29.01.2015 17:34:41
Matthias

Gute Idee, merk ich mir. owT
29.01.2015 19:46:38
Rudi
;
Anzeige
Anzeige

Infobox / Tutorial

Listbox mit Überschriften in Excel UserForms


Schritt-für-Schritt-Anleitung

  1. Öffne das VBA-Editor in Excel (Alt + F11).

  2. Erstelle eine UserForm und füge eine ListBox (z.B. ListBox1) hinzu.

  3. Füge das folgende Makro in das UserForm ein, um die ListBox zu initialisieren:

    Private Sub UserForm_Initialize()
       Dim lZeile As Long
       TextBox1 = ""
       TextBox2 = ""
       TextBox3 = ""
       TextBox4 = ""
       TextBox5 = ""
       TextBox6 = ""
       ListBox1.Clear
       lZeile = 6
       With Me.ListBox1
           .ColumnCount = 3
           .ColumnWidths = "2,5cm;2,5cm;2,5cm"
           Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> ""
               .AddItem
               .List(.ListCount - 1, 0) = Trim(CStr(Tabelle1.Cells(lZeile, 1).Value))
               .List(.ListCount - 1, 1) = Trim(CStr(Tabelle1.Cells(lZeile, 2).Value))
               .List(.ListCount - 1, 2) = Trim(CStr(Tabelle1.Cells(lZeile, 5).Value))
               lZeile = lZeile + 1
           Loop
       End With
    End Sub
  4. Füge Labels für die Überschriften manuell über der ListBox hinzu, da die Verwendung von .ColumnHeads in diesem Fall nicht möglich ist.


Häufige Fehler und Lösungen

  • Fehler: Die ListBox zeigt keine Daten an.

    • Lösung: Stelle sicher, dass der Zellbereich, den Du abfragst, tatsächlich Daten enthält und dass die lZeile korrekt gesetzt ist.
  • Fehler: Überschriften sind nicht sichtbar.

    • Lösung: Wenn Du die Überschriften nicht manuell hinzufügst, wird die ListBox keine anzeigen. Verwende Labels über der ListBox oder eine zweite ListBox für die Überschriften.

Alternative Methoden

Eine alternative Methode ist, die Daten für die ListBox in ein Array einzulesen und anschließend die RowSource auf ein ausgeblendetes Blatt zu setzen. Dies ermöglicht die Verwendung von .ColumnHeads. Hier ist ein Beispiel:

  1. Daten in ein Array einlesen:

    Dim DataArray() As Variant
    DataArray = Tabelle1.Range("A6:C" & Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row).Value
  2. Daten in ein ausgeblendetes Blatt kopieren und RowSource setzen:

    Worksheets("HiddenSheet").Range("A1").Resize(UBound(DataArray, 1), UBound(DataArray, 2)).Value = DataArray
    ListBox1.RowSource = "HiddenSheet!A1:C" & UBound(DataArray, 1)

Praktische Beispiele

Hier ist ein praktisches Beispiel für die Verwendung zweier ListBoxen, eine für die Daten und eine für die Überschriften:

  1. Füge eine zweite ListBox (z.B. ListBoxÜB) hinzu, die die Überschriften enthält.
  2. Setze die Position der Überschriften-ListBox mit folgendem Code:

    ListBoxÜB.Top = ListBox1.Top - ListBoxÜB.Height
    ListBoxÜB.Left = ListBox1.Left
    ListBoxÜB.Width = ListBox1.Width
    ListBoxÜB.ColumnWidth = ListBox1.ColumnWidth

Tipps für Profis

  • Verwende dynamische Arrays, um die Effizienz des Codes zu erhöhen, besonders wenn Du mit großen Datenmengen arbeitest.
  • Gestalte die UserForm ansprechend durch die Verwendung von Farben und Schriftarten, um die Benutzerfreundlichkeit zu verbessern.
  • Berücksichtige die Performance, indem Du die ListBox nur aktualisierst, wenn Änderungen an den zugrunde liegenden Daten stattfinden.

FAQ: Häufige Fragen

1. Kann ich auch andere Steuerelemente anstelle von ListBoxen verwenden? Ja, Du kannst auch ComboBoxen oder Tabellen verwenden, abhängig von Deinen Anforderungen.

2. Wie kann ich die ListBox nach bestimmten Kriterien filtern? Verwende eine Schleife, um die Daten zu durchsuchen und nur die gewünschten Einträge zur ListBox hinzuzufügen.

3. Ist es möglich, die ListBox zu sortieren? Ja, Du kannst die Daten vor dem Hinzufügen zur ListBox sortieren, indem Du eine Sortierfunktion verwendest oder die Daten in ein Array einliest, das Du sortierst, bevor Du es in die ListBox einfügst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige