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

ListBox: Spaltenbreite an Inhalt anpassen

Forumthread: ListBox: Spaltenbreite an Inhalt anpassen

ListBox: Spaltenbreite an Inhalt anpassen
22.12.2014 20:33:37
Erik
Liebe Gemeinde,
ich sehe mich gerade einem Problem gegenüber, dass es "eigentlich" nicht geben dürfte, aber leider bei mir auftritt.
Zum Hintergrund
Ich habe ein UserForm, auf dem sich eine Listbox befindet, die ich mit Datensätzen aus einer Tabelle füttere. Zur besseren Übersicht möchte ich nun die Spaltenbreite an den jeweils längsten Inhalt der Spalte anpassen.
So gehe ich vor
Ich habe die ListBox mit einer nichtproportionalen Schriftart ("Consolas") gestaltet und lasse nun mit folgendem Code alle Spalten durchlaufen und einen entsprechenden String generieren, den ich dann an ListBox.columnwidths übergebe.

'Diese Funktion steht im Codebereich meiner UserForm
Private Function adjust_columns(ctrlListBox As MSForms.ListBox)
Dim r As Long
Dim c As Long
Dim this_length As Long
Dim max_length As Long
Dim arrLength() As Long
Dim strResult As String
With ctrlListBox
ReDim arrLength(.ColumnCount - 1)
For c = 0 To .ColumnCount - 1
max_length = 0
For r = 0 To .ListCount - 1
this_length = Len(.List(r, c))
If this_length > max_length Then
max_length = this_length
End If
Next r
arrLength(c) = max_length
Next c
For c = 0 To UBound(arrLength)
'der Faktor 0.35 ist veränderbar und sollte eigentlich mein Anliegen realisieren... :(
strResult = strResult & (arrLength(c) * 0.35) & "cm;"
Next c
.ColumnWidths = strResult
End With
End Function
Leider sieht mein Ergebnis überhaupt nicht so aus, obwohl ich eine Schriftart mit festen Zeichenbreite verwende.
So nun, liebe(r) Leser/-in, kannst du mir evtl. einen Tipp geben, worauf ich hier noch achten muss?
Mein Dank sei dir gewiss!
Gruß
Erik
Anhang (Screenshot):Userbild

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: ListBox: Spaltenbreite an Inhalt anpassen
23.12.2014 09:06:47
Tino
Hallo,
verwende alternativ ein Listview, da kann man die Spaltenbreite nach Inhalt anpassen.
Hier war mal ein Beitrag zum Listview.
https://www.herber.de/forum/archiv/1388to1392/t1388129.htm#1388546
Gruß Tino

Anzeige
AW: ListBox: Spaltenbreite an Inhalt anpassen
23.12.2014 12:38:16
Erik
Hallo Tino,
vielen Dank für den Tipp. Ich hatte mich vor einer Weile schonmal mit dem ListView-Steuerelement befasst, hatte es aber dann sein gelassen, weil ich mich nicht reingefunden habe. Ich werde es mir also doch nochmal zu Gemüte führen.
Nur eine grundsätzliche Frage zu meinem Lösungsweg: Theoretisch ist doch mein Gedankengang mit nichtproportionaler Schriftart und ListBox richtig, oder?
Frohe Weihnachten und guten Start ins neue Jahr und auf diesem Weg: Vielen Dank allen bisherigen Helfern und Ideengebern!
Gruß
Erik

Anzeige
AW: ListBox: Spaltenbreite an Inhalt anpassen
23.12.2014 14:41:11
Tino
Hallo,
ja die Vorgehensweise sollte so in etwa hinkommen.
Du müsstest eben einen Faktor finden der genau ein Zeichen breit ist und
mit diesen die Anzahl multiplizieren.
Evtl. noch einen Rand hinzuaddieren.
In etwa so, hier Schrift Courier, Standard, Schriftgrad 10.
Private Function adjust_columns(ctrlListBox As MSForms.ListBox)
Dim i%, ii%, iii%, ColW$
Const sngFaktor! = 0.23
Const sngRand! = 0.2
For i = 0 To ListBox1.ColumnCount - 1
For ii = 0 To ListBox1.ListCount - 1
If Len(ListBox1.List(ii, i)) > iii Then
iii = Len(ListBox1.List(ii, i))
End If
Next ii
ColW = ColW & iii * sngFaktor + sngRand & "cm;"
iii = 0
Next i
ColW = Left(ColW, Len(ColW) - 1)
ListBox1.ColumnWidths = ColW
End Function
Gruß Tino
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Spaltenbreite der ListBox in Excel VBA automatisch anpassen


