öffentlich
Redaktion Druckversion

Word/Excel-VBA: Listenfeld und Kombinationsfeld

Beitrag bewerten
Stand: 12. April 2011

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.

Mitglied werden

Als zahlendes Mitglied von akademie.de haben Sie vollen Zugriff auf alle Inhalte und können alle PDF-Dateien, Checklisten, Mustervorlagen und Anwendungen herunterladen.

Sind Sie sich noch unsicher? Dann wählen Sie die Option “akademie.de kostenlos testen”. So können Sie sich 14 Tage in Ruhe umschauen. Downloads stehen Ihnen in dieser Zeit nicht zur Verfügung. Gefällt Ihnen akademie.de nicht, reicht ein formloser Widerruf per E-Mail innerhalb der ersten 14 Tage. Es entstehen für Sie keine Kosten. Widerrufen Sie nicht, erhalten Sie nach Ablauf von 14 Tagen vollen Zugriff und der Mitgliedsbeitrag wird abgebucht.

Ich bin bereits Mitglied
Mitglied werden!
Ich entscheide mich für folgende Zahlungsweise:

Inhalt

Downloads zu diesem Beitrag

Newsletter abonnieren