Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.
Es gibt verschiedene Arten, Kombinations- und Listenfelder mit Daten zu füllen: Sie können diese an Tabellen oder Abfragen binden, einfach mit einer Wertliste füllen oder die Namen der Felder einer Tabelle darin anzeigen. Es gibt jedoch noch eine weitgehend unbekannte Methode, die Nachteile der übrigen Möglichkeiten ausbügelt, aber auch etwas aufwendiger zu implementieren ist. Dabei kommt eine sogenannte Callback-Funktion zum Einsatz, welche die anzuzeigenden Daten zum Kombinationsfeld hinzufügt.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1207_KombinationsfeldCallback.mdb.
Kombinationsfelder und Listenfelder füllen
Der Optimalfall beim Füllen eines Kombinationsfeldes ist das Vorhandensein einer Tabelle oder Abfrage als Datenherkunft. In diesem Fall behalten Sie den Wert Tabelle/Abfrage für die Eigenschaft Herkunfts-typ bei.
Dies ist jedoch nicht immer gegeben: Wenn Sie beispielsweise eine Liste aller in einem Verzeichnis enthaltenen Dateien in einem Kombinationsfeld anzeigen wollen, liegen die Daten zunächst nicht in einer Tabelle vor. Nun gibt es die Möglichkeit, die Daten einfach in Form einer Wertliste aneinanderzureihen.
Dazu fügen Sie alle Dateinamen durch Semikola voneinander getrennt zu einer Zeichenkette zusammen, stellen die Eigenschaft Herkunftsart des Kombinations-feldes auf Wertliste ein und weisen die Zei-chen-kette per VBA der Eigenschaft RowSource zu. Dies hat allerdings den Nachteil, dass die Wertliste eines Kombinationsfeldes nicht beliebig lang sein darf – genau genommen sind es weniger als 40.000. Welche Anzahl genau möglich ist, können Sie mit einem kleinen Testformular ermitteln. Dieses finden Sie in der Beispieldatenbank unter dem Namen frmLangeWertliste. Beim Laden löst das Formular die folgende Prozedur aus:
Private Sub Form_Load() Dim l As Long For l = 1 To 100000 On Error Resume Next Me!cboLangeWertliste.RowSource = _ String(l, "a") If Not Err.Number = 0 Then MsgBox "Maximal " & l & " Zeichen." Exit Sub End If Next l End Sub
Die Prozedur fügt schlicht und einfach eine immer längere Zeichenkette für die Eigenschaft Wertliste ein – bis dies irgendwann einen Fehler auslöst. Auf dem Testsystem lieferte dies beispielsweise eine zulässige Länge von 32.751 Zeichen. übrigens: Unter älteren Access-Versionen war die Anzahl der Zeichen auf 2.048 festgelegt – dort war der Einsatz von Callback-Funktionen noch wesentlich öfter gefragt.
Wenn Sie nun den Inhalt von Verzeichnissen mit vielen Dateien darstellen möchten, kann dies einen Fehler auslösen, wenn die Anzahl der erlaubten Zeichen für die Eigenschaft RowSource überschritten wird.
Liste per Callback-Funktion füllen
Die in diesem Artikel vorgestellte Funktion verwendet eine weitere Alternative, bei der statt eines der verfügbaren Werte Tabelle/Abfrage, Wertliste oder Feldliste einfach der Name einer VBA-Funktion als Wert der Eigenschaft Herkunftsart angegeben wird. Die Angabe eines Wertes für die Eigenschaft Datensatzherkunft ist in diesem Fall nicht nötig.
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
Testzugang
eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel
diesen und alle anderen Artikel mit dem Jahresabo