Как программно добавить ссылку на проект VBA?

Я развертываю ранний связанный модуль VBA, который нуждается в сценариев.Словарь и и.

сценарий, как и следовало ожидать, терпит неудачу при запуске на другом компьютере. Пользователь должен перейти к Tools - >Reference в VBA IDE и добавить ссылку на эти две библиотеки вручную, чтобы заставить ее работать.

отсюда и проблема. Просить нетехнического конечного пользователя перейти в IDE и вручную добавить ссылки-это слишком много их.

другой альтернативой является переписать весь (очень длинный скрипт, написанный кем-то другим), чтобы использовать позднюю привязку. Я предпочел бы не идти по этому пути, если есть другие методы.

Как altervative, некоторые люди советуют добавлять ссылку программно вот так:

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

  1. это правильное решение и если да есть ли минусы этой стратегии?
  2. если нет, существуют ли другие методы, чтобы включить код для ранней привязки еще не требует, чтобы ссылки добавлялись вручную пользователем.

предложения, связанные с прямыми вызовами Win32 / 64 API, также приветствуются.

спасибо.

1 ответов


в моей собственной ограниченной среде (небольшое # других людей, использующих электронные таблицы, которые я разрабатываю, относительно стандартные настройки машины), если я создам файл и добавлю ссылки, а затем дам копию кому-то другому, они могут открыть его без проблем и ничего не делать, поэтому имейте это в виду с этим ответом. (Мне интересно, почему это не работает для вас.) Кроме того, это было в Excel.

вместо добавления ссылки из пути к файлу можно использовать GUID вместо этого собственность.

вот код, который я когда-то использовал для автоматического создания ссылок во вновь созданной книге. (Это часть скрипта, который экспортирует код, ссылки и модульные тесты на листах в текст для использования с Subversion, а затем восстанавливает книгу из текстовых файлов. Вы можете найти это полезным для вашей ситуации. (EH и cleanup удалены, чтобы сохранить его коротким...)

'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

Как, я сказал, ограниченная среда, но, надеюсь, это поможет.