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

Unterschiedliche Farben in der Listbox

Forumthread: Unterschiedliche Farben in der Listbox

Unterschiedliche Farben in der Listbox
07.03.2006 21:45:47
alex
Hallo Forum,
Kann man/frau die Zeilen oder den Hintergrund der Zeilen in der Listbox unterschiedlich einfaerben?
Ist die Listbox wirklich auf 10 Spalten begrenzt?
Danke
P.S.Die Listbox wird durch Userformeingaben gefuellt(keine Exceltabelle).
Danke
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Unterschiedliche Farben in der Listbox
07.03.2006 21:57:55
Lars
Hi,
1. Nein
2. "Ist die Listbox wirklich auf 10 Spalten begrenzt?" Nein, wenn sie mittels
List oder Column gefüllt wird.
mfg Lars
AW: Unterschiedliche Farben in der Listbox
07.03.2006 22:04:26
alex
Danke
aber zu 2 habe ich eine frage.
Ich fuelle die listbox mit
ListBox30.List(1, 1) = "AHA"
funktiomiert auch ganz gut bis
ListBox30.List(1, 9) = "AHA"
alles weitere
ListBox30.List(1, 10) = "AHA"
ergibt eine Fehlermeldung
Anzeige
AW: Unterschiedliche Farben in der Listbox
07.03.2006 22:13:30
Ramses
Hallo
ein Auszug aus der VBA-Online Hilfe
"...Wenn ColumnCount auf 0 gesetzt wird, werden keine Spalten angezeigt. Wird die Eigenschaft auf -1 gesetzt, dann werden alle verfügbaren Spalten angezeigt. Bei ungebundenen Datenquellen liegt die Obergrenze bei 10 Spalten (0 bis 9)...."
Gruss Rainer
Anzeige
kleiner Wiederspruch bez. Spaltenzahl
07.03.2006 22:35:13
Nepumuk
Hi,
nur bei der AddItem - Metode ist die Anzahl der Spalten auf 10 begrenzt. Nicht beim füllen mit einem Array über die List - Eigenschaft. Beispiel:
Private Sub UserForm_Activate()
    Dim strArray(1 To 50, 1 To 30) As String
    Dim intRow As Integer, intColumn As Integer
    For intColumn = 1 To 30
        For intRow = 1 To 50
            strArray(intRow, intColumn) = CStr(intColumn) & " / " & CStr(intRow)
        Next
    Next
    With ListBox1
        .ColumnCount = 30
        .List = strArray
    End With
End Sub

Gruß
Nepumuk

Anzeige
Jein... ?
07.03.2006 22:51:18
Ramses
Hallo Nepumuk
Ein Array ist aber doch eigentlich ein "gebundenes" Datenfeld das wie eine "RowSource" behandelt wird.
Es reicht auch die Listbox nur damit quasi zu "eröffnen"
Option Explicit

Private Sub CommandButton1_Click()
    Dim strArray(1, 1 To 30) As String
    Dim intRow As Integer, intColumn As Integer
    For intColumn = 1 To 30
        strArray(1, intColumn) = CStr(1) & " / " & CStr(intRow)
    Next
    With ListBox1
        .ColumnCount = 30
        .List = strArray
    End With
    MsgBox "Und nun..."
    With Me.ListBox1
        .AddItem
        .List(.ListCount - 1, 3) = "Geht auch..."
    End With
End Sub

Gruss Rainer
Anzeige
Umweg
07.03.2006 23:27:10
Nepumuk
Hallo Rainer,
wenn du schon mit einem Array anfängst, warum machst du damit nicht weiter. Das ist doch viel schneller als die Box häppchenweiße zu füttern.
Private Sub UserForm_Activate()
    Dim strArray() As String
    Dim intRow As Integer, intColumn As Integer
    For intRow = 1 To 50
        Redim Preserve strArray(1 To 30, 1 To intRow)
        For intColumn = 1 To 30
            strArray(intColumn, intRow) = CStr(intColumn) & " / " & CStr(intRow)
        Next
    Next
    With ListBox1
        .ColumnCount = 30
        .List = WorksheetFunction.Transpose(strArray)
    End With
End Sub

Gruß
Nepumuk

