Как программно добавить ссылку на проект VBA?
Я развертываю ранний связанный модуль VBA, который нуждается в сценариев.Словарь и и.
сценарий, как и следовало ожидать, терпит неудачу при запуске на другом компьютере. Пользователь должен перейти к Tools - >Reference в VBA IDE и добавить ссылку на эти две библиотеки вручную, чтобы заставить ее работать.
отсюда и проблема. Просить нетехнического конечного пользователя перейти в IDE и вручную добавить ссылки-это слишком много их.
другой альтернативой является переписать весь (очень длинный скрипт, написанный кем-то другим), чтобы использовать позднюю привязку. Я предпочел бы не идти по этому пути, если есть другие методы.
Как altervative, некоторые люди советуют добавлять ссылку программно вот так:
Application.VBE.ActiveVBProject.References.AddFromFile [Path to library]
- это правильное решение и если да есть ли минусы этой стратегии?
- если нет, существуют ли другие методы, чтобы включить код для ранней привязки еще не требует, чтобы ссылки добавлялись вручную пользователем.
предложения, связанные с прямыми вызовами 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
Как, я сказал, ограниченная среда, но, надеюсь, это поможет.