从查询访问调用宏(打开窗体) 运行时错误"2486":目前无法执行此操作



我有一个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站点

相关内容

最新更新