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

Forumthread: Listbox FORMAT

Listbox FORMAT
19.03.2007 21:31:57
Walter
Guten Abend,
habe noch einmal zu meiner Listbox eine Frage:
Wie kann ich das Format der Spalte4 in "### ###" festlegen, so daß bei Aufruf der Uf und Anzeige der Listbox mir dies Format angezeigt wird ?
Hier mein Makro:

Private Sub UserForm_Initialize()
'--------------- für Bildschirmanpassung --------------------------------------
Dim hwndForm As Long, hwndMenu As Long
Dim intY, intLast, intNext As Integer
On Error Resume Next
With UFDatenbank
.StartUpPosition = 0
.Top = 0
.Left = 0
.Height = GetDeviceCaps(GetDC(0&), 8)
.Width = GetDeviceCaps(GetDC(0&), 10)
End With
ReleaseDC 0, GetDC(0&)
hwndForm = FindWindow(vbNullString, Me.Caption)
'------------ ab hier festgelegt, UF kann nicht verschoben werden ----------------
If hwndForm  0 Then
hwndMenu = GetSystemMenu(hwndForm, 0)
If hwndMenu  0 Then DeleteMenu hwndMenu, &HF010, &H0
End If
Dim lzeile As Long
Dim i As Integer, j As Integer
lzeile = Sheets(strSh).Cells(Sheets(strSh).Rows.Count, ersteSpalte).End(xlUp).Row
With ListBox11
.Width = 750
.ColumnCount = 15             'Anzahl der Spalten               'Herr.Typ 1,5
.ColumnWidths = "0,9cm;2,5cm;2cm;1,5cm;2cm;2cm;2cm;2cm;2cm;" _
& "1,8cm;1,5cm;1,5cm;1,2cm;2cm;1,5cm"
.Clear
'Listbox füllen
.List = Range(Sheets(strSh).Cells(intstartzeile, ersteSpalte), _
Sheets(strSh).Cells(lzeile, ersteSpalte + 14)).Value
End With
End Sub
gruß walter
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox FORMAT
19.03.2007 21:52:00
Peter
Hallo Walter,
nur indem du jede Spalte der ListBox einzeln befüllst, dann kannst du ein Format mitgeben
ListBox1.List(iIndx, 3) = Format(Range("D" & lZeile).Value, "### ###")
Gruß Peter
Leider nicht
19.03.2007 22:09:00
Walter
Guten Abend Peter,
leider kein Erfolg:
ListBox11.List(i, 3) = Format(Range("D" & lzeile).Value, "### ###")
habe mal dies probiert:
ListBox11.List(4, 3) = Format(ListBox11.List(4, 3), "### ###")
ab zeile 4 soll das Zahlenformat wie es in der Sheet steht übernommen werden.
mfg walter
Anzeige
Hier noch
19.03.2007 22:17:01
Walter
Hallo Peter,
die 1. Zahl in der Spalte wird Richtig angezeigt !
mfg walter
AW: Leider nicht
19.03.2007 22:19:00
Peter
Hallo Walter,
ein kleines laufendes Beispiel:


Option Explicit
Private Sub UserForm_Activate()
Dim lZeile  As Long
Dim iIndx   As Long
   With ListBox1
      .Width = 250
      .ColumnCount = 4
      .ColumnWidths = ("2 cm; 1,5 cm;2 cm; 3 cm")
      .Clear
   End With
   For lZeile = 1 To 9
      ListBox1.AddItem " "
      ListBox1.List(iIndx, 0) = Range("A" & lZeile).Value
      ListBox1.List(iIndx, 1) = Format(Range("B" & lZeile).Value, "## ##")
      ListBox1.List(iIndx, 2) = Range("C" & lZeile).Value
      ListBox1.List(iIndx, 3) = Format(Range("D" & lZeile).Value, "###  ###")
      iIndx = iIndx + 1
   Next lZeile
End Sub 


Gruß Peter
Anzeige
Wieso nicht ?
19.03.2007 22:33:06
Walter
Hallo Peter,
weiß nicht warum?
Habe mal so geändert...
Dim lZeile As Long
Dim iIndx As Long
For lZeile = 4 To 15
' ListBox11.AddItem " "
ListBox11.List(iIndx, 0) = Range("A" & lZeile).Value
ListBox11.List(iIndx, 3) = Format(Range("D" & lZeile).Value, "#### ###")
iIndx = iIndx + 1
Next lZeile
Wieso wird das Format nur bis Zeile 12 ! angezeigt?
mfg walter
Anzeige
Habe glaub ich gefunden ?
19.03.2007 22:38:00
Walter
Hallo Peter,
wenn ich hier: For lZeile = 1 To 9
bis 1000 anstatt 9 setzen wird das Format gemacht allerdings dauert es sehr lang bis
die UF dann erscheint !!!
mfg walter
Bitte hier noch einmal Schauen...
20.03.2007 10:15:00
Walter
Guten Morgen Peter,
anbei mein geändertes Makro, es läuft soweit, allerdings wenn ich die Zeile bis Nr.6 habe, super Schnell
aber leider nur bis Zeile 6 !
Was habe ich den jetzt noch Falsch gemacht ?

