次の方法で共有


RowSourceType プロパティ (ユーザー定義関数) コード引数の値

作成する Visual Basic 関数は、5 つの引数を受け入れる必要があります。 最初の引数は、コントロールとして宣言し、他の 4 つの引数は、バリアント型 (Variant) として宣言します。 関数の戻り値は、バリアント型 (Variant) です。

関数関数名 (fldAs ControlidAs VariantrowAs VariantcolAs VariantcodeAs Variant) As Variant

Function プロシージャには、以下の 5 つの必須の引数があります。

主張 説明
fld データを表示するリスト ボックスまたはコンボ ボックスを参照するコントロール変数。
id 入力されているコントロールを識別する一意の値。 これは、複数のリスト ボックスまたはコンボ ボックスに同じユーザー定義関数を使用し、それらを区別する必要がある場合に便利です。 (この例では、この変数を Timer 関数の値に設定します)。
row データを表示する行の番号 (0 ベース)。
col データを表示する列の番号 (0 ベース)。
code 要求される情報の種類を表す組み込み定数。

注:

リストに項目を挿入するユーザー定義関数は、何度も呼び出されることがあります。 その間、情報を保存しておく必要がある場合は、Static 変数の使用をお勧めします。

引数 code に異なる値を使って、ユーザー定義関数を繰り返し呼び出して、必要な情報を指定します。 引数 code に指定できる組み込み定数の一覧を次に示します。

定数 意味 関数の戻り値
acLBInitialize Initialize 関数でリストを作成できる場合は 0 以外の値を返し、リストを作成できない場合は False (0) または Null 値を返します。
acLBOpen 開く 関数でリストを作成できる場合は 0 以外の ID 値を返し、リストを作成できない場合は False または Null 値を返します。
acLBGetRowCount 行数 リスト内の行数 (0 を指定できます)。不明な場合は -1。
acLBGetColumnCount 列数 リストに含まれる列の数 (1 以上の整数) を返します。この値は、プロパティ シートの値と一致する必要があります。
acLBGetColumnWidth 列幅 col 引数で指定された列の幅 (twip 単位)。-1 は、既定の幅を使用します。
acLBGetValue リスト エントリ 指定列 (引数 col) の指定行 (引数 row) に表示するリスト項目を返します。
acLBGetFormat 書式文字列 row 引数と col 引数で指定された行と列に表示されるリスト エントリの書式設定に使用する文字列の書式設定。-1 を使用して既定の形式を使用します。
acLBEnd 終了 (ユーザー定義関数を最後に呼び出すときには、必ずこの値を使用します。) 何もしない。
acLBClose (未使用) 不使用。

acLBInitialize、acLBOpenacLBGetRowCount、acLBGetColumnCount に対してユーザー定義関数を 1 回呼び出します ユーザー定義関数を初期化し、クエリを開き、行と列の数を決定します。

アクセスでは 、acLBGetColumnWidth に対してユーザー定義関数を 2 回呼び出します。1 回は、リスト ボックスまたはコンボ ボックスの合計幅を決定し、2 回目は列の幅を設定します。

ユーザー定義関数が acLBGetValueacLBGetFormat に対して呼び出されてリスト エントリを取得し、文字列の書式を設定する回数は、エントリの数、ユーザーのスクロール、およびその他の要因によって異なります。

フォームが閉じられた場合、またはリスト ボックスまたはコンボ ボックスが照会されるたびに、ユーザー定義関数が acLBEnd に対して呼び出されます。

特定の値 (列の数など) が必要な場合は常に、 Null または無効な値を返すと、Access はそのコードでユーザー定義関数の呼び出しを停止します。

ヒント

この例の Select Case コード構造を、独自の RowSourceType プロパティのユーザー定義関数のテンプレートとして使用します。

次の使用例では、ユーザー定義関数が、本日の日付以降の 4 週間分の月曜日の一覧を返します。 To call this function from a list box control, enter ListMondays as the RowSourceType property setting and leave the RowSource property setting blank.

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

The next example uses a static array to store the names of the databases in the current directory. To call this function, enter ListMDBs as the RowSourceType property setting and leave the RowSource property setting blank.

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

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。