ListBox (ListView) Zeilen unterschiedlich färben

Hallo Wissende,

ich habe eine Userform mit paar CommandButton und einer riesen ListBox, Insgeamt füllt es den den ganzen Bildschirm bis auf die taskleiste.
In der ListBox sieht man eine Menge von datenzeilen, mehrspaltig.

Durch die Menge ist das irgendwie unübersichtlich und ich würde seh gerne jede zweite zeile andersfarbig machen in der Hintergrundfarbe.
Gut, oder schlecht, das geht mit einer ListBox nicht.

Ein workaround wäre, anstatt der ListBox „Nix“ zu nehmen oder einen Frame und die einzelnen „Zellen“ der datenzeilen als Label, TextBox o.ä. zu batseln, dann könnte ich pro Element die Hintergrundfareb bestimmen.

Diese Möglichkeit behagt mir nicht. Ginge zwar, aber irgendwie mag ich das nicht.

Jetzt stiess ich auf „ListView“, da scheint das zu gehen mit den zweifarbigen Zeilen.
Mit diesem Code:
http://www.aboutvb.de/khw/artikel/khwlvwaltlinesback…

Sehr dummerweise braucht man dazu eine PictureBox. Die hat natürlich mein Excel 2000 nicht :frowning:
Jetzt kennt mein Vba aber „Image“ und irgendwo stand, in manchen Punkten liefert das dasselbe wie eine PictureBox.
Irgendwie brachte ich aber alles nicht zum Laufen *ärger*

Nachstehend der Code des o.g. Links.
@rainer, ich weiß du hast da ein revht seltenes abgespecktes Excel, ist da Image drin? Wenn nich, kann ich dir eine Bild der Eigenschaften von Image zeigen. Vielleicht kannst du dann ohne testen zu können per Glaskugel erkennen ob der Code umschreibbar ist von PictureBox auf Image.

Ingesamt bin ich absolut frei, d.h. Listbox, ListView ist mir gleich, hauptsache ich kann in einer UF ein mehrspaltiges Feld anzeigen mit vielen Zeilen, wo die Zeilen abwechselnd farbig sind.
Und schnell muß es sein, kann durchaus sein, daß die Datensatzanzahl hochreicht bis zu 10-30.000.

(Es ist ein xla, was die Einschränkung der Anzeige zuletzt gespeicherter Dateien in Word und Excel von 9 auf unendlich setzt u.v.m.)

Achja,
Optional ByVal AltLineBackColor As OLE_COLOR = -1
geht so nicht in Vba (XL2000), streiche ich „As OLE_COLOR“ so klappt es, gibt es da einen Verweis dafür, welchen?

Und, wenn ich das richtig verstehe dient die PictureBox u.a. auch dazu Textlängen festzustellen, vielleicht gibt es da Möglichkeiten, das anders zu ermitteln.

UndX, Screen.TwipsPerPixelX gibts beides nicht, ScaleWidth auch nicht.

Danke für das Interesse und alle evtl. Hilfen
Gruß
Reinhard

Public Function LvwAltLinesBackground(ListView As ListView, \_
 PictureBox As PictureBox, Optional ByVal BackColorFirst As Boolean, \_
 Optional ByVal AltLineBackColor As OLE\_COLOR = -1) As StdPicture

 Dim nHeight As Single
 Dim nScaleWidth As Single
 Dim nAltLineBackColor As OLE\_COLOR

 With ListView
 If .View = lvwReport Then
 If .ListItems.Count Then
 .PictureAlignment = lvwTile
 nHeight = .ListItems(1).Height
 With PictureBox
 .Visible = False
 .Cls
 If AltLineBackColor = -1 Then
 nAltLineBackColor = .BackColor
 Else
 nAltLineBackColor = AltLineBackColor
 End If
 .BackColor = ListView.BackColor
 .BorderStyle = 0
 .Height = nHeight \* 2
 .Width = 10 \* Screen.TwipsPerPixelX
 nScaleWidth = .ScaleWidth
 .AutoRedraw = True
 If BackColorFirst Then
 PictureBox.Line (0, nHeight)-Step(nScaleWidth, nHeight), \_
 nAltLineBackColor, BF
 Else
 PictureBox.Line (0, 0)-Step(nScaleWidth, \_
 nHeight - Screen.TwipsPerPixelY), \_
 nAltLineBackColor, BF
 End If
 Set ListView.Picture = Nothing
 Set ListView.Picture = .Image
 Set LvwAltLinesBackground = .Image
 .AutoRedraw = False
 If AltLineBackColor = -1 Then
 .BackColor = nAltLineBackColor
 End If
 End With
 .Refresh
 Exit Function
 End If
 End If
 Set .Picture = Nothing
 End With
End Function

Hallo Reinhard,

