VBA: как установить динамический путь к библиотеке для объявления оператора? - PullRequest
1 голос
/ 25 июня 2019

У меня есть программа в Excel на VBA, которая должна вызывать некоторые методы из DLL, оба находятся под моим контролем в плане разработки кода.Мне нужно иметь возможность выбрать, какую библиотеку DLL (из разных выпусков) использовать во время выполнения, но оператор Declare из VBA допускает только константы в пути Lib.

Цель множественная:

  1. Возможность выбора выпуска библиотеки во время выполнения из одной книги Excel
  2. Упрощение обслуживания кода, поскольку используется много библиотечных методов, что означает, что при редактировании пути к библиотеке нужно редактировать много операторов Declare.изменено
  3. Динамический поиск во время выполнения библиотеки из различных предопределенных расположений, чтобы соответствовать целям развертывания.В среде 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 переписать себя во время выполнения?

...