防止Excel将自定义项路径保存到公式单元格

防止Excel将自定义项路径保存到公式单元格,excel,hyperlink,path,add-in,udf,Excel,Hyperlink,Path,Add In,Udf,我使用的是一个自定义外接程序,它将函数添加到Excel中,如UDF1(param1,param2) (1) 呼叫单元示例: =UDF1(参数1,参数2) 保存实现UDF()的workbook1时,Excel会将外接程序的路径以静默方式添加到UDF()的每次调用中。卸载外接程序并重新打开workbook1时可以看到这一点 Excel要求更新外部引用,我单击“不更新” (2) 新单元格内容:='\…\user\Desktop\Addin1'!UDF1(参数1,参数2) 如何防止Excel在保存工作簿

我使用的是一个自定义外接程序,它将函数添加到Excel中,如UDF1(param1,param2)

(1) 呼叫单元示例: =UDF1(参数1,参数2)

保存实现UDF()的workbook1时,Excel会将外接程序的路径以静默方式添加到UDF()的每次调用中。卸载外接程序并重新打开workbook1时可以看到这一点

Excel要求更新外部引用,我单击“不更新”

(2) 新单元格内容:='\…\user\Desktop\Addin1'!UDF1(参数1,参数2)

如何防止Excel在保存工作簿时保存外接程序的路径?

我希望新单元格内容(2)与原始内容(1)匹配

(当不同的人使用相同的外接程序(分别安装在其计算机的不同位置)时,这尤其令人恼火,因为每次其他用户打开工作簿时,都需要从每个单元格中删除“\……”路径。)


编辑:这不是我想要的,因为建议的“解决方案”是变通办法。

你对这个问题做了很好的研究*,发现了你不喜欢的答案:你想做的是不可能的

这就是Excel引用自定义项的方式(类似地,当您引用“打开”工作簿与“未打开”工作簿中的单元格时)

您需要一个变通方法,或者是您提供的链接中建议的方法,或者是其他方法


*这不是典型的情况。

与往常一样,有一种方法可以使用外接程序中的用户定义函数(UDF)。 让我们在模块中的excel加载项文件
B.xlam
中设置一个函数

Public Function Volume(a as Double, b as Double, c as Double)
    Volume = a * b * c
End Function
此文件的
工作簿.IsAddin
-属性设置为
true
,并存储在与使用Excel工作表
A.xlsm
相同的目录中。此Excel工作表包含对文件
B.xlam
的VBA引用。如果随后在
A.xlsm
的任何单元格中使用函数
Volume
,则该函数将委托给VBA,如果引用文件
B.xlam
中存在函数
Volume
,则VBA也会查看。 到现在为止,一直都还不错。如果在Excel的工作簿视图中显示引用(在数据功能区中),则将引用从
B.xlam
更改为文件
A.xlsm
本身。所以最后,从
A.xlsm
B.xlam
没有直接的Excel引用。唯一存在的引用是VBA引用

现在,如果加载项文件
B.xlam
在文件
A.xlsm
之前加载,则引用始终指向打开的文件。否则VBA将查找原始路径,如果该路径不存在,则会在工作簿路径中查找


因此,通过这种方式,可以通过VBA引用UDF,并且如果加载到消费文件或消费Excel文件的同一目录中,则加载项可以位于任何位置。

尽管很难证明不存在干净的解决方案,但您已经证实了我的预期…@user3641140-100%同意。我以前也曾本着同样的精神提出过问题。但是——这可能是一个发展环境问题吗?也就是说,有没有一种方法可以通过在Visual Studio/C#中创建外接程序而不是在Excel集成的VBA编辑器中创建外接程序来解决此问题?(我知道存在没有上述问题的外接程序。毕竟,外接程序的目的不是分发代码吗…?)