Re: an ivan: Listbox formatieren
20.01.2003 09:33:57
guenther
hi ivanmir ist doch noch eine lösung eingefallen, sie muss nur noch zu deinem problem passen. probiers mal damit (eine kombination der hier geposteten meldungen):
Dim xlTab As Worksheet
Dim xlrange As Range
Dim zelle As Range
Dim i As Integer
Private Sub UserForm_Initialize()
Dim txt(1500, 3) ' txt(Zeilen, Spalten) entspricht Bereich "C1:E1500"
With ListBox3
.Font.Name = "Courier"
.Font.Size = 10
.ColumnHeads = False
.ColumnCount = 3
.ColumnWidths = "6cm;2cm;6cm"
.BoundColumn = 0
End With
Set xlTab = Sheets("Daten") ' "Daten" = Name des Tabellenblattes
With xlTab
.Activate
.Columns("C:C").Select
End With
Set xlrange = Selection
Set zelle = xlrange.Cells(1, 1) ' 1.Zeile in Spalte C auswählen
Do While Not IsEmpty(zelle)
With zelle
txt(i, 0) = Format(zelle.Value, "@@@@@@@@@@@@@@@@@@@@@@@@@@@")
txt(i, 1) = Format(zelle.Offset(0, 1), "@@@@@")
txt(i, 2) = zelle.Offset(0, 2)
With ListBox3
.List() = txt
End With
End With
Set zelle = zelle.Offset(1, 0) ' nächste Zeile in Spalte C auswählen
i = i + 1
Loop
End Sub
funktioniert mit schriftart courier (standard) und fixedsys(standard), leider nicht mit tt-schriften
das range-objekt markiert in der spalte c die erste zelle (c1)
in der do...while schleife werden nacheinander c1, d1, e1 eingelesen und dem datenfeld txt zugeordnet und zwar solange bis eine leere zelle in der spalte c entdeckt wird. bei der deklarierung des datenfeldes txt musst du mindestens die zeilenanzahl (kann auch mehr sein) eingeben --- Dim txt(zeilenanzahl, spaltenanzahl)
gleichzeitig wird die ausgabe in der listbox wie folgt formatiert:
1. Eintrag rechtsbündig. bei spaltenbreite 6cm sind in schriftgrösse 10 "nur 27 zeichen sichtbar, daher: Format(zellinhalt, " 27mal das zeichen @ für vorlaufblanks")
2. Eintrag zentriert: bei spaltenbreite 2 cm sind in schriftgrösse 10 "nur" 9 zeichen sichtbar, mit "@@@@@" wird das letzte zeichen des zellinhaltes ungefähr zentriert ausgegeben. mit einer if...then anweisung wären verschiedene formate für verschieden zeichenlängen darstellbar
3. Eintrag soll linksbündig sein, daher brauchst nix formatieren
nachteil1: da jede zelle im datenbereich z.b. c1:e1500(=4500 zellen) eingelesen und formatiert in der listbox ausgegeben wird dauert das seine zeit (bei meiner alten 166er-rumpel etwa 10sekunden für 100 zeilen (=300 zellen).
nachteil 2: die do...while schleife endet bei der ersten leeren zelle in spalte c, wenn dies ohnehin die letzte datenreihe ist dann o.k.
einfach mal ausprobieren, zuerst mit nur wenigen datenreihen!
günther