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

Spaltenbreite auslesen und in Listbox übernehmen

Forumthread: Spaltenbreite auslesen und in Listbox übernehmen

Spaltenbreite auslesen und in Listbox übernehmen
Kay
Hallo,
ich habe eine Datei mit 3 Arbeitsblättern (unterschiedlicher Datenumfang und Spaltenanzahl).
Nun möchte ich gern in einer Userform eine Suchfunktion einsetzen, welche in allen 3 Tabellen
(je nach gewähltem Optionsbutton) die Daten durchsucht...und die gefundenen Zeilen dann in der Listbox auflistet. Das klappt soweit ganz gut, aber ich würde gern noch etwas an der Form arbeiten, d.h. optisch die Listbox den verschiedenen Tabellen anpassen.
Dazu wäre es am einfachsten, wenn es ein VBA-Code gäbe - der die jeweiligen Spaltenbreiten auslist der ausgewählten Tabelle und dann diese der Listbox mitteilt.
Festvergabe kann ich nicht machen, da die Tabelle im Laufe der Zeit keine festen Spaltenbreiten haben wird sondern sich die Breiten je nach Einträge anpassen.
Des weiteren würde ich gern die Spaltenüberschriften entsprechend mit übernehmen. Problem sie sind leider aus organisatorischen Gründen auch wieder unterschiedlich von Tabelle zu Tabelle. D.h. in Tabelle 1 befindet sich die Überschrift in Zeile 3, in Tabelle 2 in Zeile 6 und in Tabelle 3 in Zeile 25....
Mit der Funktion "ColumnHeads" = True ... geht es irgendwie nicht - zeigt mir keine Überschriften an - nur eine leere Zeile.
Leider komme ich mit meinen VBA-Kenntnissen nicht weiter und in den 2 Büchern finde ich auch nichts...
Gruß und Danke
Kay
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Spaltenbreite auslesen und in Listbox übernehmen
18.07.2009 19:36:10
Daniel
Hi
die Spaltenbreite kannst du so ändern:
ListBox1.Width = Sheets("Tabelle1").Columns(1).Width
Spaltenüberschriften über .Columnsheads = True funktionieren nur, wenn du die Listbox über eine Zellbezug befüllst, also in derRowSource- bzw Listfillrange-Eigenschaft sowas drinsteht wie "=A2:A10"
als überschrift wird dann der Wert aus der Zelle darüber verwendet, also aus A1.
das ist aber meisten unpraktiabel, besser ist es, ein LABEL über die Listbox zu setzen und die Überschrift da reinzuschreiben.
Gruß, Daniel
Anzeige
AW: Spaltenbreite auslesen und in Listbox übernehmen
18.07.2009 19:51:23
Kay
Hallo Daniel,
vielen Dank für die schnelle Hilfe - werde ich gleich mal ausprobieren und vor allem für den Tipp mit dm Label - bin ich einfach nicht selbst drauf gekommen...schön blöd, wo es doch so einfach ist.
Naja, manchmal verrennt man sich eben in Dinge und bastelt stundenlang - und übersieht dabei den einfachen Weg ;o)
Gruß
Kay
Anzeige
Spaltenbreite auslesen und in Listbox übernehmen
19.07.2009 18:28:19
Kay
Hi,
habe es versuch - aber irgendwie komme ich nicht weiter ?!
Mit Deinem Code liest er zwar die erste Spaltenbreite aus - aber wie kann ich es als Schleife so gestalten,
dass alle Spaltenbreiten ausgelesen werden und der Listbox entsprechend übergeben werden ?!
Gruß und vielen Dank
Kay
Anzeige
AW: Spaltenbreite bei mehrspaltiger Listbox
19.07.2009 19:46:48
Daniel
HI
wenn du eine Listbox mit mehreren Spalten hast, dann so (hier mal als Beispiel für die Spalten A bis E)
Private Sub ListBox1_Click()
Dim i As Long
Dim strBreite As String
For i = 1 To 5
strBreite = strBreite & ";" & Columns(i).Width
Next
ListBox1.ColumnWidths = Mid$(strBreite, 2)
ListBox1.Width = Range("A:E").Width + 5
End Sub
Gruß, Daniel
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Spaltenbreite in Listbox auslesen und anpassen


