gpt4 book ai didi

c# - 同时使用 VBA 和 ActiveX 插件时出现 Excel 错误 406。

转载 作者:可可西里 更新时间:2023-11-01 08:29:50 25 4
gpt4 key购买 nike

我的 Excel 插件(XLL AddIn,称之为 MyAddIn)是用 C#、ExcelDNA、NetOffice、VS2010 构建的。客户端有另一个插件(我们称它为 B),我猜它是用 VBA 编写的。客户说 B 在没有 MyAddIn 的情况下工作正常。安装 MyAddIn 后,B 失败并出现错误:

Error code: 406 Error message: Non-modal forms cannot be displayed in this host application from an ActiveX DLL, ActiveX Control, or Property Page.

我确实看到了 this Microsoft resource ,但我不想只告诉客户 B 插件需要更改。我想从我这边做点什么来避免这种情况。

以下是报告的查看问题的步骤:

  1. 安装 B 插件时,它不会为 Microsoft Excel 创建任何注册表项。
  2. 安装 MyAddin 后,它会为 Microsoft Excel 创建一个注册表项。
  3. 这里的注册表条目基本上告诉加载项应该在 Excel 启动时打开,所以 B 加载项没有启动,Excel 工作正常, MyAddIn 工作正常。
  4. 现在当 B 加载项启动时,它会给出上面显示的 406 错误。
  5. 我们可以忽略错误并继续使用 B 插件;解决方法是禁用 MyAddIn
  6. 启动 B 插件时,我们看到 MyAddInB 插件之前先加载,然后出现 406 错误。
  7. 当我们卸载 MyAddIn 时,不再遇到此错误并且一切正常。
  8. 为消除此错误,我们尝试更改注册表顺序,使 B 插件始终在 MyAddin 之前打开。
    • 这行得通,但这是 Microsoft Excel 的全局更改,这意味着 B 插件将始终打开,即使我们仅启动 Excel。这是不希望的,因为 B 插件无法让用户使用静态数据,因为 B 插件一直在实时刷新。这就是 B 插件不在注册表设置中创建条目的原因。所以注册表更改不是一个选项。我们不能总是在打开 Excel 时打开 B 插件。

最佳答案

我没有答案,但您可以尝试以下几项。

您可以通过执行 File | 判断您正在处理的插件类型。选项 并选择插件选项卡。

如果事件在您加载 Addin B 时立即发生,这可能意味着您正在调用一个非模态对话框,正如它所说的那样,但是还有一些其他的东西可以给您类似的东西错误。

根据您的描述,听起来错误可能是您的插件中的对话框,也可能是其他插件中的错误,它被称为您的插件所做的某些状态更改的副作用。

要深入了解它,您需要附加一个调试器。您可以通过将 Excel 设为启动项目或稍后附加来实现。在这种情况下,前者可能更容易。

  1. 在 Visual Studio 中,使用 Project |属性 |调试,选择启动外部程序并输入到 Excel 的完全限定路径名。

  2. 手动加载 Addin B 给自己报错

  3. 进入调试器并检查调用堆栈。

这将经常但并不总是为您提供有关问题所在的良好线索,但这始终是第一步。如果它没有给你有用的信息(堆栈信息经常在加载项之间的转换中完全丢失),你可能想在你处理的任何事件中的项目中放置一些断点。即使这并非始终可靠,但值得一试。

如果我不得不猜测,我会说您的加载项中可能有一些事件处理程序导致了问题,您可能必须做一些事情,例如将 .Show 更改为 ` .ShowDialog',或者将表单的处理推迟到事件处理程序之外,但这只是一个猜测。

关于c# - 同时使用 VBA 和 ActiveX 插件时出现 Excel 错误 406。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8511933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com