我运气不好
特定控件,它们的属性和过去的循环。 我以为我会分享这段代码,随时以适合您需要的任何方式进行修改/模块化。 可以从组合框after_update事件或“ clear_filter”按钮after_update事件中调用此函数。 我把它放在一个模块中。 哦,还有一件事...我碰巧在组合框的第1列中有我的FK,这可能需要更改。 抱歉,如果我“评论过多”,由于评论不佳,我迷失了很多次。 如果有更好的方法可以完成此操作,请随时告诉我,根据我的经验,vba的访问权限仅限于此区域。
Public Function frmSearch_cbxFilter(Optional clear As Boolean)
Dim frm As Form
Dim sbFrm As SubForm
Dim ctrl As Control
Dim cbxItem As Variant
Dim cbxValue As Variant
Dim strFilter As String
Dim count As Integer
Dim i As Integer
Set frm = Forms!frmSearch
Set sbFrm = frm!sbfrmProdDetailSearch
cbxItem = Array("cbxUser", "cbxDepartment", "cbxComment") '"Named" Comboboxes
cbxValue = Array("userID", "departmentID", "commentID") 'Filter Fields | Count must match cbxItem
count = UBound(cbxItem, 1) 'Number of elements in array
strFilter = "1=1"
If clear Then 'Clear set to true
For i = 0 To count
For Each ctrl In frm.Controls 'Every control on form
If ctrl.Name = cbxItem(i) Then 'Only "Named" controls on form
ctrl.Value = "" 'Clear control value
End If
Next
Next
sbFrm.Form.FilterOn = False
Else 'Clear not set
For i = 0 To count
For Each ctrl In frm.Controls 'Every control on form
If ctrl.Name = cbxItem(i) Then 'Only "Named" controls on form
If Not IsNull(ctrl.Column(1)) Then 'Only update filter if control contains a value
strFilter = strFilter & " AND [" & cbxValue(i) & "]=" & ctrl.Column(1) 'Build filter
End If
End If
Next
Next
sbFrm.Form.Filter = strFilter
sbFrm.Form.FilterOn = True
End If
End Function
祝好运。
:)
From: https://bytes.com/topic/access/insights/861547-multiple-combobox-filter-clear-option