如何使 XLAM UDF 调用可移植?
Posted
技术标签:
【中文标题】如何使 XLAM UDF 调用可移植?【英文标题】:How to make an XLAM UDF call portable? 【发布时间】:2011-10-14 20:34:52 【问题描述】:似乎当我在 XLAM 文件中调用 UDF 时,XLAM 文件的路径嵌入在电子表格中。当我从另一台机器(安装了相同的 XLAM 插件,只是安装到不同的路径)打开电子表格时,Excel 会抱怨“此工作簿包含指向其他数据源的链接......”这似乎不是XLL 中的 UDF 存在问题。有没有办法解决这个问题?
【问题讨论】:
【参考方案1】:此行为是在 Excel 中实现 Addin UDF 方式的结果。
有 3 种方法可以缓解该问题:
使用强制特定路径的安装程序
向 XLAM 添加一些代码,检查每个打开的工作簿的链接,如果链接指向您的 XLAM 但在不同的路径中,它会进行查找和替换,以便更正路径。
将您的 XLAM UDF 转换为 XLL(如果 VBA 转换为 VB.Net 并使用 Excel DNA 或 Addin Express 来制作 VB.Net XLL)
【讨论】:
您是否碰巧有选项 2 的模板代码“向 XLAM 添加一些代码,检查每个打开的工作簿的链接,如果链接是到您的 XLAM 但在不同的路径中,它会查找并并替换,以便更正路径。”? 我没有代码(我使用选项 1),但您需要使用应用程序级事件来捕获 workbook.open,然后使用 Workbook.Linksources 方法获取列表链接,然后在所有工作表上循环进行查找和替换。缺点是用户仍然会收到有关链接的消息 - 你不能禁止它,因为可能还有其他链接 @SFun28:这可能是您正在寻找的模板代码。 jkp-ads.com/Articles/FixLinks2UDF00.asp【参考方案2】:我知道我迟到了十年,但如果你把它放在 Workbooks 中。打开你正在共享的文件上的代码,它们将需要是 xlsm 文件,请记住,这会将公式中的所有外部链接更改为本地插件路径:
Sub AddInExternalLinkFix()
Var = ActiveWorkbook.LinkSources(xlExcelLinks)
Nwname = Application.AddIns.Item("YourAddInName").FullName
If Not IsEmpty(Var) Then
For iCounter = 1 To UBound(Var)
ActiveWorkbook.ChangeLink Name:=Var(iCounter), newname:=Nwname, Type:=xlLinkTypeExcelLinks
Next iCounter
End If
End Sub
【讨论】:
以上是关于如何使 XLAM UDF 调用可移植?的主要内容,如果未能解决你的问题,请参考以下文章