Я пытаюсь создать пользовательскую библиотеку дочерних элементов и функций, сохраненных в виде файлов .txt, в сетевом расположении, где различные пользователи создаваемой мной книги могут импортировать их в зависимости от выбранной ими пользовательской функции. Пользователи рабочей книги будут использовать рабочую книгу только через формы пользователя. Я не хочу требовать, чтобы они изменили свои настройки центра безопасности для работы этого кода библиотек импорта, поэтому я не хочу использовать команду wb.VBproject.References.import
или делать их надстройкой.
Я нашел этот метод, который прекрасно работает, но только до тех пор, пока другие рабочие книги не открыты. Если открыта другая рабочая книга, этот код в конечном итоге вставляет новый модуль в эту другую рабочую книгу, и тогда вызовы пользовательской формы не имеют смысла.
Я не понимаю, как это возможно, поскольку я ссылаюсь на весь этот код в выражении «With ThisWorkbook». Что я делаю не так?
Sub importLib(libName As String)
Application.DisplayAlerts = False
Path = "C:\Users\(username)\Desktop\excelLibraries\" 'Example only, my path is actually a network location
lib = Path & libName
Dim wb As Workbook
Set wb = ThisWorkbook
With wb
On Error Resume Next
Dim wbModules As Modules
Set wbModules = .Application.Modules 'wb=ThisWorkbook, but doesn't point to this workbook when other workbooks open???
'wb.VBProject.VBComponents.Import lib '---> library saved as .bas, but this requires the user to change their security settings
'wb.VBProject.References.AddFromFile lib '---> library saved as add-in reference, but this requires user to change security settings
'----This method works when no other workbooks are open
For Each a In wbModules 'Clear any previous Library Module
If a.Name = "Library" Then
a.Delete
Exit For
End If
Next
Set m = wbModules.Add 'Create a new Library Module
m.Name = "Library"
m.InsertFile lib 'Insert the code
On Error GoTo 0
End With
Application.DisplayAlerts = True
End Sub
Sub callsub()
importLib "library1.txt"
End Sub