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

Forumthread: Zahlenformat in Listbox

Zahlenformat in Listbox
20.02.2008 10:59:00
Frederic
Hi Experten,
ich hätt eine Frage:
Ich fülle eine Listbox (nicht über RowSource) aus einer Tabelle("Liste") Bereich, A1:H3000
Hierin enthalten sind Spalten mit Text, Datum und 3 mit Werten.
Meine Listbox zeigt mir die Zahlen aber unformiert an, z.B. 99 | 1009,95 etc.
Ich würde sie gerne formatiert anzeigen lassen.
Im Archiv bin ich leider auch nicht fündig geworden, da diesbezüglich so gut wie keine Einträge vorhanden sind.
Habt ihr einen Rat? Anbei mein Code für das Füllen und Anzeigen der Listbox:

Private Sub Aktualisieren_Click()
Dim vntArr
With Sheets("Liste")
vntArr = .Range(.Cells(7, 8), .Cells(65536, 1).End(xlUp))
End With
With Me.ListBox1
.ColumnCount = UBound(vntArr, 2)
.List = vntArr
End With
'Zuweisen der Spaltenanzahl
'Me.ListBox1.ColumnCount = 8
'Zuweisen der Spaltenbreite in Pt
'1 cm ~ 28,3 Pt
Me.ListBox1.ColumnWidths = "56,6; 120; 80; 80; 80; 80; 200; 40"
Me.ListBox2.List() = Sheets("Liste").Range("a1:h1").Value '- DAS IST DIE KOPFZEILE!!!!
'Zuweisen der Spaltenanzahl
Me.ListBox2.ColumnCount = 8
'Zuweisen der Spaltenbreite in Pt
'1 cm ~ 28,3 Pt
Me.ListBox2.ColumnWidths = "56,6; 120; 80; 80; 80; 80; 200; 40"
End Sub


Gruß
Frederic

Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zahlenformat in Listbox
20.02.2008 11:05:09
Hajo_Zi
Hallo Frederik,
benutze nicht Value sondern Text

AW: Zahlenformat in Listbox
20.02.2008 11:10:00
Frederic
Hallo Hajo,
danke für die Info...
Wenn ich aber VALUE durch TEXT ersetze, krieg ich den Fehler:
Eigenschaft LIST konnte nicht gesetzt werden.
Muss ich überall, wo ich VALUE verwendet habe, diese durch TEXT ersetzen?
Ich hab wiegesagt nur im o.g. Code ersetzt.
Sorry, aber so fit bin ich in VBA noch nicht :-)
Danke Frederic

Anzeige
AW: Zahlenformat in Listbox
20.02.2008 11:13:36
Nepumuk
Aber Hajo,
du kannst doch die Texteigenschaft eine Bereiches nicht in ein Array einlesen.
Wobei ich mich wirklich frage, warum Frederic den Umweg über ein Array geht. Da wird weder was gelöscht, noch umsortiert noch sonst irgendwas gemacht mit den Daten. Na ja, außer die Formate, die werden natürlich durch das einlesen in ein Array entfernt.
Das hat zur Folge, dass er das Variantarray komplett durchlaufen und dabei jeden Wert einzeln formatieren müsste.
Gruß
Nepumuk

Anzeige
AW: Zahlenformat in Listbox
20.02.2008 11:13:06
Rudi
Hallo,
Listboxen beinhalten Text. Du musst erst in deinem Array formatieren.
nach dem Motto:
for i=1 to ubound(vntarr)
vntarr(i,1)=format(vntarr(i,1),"#,##0.00")
vntarr(i,2)=format(vntarr(i,2),"#,##0.00")
next i
Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

Anzeige
AW: Zahlenformat in Listbox
20.02.2008 11:18:00
Frederic
Danke für die Hilfe Rudi,
wo muss ich "i" noch deklarieren? Einfach in den Code einbauen geht nicht, ich muss doch erst die Variable noch definieren oder? Wo mach ich das nochmal?
Sorry für die vielen Kühe :-)
Gruß Frederic

AW: Zahlenformat in Listbox
20.02.2008 11:31:00
Rudi
Hallo,
da, wo du vntArr auch deklariert hast.
Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

