3

好的,我正在从 MS Access 创建一个 Word 文档(基于模板)并使用 OLEFormat 对象更新几个图表。一旦我 .Activate 对象创建了一个新的 Excel 实例并进行了编辑,我将关闭该 Excel 实例:

wdChart.ChartData.Workbook.Application.Quit

如果没有其他 Excel 实例正在运行,这将正常工作。但是,如果在 OLEFormat.Activate 发生时有一个打开的 Excel 实例,它不会创建一个新的 Excel 实例,而是在打开的同一个 Excel 实例中打开图表电子表格。因此,当我执行 .Application.Quit 命令时,它会关闭该实例中所有打开的工作簿并提示我保存工作簿。此时,我收到一条 Word 消息,内容为:

要插入图表,您必须先关闭所有打开的对话框或取消 Microsoft Excel 中的编辑模式

我的代码失败了:

对象“ChartData”的方法“激活”失败

我认为这些错误与我的代码按顺序编辑多个图表的事实有关。当 Word 对话框弹出时,我的代码仍在尝试运行之类的。

我认为如果有办法强制 OLEFormat.Activate 打开它自己的 Excel 实例,可以解决所有这些问题。这可能吗?

4

2 回答 2

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 
于 2013-05-06T17:22:30.117 回答
1

我对此和“AddChart”有类似的问题,出于某种原因,在 Office 2010(不是 2013 或 2016)中,有时在连续访问多个图表时,excel 窗口不会在另一个打开之前关闭。这会导致@MultiGuy 遇到的错误。

我的情况是,我只是在“激活”和“添加图表”调用之前添加了一小段等待时间,它似乎已经解决了这个问题:

Excel.Application.Wait Now + TimeValue("0:00:01")

从长远来看,我可能应该编写某种函数来等待相关的 excel 窗口关闭,但现在我认为这种更脆弱的方法在大多数情况下都可以使用。

于 2016-08-02T16:33:49.073 回答