У меня есть программа в Excel на VBA, которая должна вызывать некоторые методы из DLL, оба находятся под моим контролем в плане разработки кода.Мне нужно иметь возможность выбрать, какую библиотеку DLL (из разных выпусков) использовать во время выполнения, но оператор Declare из VBA допускает только константы в пути Lib.
Цель множественная:
- Возможность выбора выпуска библиотеки во время выполнения из одной книги Excel
- Упрощение обслуживания кода, поскольку используется много библиотечных методов, что означает, что при редактировании пути к библиотеке нужно редактировать много операторов Declare.изменено
- Динамический поиск во время выполнения библиотеки из различных предопределенных расположений, чтобы соответствовать целям развертывания.В среде dev библиотека находится в каталоге dev, но для конечных пользователей библиотека может находиться в 3 различных местах: путь к рабочей книге, определенный каталог на компьютере или определенный каталог с сетевого диска.
Я попытался объявить путь в переменной Public Const, но она не работает:
' This work
Private Declare PtrSafe Function addAmplifier Lib "path\to\lib.dll" (...) As Integer
' This don't work
Public Const libPath As String = "path\to\lib.dll"
Private Declare PtrSafe Function addAmplifier Lib libPath (...) As Integer
Есть ли способ использования переменной в операторе Declare с помощью угона?Или есть способ создать модуль VBA, способный редактировать код VBA второго модуля, в котором находятся операторы Declare, и заменить регулярным выражением все вхождения строки, сохранить проект VBA, а затем выполнить модуль?Более формально: может ли код VBA переписать себя во время выполнения?