当 Excel 工作表或图表嵌入 Word 或 Powerpoint 时,这是一个非常常见的问题。我在 Word 和 Powerpoint 中都看到了这个问题,原因似乎是附加到 Excel 的 COM 插件。COM 插件是用 C# (.NET) 编写的。有关错误对话框,请参阅随附的图像。
我调试了插件,发现了一个非常奇怪的行为。COM 插件中的 OnConnection(...)、OnDisConnection(...) 等方法可以正常工作,直到我将事件处理程序添加到代码中。即处理 Excel 中可用的 Worksheet_SheetChange、SelectionChange 或任何类似事件。只要我添加了一个事件处理程序(尽管我的代码有几个),Word 和 Powerpoint 就会开始抱怨并且不激活嵌入的对象。
在互联网上的一些帖子中,人们被要求删除办公室的防病毒插件(在我的情况下没有),所以这让我相信这个问题与主机应用程序激活时加载的 COM 插件有关物体。
2010 年 6 月 21 日更新
发现在激活嵌入对象时,事件和对 ComAddIns 集合的更改都会产生问题。我现在使用 Excel::Application::UserControl 属性来检查 Excel 是否处于嵌入状态,然后跳过任何 OnConnection(...) 和 OnDisconnection(...) 代码。
事件问题的一种解决方案是将所有应用程序级事件移动到 VBA 代码并调用到 .NET。从而从 .NET 代码中删除所有事件处理程序。
可能还有更多嵌入对象无法初始化的情况,因此我选择禁用 COM 插件,即完全跳过 OnConnection(...) 和 OnDisconnection(...) 方法中的代码。