Anzeige
AW: Zahlenformat in Listbox
20.02.2008 11:38:19
Frederic
Ja ich habs jetzt:
Dim i
hab jetzt folgenden Code, verändert hat sich an den Formaten allerdings leider nicht:

Private Sub Aktualisieren_Click()
Dim i
Dim vntArr
With Sheets("Liste")
vntArr = .Range(.Cells(7, 8), .Cells(65536, 1).End(xlUp))
End With
With Me.ListBox1
.ColumnCount = UBound(vntArr, 2)
.List = vntArr
End With
'Me.ListBox1.List() = Sheets("Liste").Range("a7:h3000").Value
'Zuweisen der Spaltenanzahl
'Me.ListBox1.ColumnCount = 8
'Zuweisen der Spaltenbreite in Pt
'1 cm ~ 28,3 Pt
Me.ListBox1.ColumnWidths = "56,6; 120; 80; 80; 80; 80; 200; 40"
Me.ListBox2.List() = Sheets("Liste").Range("a1:h1").Value
'Zuweisen der Spaltenanzahl
Me.ListBox2.ColumnCount = 8
'Zuweisen der Spaltenbreite in Pt
'1 cm ~ 28,3 Pt
Me.ListBox2.ColumnWidths = "56,6; 120; 80; 80; 80; 80; 200; 40"
For i = 1 To UBound(vntArr)
vntArr(i, 1) = Format(vntArr(i, 1), "#,##0.00")
vntArr(i, 2) = Format(vntArr(i, 2), "#,##0.00")
vntArr(i, 3) = Format(vntArr(i, 3), "#,##0.00")
Next i
End Sub


Wo liegt noch mein Fehler?
Leider noch nicht so fit in VBA, aber ich denke es wird langsam...
Gruß Frederic

Anzeige
AW: Zahlenformat in Listbox
20.02.2008 11:45:00
Rudi
Hallo,
du musst erst das Array formatieren, dann der .list-Eigenschaft zuweisen.
Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

AW: Zahlenformat in Listbox - ERLEDIGT!
20.02.2008 11:51:00
Frederic
Danke für die vielen Kühe RUDI!!! Es funzt perfekt!!!
Tausend Dank, wieder etwas dazugelernt...:-)
Frederic

Anzeige
AW: Zahlenformat in Listbox - Alternative
20.02.2008 12:01:22
Erich
Hallo
vielleicht dauerts etwas länger, dafür musst du nicht mehr im Array formatieren,
was im Tabellenblatt schon formatiert ist:

Option Explicit
Private Sub Aktualisieren_Click()
Dim lngR As Long, intC As Integer, lngNr As Long
Me.ListBox1.ColumnCount = 8      'Zuweisen der Spaltenanzahl
Me.ListBox2.ColumnCount = 8
'Zuweisen der Spaltenbreite in Pt
'1 cm ~ 28,3 Pt
Me.ListBox1.ColumnWidths = "56,6; 120; 80; 80; 80; 80; 200; 40"
Me.ListBox2.ColumnWidths = "56,6; 120; 80; 80; 80; 80; 200; 40"
With Sheets("Liste")
For lngR = 7 To .Cells(.Rows.Count, 1).End(xlUp).Row
ListBox1.AddItem .Cells(lngR, 1).Text
lngNr = ListBox1.ListCount - 1
For intC = 2 To 8
ListBox1.List(lngNr, intC) = .Cells(lngR, intC).Text
Next intC
Next lngR
Me.ListBox2.List() = .Range("a1:h1").Value '- DAS IST DIE KOPFZEILE!!!!
End With
End Sub

Ist das richtig, dass Zeile 1 die Kopfzeile ist und die Daten in Zeile 7 beginnen?
Für die Kopfzeile habe ich Value stehen lassen - sind vermutlich Texte?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
DANKE!!! Zahlenformat in Listbox - Alternative
20.02.2008 12:41:13
Frederic
Funzt genauso - DANKE auch dir für deine Hilfe!
Es führen viele Wege nach Rom.... :-)
Danke Euch allen wieder mal für Eure Hilfen...
Frederic
;
Anzeige

Infobox / Tutorial

Zahlenformat in Listbox anpassen


Schritt-für-Schritt-Anleitung

