Excel 模板的 Excel 用户定义函数问题
Posted
技术标签:
【中文标题】Excel 模板的 Excel 用户定义函数问题【英文标题】:Excel User Defined Function issues with Excel Template 【发布时间】: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 有人对此问题有更新吗? 【参考方案1】:即使没有命令栏,我也可以重新创建此问题。 上述测试用例存在同样的问题,如果我以编程方式将用户定义函数设置为任何 excel 单元格。
按照上面的测试用例,我创建了两个可用于重现问题的演示解决方案。 这些演示解决方案是
-
通过按按钮以编程方式将用户定义函数设置为选定的单元格。
使用自定义命令栏自定义工作簿模板
你可以从https://1drv.ms/u/s!AKQQ5XmOgV6CgQE下载源文件
我已将 Readme 文件单独包含在这些解决方案中,其中包含重新创建问题的说明和步骤。
如果这方面的专家能给我一个解决这个问题的解决方案,那就太好了
【讨论】:
以上是关于Excel 模板的 Excel 用户定义函数问题的主要内容,如果未能解决你的问题,请参考以下文章