Private Sub UserForm_Initialize()
'--------------- für Bildschirmanpassung --------------------------------------
Dim hwndForm As Long, hwndMenu As Long
Dim intY, intLast, intNext As Integer
On Error Resume Next
With UFDatenbank
.StartUpPosition = 0
.Top = 0
.Left = 0
.Height = GetDeviceCaps(GetDC(0&), 8)
.Width = GetDeviceCaps(GetDC(0&), 10)
End With
ReleaseDC 0, GetDC(0&)
hwndForm = FindWindow(vbNullString, Me.Caption)
'------------ ab hier festgelegt, UF kann nicht verschoben werden ----------------
If hwndForm  0 Then
hwndMenu = GetSystemMenu(hwndForm, 0)
If hwndMenu  0 Then DeleteMenu hwndMenu, &HF010, &H0
End If
Label15 = Worksheets("Datenbank").Range("C2").Value
Label17 = Format(Worksheets("Datenbank").Range("A2").Value, ("dd.mm.yyyy"))
Dim lZeile As Long
Dim i As Integer, j As Integer
lZeile = Sheets(strSh).Cells(Sheets(strSh).Rows.Count, ersteSpalte).End(xlUp).Row
With ListBox11
.Width = 750
.ColumnCount = 15             'Anzahl der Spalten               'Herr.Typ 1,5
.ColumnWidths = "1,5cm;2,3cm;1,8cm;1,5cm;2cm;2cm;2cm;2cm;2cm;" _
& "1,8cm;1,5cm;1,5cm;1,2cm;2cm;1,5cm"
.Clear
'Listbox füllen
.List = Range(Sheets(strSh).Cells(intstartzeile, ersteSpalte), _
Sheets(strSh).Cells(lZeile, ersteSpalte + 14)).Value
'--- von Peter Feustel 19-3-07 ------------------------------------
'Dim lZeile  As Long
Dim iIndx   As Long
For lZeile = 4 To 6
'    ListBox11.AddItem " "
'   ListBox11.List(iIndx, 0) = Range("A" & lZeile).Value
ListBox11.List(iIndx, 0) = Format(Range("A" & lZeile).Value, "#,#00")
'   ListBox11.List(iIndx, 2) = Range("C" & lZeile).Value
ListBox11.List(iIndx, 3) = Format(Range("D" & lZeile).Value, "#### ###")
iIndx = iIndx + 1
Next lZeile
End With
End Sub

mfg Walter
Anzeige
AW: Bitte hier noch einmal Schauen...
20.03.2007 15:24:00
Peter
Hallo Walter,
dein Makro aus teilweise definierten Variablen und vielen eigenen Bezeichnungen und Defines lässt sich nicht nachbauen und damit auch nicht testen.
Bau einmal Option Explicit vor dein Makro und definiere alles (alle Dims beieinander, nicht irgendwo im Coding) .
Ohne die komplette Mappe weiß man absolut nicht, was du überhaupt machen willst.
Solltest du tatsächlich 1000 Zeilen in die ListBox einfügen wollen, so benötigt das ein wenig Zeit.
Gruß Peter
Anzeige
Hallo Peter
20.03.2007 16:16:00
Walter
Hallo Peter,
herzlichen Dank für deine angebotene Hilfe.
Werde jetzt gleich die Datei fertigmachen und schick diese Dir nach Haus oder?
Ich habe gerade festgestellt, die Mappe habe ich in Excel2000 erstellt und in Excel XP waren die
CommandButton etc. plötzlich weg.
gruß walter
Anzeige
Danke -)
20.03.2007 18:58:00
Walter
Hallo Peter,
habe das Format rausgenommen, bin so zufrieden, da es so beim "Laden" recht schnell geht!
mfg walter KR
AW: Danke -)
20.03.2007 20:32:01
Peter
Hallo Walter,
du könntest folgendes versuchen:
anstelle von .Value besser .Text verwenden
.List = Range(Sheets(strSh).Cells(intstartzeile, ersteSpalte), _
Sheets(strSh).Cells(lzeile, ersteSpalte + 14)).Text
Gruß Peter
Anzeige
AW: Danke -)
21.03.2007 09:14:00
Walter
Guten Morgen Peter,
habe gerade durchgeführt, keine Änderung!
Habe noch eine Frage:
Hast Du vielleicht ein Muster einer Listbox auf einer UF da?
Das Wichstigste, ich brauch dann eine UF mit Textboxen, wenn man in der Listbox angeklickt hat,
spllten die die Daten den in den Textboxen erscheinen:
1. zum ändern
2. zum löschen
3. neue Eingabe-Möglichkeit
mfg walter
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Listbox Formatierung in Excel VBA


Schritt-für-Schritt-Anleitung

