我有一个 .xlsm 文件,它在新电子表格中编译来自 5 个 Access 数据库表的条目,然后打开 Access,并运行几个查询来更新主表(我知道,数据库的体系结构很糟糕......)问题(有时)出现以下代码,
Dim accessApp
Set accessApp = CreateObject("Access.Application")
accessApp.UserControl = True
accessApp.OpenCurrentDatabase ("G:\Dir1\Dir2\Processing Database.accdb")
DoCmd.SetWarnings False
DoCmd.OpenQuery "DeleteFTP", acViewNormal, acEdit
在
OpenQuery
行我收到“运行时错误 2486,您目前无法执行此操作”,是否需要加载某种代码库或其他东西来防止这种间歇性问题?
最佳答案
我认为您的 Processing Database.accdb 数据库包含一个名为 DeleteFTP 的已保存查询,并且您希望执行该查询。
如果这是真的,请限定 DoCmd
与应用程序对象 accessApp
...
accessApp.DoCmd.OpenQuery "DeleteFTP", acViewNormal, acEdit
请注意,如果您的 Excel 项目不包含 Access 引用,它将无法识别这些 Access 常量
acViewNormal
和 acEdit
.在这种情况下,您可以使用常量的值而不是它们的名称:accessApp.DoCmd.OpenQuery "DeleteFTP", 0, 1
但是我不确定这些建议是否足够,因为您说问题是间歇性的,在我看来,您当前的代码总是会失败。所以还有一些我不明白的事情。
关闭
SetWarnings
压制信息。我不知道它是否在这种情况下隐藏了线索,但建议你还是避免它。如果您使用 DAO.Database.Execute
,则不需要它。方法及其 dbFailOnError
执行删除查询的选项...'DoCmd.SetWarnings False
'DoCmd.OpenQuery "DeleteFTP", acViewNormal, acEdit
accessApp.CurrentDb.Execute "DeleteFTP", 128 ' dbFailOnError = 128
关于excel - 通过 Excel VBA 运行 Access 查询时出现间歇性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31723856/