Создание экземпляра Visio в vba, когда установлены 2 версии - PullRequest
2 голосов
/ 16 октября 2019

У меня есть следующий код для создания экземпляра Visio из Excel. Он работает на машинах, где у меня установлена ​​одна версия Visio, но на некоторых машинах у меня установлены 2 версии (2010 и 2016). На этих машинах он не запускается с ошибкой «Сбой метода« Видимый »объекта« IVApplication »». Когда я проверяю AppVisio, он пуст, и я предполагаю, что это потому, что оба приложения visio.exe. Есть ли способ создать объект по определенному пути или любой другой способ создать объект, если установлены 2 версии?

Set AppVisio = CreateObject("visio.application")
AppVisio.Visible = False
Set docsObj = AppVisio.Documents

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Есть несколько вариантов, которым я верю.

Решение 1 (я бы порекомендовал этот). Установите только Visio 2010 на свой компьютер для разработки (и удалите 2016). В любом случае безопаснее всего иметь самую низкую версию, с которой ваше приложение должно работать на вашем компьютере разработчика. Добавьте ссылку на библиотеку типов Visio 2010 в Excel. Удалите ссылку на библиотеку типов Visio 21016. Версии Visio совместимы вверх, поэтому код должен работать правильно даже на машине с Visio 2016.

Решение 2. Используйте позднюю привязку. Удалите ссылку на Visio из вашего проекта Excel и используйте только доступ по сценарию. В этом случае вы потеряете автозаполнение, хотя. Если ваше приложение не большое, это не должно быть проблемой.

Решение 3. (если вы хотите запустить определенную версию). Вы можете запустить приложение Visio из файлов программы (как и любой другой исполняемый файл), а затем подключиться к нему с помощью «GetObject (...)» вместо «CreateObject (...)»

Кстати, тамлучший способ запустить Visio как невидимое приложение (без перепрошивки):

Set appVisio = CreateObject("Visio.InvisibleApp")

1 голос
/ 16 октября 2019

Если вы предварительно связали его, добавив ссылку (Tools | References) к желаемой версии, а затем Dim, указав ваш объект в качестве этого типа, вам будет гарантировано, какую версию вы используете.

Dim visioApplication as Visio.Application
Set visioApplication = new Visio.Application

Тем не менее, это может быть неполным решением, если ваша компания находится в середине обновления, и у некоторых людей есть новая версия, а некоторые - более старая. Вы получите проблемы во время выполнения на машинах, у которых нет выбранной вами версии.

Чтобы решить эту проблему, вы можете создать MyApp2010 и MyApp2016, каждая из которых связана с соответствующей версией Visio, но это станет для вас чем-то вроде кошмара обслуживания ...

Раннее связывание действительно добавляет множество преимуществ, таких как IntelliSense, и превращает большинство ошибок времени выполнения в ошибки времени компиляции, так что это, вероятно, все еще стоит.

...