gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:27:26 24 4
gpt4 key购买 nike

我正在部署需要 的早期绑定(bind)样式的 VBA 模块脚本.字典 正则表达式 .

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

因此存在问题。要求非技术最终用户去 IDE 并手动添加引用对他们的要求太多了。

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

作为替代方案,有些人建议像这样以编程方式添加引用:
Application.VBE.ActiveVBProject.References.AddFromFile [Path to library]

  • 这是正确的解决方案吗?如果是,这个策略有什么缺点吗?
  • 如果没有,是否有其他方法可以使代码保持早期绑定(bind)但不需要用户手动添加引用。

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

    谢谢。

    最佳答案

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

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

    关于vba - 如何以编程方式添加对 VBA 项目的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3837720/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com