И если вам нужен новый базовый URL для всех ссылок на странице, вы можете полностью избежать JS и использовать элемент
.
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base
Можно использовать LoadLibrary api.
Например, в моих проектах код похож на это:
If LibraryLoaded() Then
Call MyFunc ...
End If
Public Function LibraryLoaded() As Boolean
Static IsLoaded As Boolean
Static TriedToLoadAlready As Boolean
If TriedToLoadAlready Then
LibraryLoaded = IsLoaded
Exit Function
End If
Dim path As String
path = VBAProject.ThisWorkbook.path
path = Left(path, InStrRev(path, "\") - 1)
IsLoaded = LoadLibrary(path & "\bin\" & cLibraryName)
TriedToLoadAlready = True
LibraryLoaded = IsLoaded
End Function
Есть еще одно действительно ужасное решение, но этот блоггер понял его, и я не могу придумать другого пути:
По сути, вы пишете процедуру, которая создает модуль кода в VBA во время выполнения. Этот модуль должен создать ссылку на dll, и он должен создать фиктивную функцию (или процедуру) как часть этого модуля, который вызывает dll. Затем из вашего кода вы используете Application.Run (dummyfunction (), arg1, arg2 ...). Это необходимо, потому что в противном случае проект не будет компилироваться, потому что фиктивная функция еще не является функцией.
В его коде вы заметите, что он использует InputBox () для получения местоположения .dll, но, очевидно, вы можете получить местоположение из диапазона в электронной таблице. Следующий фрагмент кода может оказаться полезным.
Dim cm As CodeModule
Dim vbc As VBComponent
Set cm = Application.VBE.ActiveVBProject.VBComponents.Add(vbext_ct_StdModule).CodeModule
cm.AddFromString (decString & funcString)
cm.Name = "MyNewModule"
Set vbc = cm.Parent
Application.VBE.ActiveVBProject.VBComponents.Remove vbc
'decString' и 'funcString' были просто строками, которые я построил, как его 'ss'. Во фрагменте показано, как можно переименовать модуль кода, чтобы при необходимости удалить его позже. Очевидно, это просто удаляет его сразу после создания, и вы, вероятно, не захотите этого делать, но, по крайней мере, он показывает вам, как это будет сделано.
Сказав все это, мы в основном просто пишем .exe сейчас и выполняем оболочку.Если вам нужно, чтобы VBA дождался завершения работы оболочки, для этой проблемы также есть решения.