Links
Comment on page

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

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

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

При попытке непосредственно вводить буквы кириллического алфавита в VBA-редакторе вместо них отображаются буквы латинского алфавита и/или вопросительные знаки!
Некорректное отображение кириллических символов
На вышеуказанной картинке дано сравнение трех вариантов:
  • некий текст содержащий кириллицу, набранный в приложении Notepad;
  • отображение этого же текста при вводе в VBA-редакторе ;
  • отображение этого же текста скопированного в приложении Notepad и вставленного в VBA-редактор при английской раскладке клавиатуры.

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

  1. 1.
    Напечатать текст в приложении Notepad, скопировать и вставить в редактор. При этом необходимо следить за раскладкой клавиатуры !
  2. 2.
    Напечатать текст в окне приложения MS Word (или MS Visio), скопировать и вставить в редактор. При этом можно следить за раскладкой клавиатуры.
  3. 3.
    Выполнить ввод кода в другом приложении используя "раннее связывание" с MS Visio.
К недостаткам первых двух способов можно отнести отсутствие опции автоматического завершения вводимого текста (автокомплит, от англ. autocomplete). Если вы не знаете в совершенстве синтаксис языка VBA для приложения MS Visio, это может стать для вас затруднением. Автокомплит позволяет минимизировать опечатки при вводе текста.
Автоматическое завершение вводимого текста в VBA-редакторе
Использование "раннего связывания" предоставляет полный доступ к объектной модели MS Visio из стороннего приложения!

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

В качестве примера рассмотрим приложение MS Excel.
  • Для того нужно VBA-редакторе в меню Tools выбрать пункт References.
Вызов окна управления используемыми библиотеками
  • Выбрать из списка доступных библиотек библиотеку Microsoft Visio.
Добавление библиотеки Visio Type Library
  • Нажать кнопку 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 будут отброшены автоматически.