⚠️Проблема с отображением кириллицы в VBA-редакторе

Присутствует во всех версиях начиная с Visio 2013.

В чем заключается

При попытке непосредственно вводить буквы кириллического алфавита в VBA-редакторе вместо них отображаются буквы латинского алфавита и/или вопросительные знаки!

На вышеуказанной картинке дано сравнение трех вариантов:

  • некий текст содержащий кириллицу, набранный в приложении Notepad;

  • отображение этого же текста при вводе в VBA-редакторе ;

  • отображение этого же текста скопированного в приложении Notepad и вставленного в VBA-редактор при английской раскладке клавиатуры.

Способы решения проблемы

  1. Напечатать текст в приложении Notepad, скопировать и вставить в редактор. При этом необходимо следить за раскладкой клавиатуры !

  2. Напечатать текст в окне приложения MS Word (или MS Visio), скопировать и вставить в редактор. При этом можно следить за раскладкой клавиатуры.

  3. Выполнить ввод кода в другом приложении используя "раннее связывание" с MS Visio.

К недостаткам первых двух способов можно отнести отсутствие опции автоматического завершения вводимого текста (автокомплит, от англ. autocomplete). Если вы не знаете в совершенстве синтаксис языка VBA для приложения MS Visio, это может стать для вас затруднением. Автокомплит позволяет минимизировать опечатки при вводе текста.

Использование "раннего связывания" предоставляет полный доступ к объектной модели MS Visio из стороннего приложения!

Выполнение "раннего связывания"

В качестве примера рассмотрим приложение MS Excel.

  • Для того нужно VBA-редакторе в меню Tools выбрать пункт References.

  • Выбрать из списка доступных библиотек библиотеку Microsoft Visio.

  • Нажать кнопку OK.

Нюансы использования VBA-редактора в стороннем приложении

После включения "раннего связывания" при объявлении переменной относящейся к приложению MS Visio необходимо указывать префикс Visio.

' объявление переменной va, относящейся к приложению Visio
Dim va As Visio.Application
' передача переменной va ссылки на приложение Visio
Set va = GetObject(, "Visio.Application")

При объявлении переменных, относящихся к приложению Visio следует указывать соответствующий префикс !

В объектных моделях приложений MS Excel и MS Visio встречаются одноименные объекты. Например в обоих приложениях встречается объект Shape. В MS Visio понятие Cells относится к свойству содержащемуся в ячейке таблицы свойств Visio, а в MS Excel понятие Cells относится к диапазону, относящемуся к ячейке Excel.

У одноименных объектов в разных приложениях могут отличаться их свойства и/или относящиеся к ним методы. Это может стать причиной ошибок. Использование префикса позволит избежать путаницы какой именно объект вы имеете в виду!

В дальнейшем вы можете осуществлять программный контроль над документом MS Visio из VBA-редактора стороннего приложения. Или после отладки кода вставить его уже в VBA-редактор приложения Visio, префиксы относящиеся к приложению Visio будут отброшены автоматически.

Last updated