Ms access 访问如何使用Me.Filter cmd

Ms access 访问如何使用Me.Filter cmd,ms-access,filter,Ms Access,Filter,我有一个关于过滤函数的问题 当我输入关键字时,使用按钮搜索是否有任何相关数据时,我很好。我的代码是 Private Sub Command112_Click() Dim strSearch As String Dim strFilter As String strSearch = "'*" & Forms![TestForm].SearchInput & "*'" Debug.Print strSearch strFilter = _

我有一个关于过滤函数的问题

当我输入关键字时,使用按钮搜索是否有任何相关数据时,我很好。我的代码是

Private Sub Command112_Click()
    Dim strSearch As String
    Dim strFilter As String

    strSearch = "'*" & Forms![TestForm].SearchInput & "*'"
    Debug.Print strSearch

    strFilter = _
    "[IMSDP] Like " & strSearch & _
                " Or [EN8] Like " & strSearch & _
                " Or [EN10] Like " & strSearch & _
                " Or [Card] Like " & strSearch & _
                " Or [Status] Like " & strSearch & _
                " Or [IMSDP] Like " & strSearch

    Debug.Print strFilter

    Me.Filter = strFilter
    Me.FilterOn = True
End Sub
但一旦我想搜索多个关键字,它就不起作用了。 我的代码如下所示

Private Sub Search_Click()

    Dim strSearch As Variant
    Dim strFilter1 As Variant
    Dim strFilter2 As Variant
    Dim SpacePosition As Variant
    Dim Lstr As Variant
    Dim Rstr As Variant
    Dim IMSDP1 As Variant
    Dim IMSDP2 As Variant

    strSearch = "'*" & Forms![tryForm].IMSDPInput & "*'"
    Debug.Print strSearch

    SpacePosition = InStr(1, [strSearch], " ")
    Lstr = Trim(Left([strSearch], [SpacePosition] - 1))
    Rstr = Trim(Right([strSearch], Len([strSearch]) - [SpacePosition]))

    IMSDP1 = Lstr
    IMSDP2 = Rstr

    MsgBox "IMSDP1 is " & IMSDP1 & " and IMSDP2 is " & IMSDP2 & ""

    strFilter1 = _
    "[IMSDP] Like " & IMSDP1 & _
    "And [IMSDP] Like " & IMSDP2

    Me.Filter = strFilter
    Me.FilterOn = True

End Sub
有人能帮忙吗?多谢各位

我现在有如下代码(您可能认为Status=IMSDP)

如果我只输入一个关键字(例如“20”)进行搜索,它会起作用,但如果我输入类似“20 27”的内容,它就会失败


我只知道我可以用Excel一样写,范围(A1).AutoFielter字段:=5,标准1:=StaseS1,运算符:=XLor,准则2:= StaseS2,但我不知道如何在Access

< P>中,如果状态字段是数字类型,用户总是输入由空间分隔的“关键字”,请考虑以下内容:

Private Sub Command14_Click()
If Not IsNull(Me.StatusInput) Then
   Me.Filter = "IN(" & Replace(Me.StatusInput, " ", ",") & ")"
End If
Me.FilterOn = True
End Sub
如果输入以逗号分隔,则更简单:
Me.Filter=“IN”(“Me.StatusInput&”)

对于文本字段:
“在('”&Replace(Me.StatusInput,“,”,“,”&“)中”

“在('”&Replace(Me.StatusInput,“,”,“,”,“,”&“)中”

无论代码结构如何,都取决于用户在文本框中正确且一致地输入字符串

如果希望对用户可以输入的值进行更多控制,请使用多选列表框和VBA循环通过列表框中的选定项来构造逗号分隔值标准。一个相当常见的主题和许多可用于循环列表框的代码示例


而且根本不需要阵列

听起来你想在
[IMSDP]
类似于
IMSDP1
或类似于
IMSDP2
的地方挑选记录-听起来你不想让它“像”它们两个。(例如,
“ABCDE”像“ABC*”和“ABCDE”像“XYZ*”
将是错误的,因为它不像
“XYZ*”
,但是
“ABCDE”像“ABC*”或“ABCDE”像“XYZ*”
)谢谢您的回复。你的意思是我不能让我。FilterOn=真的,因为我有两种情况?我要找的是,我有一个非常大的数据库和一个名为“IMSDP”的列(其中包含ABDAM91、YCKAE02等信息,格式如下)。这个程序的目的是让用户输入诸如“ABD或91或AE(在上面的代码中等于strearch)”之类的词,然后从[IMSDP]列进行搜索。。。是的。。。我想要手术室,但不是和。但即使我换了它,它还是不起作用。对不起,我在这方面真的是新手,只是自学。比如说没有通配符也可能是等号。您正在使用单个文本框供用户输入任何文本?这只是一个字符串。将单个字符串转换为筛选条件语句可以通过解析数组来完成。状态是文本字段吗?在“或”前面加一个空格,这样构造就不会同时运行:
“或”
。使用=符号代替LIKE。如果您想允许任意数量的值,请使用数组。非常感谢。看起来不错,但它说(,)中的查询表达式中存在语法错误(缺少运算符)。另外,我可以知道,我如何与我的数据库进行比较,以查找从我那里获得的输入。过滤器?这就是我语法错误的原因吗?为什么只有逗号?如果文本框中除了Null之外还有其他内容,那么代码将尝试构建标准。看起来只有一个空间。正如我所说,这取决于教育用户输入文本的内容和方式。这个方法对我很有效。。实际上是(20,27),因为我的输入是20和27。谢谢你提供给我这个方法,我认为它是好的,但我不知道如何处理它,即使这是我应该做的。我只完成了一个可以输入一个或两个或三个状态进行搜索,但未能构建一个可以处理三个以上输入的状态。我发现我面临着另一个问题。对于status,它是我的案例的两位数字,但是如果我需要搜索像“ABDAE91 ABDAM02”这样的字符串,“”&[Forms]![tryForm]![IMSDP_Input]&“”不适用于我使用Left()和Right()函数将其分成两部分。那么IN(20,27)不起作用了吗?你为什么不知道怎么处理?我提供了程序,它对我有效。您有两个字段要执行此操作?文本字段有点棘手。
Private Sub Command14_Click()
If Not IsNull(Me.StatusInput) Then
   Me.Filter = "IN(" & Replace(Me.StatusInput, " ", ",") & ")"
End If
Me.FilterOn = True
End Sub