我有一个Access(2013)数据库,用于存储/处理从Qualtrics在线调查中收到的所有数据。从Qualtrics下载的原始数据位于一个格式不佳的CSV文件中,无法导入到Access中,因此我在Excel(2013)中有一个相当复杂的宏,可用于在导入到Access之前对数据进行预处理。
在Access中,我使用以下代码打开包含宏的excel文件,运行宏,保存工作簿,然后关闭它。几个月来一直运行良好,但是现在当我运行它时,它在Excel宏的末尾停止,并显示运行时错误:-2147417856自动化错误系统调用失败。
ActivateOrOpenWorkbook WbkName & ".xlsm", strWbkPath
appExcel.Run ProcName, ProcArg
appExcel.Workbooks(WbkName).Save
If appExcel.Workbooks.Count = 1 Then
appExcel.Quit
Else
appExcel.Workbooks(WbkName).Close True
End If
ActivateOrOpenWorkbook只是一个自定义函数,可以准确执行其名称所暗示的功能,appExcel是Excel Application。工作簿始终可以正常打开,并且宏开始运行,但是它实际上从未达到控制权返回到Access VBA并保存工作簿的地步。
如果我在运行Access过程之前打开工作簿,在每个主要的VBA步骤(在Access和Excel中)都插入断点,然后一次遍历整个Sub,那么它确实运行良好。如果我尝试让VBA从头到尾运行所有内容,那只会失败。
根据这些证据以及我在网上看到的类似问题的故事,我怀疑由于Excel宏的运行时间太长而发生了错误(我们最近在Qualtrics调查中添加了一些新变量),而Access正在尝试在Excel完成之前收回控制权。我只是没有找到任何可行的方法来解决该可疑问题或对其进行进一步调查。
我确实尝试将这个临时的Wait例程插入到Access Sub的ErrorHandling中,但是它根本不起作用,因为错误消息仍然以与以前相同的时间弹出。
If Err = -2147417856 Then
TWait = Time
TWait = DateAdd("s", 15, TWait)
Do Until TNow >= TWait
TNow = Time
Loop
Resume Next
任何帮助将不胜感激!
您是否尝试DoEvents
在预处理宏中使用?
如果您有一个循环在逐行处理CSV文件,DoEvents
那么请经常使用它,使任何未决事件都有运行的机会。在每行上都调用它可能会过大,所以也许每100行开始并从那里进行调整。
鉴于宏在您遍历Subs时起作用,因此似乎不是问题的总执行时间。如果Access由于Excel似乎没有响应而引发错误,则DoEvents
可能足以阻止Access放弃
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句