Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Access 2013运行Excel 2013宏时发生VBA自动化错误(系统调用失败)_Excel_Ms Access_Vba_Office Automation - Fatal编程技术网

从Access 2013运行Excel 2013宏时发生VBA自动化错误(系统调用失败)

从Access 2013运行Excel 2013宏时发生VBA自动化错误(系统调用失败),excel,ms-access,vba,office-automation,Excel,Ms Access,Vba,Office Automation,我有一个Access(2013)数据库,用于存储/处理从Qualtrics在线调查中收到的所有数据。从Qualtrics下载的原始数据位于一个csv文件中,该文件格式不适合导入Access,因此我在Excel(2013)中有一个相当复杂的宏,在导入Access之前,我使用该宏对数据进行预处理 在Access中,我使用以下代码打开包含宏的excel文件,运行宏,保存工作簿,然后关闭它。这已经运行了好几个月了,但现在当我运行它时,它在Excel宏的末尾停止,运行时出现错误:-2147417856自动

我有一个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
ActivateRopenWorkBook只是一个自定义函数,它完全按照名称的含义执行,appExcel是Excel应用程序。工作簿始终可以正常打开,宏开始运行,但实际上从未达到控制返回Access VBA并保存工作簿的程度

如果我在运行Access过程之前打开工作簿,在每个主要VBA步骤(在Access和Excel中)插入断点,然后一次一个子步骤地完成整个过程,那么运行起来会很好。如果我试图让VBA自己自始至终地运行它,它就会失败

基于这些证据以及我在网上看到的类似问题的故事,我怀疑发生错误的原因是Excel宏运行时间太长(我们最近在Qualtrics调查中添加了一些新变量),Access试图在Excel完成之前收回控制权。我只是没有找到任何可行的方法来解决那个可疑的问题或进一步调查它

我确实尝试将这个临时等待例程插入到访问子系统的错误处理中,但它根本不起作用,因为错误消息仍然在与以前相同的时间内弹出

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放弃