Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA将查询条件的函数参数作为变量传递_Vba_Ms Access - Fatal编程技术网

VBA将查询条件的函数参数作为变量传递

VBA将查询条件的函数参数作为变量传递,vba,ms-access,Vba,Ms Access,我已经使用VBA一年或更长时间了,但是我完全是自学成才,还远远不够先进。我已经无数次使用StackOverflow解决我的问题,但这是我的第一个问题,所以请原谅任何问题 我有一个带有文本框的表单,我想将其用作查询条件。如果我的文本框只包含一个要搜索的值,我当前可以运行查询,但是如果我要搜索多个值,我会遇到问题 我按照这个过程走到了目前为止 我的计划是使用函数将条件作为字符串传递 类似于条件:GetCrit() 其中GetCrit是一个公共函数,在单独的模块中作为字符串返回字符串 In(“Val

我已经使用VBA一年或更长时间了,但是我完全是自学成才,还远远不够先进。我已经无数次使用StackOverflow解决我的问题,但这是我的第一个问题,所以请原谅任何问题

我有一个带有文本框的表单,我想将其用作查询条件。如果我的文本框只包含一个要搜索的值,我当前可以运行查询,但是如果我要搜索多个值,我会遇到问题

我按照这个过程走到了目前为止

我的计划是使用函数将条件作为字符串传递 类似于条件:
GetCrit()
其中GetCrit是一个公共函数,在单独的模块中作为字符串返回字符串
In(“Value1”,Value2”)
然后我的想法是简单地将参数设置为由函数
GetCrit()
定义的变量。即:查询条件将是
In(GetCrit())

我无法使这两个选项中的任何一个正常工作,因为我认为当前查询正在查找满足字符串
“In(GetCrit())”
的值,因为我的函数被定义为字符串

我计划将文本框更改为包含所有可能值的组合框或列表框,然后使用宏将选择转换为字符串,该字符串可以类似于中的(“Value1”、“Value2”)来读取,但我愿意接受关于更好实现这一点的建议

下面是我的适用代码

在表格内:

Private Sub btnGen_Click()
SetQueryCriteria
End Sub

Public Sub SetQueryCriteria()
Dim MatrixCriteria As String
Dim holder As String
holder = [Forms]![frm_Name]![TXTBox].Value
SetCrit holder
End Sub
在模块1中:

Private strCrit As String

Public Sub SetCrit(Value As String)
   strCrit = Value
End Sub

Public Function getcrit() As String
    getcrit = strCrit
End Function
我的查询条件当前为

In(GetCrit())
谢谢

编辑:
在我继续研究的过程中,我发现可能我想在这里使用的是一个多选列表框

您不能通过一个函数以这种方式进行筛选,因为该函数返回一个字符串,而一个字符串不能包含多个要筛选的项

您可以通过以下方式解决此问题:

Public Sub AlterQuery()
    Dim qdf As QueryDef
    Set qdf = CurrentDb.QueryDefs("Query1")
    qdf.SQL = "SELECT * From Table Where Something In (" & GetCrit() & ")"
End Sub

这将对查询中的条件进行硬编码。如果从表单中打开查询,则可以在查询打开之前运行此代码。

使用多选列表框从同一字段中选择多个搜索参数是有效的方法。请查看。