Schritt-für-Schritt-Anleitung

  1. Userform erstellen: Öffne den VBA-Editor in Excel (Alt + F11). Füge eine Userform hinzu und platziere eine Listbox sowie die benötigten Optionsbuttons.

  2. VBA-Code einfügen: Füge den folgenden VBA-Code in das Modul der Userform ein, um die Spaltenbreiten auszulesen und anzupassen:

    Private Sub ListBox1_Click()
       Dim i As Long
       Dim strBreite As String
       For i = 1 To 5 ' Hier die Anzahl der Spalten anpassen
           strBreite = strBreite & ";" & Sheets("Tabelle1").Columns(i).Width
       Next i
       ListBox1.ColumnWidths = Mid$(strBreite, 2)
    End Sub
  3. Spaltenüberschriften hinzufügen: Wenn du die Spaltenüberschriften aus einer bestimmten Zeile (z.B. Zeile 3, 6 oder 25) in die Listbox übernehmen möchtest, verwende die RowSource-Eigenschaft oder setze ein Label über der Listbox.

  4. Userform testen: Starte die Userform, um sicherzustellen, dass die Listbox korrekt mit den Spaltenbreiten und Überschriften gefüllt wird.


Häufige Fehler und Lösungen

  • Fehler: Die Listbox zeigt keine Spaltenüberschriften an.

    • Lösung: Stelle sicher, dass die RowSource-Eigenschaft verwendet wird, um die Überschriften zu übernehmen. Alternativ kannst du ein Label verwenden, um die Überschrift manuell zu setzen.
  • Fehler: Der Code liest nur die erste Spaltenbreite aus.

    • Lösung: Überprüfe die Schleife im VBA-Code. Stelle sicher, dass die Schleife alle benötigten Spalten abdeckt, wie im obigen Beispiel gezeigt.

Alternative Methoden

  • Excel-Formeln: Anstatt VBA zu verwenden, kannst du Excel-Formeln nutzen, um die Breite der Spalten manuell zu berechnen und anzupassen. Diese Methode ist zwar weniger dynamisch, kann aber für einfache Anwendungen ausreichen.

  • Datenübertragung über eine Tabelle: Du kannst die Daten aus den Tabellen in einen temporären Bereich kopieren und anschließend die Listbox über diesen Bereich füllen.


Praktische Beispiele

Hier ist ein Beispiel, wie du die Spaltenbreiten für mehrere Spalten in einer Listbox anpassen kannst:

Private Sub UserForm_Initialize()
    Dim i As Long
    Dim strBreite As String
    For i = 1 To 5 ' Anzahl der Spalten
        strBreite = strBreite & ";" & Sheets("Tabelle1").Columns(i).Width
    Next i
    ListBox1.ColumnWidths = Mid$(strBreite, 2)
End Sub

In diesem Beispiel wird die Listbox beim Initialisieren der Userform mit den Breiten der ersten fünf Spalten der Tabelle 1 gefüllt.


Tipps für Profis

  • Nutze die Width-Eigenschaft der Listbox, um diese an die Gesamtbreite der Spalten anzupassen. Dies sorgt für ein ansprechenderes Layout.

  • Experimentiere mit der ColumnCount-Eigenschaft der Listbox, um die Anzahl der Spalten flexibel anzupassen.

  • Für komplexere Anforderungen kann es sinnvoll sein, eine Klasse zu erstellen, die das Handling der Listbox und der Datenübertragung vereinfacht.


FAQ: Häufige Fragen

1. Wie kann ich die Spaltenbreiten für mehrere Tabellen gleichzeitig anpassen? Du kannst eine Schleife einfügen, die durch alle benötigten Tabellen iteriert und die Spaltenbreiten entsprechend anpasst.

2. Was, wenn meine Spaltenüberschriften in unterschiedlichen Zeilen stehen? In diesem Fall musst du die Zeilen, in denen die Überschriften stehen, im VBA-Code anpassen und entsprechend in der Listbox anzeigen.

3. Ist es möglich, die Listbox dynamisch zu aktualisieren? Ja, du kannst Ereignisse wie UserForm_Activate oder ListBox1_Click verwenden, um die Listbox bei bestimmten Aktionen dynamisch zu aktualisieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige