0

OpenForm 関数を使用して、複数選択リスト ボックスの選択内容に基づいてフィルター処理しようとしています。これの正しい構文は何ですか、またはそれを行うためのより良い方法はありますか? 例として、次のように言いましょう。

List Box には、Ken、Mike、および Sandy というオプションがあります。

Car には Car1、Car2、および Car 3 のオプションがあります。すべての車は、そのリスト ボックスの 1 人以上のユーザーによって所有されています。

リスト ボックスから誰かが選択された場合、選択された人が所有する車を含むフォームを開きたいと思います。

ありがとうございました!

4

2 に答える 2

0

JOIN 関数を使用してよりクリーンで安全なコードを作成する

"," "AND" "OR" などの区切り記号を使用して増分 SQL 文字列を繰り返し作成していることに気付いた場合は、配列データの生成を集中化してから、VBA の Join(array, delimiter) 関数を使用すると便利です。

興味深いキーが配列にある場合、フォーム フィルター プロパティの SQL WHERE フラグメントを構築するための複数選択リストボックスからのユーザー選択は、次のようになります。

Private Sub lbYear_AfterUpdate()
    Dim strFilter As String

    Dim selction As Variant
    selction = ListboxSelectionArray(lbYear, lbYear.BoundColumn)

    If Not IsEmpty(selction) Then
        strFilter = "[Year] IN (" & Join(selction, ",") & ")"
    End If

    Me.Filter = strFilter
    If Not Me.FilterOn Then Me.FilterOn = True 
End Sub

選択した lisbok 行から任意の列データを選択する汎用関数は、次のようになります。

'Returns array of single column data of selected listbox rows
'Column index 1..n
'If no items selected array will be vbEmpty
Function ListboxSelectionArray(lisbox As ListBox, Optional columnindex As Integer = 1) As Variant
    With lisbox
        If .ItemsSelected.Count > 0 Then
            Dim str() As String: ReDim str(.ItemsSelected.Count - 1)
            Dim j As Integer
            For j = 0 To .ItemsSelected.Count - 1
                str(j) = CStr(.Column(columnindex - 1, .ItemsSelected(j)))
            Next
            ListboxSelectionArray = str
        Else
            ListboxSelectionArray = vbEmpty
        End If
    End With
End Function

アプリケーション ライブラリ内のいくつかの配列ビルダーとコーディングをより VB.NET に見えるようにすることができます

于 2016-12-06T09:27:32.987 に答える