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

Spaltenbreite in Listbox

Forumthread: Spaltenbreite in Listbox

Spaltenbreite in Listbox
19.01.2004 16:57:11
J.Henseler
Hallo liebes Forum,
trotz umfangreicher Recherche und diverser eigener Versuche möchte ich euch letztendlich um Hilfe bitten.
Ich fülle eine Listbox automatisch mit dem Inhalt einer Tabelle, die ich vorher noch auswählen kann. Nun sind jedoch die Spaltenbreiten der 3 Tabellen unterschiedlich. Gibt es eine Möglichkeit, die Spaltenbreiten der Listbox automatisch anzupassen / zu definieren ? Wenn ich die Spaltenbreiten über Columnwidths manuell definiere passt diese zwar für eine Tabelle, ist aber für die anderen Tabellen zu unübersichtlich.
Außerdem die Frage: Wie kann ich in der Listbox nur die nicht leeren Spalten eines Bereichs anzeigen lassen ?

Private Sub UserForm_Initialize()
Dim Found As Range
Dim FirstAddress As String
Dim Search As String
Dim LoLetzte As Long
Dim LoI As Long
Dim ZuDurchsuchendesBlatt As Variant
Dim ZuDurchsuchendeSpalte As Variant
Dim Suchbeginn As Variant, Suchbereich As Variant, Suchende As Variant
ZuDurchsuchendesBlatt = UserForm3.ComboBox1.Value
ZuDurchsuchendeSpalte = Application.WorksheetFunction _
.Match(UserForm3.ComboBox2.Value, Sheets(ZuDurchsuchendesBlatt).Range("2:2"), 0)
Suchende = Chr(ZuDurchsuchendeSpalte + 64) & 65536
If ["Suchende"] = "" Then
LoLetzte = ["Suchende"].End(xlUp).Row
Else
LoLetzte = 65536
End If
Suchbereich = Chr(ZuDurchsuchendeSpalte + 64) & 3 & ":" & Chr(ZuDurchsuchendeSpalte + 64) & LoLetzte
Suchbeginn = Chr(ZuDurchsuchendeSpalte + 64) & 3
Search = UserForm3.TextBox1.Value
If Search = "" Then Exit Sub
With ListBox1
.ColumnWidths = " ????? "
End With
With Sheets(ZuDurchsuchendesBlatt).Range(Suchbereich)
Set Found = .Find(Search, Sheets(ZuDurchsuchendesBlatt).Range(Suchbeginn), , xlPart, , xlNext)
If Found Is Nothing Then Exit Sub
FirstAddress = Found.Address
ListBox1.AddItem Sheets(ZuDurchsuchendesBlatt).Cells(Found.Row, 2)
ListBox1.List(LoI, 1) = Sheets(ZuDurchsuchendesBlatt).Cells(Found.Row, 3)
ListBox1.List(LoI, 2) = Sheets(ZuDurchsuchendesBlatt).Cells(Found.Row, 4)
ListBox1.List(LoI, 3) = Sheets(ZuDurchsuchendesBlatt).Cells(Found.Row, 5)
ListBox1.List(LoI, 4) = Sheets(ZuDurchsuchendesBlatt).Cells(Found.Row, 6)
ListBox1.List(LoI, 5) = Sheets(ZuDurchsuchendesBlatt).Cells(Found.Row, 7)
ListBox1.List(LoI, 6) = Sheets(ZuDurchsuchendesBlatt).Cells(Found.Row, 8)
ListBox1.List(LoI, 7) = Sheets(ZuDurchsuchendesBlatt).Cells(Found.Row, 9)
ListBox1.List(LoI, 8) = Sheets(ZuDurchsuchendesBlatt).Cells(Found.Row, 10)
ListBox1.List(LoI, 9) = Found.Row
LoI = LoI + 1
Do
Set Found = .FindNext(Found)
If Found.Address = FirstAddress Then Exit Sub
ListBox1.AddItem Sheets(ZuDurchsuchendesBlatt).Cells(Found.Row, 2)
ListBox1.List(LoI, 1) = Sheets(ZuDurchsuchendesBlatt).Cells(Found.Row, 3)
ListBox1.List(LoI, 2) = Sheets(ZuDurchsuchendesBlatt).Cells(Found.Row, 4)
ListBox1.List(LoI, 3) = Sheets(ZuDurchsuchendesBlatt).Cells(Found.Row, 5)
ListBox1.List(LoI, 4) = Sheets(ZuDurchsuchendesBlatt).Cells(Found.Row, 6)
ListBox1.List(LoI, 5) = Sheets(ZuDurchsuchendesBlatt).Cells(Found.Row, 7)
ListBox1.List(LoI, 6) = Sheets(ZuDurchsuchendesBlatt).Cells(Found.Row, 8)
ListBox1.List(LoI, 7) = Sheets(ZuDurchsuchendesBlatt).Cells(Found.Row, 9)
ListBox1.List(LoI, 8) = Sheets(ZuDurchsuchendesBlatt).Cells(Found.Row, 10)
ListBox1.List(LoI, 9) = Found.Row
If Found.Row = LoLetzte Then Exit Sub
LoI = LoI + 1
Loop While Not Found Is Nothing
End With
End Sub

Ich hoffe, ihr könnt mir mit einem Lösungsansatz weiterhelfen oder mich zumindest auf die richtige Spur bringen.
MFG
Jörg
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spaltenbreite in Listbox
24.01.2004 01:39:14
Dieter Klemke
Hallo Jörg,
die Spaltenbreiten der ListBox kannst du z.B. so einstellen (hier für 4 Spalten):
ListBox1.ColumnWidths = "5,1cm;4,2cm;1,9cm;1,2cm"
Eine Automatik gibt es da meines Wissens nicht. Du musst die erforderlichen Breiten selbst aus den Tabellen ermitteln.
MfG
Dieter
Anzeige
;
Anzeige

Infobox / Tutorial

Spaltenbreite in Listbox anpassen


Schritt-für-Schritt-Anleitung

Um die Spaltenbreiten in einer Listbox in Excel VBA festzulegen, kannst du die ColumnWidths-Eigenschaft verwenden. Hier ist eine detaillierte Schritt-für-Schritt-Anleitung:

  1. Öffne den Visual Basic for Applications (VBA) Editor in Excel (Alt + F11).

  2. Erstelle ein neues UserForm oder wähle ein bestehendes aus.

  3. Füge eine ListBox (z. B. ListBox1) hinzu, falls noch nicht vorhanden.

  4. Gehe zu dem Code des UserForms und suche die UserForm_Initialize-Subroutine.

  5. Füge den folgenden Code hinzu, um die Spaltenbreiten festzulegen:

    With ListBox1
       .ColumnCount = 4 ' Anzahl der Spalten
       .ColumnWidths = "5cm;4cm;2cm;1cm" ' Breiten der Spalten
    End With
  6. Stelle sicher, dass die Breiten den Anforderungen deiner Daten entsprechen. Du kannst die Werte anpassen, um die Lesbarkeit zu verbessern.


Häufige Fehler und Lösungen

  • Fehler: ListBox zeigt keine Daten an.

    • Lösung: Überprüfe, ob die ListBox korrekt mit Daten gefüllt wird. Stelle sicher, dass die AddItem-Methode in der richtigen Reihenfolge aufgerufen wird.
  • Fehler: Spaltenbreiten werden nicht angewendet.

    • Lösung: Stelle sicher, dass die ColumnWidths-Eigenschaft korrekt formatiert ist. Verwende Semikolons als Trennzeichen, z. B. "5cm;4cm;2cm".
  • Fehler: Spaltenbreiten passen nicht zu den Daten.

    • Lösung: Du musst die Breiten manuell anpassen, da eine automatische Anpassung der Spaltenbreiten in einer Listbox nicht verfügbar ist.

Alternative Methoden

Falls du eine automatisierte Anpassung der Spaltenbreiten wünschst, kannst du die Breiten programmgesteuert aus den Tabellen ermitteln. Hier ist ein einfaches Beispiel, wie du dies tun könntest:

Dim i As Integer
Dim maxWidth As Integer
For i = 0 To ListBox1.ColumnCount - 1
    maxWidth = Application.WorksheetFunction.Max( _
        Application.WorksheetFunction.Len(ListBox1.List(i)))
    ListBox1.ColumnWidths = ListBox1.ColumnWidths & maxWidth & "pt;"
Next i

Diese Methode ist jedoch kompliziert und erfordert zusätzliche Logik, um die Breiten effektiv zu berechnen.


Praktische Beispiele

  1. Daten aus einer Tabelle in die Listbox laden:

    Private Sub UserForm_Initialize()
       Dim ws As Worksheet
       Set ws = ThisWorkbook.Sheets("Tabelle1")
    
       With ListBox1
           .ColumnCount = 3
           .ColumnWidths = "3cm;3cm;3cm"
           Dim i As Integer
           For i = 1 To ws.Cells(Rows.Count, 1).End(xlUp).Row
               .AddItem ws.Cells(i, 1).Value
               .List(.ListCount - 1, 1) = ws.Cells(i, 2).Value
               .List(.ListCount - 1, 2) = ws.Cells(i, 3).Value
           Next i
       End With
    End Sub
  2. Filtere leere Spalten: Um nur nicht leere Spalten anzuzeigen, kannst du die Daten vor dem Hinzufügen zur Listbox überprüfen.


Tipps für Profis

  • Verwende ListBox1.ColumnCount, um die Anzahl der Spalten dynamisch zu setzen.
  • Experimentiere mit verschiedenen Einheiten für ColumnWidths (z. B. cm, pt, px).
  • Halte deine UserForms aufgeräumt und übersichtlich, indem du die Spaltenbreiten an die wichtigsten Informationen anpasst.

FAQ: Häufige Fragen

1. Wie kann ich die Spaltenbreite in einer Listbox automatisch anpassen?
Automatische Anpassung ist in VBA nicht direkt möglich. Du musst die Spaltenbreiten manuell festlegen.

2. Wie viele Spalten kann ich in einer Listbox haben?
Die maximale Anzahl der Spalten in einer Listbox beträgt 255, aber die Benutzeroberfläche kann unübersichtlich werden, wenn zu viele Spalten angezeigt werden. Stelle sicher, dass die Anzahl der Spalten sinnvoll ist.

3. Kann ich die Spaltenbreiten während der Laufzeit ändern?
Ja, du kannst die ColumnWidths-Eigenschaft jederzeit während der Laufzeit ändern, indem du den entsprechenden Code in eine Subroutine einfügst.

4. Was, wenn die Spaltenbreiten nicht korrekt angezeigt werden?
Stelle sicher, dass du die Listbox nach der Datenbefüllung aktualisierst und dass die ColumnWidths-Eigenschaft in der korrekten Syntax angegeben ist.

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