Problem bei Wertebefüllung einer mehrspaltigen Listbox
#1
Clever-Excel Forum ich hab ein Problem!

Ich möchte meine während der UserForm_Initialize Prozedur  einspaltig befüllte ListBox1 durch Drüken des CommandButton1 mehrspaltig befüllen.

Dazu folgender Code:


Code:
Private Sub CommandButton1_Click()
Dim i%
ListBox1.Clear
For i = 1 To 10
With ListBox1
.AddItem
.ColumnCount = 3
.List(ListBox1.ListCount - 1, 0) = 10 * i
.List(ListBox1.ListCount - 1, 1) = 20 + i 'Fehlermeldung EigenschaftList konnte nicht gesetzt werden. (Nur wenn ListBox vorher einspaltig war!)
.List(ListBox1.ListCount - 1, 2) = 30 - i
'Optional:
'.ListStyle = fmListStylePlain
'.TextAlign = fmTextAlignRight
'.MultiSelect = fmMultiSelectMulti
'.ListStyle = fmListStyleOption
'.BorderColor = vbRed
End With
Next

End Sub

Sub UserForm_Initialize()

With ListBox1
.AddItem
.List = Application.Transpose(Range("B1:B10"))
End With

End Sub


Bei dem Code tritt folgendes Problem auf.

Wird während der  UserForm_Initialize  eine
einspaltige ListBox1 mit den Zellwerten von B1 bis B10
befüllt kommt es zu einer Fehlermelung, sobald ich durch
Drücken des CommandButton1 daraus eine mehrspaltige machen
möchte.

Streiche ich den gesamten ListBox1 Code innerhalb der
UserForm_Initialize Prozedur geschieht die mehrspaltige
Befüllung der ListBox beim Drücken des CommandButtons hingegen einwandfrei.
Top
#2
Hallo,

ich verstehe zwar den Sinn nicht, warum erst eine einspaltige Listbox eingerichtet werden soll, die dann in eine mehrspaltige "verwandelt" werden soll.
Da das nicht funktioniert, weil es wie bei einer Dim-Einrichtung nur eine Änderung mittels ReDim gibt, wenn die ursprüngliche Dim-Anweisung keine Größe beseitzt, schlage ich Dir einen etwas anderen Weg vor:

1. Richte mit der Inialize Deine mehrspaltige Listbox gleich ein und befülle sie mit dem, was du brauchst.
2. Lege über die Spalten, die du nicht gleich angezeigt haben willst, eine zweite Userform in der gleichen Farbe wie die erste und "verstecke" sie damit bereits in der Inialize.
3. Blende mit dem CommandButton_Click dann nach Bedarf die zweite Userform ein bzw. aus und mache so die weiteren Spalten damit sichtbar oder eben unsichtbar.
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Top
#3
Hallo Günter,

danke für die Info.

Man könnte es vielleicht schon mal so machen (ist noch ein Schnellschuß!!):

Private Sub CommandButton1_Click()  'Alle Spalten von B - E anzeigen
ListBox1.ColumnCount = 4
ListBox1.List = Range("B1:E10").Value
End Sub

Private Sub CommandButton2_Click() 'Nur die ersten beiden
ListBox1.ColumnCount = 2
End Sub

Private Sub CommandButton3_Click() 'Wieder alle Spalten von B-E anzeigen
ListBox1.ColumnCount = 4
End Sub


Aber da fehlen natürlich immer noch sehr viele Steuerungsmöglichkeiten
Top
#4
Hallo Leute,

ich nerv euch nochmal. Die beste Lösung für das Ein- und Ausblenden von Spalten die mir bislang eingefallen
ist läuft über den "Header" also folgende Code Ergänzung (beispielhaft versteht sich):

ListBox1.ColumnHeads = True

ListBox1.ColumnWidths = "4,5 cm ;3,5 cm;3,5 cm;1,5 cm"  'Individuell an die jeweils vorliegende ListBoxbreite auf der Userform anpassen!!

Will man z.B. die 2. Spalte ausblenden:
ListBox1.ColumnWidths = "4,5 cm ;0 cm;3,5 cm;1,5 cm"

Was mich zur nächsten Frage führt:
Wie würde ihr die Headerbreite in der Listbox mit der Maus verändern?
Top
#5
Schau mal hier:  http://www.snb-vba.eu/VBA_Fill_combobox_listbox_en.html
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste