> For the complete documentation index, see [llms.txt](https://visio-tricks.gitbook.io/workspace/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://visio-tricks.gitbook.io/workspace/cyrillic_text_broken.md).

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

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

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

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

<div align="left"><img src="https://2224921418-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LbJAmG0fzODwUxqdGj5%2F-LdGXbUuBZKkQEeZNv5t%2F-LdG_UDRxcPofonOFB3K%2FKrokozyabras.png?alt=media&amp;token=3cda53d0-b507-4622-bc49-17b01efdfdd0" alt="Некорректное отображение кириллических символов"></div>

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

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

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

1. Напечатать текст в приложении **Notepad**, скопировать и вставить в редактор. При этом необходимо следить за раскладкой клавиатуры !
2. Напечатать текст в окне приложения **MS Word** (или **MS Visio**),  скопировать и вставить в редактор. При этом можно следить за раскладкой клавиатуры.
3. Выполнить ввод кода в другом приложении используя "[раннее связывание](http://www.excelworld.ru/publ/vba/outside_library/using_early_binding_and_late_binding_in_automation/53-1-0-145)"  с **MS Visio**.

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

<div align="left"><img src="https://2224921418-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LbJAmG0fzODwUxqdGj5%2F-LdGXbUuBZKkQEeZNv5t%2F-LdGvlFQnXdUsdgNA1Qw%2FVBA_Autocomplit.gif?alt=media&amp;token=5f5d39b6-dbb5-4e7c-83ee-ccfa8355b7d0" alt="Автоматическое завершение вводимого текста в VBA-редакторе"></div>

{% hint style="info" %}
Использование "раннего связывания" предоставляет полный доступ к объектной модели MS Visio из стороннего приложения!
{% endhint %}

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

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

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

<div align="left"><img src="https://2224921418-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LbJAmG0fzODwUxqdGj5%2F-LdGXbUuBZKkQEeZNv5t%2F-LdGnzYPFD_PPvpC_Vl0%2FToolsRef.png?alt=media&amp;token=eac72b33-aeff-4757-bc07-6b3703bbf170" alt="Вызов окна управления используемыми библиотеками"></div>

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

<div align="left"><img src="https://2224921418-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LbJAmG0fzODwUxqdGj5%2F-LdGXbUuBZKkQEeZNv5t%2F-LdGuapENgaqwHxWwDgR%2FAddRef.png?alt=media&amp;token=69358963-da73-4d35-85f5-34db7c054f8d" alt="Добавление библиотеки Visio Type Library"></div>

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

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

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

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

{% hint style="info" %}
При объявлении переменных, относящихся к приложению Visio следует указывать соответствующий префикс !&#x20;
{% endhint %}

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

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

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