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
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