Um das Format einer ListBox in Excel VBA zu ändern, kannst du folgende Schritte befolgen:

  1. UserForm erstellen: Öffne den VBA-Editor (Alt + F11) und füge eine UserForm hinzu.

  2. ListBox hinzufügen: Ziehe eine ListBox auf die UserForm.

  3. Code für die ListBox: Füge folgenden Code in das UserForm-Modul ein:

    Private Sub UserForm_Initialize()
        Dim lZeile As Long
        Dim iIndx As Long
        lZeile = Sheets("Datenbank").Cells(Sheets("Datenbank").Rows.Count, 1).End(xlUp).Row
    
        With ListBox1
            .ColumnCount = 4
            .Clear
            For lZeile = 1 To lZeile
                .AddItem
                .List(iIndx, 0) = Range("A" & lZeile).Value
                .List(iIndx, 1) = Format(Range("B" & lZeile).Value, "## ##")
                .List(iIndx, 2) = Range("C" & lZeile).Value
                .List(iIndx, 3) = Format(Range("D" & lZeile).Value, "### ###")
                iIndx = iIndx + 1
            Next lZeile
        End With
    End Sub
  4. UserForm testen: Starte die UserForm, um sicherzustellen, dass die ListBox die Daten im gewünschten Format anzeigt.


Häufige Fehler und Lösungen

  1. Format wird nicht angezeigt: Wenn das Format nicht korrekt angezeigt wird, überprüfe, ob du .Value oder .Text verwendest. In vielen Fällen ist .Text die bessere Wahl, um das Format beizubehalten.

    .List = Range("A1:D" & lZeile).Text
  2. Index außerhalb des Bereichs: Achte darauf, dass der Index iIndx in der Schleife korrekt hochgezählt wird. Wenn du mehr Elemente hinzufügst, als die ListBox Platz hat, kann dies zu Fehlern führen.

  3. Langsame Ladezeiten: Wenn du große Datenmengen in die ListBox lädst, kann dies die Ladezeiten erhöhen. Reduziere die Anzahl der Zeilen oder verwende Filter, um nur benötigte Daten zu laden.


Alternative Methoden

Falls du eine alternative Methode zur Formatierung der ListBox benötigst, kannst du die Daten auch zuerst in ein Array laden und dann die Array-Werte der ListBox zuweisen. Dies kann die Performance verbessern:

Dim dataArr() As Variant
dataArr = Range("A1:D" & lZeile).Value
For iIndx = LBound(dataArr, 1) To UBound(dataArr, 1)
    ListBox1.AddItem
    ListBox1.List(iIndx, 0) = dataArr(iIndx, 1)
    ListBox1.List(iIndx, 1) = Format(dataArr(iIndx, 2), "## ##")
    ListBox1.List(iIndx, 2) = dataArr(iIndx, 3)
    ListBox1.List(iIndx, 3) = Format(dataArr(iIndx, 4), "### ###")
Next iIndx

Praktische Beispiele

Hier ist ein einfaches Beispiel für eine ListBox, die Namen und Formate anzeigt. Du kannst das Makro so anpassen, dass es mit deinen eigenen Datenquellen funktioniert.

Private Sub UserForm_Initialize()
    Dim iIndx As Long
    For iIndx = 1 To 10
        ListBox1.AddItem "Name " & iIndx
        ListBox1.List(iIndx - 1, 1) = Format(iIndx * 1000, "### ###")
    Next iIndx
End Sub

Tipps für Profis

  • Verwende Option Explicit: Dies hilft dir, Variablen korrekt zu deklarieren und Fehler zu vermeiden.
  • Fehlerbehandlung: Implementiere Error-Handling in deinem Code, um mögliche Laufzeitfehler aufzufangen.
  • Performance optimieren: Bei großen Datenmengen die .Value-Eigenschaft anstelle von .Text verwenden, um die Verarbeitungsgeschwindigkeit zu erhöhen.

FAQ: Häufige Fragen

1. Wie kann ich die Breite der Spalten in einer ListBox anpassen? Du kannst die ColumnWidths-Eigenschaft der ListBox nutzen, um die Breite jeder Spalte festzulegen, z.B. .ColumnWidths = "2cm;3cm;1.5cm".

2. Kann ich ein Dropdown-Menü in einer ListBox erstellen? Eine ListBox ist nicht dafür gedacht, Dropdown-Menüs zu erstellen. Du kannst jedoch eine ComboBox verwenden, um eine ähnliche Funktionalität zu bieten.

3. Wie kann ich die ListBox nach einem bestimmten Kriterium filtern? Du kannst die Daten zuerst in ein Array laden, filtern und dann nur die relevanten Daten in die ListBox hinzufügen. Alternativ kannst du auch die ListBox mit einem Filter-Button verknüpfen.

4. Was mache ich, wenn die ListBox nicht alle Daten anzeigt? Stelle sicher, dass die Anzahl der Zeilen, die du in die ListBox lädst, nicht den verfügbaren Platz überschreitet. Verwende die Methode AddItem, um die Elemente nacheinander hinzuzufügen.

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