Schritt-für-Schritt-Anleitung

Um die Spaltenbreite einer ListBox in Excel VBA automatisch an den Inhalt anzupassen, kannst du die folgende Methode verwenden. Diese Anleitung geht davon aus, dass du bereits ein UserForm mit einer ListBox erstellt hast.

  1. Öffne den VBA-Editor (Alt + F11).
  2. Füge den folgenden VBA-Code in das Code-Modul deiner UserForm ein:
Private Function adjust_columns(ctrlListBox As MSForms.ListBox)
    Dim r As Long
    Dim c As Long
    Dim this_length As Long
    Dim max_length As Long
    Dim arrLength() As Long
    Dim strResult As String
    With ctrlListBox
        ReDim arrLength(.ColumnCount - 1)
        For c = 0 To .ColumnCount - 1
            max_length = 0
            For r = 0 To .ListCount - 1
                this_length = Len(.List(r, c))
                If this_length > max_length Then
                    max_length = this_length
                End If
            Next r
            arrLength(c) = max_length
        Next c
        For c = 0 To UBound(arrLength)
            strResult = strResult & (arrLength(c) * 0.35) & "cm;"
        Next c
        .ColumnWidths = strResult
    End With
End Function
  1. Rufe die Funktion adjust_columns auf, nachdem du die ListBox mit Daten gefüllt hast.

  2. Achte darauf, dass du die Schriftart der ListBox auf eine nichtproportionale Schriftart wie "Consolas" einstellst, damit die Breite korrekt berechnet wird.


Häufige Fehler und Lösungen

  1. Die Spaltenbreite passt nicht zum Inhalt.

    • Stelle sicher, dass du eine nichtproportionale Schriftart verwendest. Probiere "Courier New" oder "Consolas".
    • Überprüfe den Faktor, der zur Berechnung der Spaltenbreite verwendet wird. Möglicherweise musst du diesen anpassen.
  2. Die ListBox zeigt keine Daten an.

    • Stelle sicher, dass die ListBox korrekt mit Daten gefüllt ist, bevor die Funktion adjust_columns aufgerufen wird.

Alternative Methoden

Wenn du die Spaltenbreite nicht manuell anpassen möchtest, gibt es eine alternative Methode, die die Verwendung eines ListView-Steuerelements anstelle einer ListBox empfiehlt. Mit einem ListView kannst du die Spaltenbreite direkt an den Inhalt anpassen, ohne komplexe Berechnungen durchführen zu müssen.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du die Funktion adjust_columns in deiner UserForm verwenden kannst:

Private Sub UserForm_Initialize()
    ' Fülle die ListBox mit Daten
    With ListBox1
        .ColumnCount = 3
        .AddItem "Kurze Info"
        .List(.ListCount - 1, 1) = "Längere Information"
        .List(.ListCount - 1, 2) = "Noch längerer Text"
        ' Spaltenbreite anpassen
        adjust_columns ListBox1
    End With
End Sub

Tipps für Profis

  • Experimentiere mit dem Anpassungsfaktor in der Funktion adjust_columns, um die optimale Breite für deine spezifische Schriftart zu finden.
  • Achte darauf, die ListBox nach dem Füllen der Daten und vor dem Anzeigen der UserForm zu aktualisieren, um die besten Ergebnisse zu erzielen.
  • Überlege, ob du die Spaltenbreiten dynamisch anpassen möchtest, wenn sich die Daten ändern. Dies kann durch das Erneute Aufrufen der adjust_columns-Funktion erreicht werden.

FAQ: Häufige Fragen

1. Wie kann ich die Spaltenbreite einer ListBox in Excel VBA festlegen?
Du kannst die Spaltenbreite mit der Eigenschaft ColumnWidths der ListBox festlegen, indem du die Breite in Zentimetern angibst.

2. Was ist der Unterschied zwischen ListBox und ListView?
Die ListBox ist einfacher zu verwenden, während das ListView-Steuerelement mehr Funktionen und Flexibilität bei der Darstellung von Daten bietet, einschließlich der automatischen Anpassung der Spaltenbreite.

3. Wie kann ich die Spaltenbreite der ListBox basierend auf der Schriftart ändern?
Die Spaltenbreite kann durch Anpassung des Faktors in der adjust_columns-Funktion geändert werden, sodass sie zur Länge der Zeichen in der verwendeten Schriftart passt.

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