Codeargumentwerte der RowSourceType-Eigenschaft (benutzerdefinierte Funktion)
Die visual Basic-Funktion, die Sie erstellen, muss fünf Argumente akzeptieren. Das erste Argument muss als Steuerelement deklariert sein, und die verbleibenden Argumente müssen als Werte vom Typ Variant deklariert sein. Die Funktion selbst muss einen Wert vom Typ Variant zurückgeben.
Funktionsfunktionsname (fldAs Control, idAs Variant, rowAs Variant, colAs Variant, codeAs Variant) As Variant
Die Funktion hat die folgenden 5 erforderlichen Argumente.
Argument | Beschreibung |
---|---|
Fld | Eine Steuerelementvariable, die auf das zu füllende Listenfeld oder Kombinationsfeld verweist. |
id | Ein eindeutiger Wert, der das zu füllende Steuerelement kennzeichnet. Dies ist hilfreich, wenn Sie die gleiche benutzerdefinierte Funktion für mehrere Listenfelder oder Kombinationsfelder verwenden möchten und zwischen diesen unterscheiden müssen. (Das Beispiel stellt diese Variable auf den Wert der Funktion Timer ein.) |
Zeile | Die zu füllende Zeile (Zeilenindex beginnt mit Null). |
Col | Die zu füllende Spalte (Spaltenindex beginnt mit Null). |
code | Eine systeminterne Konstante, die die Art der angeforderten Informationen festlegt. |
Hinweis
Da Microsoft Access eine benutzerdefinierte Funktion mehrmals aufruft, um Elemente zu einer Liste hinzuzufügen, müssen Sie Informationen zwischen den Aufrufen bewahren. Die beste Möglichkeit dazu bietet die Verwendung von Static-Variablen.
Microsoft Access ruft die benutzerdefinierte Funktion wiederholt mit jeweils verschiedenen Werten im Argument Code auf, um die für die Funktion benötigten Informationen anzugeben. Für das Argument Code können die folgenden systeminternen Konstanten verwendet werden.
Konstante | Bedeutung | Funktion gibt zurück |
---|---|---|
acLBInitialize | Initialize | Wert ungleich 0, wenn die Funktion die Liste füllen kann; andernfalls False (0) oder Null. |
acLBOpen | Öffnen | ID-Wert ungleich 0, wenn die Funktion die Liste füllen kann; andernfalls False oder Null. |
acLBGetRowCount | Anzahl von Zeilen | Anzahl der Zeilen in der Liste (kann null sein); -1, wenn unbekannt. |
acLBGetColumnCount | Anzahl von Spalten | Anzahl von Spalten in der Liste (immer ungleich 0); muss dem Wert aus dem Eigenschaftenfenster entsprechen. |
acLBGetColumnWidth | Spaltenbreite | Breite (in Twips) der spalte, die durch das Argument col angegeben wird; -1, um die Standardbreite zu verwenden. |
acLBGetValue | Listeneintrag | Der in der Zeile und Spalte anzuzeigende Listeneintrag, festgelegt von den Argumenten Zeile und Spalte. |
acLBGetFormat | Formatzeichenfolge | Formatzeichenfolge, die zum Formatieren des Listeneintrags verwendet werden soll, der in der Zeile und Spalte angezeigt wird, die durch die Argumente zeile und col angegeben wird; -1, um das Standardformat zu verwenden. |
acLBEnd | Ende (der letzte Aufruf einer benutzerdefinierten Funktion verwendet immer diesen Wert) | Nichts. |
acLBClose | (Nicht verwendet) | Nicht verwendet. |
Access ruft Ihre benutzerdefinierte Funktion einmal für acLBInitialize, acLBOpen, acLBGetRowCount und acLBGetColumnCount auf. Sie initialisiert die benutzerdefinierte Funktion, öffnet die Abfrage und bestimmt die Anzahl der Zeilen und Spalten.
Access ruft Ihre benutzerdefinierte Funktion zweimal für acLBGetColumnWidth auf– einmal, um die Gesamtbreite des Listenfelds oder Kombinationsfelds zu bestimmen, und ein zweites Mal, um die Spaltenbreite festzulegen.
Wie oft Ihre benutzerdefinierte Funktion für acLBGetValue und acLBGetFormat (Abrufen von Listeneinträgen und Formatieren von Zeichenfolgen) aufgerufen wird, ist variabel und hängt von der Anzahl von Einträgen, von Bildläufen des Benutzers und anderen Faktoren ab.
Access ruft die benutzerdefinierte Funktion für acLBEnd auf, wenn das Formular geschlossen wird oder jedes Mal, wenn das Listenfeld oder Kombinationsfeld abgefragt wird.
Wenn ein bestimmter Wert (z. B. die Anzahl der Spalten) erforderlich ist, führt die Rückgabe von NULL oder einem ungültigen Wert dazu, dass Access nicht mehr die benutzerdefinierte Funktion mit diesem Code aufruft.
Tipp
Verwenden Sie die Codestruktur Select Case aus dem Beispiel als Vorlage für Ihre eigenen benutzerdefinierten RowSourceType-Eigenschaftenfunktionen .
Beispiel
Die folgende benutzerdefinierte Funktion gibt eine Liste der nächsten vier Montage, die dem heutigen Datum folgen, zurück. Damit diese Funktion aus dem Listenfeld-Steuerelement aufgerufen werden kann, geben Sie MontageAuflisten als Einstellung der Eigenschaft RowSourceType an, und lassen Sie die Eigenschaft RowSource leer.
Public Function ListMondays(fld As Control, id As Variant, _
row As Variant, col As Variant, code As Variant) _
As Variant
Dim Offset As Integer
Dim WeekdayDate As Date
Select Case code
Case acLBInitialize ' Initialize.
ListMondays = True
Case acLBOpen ' Open.
ListMondays = Timer ' Unique ID.
Case acLBGetRowCount ' Get rows.
ListMondays = 4
Case acLBGetColumnCount ' Get columns.
ListMondays = 1
Case acLBGetColumnWidth ' Get column width.
ListMondays = -1 ' Use default width.
Case acLBGetValue ' Get the data.
Offset = Abs((9 - Weekday(Date)) Mod 7)
WeekdayDate = DateAdd("d", _
Offset + 7 * row, Date)
ListMondays = Format(WeekdayDate, _
"mmmm d")
End Select
End Function
Im nächsten Beispiel wird ein statisches Datenfeld verwendet, um die Namen der Datenbanken im aktuellen Verzeichnis zu speichern. Sie rufen diese Funktion auf, indem Sie MDBsAnzeigen als Einstellung der Eigenschaft RowSourceType eingeben und die Eigenschaft RowSource leer lassen.
Public Function ListMDBs(fld As Control, id As Variant, _
row As Variant, col As Variant, code As Variant) _
As Variant
Static dbs(127) As String
Static Entries As Integer
Dim ReturnVal As Variant
ReturnVal = Null
Select Case code
Case acLBInitialize ' Initialize.
Entries = 0
dbs(Entries ) = Dir("*.MDB")
Do Until dbs(Entries) = "" Or Entries >= 127
Entries = Entries + 1
dbs(Entries) = Dir
Loop
ReturnVal = Entries
Case acLBOpen ' Open.
' Generate unique ID for control.
ReturnVal = Timer
Case acLBGetRowCount ' Get number of rows.
ReturnVal = Entries
Case acLBGetColumnCount ' Get number of columns.
ReturnVal = 1
Case acLBGetColumnWidth ' Column width.
' -1 forces use of default width.
ReturnVal = -1
Case acLBGetValue ' Get data.
ReturnVal = dbs(row)
Case acLBEnd ' End.
Erase dbs
End Select
ListMDBs = ReturnVal
End Function
Support und Feedback
Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für