Anzeige
Das sollte nur als Beispiel dienen....
07.03.2006 23:33:24
Ramses
Hallo Nepumuk
... um zu zeigen, dass es danach auch wieder mit "AddItem" geht.
Offensichtlich muss die ListBox nur erstmalig mit einem Array "präpariert" werden, um sie danach Häppchenweise, über die Limite von 10 hinaus, weiterfüttern zu können.
Allerdings ist die Limitierung dann die Grösse des Eröffnungsarrays.
Es kann nicht ein Eintrag hinzugefügt werden, der NACH dem letzten Feld des "Eröffnungs"-Arrays liegt.
Gruss Rainer
Anzeige
nur ein kleines zaghaftes aber
08.03.2006 01:13:26
alex
Erstmal Danke fuer die Tipps,
Aber :-(
Wenn ich die listbox ueber ein Array (z.b 50,30)fuelle aber erst einen eintrag (1. Zeile)gemacht habe wird bereits eine listbox mit ihren max. eintraegen (50,30) angezeigt.
Nicht schoen da ich eine listbox mit liststyleoption verwende und dadurch nach einem eintrag in der listbox bereits die Buttons(schauen aus wie optionbuttons)fuer die anderen 49 zeilen sehe obwohl noch keine eintraege gemacht wurden.
War wohl nix
Anzeige
AW: nur ein kleines zaghaftes aber
08.03.2006 07:26:24
Nepumuk
Hallo Alex,
in meinem zweiten Beispiel wird gezeigt, wie du ein dynamisches Array benutzt.
Gruß
Nepumuk

;
Anzeige
Anzeige

Infobox / Tutorial

Unterschiedliche Farben in der Listbox


Schritt-für-Schritt-Anleitung

Um unterschiedliche Farben in einer Listbox in Excel VBA zu verwenden, kannst du die Listbox nicht direkt einfärben. Stattdessen kannst du den Hintergrund oder die Schriftfarbe der Listeneinträge anpassen. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor: Drücke ALT + F11.

  2. Füge eine UserForm hinzu: Rechtsklick auf dein Projekt im Projekt-Explorer > Einfügen > UserForm.

  3. Füge eine ListBox hinzu: Ziehe eine ListBox auf die UserForm.

  4. Füge einen CommandButton hinzu: Ziehe einen CommandButton auf die UserForm.

  5. Füge folgenden Code in das Codefenster der UserForm ein:

    Private Sub UserForm_Activate()
        Dim i As Integer
        For i = 1 To 10
            Me.ListBox1.AddItem "Eintrag " & i
            Me.ListBox1.Selected(i - 1) = True
            If i Mod 2 = 0 Then
                Me.ListBox1.List(i - 1) = "Eintrag " & i
                Me.ListBox1.BackColor = RGB(255, 255, 255) ' Weiß für gerade Einträge
            Else
                Me.ListBox1.BackColor = RGB(230, 230, 230) ' Hellgrau für ungerade Einträge
            End If
        Next i
    End Sub
  6. Starte die UserForm: Klicke im VBA-Editor auf Run oder drücke F5.


Häufige Fehler und Lösungen

  • Fehler: Listbox zeigt nur 10 Einträge an
    Lösung: Stelle sicher, dass du die ListBox mit der .List-Eigenschaft füllst, anstatt mit AddItem. Dadurch kannst du mehr als 10 Einträge anzeigen.

  • Fehler: Einträge werden nicht wie gewünscht eingefärbt
    Lösung: Du kannst die Farbe nicht direkt für jeden Eintrag in der ListBox ändern. Stattdessen kannst du die Selected-Eigenschaft verwenden, um den Hintergrund der gesamten ListBox zu ändern.


Alternative Methoden

Eine alternative Methode ist die Verwendung von benutzerdefinierten Zeichnungen in der ListBox. Hierbei wird die ListBox über API-Funktionen angepasst, um mehr Flexibilität beim Styling zu bieten.

  1. API-Funktionen einfügen: Füge die benötigten API-Deklarationen am Anfang deines Moduls hinzu.
  2. Verwende SendMessage: Diese Funktion kann verwendet werden, um das Zeichnen der ListBox zu ändern, sodass du spezifische Farben und Stile anwenden kannst.

Praktische Beispiele

Hier ist ein Beispiel, wie du eine ListBox mit mehr als 10 Spalten füllen kannst:

Private Sub UserForm_Activate()
    Dim strArray(1 To 50, 1 To 30) As String
    Dim intRow As Integer, intColumn As Integer

    For intRow = 1 To 50
        For intColumn = 1 To 30
            strArray(intRow, intColumn) = "R" & intRow & "C" & intColumn
        Next intColumn
    Next intRow

    With ListBox1
        .ColumnCount = 30
        .List = strArray
    End With
End Sub

Tipps für Profis

  • Nutze Arrays, um Daten schnell in die ListBox zu laden.
  • Verwende die ColumnCount-Eigenschaft, um die Anzahl der Spalten dynamisch zu verändern.
  • Teste verschiedene Farben und Schriftarten, um die Lesbarkeit zu verbessern.

FAQ: Häufige Fragen

1. Wie viele Spalten kann eine ListBox maximal haben?
Die maximale Anzahl von Spalten in einer ListBox, die durch ein Array gefüllt wird, ist theoretisch unbegrenzt. Wenn du die AddItem-Methode verwendest, ist die Begrenzung jedoch auf 10 Spalten beschränkt.

2. Kann ich die Schriftfarbe der Einträge in der ListBox ändern?
Leider erlaubt Excel VBA nicht das direkte Ändern der Schriftfarbe einzelner Listeneinträge in einer ListBox. Du kannst jedoch die gesamte ListBox einfärben oder die Selected-Eigenschaft verwenden, um den aktuellen Eintrag hervorzuheben.

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