Как программно добавить ссылку на проект VBA? - PullRequest
6 голосов
/ 01 октября 2010

Я развертываю модуль VBA с ранним связыванием в стиле, которому требуется Scripting.Dictionary и RegExp .

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

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

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

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

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

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

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

Спасибо.

1 Ответ

4 голосов
/ 01 октября 2010

В моей собственной ограниченной среде (небольшое количество других людей, использующих электронные таблицы, которые я разрабатываю, относительно стандартные настройки машины), если я создаю файл и добавляю ссылки, а затем предоставляю копию кому-то еще, они могут открыть его безпроблем и не надо ничего делать, так что имейте это в виду с этим ответом.(Мне интересно, почему это не работает для вас.) Кроме того, это было в 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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...