好的,我正在从MS Access创建一个Word文档(基于模板)并使用OLEFormat对象更新多个图表。一旦我。激活对象,创建一个新的Excel实例,并进行编辑,我关闭Excel实例:
wdChart.ChartData.Workbook.Application.Quit
如果没有其他Excel运行实例,这可以正常工作。但是,如果在发生OLEFormat.Activate时存在Excel的打开实例,则它不会创建Excel的新实例,而是在打开的同一Excel实例中打开图表电子表格。因此,当我执行.Application.Quit命令时,它会关闭该实例中的所有打开的工作簿,并提示我保存工作簿。此时,我收到一条Word消息:
要插入图表,必须先关闭所有打开的对话框或 在Microsoft Excel中取消编辑模式
我的代码失败了:
方法'激活'对象'ChartData'失败
我认为这些错误与我的代码依次编辑多个图表的事实有关。当弹出Word对话框时,我的代码仍在尝试运行或其他东西。
我认为解决这一问题的方法是,如果有办法强制OLEFormat.Activate打开它自己的Excel实例。这可能吗?
答案 0 :(得分:1)
您需要检查是否有超过1个工作簿打开。如果是,则关闭图表工作簿,否则退出应用程序。
If wdChart.ChartData.Workbook.Application.Workbooks.Count > 1 Then
wdChart.ChartData.Workbook.Close saveChanges:=False
Else
wdChart.ChartData.Workbook.Application.Quit
End If
答案 1 :(得分:1)
我有一个类似的问题和“AddChart”,出于某种原因,在Office 2010(不是2013年或2016年),有时当连续访问多个图表时,excel窗口在另一个打开之前不会关闭。这会导致@MultiGuy遇到的错误。
我的情况我刚刚在“Activate”和“AddChart”调用前添加了一小段等待时间,似乎解决了这个问题:
Excel.Application.Wait Now + TimeValue("0:00:01")
长期来看,我应该写一些等待相关的excel窗口关闭的函数,但是现在我觉得这种更脆弱的方法在大多数场景中都能正常工作。