Um das Zahlenformat in einer Listbox in Excel VBA anzupassen, folge diesen Schritten:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Dein Formular auswählen: Doppelklicke auf das Formular, das die Listbox enthält.

  3. Code für die Listbox anpassen: Füge den folgenden Code in das Aktualisieren_Click-Ereignis ein:

    Private Sub Aktualisieren_Click()
        Dim i As Long
        Dim vntArr As Variant
        With Sheets("Liste")
            vntArr = .Range(.Cells(7, 1), .Cells(.Rows.Count, 1).End(xlUp)).Value
        End With
        ' Formatieren der Werte im Array
        For i = 1 To UBound(vntArr)
            vntArr(i, 1) = Format(vntArr(i, 1), "#,##0.00")
            vntArr(i, 2) = Format(vntArr(i, 2), "#,##0.00")
            vntArr(i, 3) = Format(vntArr(i, 3), "#,##0.00")
        Next i
        With Me.ListBox1
            .ColumnCount = UBound(vntArr, 2)
            .List = vntArr
        End With
    End Sub
  4. Spaltenbreite festlegen: Setze die Spaltenbreite der Listbox, indem du ListBox1.ColumnWidths anpasst, wie im ursprünglichen Beispiel.


Häufige Fehler und Lösungen

  • Fehler: "Eigenschaft LIST konnte nicht gesetzt werden."

    • Lösung: Stelle sicher, dass du die Formatierung im Array vornimmst, bevor du es der Listbox zuweist.
  • Fehler: Zahlen erscheinen unformatiert.

    • Lösung: Vergewissere dich, dass der Formatierungs-Code korrekt ist und dass du die Werte im Array vor der Zuweisung formatiert hast.

Alternative Methoden

Eine Alternative besteht darin, die Daten direkt in die Listbox hinzuzufügen, ohne ein Array zu verwenden. Hier ein Beispiel:

Private Sub Aktualisieren_Click()
    Dim lngR As Long, intC As Integer
    Me.ListBox1.ColumnCount = 8
    With Sheets("Liste")
        For lngR = 7 To .Cells(.Rows.Count, 1).End(xlUp).Row
            ListBox1.AddItem .Cells(lngR, 1).Text
            For intC = 2 To 8
                ListBox1.List(ListBox1.ListCount - 1, intC - 1) = .Cells(lngR, intC).Text
            Next intC
        Next lngR
    End With
End Sub

Diese Methode verwendet die .Text-Eigenschaft, um die formatierte Darstellung der Zellen einzulesen.


Praktische Beispiele

Hier sind einige praktische Beispiele zur Formatierung von Zahlen in einer Listbox:

  1. Formatierung für Geldbeträge:

    vntArr(i, 1) = Format(vntArr(i, 1), "€ #,##0.00")
  2. Formatierung für Prozentwerte:

    vntArr(i, 2) = Format(vntArr(i, 2), "0.00%")

Diese Beispiele zeigen, wie du verschiedene Formate anpassen kannst, um die Daten in deiner Listbox ansprechend darzustellen.


Tipps für Profis

  • Verwende Option Explicit: Dies zwingt dich, alle Variablen zu deklarieren, was Fehler vermeidet.
  • Nutze die .Text-Eigenschaft: Wenn du sicherstellen möchtest, dass die Formatierung wie in der Excel-Oberfläche aussieht, verwende die .Text-Eigenschaft, anstatt die Werte direkt zu verwenden.
  • Testen im Debug-Modus: Setze Breakpoints, um den Wert von Variablen während der Ausführung zu überprüfen und sicherzustellen, dass die Formatierung wie gewünscht erfolgt.

FAQ: Häufige Fragen

1. Warum erscheint die Listbox leer?
Überprüfe, ob das Array tatsächlich Werte enthält, bevor du es der Listbox zuweist.

2. Wie kann ich verhindern, dass die Listbox zu viele Daten anzeigt?
Setze Filter oder benutze ein Kontrollkästchen, um die angezeigten Daten zu begrenzen.

3. Kann ich das Format dynamisch ändern?
Ja, verwende eine Bedingte Formatierung in Verbindung mit VBA, um das Format basierend auf den Werten zu ändern.

4. Was ist der Unterschied zwischen .Value und .Text?
.Value gibt den tatsächlichen Wert zurück, während .Text die formatierte Darstellung in der Excel-Oberfläche liefert.

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