我有一个Access Query,它需要在表单中的组合框中设置一个值才能使用
Criteria: Forms![_SelectCustomer]![CmbSelectCustomer]
然而,到目前为止还不错,我希望查询在使用宏运行时以程序方式打开、读取和关闭此表单。
我一直在关注@David-W-Fenton在这个类似的堆栈溢出问题中的回答,并提出了以下代码:
Public Function rtnSelectCustomer() As Variant
DoCmd.OpenForm "_SelectCustomer", , , , , acDialog
With Forms![_SelectCustomer]
If .Tag <> "Cancel" Then
rtnSelectCustomer = Nz(!CmbSelectCustomer, "*")
Else
rtnSelectCustomer = "*"
End If
End With
Close acForm, "_SelectCustomer"
End Function
我从查询中要筛选的属性的条件字段中调用此函数:
Like rtnSelectCustomer()
在这一点上,我遇到了几个问题:
首先,我不确定将实际代码放在哪里:我似乎无法在"Microsoft Access class Objects"文件夹中为我的查询创建特定的类或模块,所以我不得不在Modules文件夹中创建自己的模块。(这是正确的方法吗?)
第二个问题是,当我使用我创建的当前模块中的代码运行查询时,我会得到以下错误:
运行时错误"2486":你现在不能执行此操作。
如有任何建议,将不胜感激
编辑:
我应该澄清的是,在进一步测试后,似乎导致运行时错误的线路如下:
DoCmd.OpenForm "_SelectCustomer", , , , , acDialog
该函数实际上是在用以下代码替换内部代码时调用的。确实有效(尽管无可否认是无用的)
Public Function rtnSelectCustomer() As Variant
rtnSelectCustomer
End Function
一般来说,我讨厌微软"预先编程"的东西,我宁愿自己做。这似乎也是你的情况。。。
我会分两步来做。
步骤1:向用户显示内容,就好像查询正在运行(而不是实际运行),并存储用户选择的值。
步骤2:使用值参数化查询
如果你的功能运行良好,那么只需记住用户选择了什么,然后做:
set qdf = new QueryDef
' set the qdf and add all parameters to it
DoCmd.Execute qdf
为了进一步参考QueryDef的工作原理,我将使用这个msdn站点