VBA: обнаружение доступности библиотеки во время выполнения - PullRequest
0 голосов
/ 22 июня 2010

У меня есть файл xla, который ссылается на некоторые другие надстройки Excel, которые могут присутствовать или не присутствовать на целевом компьютере.В настоящее время Excel не удается загрузить xla с сообщением «Ошибка компиляции: не удается найти проект или библиотеку».

Код выглядит примерно так:

  Dim result as Integer
  result = SomeAddIn.SomeFunction(x)

С префиксом «On Error GotoAddInMissing "не помогает, так как это рассматривается как ошибка компиляции.

Итак, есть ли способ позднего связывания / ссылки на надстройку по имени в VBA, чтобы я мог корректно завершить работу (отключите некоторыеособенности), если какой-то определенной надстройки нет?

Ответы [ 3 ]

1 голос
/ 22 июня 2010

Вы можете просмотреть коллекцию Addins;

if AddIns("The addins title").Installed = True then ...

или проверить имена файлов

For Each Item In AddIns
   Debug.? Item.Path, Item.Name
Next
0 голосов
/ 23 июня 2010

Вам не нужно использовать VBE.VBProjects или Addins: XLA является скрытым членом коллекции Workbooks, поэтому, если вы знаете имя XLA, вы можете напрямую проверить в коллекции Workbooks, чтобы увидеть, открыта ли она. Таким образом, вам не нужно, чтобы пользовательская система имела Доверительный доступ к VBE

0 голосов
/ 22 июня 2010

Спасибо всем.Итерация по Application.VBE.VBProjects позволяет мне определить наличие xla.Следующим шагом было обернуть все вызовы функций, определенных в целевой xla, в модуль-обертку.Это было необходимо, поскольку я пытаюсь избежать ошибок компиляции.Я вызываю эти функции-оболочки только в том случае, если xla доступна, и, к счастью, VBA не компилирует модули до тех пор, пока они не потребуются (это в основном означало создание двух оболочек - внешней оболочки, проверяющей, была ли доступна xla, и внутренней, вызывающей целевой xla).

Более сложное решение, вероятно, будет рассматривать как AddIns, так и VBE.VBEProjects

...