在我的Access数据库中,我有一个包含3个搜索框的多重搜索表单:
按钮Command368上的VBA代码:
Private Sub Command368_Click()
On Error GoTo Command368_Click_Err
DoCmd.ApplyFilter "", "[Table_Name] Like ""*"" & [Forms]![Form_Contacts]![Searchbox_name] & ""*"" And [Table_surname] Like ""*"" & [Forms]![Form_Contacts]![Searchbox_surname] & ""*"" And [Table_organization] Like ""*"" & [Forms]![Form_Contacts]![Searchbox_organization] & ""*"" ", ""
Command368_Click_Exit:
Exit Sub
Command368_Click_Err:
MsgBox Error$
Resume Command368_Click_Exit
End Sub
仅当一个搜索框包含我要搜索的文本值时,是否可以应用过滤器。
例如:如果我在Searchbox_name中写入文本,但Searchbox_surname和Searchbox_organization为空,我只想在名称字段上应用过滤器。
答案 0 :(得分:0)
您可以检查每个控件的值Not IsNull或<> ""然后构建一个动态字符串,其中只包含您需要的过滤器。
问题在于,您是否需要额外检查,如果没有值,请不要添加AND
Dim strFilter
If Not IsNull(Searchbox_name) or Searchbox_name <> "" Then
strFilter = strFilter & "YourFilter"
ElseIf Not IsNull(Searchbox_surname) or Searchbox_surname <> "" Then
strFilter = strFilter & "YourFilter"
ElseIf Not IsNull(Searchbox_organization) or Searchbox_organization <> "" Then
strFilter = strFilter & "YourFilter"
End If
ApplyFilter strFilter
另一个选项是一个数组,如果有值
则添加它Dim filters(3) As String
Dim filters(1) = "X like f"
然后循环使用您需要的值构建过滤器字符串的数组