VBA - XLAM文件的相对vs绝对引用

时间:2014-08-06 09:02:48

标签: vba excel-vba excel

我的同事开发了一个包含在xslm文件中的应用程序,我也必须可以访问该文件。该文件连接到许多xlam库,由于速度原因,这些库本地保存在他的机器上(从共享驱动器加载30个库需要很长时间)。

为了让我访问此应用程序,在共享驱动器上创建了一个副本,其中也复制了库。当我的同事打开另一个应用程序(引用他的本地xlam库),然后在一个Excel实例中共享xlsm文件时,共享文件中的引用会从共享xlams转移到本地xlams,从而使共享应用程序无法正常运行我 - 我无法访问他当地的xlams。是否可以禁止自动更改xlam引用?有没有办法硬编码xlam引用的路径,就像在VBA中引用DLL一样?

非常感谢任何帮助, 丹尼尔

1 个答案:

答案 0 :(得分:2)

这些 xlam 文件是addIns。

您应该能够在运行时使用路径引用它们。以下是我在MSDN Blog: Accelerating Things (Loading Excel Add-Ins at Runtime)找到的一个示例(您可以通过Google搜索找到此内容)

Private Sub Workbook_Open()
    call LoadExternalAddIns
End Sub

Private sub LoadExternalAddIns(optional byval sAddinName as string="")

    Dim success As Boolean
    Dim myAddIn As AddIn
    dim sPath2AddIn as string
    'dim sAddinName as string

    sPath2AddIn = "c:\myaddins\"
    if sAddinName="" then sAddinName="myxlam.xlam"

    ' Load XLL
    'success = Application.RegisterXLL(sPath2AddIn & sAddinName)

    ' Load and install new XLAM
    Set myAddIn = Application.AddIns.Add(sPath2AddIn & sAddinName)
    myAddIn.Installed = True

    ' Load known XLAM
    For Each myAddIn In AddIns
        If myAddIn.Name = "myknownaddin.xlam" Then
            myAddIn.Installed = False
            myAddIn.Installed = True
        End If
    Next    
End Sub

当然,这只是一个让您入门的示例,事实上,由于您有很多AddIns,您可能希望在隐藏工作表上列出它们然后调用上面的内容procedure LoadExternalAddIns 可能会在call LoadExternalAddIns (sAddInName)等循环中传递每个名称​​。

更多资源: