öffentlich
Redaktion Druckversion

Word/Excel-VBA: Listenfeld und Kombinationsfeld

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.

Als Mitglied können Sie diesen Beitrag weiterlesen!

Werden Sie Mitglied und testen Sie akademie.de 14 Tage lang kostenlos!

In den ersten 14 Tagen haben Sie Zugriff auf alle Inhalte auf akademie.de, außer Downloads. Sie können in dieser Zeit ohne Angabe von Gründen stornieren. Eine E-Mail an service@akademie.de genügt. Nur wenn Sie Mitglied bleiben, wird der Mitgliedsbeitrag nach Ende der 14tägigen Stornofrist abgebucht.

Ich bin bereits Mitglied
Jetzt Mitglied werden und akademie.de 14 Tage kostenlos testen
Ich entscheide mich für folgende Zahlungsweise:
14 Tage Stornorecht:
Ich kann meine Mitgliedschaft in den ersten 14 Tagen jederzeit formlos stornieren, z.B. per E-Mail an service@akademie.de.

Inhalt

Downloads zu diesem Beitrag

Newsletter abonnieren