1

当 Excel 工作表或图表嵌入 Word 或 Powerpoint 时,这是一个非常常见的问题。我在 Word 和 Powerpoint 中都看到了这个问题,原因似乎是附加到 Excel 的 COM 插件。COM 插件是用 C# (.NET) 编写的。有关错误对话框,请参阅随附的图像。

我调试了插件,发现了一个非常奇怪的行为。COM 插件中的 OnConnection(...)、OnDisConnection(...) 等方法可以正常工作,直到我将事件处理程序添加到代码中。即处理 Excel 中可用的 Worksheet_SheetChange、SelectionChange 或任何类似事件。只要我添加了一个事件处理程序(尽管我的代码有几个),Word 和 Powerpoint 就会开始抱怨并且不激活嵌入的对象。

在互联网上的一些帖子中,人们被要求删除办公室的防病毒插件(在我的情况下没有),所以这让我相信这个问题与主机应用程序激活时加载的 COM 插件有关物体。

有谁知道这里发生了什么?PowerPoint 错误

字错误

2010 年 6 月 21 日更新


发现在激活嵌入对象时,事件和对 ComAddIns 集合的更改都会产生问题。我现在使用 Excel::Application::UserControl 属性来检查 Excel 是否处于嵌入状态,然后跳过任何 OnConnection(...) 和 OnDisconnection(...) 代码。

事件问题的一种解决方案是将所有应用程序级事件移动到 VBA 代码并调用到 .NET。从而从 .NET 代码中删除所有事件处理程序。

可能还有更多嵌入对象无法初始化的情况,因此我选择禁用 COM 插件,即完全跳过 OnConnection(...) 和 OnDisconnection(...) 方法中的代码。

4

1 回答 1

0

这是我为摆脱这个烦人的问题所做的:

  1. 删除 .NET 代码中的所有事件处理程序并依赖 VBA 应用程序事件,即不是处理 Excel::Application::Worksheet_Activate(...) 事件,而是在 VBA 模块中处理它们并在收到事件时调用插件. .NET 事件处理程序似乎以某种方式破坏了状态。

  2. 使用自定义参数中的标志禁用与 OnConnection(...) 中的插件交互的任何代码。有关标志的详细信息,请参阅以下链接: COM 插件详细信息

我提到了 Excel::Application::UserControl 属性,但在某些情况下它并不可靠。我们需要考虑以下情况,自定义数组参数是 OnConnection(...) 是最可靠的:

  1. Excel 开始作为独立应用程序
  2. Excel 在其他一些应用程序中作为嵌入式应用程序启动
  3. Excel 通过自动化启动,例如 CreateObject(...)

我更喜欢在 Excel 处于嵌入模式时完全禁用插件。这取决于您在 OnConnection(...) 中执行的代码以及其他应用程序在执行时如何响应它。必须实施第 1 点来解决此问题。

如果有人对此有更好的解决方案,请告诉我:)

于 2010-08-30T12:13:07.743 回答