如何以编程方式添加对VBA项目的引用?

Gen*_*neQ 6 vba

我正在部署一个需要Scripting.DictionaryRegExp的早期绑定样式的VBA模块.

可以预料,该脚本在另一台计算机上运行时会失败.用户必须转到VBA IDE中的Tools-> Reference并手动添加对这两个库的引用以使其工作.

因此存在问题.要求非技术最终用户转到IDE并手动添加引用要求过多.

另一种方法是重写整个(由其他人编写的非常长的脚本)以使用后期绑定.如果有其他方法,我宁愿不采取这条道路.

作为一个改变,有些人建议以编程方式添加引用,如下所示:

Application.VBE.ActiveVBProject.References.AddFromFile [Path to library]

  1. 这是正确的解决方案,如果有的话,这个策略有任何缺点吗?
  2. 如果没有,是否有其他方法可以使代码保持早期绑定,但不需要用户手动添加引用.

也欢迎直接调用Win32/64 API的建议.

谢谢.

jto*_*lle 4

在我自己有限的环境中(少数人使用我开发的电子表格,相对标准的机器设置),如果我创建文件并添加引用,然后向其他人提供副本,他们可以毫无问题地打开它,而不是必须做任何事情,所以请记住这个答案。(我想知道为什么这对你不起作用。)此外,这是使用 Excel 进行的。

您可以考虑使用 GUID 属性,而不是从文件路径添加引用。

这是我曾经用来在新创建的工作簿中自动创建引用的一些代码。(它是脚本的一部分,可将工作表上的代码、引用和单元测试导出为文本,以便与 Subversion 一起使用,然后从文本文件重新构建工作簿。)您可能会发现它对您的情况很有用。(EH 和清理被删除以保持简短......)

'Export refs in existing workbook to text file
Private Sub exportRefs_(srcWbk As Workbook)
    Dim fs As FileSystemObject
    Set fs = New FileSystemObject

    Dim tsout As TextStream
    Set tsout = fs.CreateTextFile(fs.BuildPath(getTargetPath_(srcWbk), "refs.refs"))

    Dim ref As Reference
    For Each ref In Application.ThisWorkbook.VBProject.References
        Call tsout.WriteLine(ref.GUID)
    Next ref

    '<EH + cleanup...>
End Sub


'Add refs to newly created workbook based on previously exported text file
Private Sub importRefs_(wbk As Workbook, path As String)
    Dim fs As FileSystemObject
    Set fs = New FileSystemObject

    Dim tsin As TextStream
    Set tsin = fs.OpenTextFile(path)

    Dim line As String
    Dim ref As Reference

    While Not tsin.AtEndOfStream
        line = tsin.ReadLine()

        Set ref = Nothing

        On Error Resume Next
            Set ref = wbk.VBProject.References.AddFromGuid(line, 0, 0)
        On Error GoTo 0

        If ref Is Nothing Then
            Debug.Print "add failed: " & line
        End If
    Wend

    '<EH + cleanup...>
End Sub
Run Code Online (Sandbox Code Playgroud)

就像我说的,环境有限,但希望有帮助。