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

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

При попытке непосредственно вводить буквы кириллического алфавита в 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&#x26;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&#x26;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&#x26;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&#x26;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 будут отброшены автоматически.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://visio-tricks.gitbook.io/workspace/cyrillic_text_broken.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
