【问题标题】:How to stop Excel storing the absolute path to an XLA?如何停止 Excel 存储 XLA 的绝对路径?
【发布时间】:2010-07-22 11:46:35
【问题描述】:

我有一个 XLA 文件,要作为 Excel 插件部署到组织中的多个用户。我的意图是将其部署到“Application Data\MyCompany”中用户的“文档和设置”文件夹中的目录中。 (事实上​​,这一切都是通过一个将最新版本的 XLA 复制到本地并将其作为 Excel 插件安装的包装器来工作的)。

但是,如果用户创建引用此 XLA 中定义的函数的工作表,则 Excel 似乎将 XLA 的绝对路径存储在函数调用中。因此,如果用户将工作表发送给同事,则 Excel 无法解析函数,因为他们的 XLA 副本位于不同的绝对路径中(因为他们的用户名是绝对路径的一部分)。

到目前为止,我的信念是只要将 XLA 作为插件安装,Excel“就可以解决”这个问题,但情况似乎并非如此。

真的需要为所有用户的加载项强制使用相同的绝对路径吗?这在单个组织内是可能的,但老实说,我不敢相信这是真的,因为它严重阻碍了 XLS 文件的共享。

谢谢。

【问题讨论】:

    标签: excel vba xla


    【解决方案1】:

    没有什么好的方法可以做到这一点。我将我的 xla 文件放在网络共享而不是本地,并通过 UNC 路径安装它们。这仅对我有用,因为每个人都可以访问共享,而您可能并非如此。这里有一些其他的选择

    http://www.dailydoseofexcel.com/archives/2008/06/02/fixing-links-to-udfs-in-addins/

    【讨论】:

    • 感谢您的链接 - 看起来是一个有用的资源。很惊讶我在谷歌搜索时没有找到它
    【解决方案2】:

    我只是用这样的 sub 删除路径:

    Sub RemoveXlaPath()
    '
    ' Goal: delete the path reference to the add-in, i.e. everything before and including the '!'
    ' ='C:\Program Files (x86)\Microsoft Office\Office14\LIBRARY\populator.xlam'!famedata(...)
    '
        Cells.Replace What:="'C:\*xla*'!", Replacement:="", _
                        LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
                        SearchFormat:=False, ReplaceFormat:=False
    End Sub
    

    【讨论】:

    • ..也许不是最干净的方法来处理这个问题,但对我来说是最实用的 - 谢谢@gerdami!
    【解决方案3】:

    你能指定一个基于环境变量的路径吗?例如。 %APPDATA%\MyCompany

    【讨论】:

    • 这就是我正在考虑的方式(或非常相似的方式),但是如果 %APPDATA% 针对不同的机器(例如不同的安装驱动器)进行不同的扩展,那么我将面临相同的问题问题。我确信这一定是一个已解决的问题,否则就不可能可靠地向公众分发基于 XLA 的 Excel 加载项。
    • @John 所以你说的是 Excel 扩展了环境变量并将 expanded 值存储在一个新保存的文件中:-( 我称之为 错误.
    【解决方案4】:

    我所做的是,如果我给用户一个 XLS ,它在其 on open 事件中有一些代码 - 安装 XLA 作为其 on open 事件的一部分。它还会卸载旧版本(如果有的话)(删除和命令栏)。这个自我分配。理论上它可以清理任何路径。这假设每个人都可以访问一些共享驱动器,这可以防止他们将 XLA 复制到本地驱动器。或者,通过共享驱动器上的 XLA 向他们发送 XLA 的快捷方式。如果可能,您不希望在本地驱动器上使用 XLA。

    如果 XLA 必须在本地驱动器上 - 不确定这是否可行,但打开事件的 XLS 可以检查修复任何路径并安装/安装 xla - 如果它知道它在哪里。但是,如果您通过 Internet 向 XLS 发送电子邮件,则 XLS 的打开事件可以检查 XLA 是否可用并显示一个消息框,告诉用户该怎么做 - 安装此 xla,这将是一个单独的附件。作为开放活动的一部分,XLA 可以清理任何路径 - 只是一些想法。

    另一种可能性是 XLA on open 事件可以修改 XLS on open 事件,以便如果分发了 XLS,XLS 将能够检查 XLA 是否可用。棘手。

    【讨论】:

      【解决方案5】:

      这是一个糟糕的疏忽,使得加载项几乎无法管理以供共享使用。除此之外,使用 .XLAM 插件是避免启用宏的电子表格的好方法(共享的电子表格可以在没有宏的情况下分发,并且宏可以驻留在 .XLAM 中)

      【讨论】:

        猜你喜欢
        • 2012-10-05
        • 1970-01-01
        • 1970-01-01
        • 2018-12-20
        • 2014-12-18
        • 2014-11-12
        • 2015-12-18
        • 2010-09-17
        相关资源
        最近更新 更多