Addin函数在复制的工作表中不起作用

时间:2014-03-06 04:17:43

标签: excel vba excel-vba excel-addins

我有一个Addin,它定义了excel中没有的一些数学函数。我已经在模板工作表(位于模板工作簿中)中安装并正常工作,但是当我将包含模板工作簿中的函数的模板工作表复制到新工作簿时,插件似乎停止工作并给了我一个名字?”调用函数的单元格中的错误。

有谁知道发生了什么事?提前致谢

编辑: 我应该更具体一点。 “添加”用于用户定义的函数(UDF),位于xla文件中。上面,当我提到“模板工作簿”时,这实际上是不正确的。它是一个正常的工作簿(.xls),我们可以根据需要将各个工作表复制到新的工作簿中。我将其称为“主”工作手册,以区别于“模板”。

由于我们有许多不同的“主”工作簿,我们会定期从中提取特定的工作表,因此我尝试自动选择要复制的工作表(使用工作表中的复选框)。选中所有必需的复选框后,将按下一个按钮,创建一个新工作簿,然后从各种主工作簿中导入所有必需的工作表。 UDF在这个新工作表中不起作用。

通过以下响应者的一些提示和广泛的网络搜索,问题在于UDF函数引用本身。让我解释一下:

UDF定义为:

Public Function Ber(ByVal x As Double)As Double   结束功能

这在'Master'TPLATE.xls工作簿中运行良好。当我从包含具有公式的单元格(例如“= Ber(A1)”)复制一张表时,在新表中,公式变为:“= TPLATE.xls!Ber(A1)”。

如果我然后在Cell的公式中手动设置正确的UDF,它就可以了。我不想这样做。

我找到了曾经很有希望的解决方案,但似乎无法让它发挥作用: http://www.jkp-ads.com/Articles/FixLinks2UDF00.asp (注意:单击绿色框中的箭头继续文章)

有没有办法确保复制的工作表中的UDF保留对Addin的正确引用?

我尝试了以下内容:

  1. 包含代码以查找和替换“=”符号和“Ber(A1)”之间的任何文本,仅使用“= Ber(A1)” - >不起作用

  2. 上述链接的解决方案。 - >不能让它发挥作用。

  3. 再次感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

更好的解决方案是将UDF代码放在XLA / XLAM插件中,而不是放在工作表模板中。有关说明,请参阅此链接

http://www.cpearson.com/excel/createaddin.aspx

答案 1 :(得分:1)

我想我找到了一个解决方案,并希望得到其他人的一些意见:

我创建了一个例程来更新调用UDF的链接。

Sub updatelinks()
    ActiveWorkbook.ChangeLink Name:= _
        "C:\Users\user.1\AppData\Roaming\Microsoft\AddIns\BesselAddIn.xla", NewName _
        :=Application.UserLibraryPath & "BesselAddIn.xla", Type:=xlExcelLinks
End Sub

当我在将工作表导入新工作簿之后调用它时(当工作表仍然处于活动状态时),它似乎可以为某些计算机执行此任务,但不是全部。

这一切让我觉得当调用UDF时,隐藏在Excel中的机制包括但通常不会显示Addin位置的完整路径名。

这有什么意义吗?