如何使 XLAM UDF 调用可移植?

发布于 2024-12-10 10:35:30 字数 159 浏览 0 评论 0原文

看来,当我在 XLAM 文件中调用 UDF 时,XLAM 文件的路径会嵌入到电子表格中。当我从另一台计算机(安装了相同的 XLAM 加载项,只是安装到不同的路径)打开电子表格时,Excel 抱怨“此工作簿包含指向其他数据源的链接...”这似乎不是一个XLL 中的 UDF 存在问题。有办法解决这个问题吗?

It seems that when I call a UDF in an XLAM file, the path to the XLAM file is embedded in the spreadsheet. When I open the spreadsheet from another machine (which has the same XLAM add-in installed, just installed to a different path) then Excel complains "This workbook contains links to other data sources..." This doesn't seem to be a problem with UDFs in XLLs. Is there a way around this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

云胡 2024-12-17 10:35:30

此行为是 Addin UDF 在 Excel 中实现方式的结果。

有 3 种方法可以缓解该问题:

使用强制使用特定路径的安装程序

将一些代码添加到 XLAM,以检查每个打开的工作簿的链接,以及该链接是否指向您的 XLAM,但在不同的路径中,它会进行查找和替换以便修正路径。

将 XLAM UDF 转换为 XLL(如果 VBA 转换为 VB.Net 并使用 Excel DNA 或 Addin Express 制作 VB.Net XLL)

This behaviour is a consequence of the way Addin UDFs are implemented in Excel.

There are 3 approaches to alleviating the problem:

Use an installer that forces a particular path

Add some code to the XLAM that inspects Links for each workbook opened and if the link is to your XLAM but in a different path it does a find and and replace so that the path is corrected.

Convert your XLAM UDFs to XLLs (if VBA convert to VB.Net and use Excel DNA or Addin Express to make a VB.Net XLL)

滥情稳全场 2024-12-17 10:35:30

我知道我晚了十年,但如果你把它放在工作簿中。在你共享的文件上打开代码,它们将需要是 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

I know I'm ten years late but if you put this in Workbooks.Open code on your files you are sharing, they will then need to be xlsm files, just bear in mind this will change all external links in formulas to the local addin path:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文