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.