@rainer, ich weiß du hast da ein revht seltenes abgespecktes
Excel, ist da Image drin? Wenn nich, kann ich dir eine Bild
der Eigenschaften von Image zeigen. Vielleicht kannst du dann
ohne testen zu können per Glaskugel erkennen ob der Code
umschreibbar ist von PictureBox auf Image.

privat habe ich gar kein Excel. Ich habe mit das ‚Image‘ im Excel schon mal angesehen, das entspricht in vielem der Picturebox in VB6. Weiter weg ist es vom Image in VB6.

Aber zu Deinem Problem habe ich eine andere Frage.

Kannst Du in Excel das Steuerelement ‚MSFlexgrid‘ verwenden? (MSFLXGRD.OCX)
Ich habe in Excel ja auch schon selbst geschriebene OCX verwendet …

Das Flexgrid kann alles was Du möchtest und einiges mehr.

Gruß Rainer

Hallo Rainer,

sorry daß ich erst so so spät antworte, sah deinen Beitrag eben erst :frowning:
(Ichg muß endlich mal mein anderes Projekt zum Abschluß bringen um unabhängig zu sein was w-w-w mir da als ungelesene Beiträge bietet.
Für mich ist ein Artikel ungelesen solange ich ihn noch nicht geöffnet habe. Oay, andre baustelle)

Ich habe mit das ‚Image‘ im
Excel schon mal angesehen, das entspricht in vielem der
Picturebox in VB6. Weiter weg ist es vom Image in VB6.

Ich hab ja schon versucht den Code im Link anzupassen, also alles umzuschreien von PictuereBox auf Image.
Manches ging gut, dann kam aber die Problematik mit unbekanntem Screen und dem twixelzeugs usw.
da habe ich aufgegeben und wollte erst mal hier nachfragen ob es überhaupt schon mal gelang.

Kannst Du in Excel das Steuerelement ‚MSFlexgrid‘ verwenden?
(MSFLXGRD.OCX)

Ja, mir wird MS Flex Grid 5.0 angeboten.
Es sieht für mich aus wie ein Spreadsheet was ich als Steuerelemt auch in eine Userform in Excel einbauen kann.
Gute Idee, ich prüf beide ob die das sind die ich brauche.

Das Flexgrid kann alles was Du möchtest und einiges mehr.

Wie der kaiser sagte, schaun wir mal *gg*

Gruß
Reinhard

Hallo Reinhard,

Ich hab ja schon versucht den Code im Link anzupassen, also
alles umzuschreien von PictuereBox auf Image.
Manches ging gut, dann kam aber die Problematik mit
unbekanntem Screen und dem twixelzeugs usw.
da habe ich aufgegeben und wollte erst mal hier nachfragen ob
es überhaupt schon mal gelang.

Wenn Du mit Excel TwipsPerPixel nicht auslesen kannst, dann nimm da einfach 15, passt eigentlich immer. Das soll u.U. auch mal anders sein, hab ich aber noch nicht erlebt.

Kannst Du in Excel das Steuerelement ‚MSFlexgrid‘ verwenden?
(MSFLXGRD.OCX)

Ja, mir wird MS Flex Grid 5.0 angeboten.
Es sieht für mich aus wie ein Spreadsheet was ich als
Steuerelemt auch in eine Userform in Excel einbauen kann.
Gute Idee, ich prüf beide ob die das sind die ich brauche.

Das Flexgrid kann alles was Du möchtest und einiges mehr.

Wie der kaiser sagte, schaun wir mal *gg*

OK. :smile:

Mir fällt es etwas schwer, Deinen Originalcode zu lesen.
Ich kenne mich weder mit Excel aus, noch habe ich bisher das Listview verwendet.

Aber wenn ich das richtig sehe, liefert Dir das Listview ja auch keine Farben, wäre also ohnehin eine Krücke.

Wenn ich richtig verstehe was da passiert, wird das Listview transparent geschaltet und dahinter mit dem Picture (Image) farbige Streifen erzeugt.

Besser finde ich, wenn die Hintergrundfarbe für die Zeile (Zelle) frei definierbar ist, wie im Flexgrid.

Gruß Rainer

Hallo, Rainer.

Wenn Du mit Excel TwipsPerPixel nicht auslesen kannst, dann
nimm da einfach 15, passt eigentlich immer. Das soll u.U. auch
mal anders sein, hab ich aber noch nicht erlebt.

1 Pixel entspricht 15 Twips bei einer Auflösung von 96 dpi.
Verändert der Computer-Anwender in der System-Steuerung die Auflösung, dann ändert sich auch der Wert TwipsPerPixel.

Bei 96 dpi: 1 Pixel = 15 Twips = 0,75 Punkt(XL-„Maß“ bei UserForms)

VG
Carsten