Eigenes Array einsetzen
Sie wissen in einer typischen ForNext-Schleife genau, wie groß das Array am Ende dimensioniert sein muss.
Anstatt dieses mit jeder AddItem-Zeile mühsam immer wieder neu zu dimensionieren, lässt sich das Array sogar mit einer einzigen Zeile der List-Eigenschaft direkt zuweisen. Das dauert für 100.000 Zeilen statt der eben gemessenen anderthalb Minuten weniger als eine Sekunde!
Sie sollten also für längere Listen unbedingt vorher ein eigenes Array mit den Daten füllen und dieses erst am Ende, wie in diesem Listing, an das Listenfeld Listbox1 übergeben:
Private Sub UserForm_Initialize() Dim Inhalt(1 To 1000000) As String Dim dblAnzahl As Double With Me.Listbox1 For dblAnzahl = 1 To 1000000 Inhalt(dblAnzahl) = "Zeile " & dblAnzahl Next .List = Inhalt() End With End Sub
Mit dieser Technik erreichen Sie Bruchteile der sonst notwendigen Laufzeit, ohne dass der Programmieraufwand nennenswert gestiegen wäre.
Listen-Auswahl vorbesetzen
Natürlich können Kombinationsfelder und Listenfelder mehr, als nur Daten anzuzeigen. Sie dienen ja im Wesentlichen der Auswahl eines Wertes aus einem Angebot von vielen.
Wenn Ihr Dialog beim Bestätigen eine erfolgte Auswahl zwingend voraussetzt, ist es sinnvoll, direkt in UserForm_Initialize irgendeinen Wert auszuwählen. Das geschieht zum Beispiel mit Listbox1.Value = "gelb" nach Vorbelegung der Liste mit den AddItem-Methode-Aufrufen, falls der gewünschte Wert bekannt ist.
Um nur sicherzustellen, dass überhaupt ein Wert markiert ist, können Sie einfach den ersten Eintrag markieren, indem Sie Listbox1.ListIndex = 0 im Code schreiben. Möglicherweise sollten Sie vorher noch mit If Listbox1.ListCount > 0 Then überprüfen, ob überhaupt Zeilen enthalten sind.
Mehrere Zeilen markieren
Bisher galt es als selbstverständlich, dass nur ein Wert auswählbar ist. Und nur so lange ist es auch sinnvoll, dies mit der Value-Eigenschaft auszulesen. Sobald Sie aber im Entwurf die Eigenschaft MultiSelect auf fmMultiSelectMulti oder fmMultiSelectExtended stellen, können beliebig viele Zeilen vom Benutzer markiert werden.
Der Wert fmMultiSelectMulti bedeutet, dass jeder Klick die jeweilige Zeile zwischen markiert und nicht-markiert umschaltet. Mit fmMultiSelectExtended verhält sich die Liste so wie der Windows-Explorer, also Einzel-Auswahl mit gedrückter Strg-Taste und Sammelauswahl mit gedrückter Umschalt-Taste beim Mausklick.
Dies ist eine Leseprobe
Möchten Sie den Beitrag komplett lesen? Dann werden Sie Probemitglied und testen Sie akademie.de 14 Tage kostenlos!
Auf Word/Excel-VBA: Listenfeld und Kombinationsfeld erfahren Sie mehr über diesen Beitrag und die weiteren Leseproben.
Weitere Informationen finden Sie auf unserer Infoseite zur Mitgliedschaft und in unseren AGB.
Ich bin bereits Mitglied