window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-TCJTE9L38H');

Kombinations- und Listenfelder per Callback füllen

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

Schreibe einen Kommentar