我现在已经使用VBA一年或更长时间了,但是我完全是自学成才,而且远非先进。我已经使用StackOverflow无数次地解决了我的问题,但这是我的第一个问题,所以请原谅任何问题。
我有一个带有文本框的表单,我想将其用作查询的条件。如果我的文本框只包含我要搜索的1个值,我现在可以运行查询,但是如果我想搜索多个值,我会遇到问题。
我按照这个过程来尽我所能 Using Variables in VBA to Filter Access 2007 Queries
我的计划是使用函数将条件作为字符串传递
类似标准:GetCrit()
其中GetCrit是一个公共函数,作为单独模块中的字符串,返回字符串
In("Value1",Value2")
然后我的想法是简单地将参数设置为由函数GetCrit()
定义的变量。即:查询条件为In(GetCrit())
。
我无法使这些选项中的任何一个工作,因为我相信当前查询正在查找满足字符串"In(GetCrit())"
的值,因为我的函数被定义为字符串。
我打算将文本框更改为包含所有可能值的组合框或列表框,然后使用宏将选择项转换为字符串,可以读取类似于In(“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())
谢谢!
修改 在我继续研究的过程中,我发现也许多选列表框可能就是我想在这里使用的
答案 0 :(得分:1)
您不能以这种方式通过单个函数进行过滤,因为该函数返回单个字符串,而单个字符串不能包含多个要过滤的项目。
您可以通过以下方式解决问题:
Public Sub AlterQuery()
Dim qdf As QueryDef
Set qdf = CurrentDb.QueryDefs("Query1")
qdf.SQL = "SELECT * From Table Where Something In (" & GetCrit() & ")"
End Sub
这会在您的查询中对IN标准进行硬编码。如果从表单中打开查询,则可以在查询打开之前运行此代码。