Excel模板中的Excel用户定义函数问题

本文关键字:Excel 定义 函数 问题 用户 | 更新日期: 2023-09-27 17:52:15

我正在使用基于Excel文档级别自定义的产品。项目类型为Visual Studio中的"Excel 2013 Template"。

最近我开发了一个用户定义函数,它将用于评估我们自己的函数。我根据文章https://blogs.msdn.microsoft.com/eric_carter/2004/12/01/writing-user-defined-functions-for-excel-in-net/

开发了用户定义函数

用户定义函数在我们产品的Excel模板中工作得很好,但它在一个测试用例中失败了。

  1. 打开一个新的产品Excel模板。[示例:Excel模板1]
  2. 将用户定义函数添加到单元格。[成功评估结果]
  3. 打开产品的另一个Excel模板。[示例:Excel模板2]
  4. 将用户定义函数添加到单元格。[成功评估结果]
  5. 关闭步骤1打开的模板。[例如:Excel模板1)]
  6. 将用户定义函数添加到其他模板的单元格中[例如: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模板和用户定义的功能,当它与命令栏使用?

如果有人能就这个问题发表意见并提出解决方案就太好了。

Excel模板中的Excel用户定义函数问题

我可以重新创建这个问题,即使没有命令栏。同样的问题存在于上述测试用例中,如果我以编程方式将用户定义函数设置为任何excel单元格。

我已经创建了两个演示解决方案,通过遵循上面的测试用例,可以用来重新创建问题。这些演示解决方案如下

  1. 通过按下按钮以编程方式将用户定义函数设置为选定的单元格。
  2. 使用自定义命令栏定制工作簿模板

Y您可以从 https://1drv.ms/u/s下载源文件!AKQQ5XmOgV6CgQE

我在这些解决方案中分别包含了自述文件以及重新创建问题的说明和步骤。

如果这方面的专家能给我一个解决这个问题的方法就太好了