> 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/emulyaciya-raboty-s-interfeisom-prilozheniya.md).

# Эмуляция работы с интерфейсом приложения

### Зачем нужна эмуляция работы с интерфейсом

Для выполнения вызова команд, переключения различных режимов, активации элементов интерфейса для доступа к которым нужно долго перемещаться по вкладкам ленты и/или элементам меню приложения. Несколько примеров:

* [Вызов различных диалоговых окон](/workspace/primenenie-commandbars-v-visio-2010+.md#vyzov-dopolnitelnykh-okon);
* [Переключение инструментов рисования](/workspace/primenenie-commandbars-v-visio-2010+.md#izmenenie-aktivnogo-instrumenta-risovaniya);
* Изменения настроек документа или [приложения](/workspace/primenenie-commandbars-v-visio-2010+.md#upravlenie-nastroikoi-vneshnego-vida-okna-visio);
* [Показ/скрытие дополнительных окон приложения](/workspace/primenenie-commandbars-v-visio-2010+.md#vyzov-dopolnitelnykh-okon);
* [Запуск надстроек](/workspace/primenenie-commandbars-v-visio-2010+.md#zapusk-nadstroiki-numeraciya-figur).

### Как выполняется эмуляция

Если вам необходимо программно вызвать команду, доступную в интерфейсе приложения MS Visio у вас есть два способа:

1. Использовать [метод DoCmd](https://docs.microsoft.com/en-us/office/vba/api/visio.application.docmd), метод имеет синтаксис:

```vba
Application.Docmd(CommandID)
```

Часть из этих констант вызова команд *CommandID* могут использоваться при создании пользовательского решения в среде[ ShapeSheet](https://docs.microsoft.com/ru-ru/office/client-developer/visio/visio-shapesheet-reference) (также известной русскоязычному пользователю как [**таблица свойств**](https://docs.microsoft.com/en-us/archive/blogs/visio_ru/shapesheet-intro)) с применением [функции DOCMD](https://shapesheet-kb.github.io/ru/pages/functions/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F%20DOCMD.htm).&#x20;

Список констант приведен в таблице 1, также в таблице имеется информация о возможности запуска команды используя VBA и ShapeSheet (см. столбцы 3 и 4 соответственно).&#x20;

*На стороннем ресурсе есть* [*вариант этой таблицы с возможностью сортировки и фильтрации*](http://surrogate-tm.github.io/surrogate/DOCMD.htm)*.*

{% embed url="<https://docs.google.com/spreadsheets/d/1tfD9Vh6cSUgFBqMADK_lyTr3ONqU9sNK/edit?ouid=106677253775783936709&rtpof=true&sd=true&usp=sharing>" %}
Таблица 1 - Команды DoCmd/DOCMD
{% endembed %}

2\. Использовать [объект UIObject](https://docs.microsoft.com/en-us/office/vba/api/visio.uiobject), который представляет собой коллекции встроенных меню Visio ([MenuSets](https://docs.microsoft.com/en-us/office/vba/api/visio.menusets)), панелей инструментов ([Toolbars](https://docs.microsoft.com/en-us/office/vba/api/visio.acceltables)) и ускорителей ([AccelTables](https://docs.microsoft.com/en-us/office/vba/api/visio.acceltables)) встроенного пользовательского интерфейса Visio. Эти элементы появились в интерфейсе Visio во времена когда продукт разрабатывался компанией [Visio Corp](http://www.visiocorp.info/).

![Рисунок 1 - Компоненты UIObject в объектной модели Visio](https://docs.microsoft.com/en-us/previous-versions/office/developer/office-xp/images/aa201792.dvs_22_01\(en-us,office.10\).gif)

После приобретения Visio корпорацией Microsoft в интерфейс приложения были добавлены коллекции [CommandBars](https://docs.microsoft.com/en-us/office/vba/api/visio.application.commandbars) общие для приложений MS Office.&#x20;

Наиболее полно настройка пользовательского интерфейса приложения для версий с классическим интерфейсом описана в главе 22 [Customizing the Visio User Interface](https://docs.microsoft.com/en-us/previous-versions/office/developer/office-xp/aa201793\(v=office.10\)) в [документации SDK Visio 2002](https://docs.microsoft.com/en-us/previous-versions/office/developer/office-xp/aa217846\(v=office.10\)).

В официальном справочнике (актуальной редакции) в описании для вышеперечисленных элементов встроенного меню есть примечание:

{% hint style="info" %}
**Примечание**:

Начиная с Visio 2010 г. пользовательский интерфейс Microsoft Office Fluent (пользовательский интерфейс) заменил предыдущую систему многоуровневого меню, панели инструментов и области задач. Объекты и члены VBA, которые использовались для настройки пользовательского интерфейса в предыдущих версиях Visio, по-прежнему доступны в Visio, <mark style="background-color:red;">но работают по-другому</mark>.
{% endhint %}

### Примеры кода

#### Перечисление CommandBars

В листинге 1 представлен код, выполняющий перебор коллекции **CommandBars**. А также полученный вывод наименований объектов коллекции.&#x20;

{% embed url="<https://gist.github.com/Surrogate-TM/57acbf8326785927ce004a989057a709>" %}
Листинг 1 - Код перебор и вывод содержимого коллекции CommandBars
{% endembed %}

#### Закрытие дополнительного окна «Формат фигуры» <a href="#close-format-window" id="close-format-window"></a>

В листинге 2 вы можете увидеть код который позволяет скрывать дополнительное окно «Формат фигуры». Это окно появилось в версиях MS Visio с ленточным интерфейсом (2010+). &#x20;

{% hint style="warning" %}
*<mark style="color:red;">Это окно занимает довольно большую часть относительно всего окна приложения Visio, у этого окна нет встроенной команды скрытия или сворачивания и закрыть его можно только нажав</mark>* <mark style="color:red;"></mark><mark style="color:red;">кнопку</mark> `x`*<mark style="color:red;">,  в верхнем правом углу этого окна!</mark>*
{% endhint %}

Меня раздражали эти дополнительные усилия на закрытие данного дополнительного окна…

{% embed url="<https://gist.github.com/Surrogate-TM/bb2c21d32fcf5080f5c4b199ed3b121f>" %}
Листинг 2 - Показ/скрытие дополнительного окна "Формат фигуры" /"Format Shape"
{% endembed %}

&#x20;


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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/emulyaciya-raboty-s-interfeisom-prilozheniya.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.
