我正嘗試使用OpenForm函數根據多選列表框中的選項進行過濾。什麼是正確的語法呢,還是有更好的方法去做呢?舉例來說,讓我們假設:Access VBA如何根據多選列表框中的選項篩選記錄集?
列表框中有選項Ken,Mike和Sandy。
車有選項Car1,Car2和Car 3.所有車輛都由該列表框中的一個或多個人擁有。
如果選擇了某人從列表框中選擇,我想打開一個表單,其中包含所選人員擁有的汽車。
謝謝!
我正嘗試使用OpenForm函數根據多選列表框中的選項進行過濾。什麼是正確的語法呢,還是有更好的方法去做呢?舉例來說,讓我們假設:Access VBA如何根據多選列表框中的選項篩選記錄集?
列表框中有選項Ken,Mike和Sandy。
車有選項Car1,Car2和Car 3.所有車輛都由該列表框中的一個或多個人擁有。
如果選擇了某人從列表框中選擇,我想打開一個表單,其中包含所選人員擁有的汽車。
謝謝!
行,所以我想出了一個辦法做到這一點:
以下是我用於它的特定代碼。我在原帖中的例子中使用了汽車和人,但我的實際情況卻不同:估算人員和工作分工是過濾器。如果您有相同問題的人,請告訴我您是否有任何問題!因爲如果不知道更多關於我想要完成的事情,它可能會令人困惑。
Dim strQuery As String
Dim varItem As Variant
'query filtering for estimators and division list box selections
strQuery = ""
If Me.EstimatorList.ItemsSelected.Count + Me.DivisionList.ItemsSelected.Count > 0 Then
For Each varItem In Me.EstimatorList.ItemsSelected
strQuery = strQuery + "[EstimatorID]=" & varItem + 1 & " OR "
Next varItem
If Me.EstimatorList.ItemsSelected.Count > 0 And Me.DivisionList.ItemsSelected.Count > 0 Then
strQuery = Left(strQuery, Len(strQuery) - 4)
strQuery = strQuery + " AND "
End If
For Each varItem In Me.DivisionList.ItemsSelected
strQuery = strQuery + "[DivisionID]=" & varItem + 1 & " OR "
Next varItem
strQuery = Left(strQuery, Len(strQuery) - 4)
End If
使用更清潔和更安全的代碼
的JOIN功能當你發現自己重複建設的增量SQL字符串中包含分隔符「」‘和’‘或’可以很方便地集中生產的數組數據,然後使用VBA Join(數組,分隔符)函數。
如果有趣的鑰匙在一個陣列,從多選列表框的用戶選擇建立一個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
那麼汽車的桌子/表格每輛車只有一個記錄?如果是這樣,是否所有業主都列在同一領域?如果不知道關於你打開的窗體的結構必然會回答你的問題是不可能的。 –
我們需要您的數據方案! – EliteRaceElephant
汽車桌每輛汽車和每輛汽車都有一條記錄,並且可以有多個人(從人員表)連接到它。該表格有一個用於People的多選列表框,另一個用於雙擊的文本框,這將打開一個已過濾的汽車表格,只顯示已被選中的汽車。請讓我知道你是否需要更多信息,謝謝! – Mike