Word/Excel-VBA: Listenfeld und Kombinationsfeld

Mehrspaltige Listen

Bisher noch keine Bewertungen für diesen Artikel.

Mehrspaltige Listen

Oftmals soll zu dem eigentlichen Wert noch eine Zusatzinformation angezeigt werden, bei Dateinamen zum Beispiel die Dateigröße oder das letzte Speicherdatum.

Weitere Werte in Column-Eigenschaft

Dafür wird im Entwurf die ColumnCount-Eigenschaft auf die entsprechende Anzahl erhöht, hier also auf 3. Dann kann nach je einer AddItem-Methode anhand der Column-Eigenschaft mit Angabe der Spalte zur Laufzeit der passende Inhalt zugewiesen werden, wie es im folgenden Listing zu sehen ist.

Private Sub UserForm_Initialize()
	Dim strDatei As String
	Dim i As Integer
	
	Const cstrPfad = "C:\"
	
	strDatei = Dir(cstrPfad & "*.*")
		
	With Me.Listbox1
		Do Until strDatei = vbNullString
			.AddItem strDatei
			.Column(1, .ListCount - 1) = FileLen(cstrPfad & strDatei)
			.Column(2, .ListCount - 1) = FileDateTime(cstrPfad & strDatei)
			strDatei = Dir()
		Loop
	End With
End Sub
58200_dateienauswahlmehrspaltig-png

Mehrspaltige Datei-Auswahl in Listenfeld

Da die FileLen- und die FileDateTime-Funktion den kompletten Dateinamen mit Pfad benötigen, die Dir-Funktion aber nur den Dateinamen alleine liefert, wurde der Pfad hier in eine Konstante cstrPfad ausgelagert und mehrfach aufgerufen.

Die Column-Eigenschaft benötigt als ersten Parameter die Nummer der Spalte, wobei diese mit 0 beginnen. Der zweite, optionale Parameter gibt die Zeilennummer an, wenn es nicht diejenige der markierten Zeile ist.

Am einfachsten ist der Zugriff über die Zeilen-Anzahl mit ListCount - 1, da nach AddItem die neue Zeile an letzter Position steht und auch hier die Nummerierung bei 0 beginnt.

Etwas gewöhnungsbedürftig ist sicherlich die Tatsache, dass AddItem eine Methode ist und den Parameter daher mit Leerzeichen folgen lässt, während Column als Eigenschaft einen neuen Inhalt mit Gleichheitszeichen zuweist. Es ist aber konsequent, da mit AddItem ja eine neue Zeile erzeugt wird, deren Eigenschaften dann mit Column geändert werden.