访问VBA ApplyFilter

时间:2016-02-02 08:18:29

标签: ms-access access-vba

在我的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为空,我只想在名称字段上应用过滤器。

1 个答案:

答案 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"

然后循环使用您需要的值构建过滤器字符串的数组