【发布时间】:2016-06-28 11:40:08
【问题描述】:
我正在使用基于 Excel 文档级别自定义的产品。项目类型为 Visual Studio 中的“Excel 2013 模板”。
最近我开发了一个用户定义函数,它将用于评估我们自己的函数。我根据文章https://blogs.msdn.microsoft.com/eric_carter/2004/12/01/writing-user-defined-functions-for-excel-in-net/开发了用户定义函数
用户定义函数在我们产品的 Excel 模板中运行良好,但在一个测试用例中失败。
- 打开产品的新 Excel 模板。 [例如:Excel 模板 1]
- 将用户定义函数添加到单元格。 [评估结果成功]
- 打开产品的另一个 Excel 模板。 [例如:Excel 模板 2]
- 将用户定义函数添加到单元格。 [评估结果成功]
- 关闭步骤1中打开的模板。[即:Excel模板1)]
- 将用户定义函数添加到其他模板的单元格[即:Excel模板2]
现在我可以注意到添加的函数不会被评估并以“#NAME?”结尾错误。
我已从 Excel 的加载项列表中检查了用户定义函数。它是活跃的。 无论如何,我已经在工作簿的 ActivateEvent 中以编程方式重新安装了加载项,但没有用。
只有在我关闭先打开的模板时才会出现此问题。 此外,保存的工作簿不会出现此问题。
当我调试时,我发现了一个问题。 在我们的产品中,当我们的自定义打开时,我们将自己的一组命令栏添加到 Excel 的上下文菜单中。 下面的示例代码将在单元格的上下文菜单中添加一个命令栏按钮。
try
{
commandBars = (Office.CommandBars)Application.GetType().InvokeMember("CommandBars", BindingFlags.GetProperty, null, Application, new object[] { });
commandBarSheetMenu = commandBars["Cell"];
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
commandBarButtonTest = (Office.CommandBarButton)commandBarSheetMenu.Controls.Add(1, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
commandBarButtonTest.BeginGroup = true;
commandBarButtonTest.Caption = "Test Me";
commandBarButtonTest.Click += new Microsoft.Office.Core._CommandBarButtonEvents_ClickEventHandler(commandBarButtonSheetCopy_Click);
当我删除/注释上面的代码时,即使我关闭了第一个打开的模板,用户定义的函数也会开始工作。
Excel 模板和用户定义函数与命令栏一起使用时是否存在已知问题?
如果有人可以对此问题发表评论并提出解决方案,那就太好了。
【问题讨论】:
-
重新创建问题的源文件上传到1drv.ms/u/s!AKQQ5XmOgV6CgQE
-
有人对此问题有更新吗?