---
description: >-
  Для того чтобы создавать ваши собственные решения с использованием VBA в MS
  Visio необходимо понимать его объектную модель!
---

# Объектная модель Visio

### Описание

Объектная модель любого приложения представляет собой иерархическую структуру взаимосвязей компонентов (объектов) внутри приложения.&#x20;

### Справочная информация по объектной модели

Официальная [справочная информация по объектной модели MS Visio](https://docs.microsoft.com/en-us/office/vba/api/overview/visio/object-model) доступна на платформе [docs.microsoft.com](https://docs.microsoft.com/).

В левой части окна данного справочника вы можете выбрать интересующий вас объект чтобы посмотреть его описание, относящиеся к компоненту [события](https://docs.microsoft.com/ru-ru/office/vba/language/reference/events-visual-basic-for-applications), [свойства](https://docs.microsoft.com/ru-ru/office/vba/language/glossary/vbe-glossary#property) и [методы](https://docs.microsoft.com/ru-ru/office/vba/language/glossary/vbe-glossary#method).

![Рис. 1 - Интерфейс справочника объектной модели на сайте Microsoft](https://2224921418-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LbJAmG0fzODwUxqdGj5%2Fuploads%2FzgS5HKklPl1WQttXpxOp%2FObjModelReference.png?alt=media\&token=de226911-8b7f-4d54-afc4-9846c8a0b623)

### Окно Object Browser

Также содержимое объектной модели можно увидеть в диалоговом окне **Object Browser**, в редакторе VBA.

![ Рис. 2 - Внешний вид окна Object Browser](https://2224921418-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LbJAmG0fzODwUxqdGj5%2Fuploads%2F7dm07rOhAyDVbbkmnKpp%2FVisioObjectBrowser.png?alt=media\&token=b49985bb-6caa-47fc-9b03-aadfd91c347c)

В окне **Object Browser** вы можете просмотреть содержимое библиотеки объектов и сведения о выбранных объектах.

Отображает [классы](https://docs.microsoft.com/ru-ru/office/vba/language/glossary/vbe-glossary#class), свойства, методы, события и [константы](https://docs.microsoft.com/ru-ru/office/vba/api/visio\(enumerations\)), доступные в [библиотеках объектов](https://docs.microsoft.com/ru-ru/office/vba/language/glossary/vbe-glossary#object-library), и [процедуры](https://docs.microsoft.com/ru-ru/office/vba/language/glossary/vbe-glossary#procedure) в проекте. Может использоваться для поиска и использования создаваемых вами объектов и объектов из других приложений.

[Описание интерфейса окна **Object Browser**](https://docs.microsoft.com/ru-ru/office/vba/language/reference/user-interface-help/object-browser) (правда для MS Word, т.к. для MS Visio подобного описания нет).

### Окно Locals

Для понимания взаимосвязей объектов в MS Visio может быть полезно применение окна локальных переменных - **Locals**, в редакторе VBA.

![Рис. 3 - Внешний вид окна Locals](https://2224921418-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LbJAmG0fzODwUxqdGj5%2Fuploads%2FNC3oLGbW25zcdxG8RDa5%2FVisioLocalsWindow.png?alt=media\&token=1a6c9461-8a0b-4de4-9c11-bbc05e15ffa5)

Основное назначение окна **Locals** отображать текущие значения всех объявленных переменных проекта. Если щелкнуть по знаку ![](https://2224921418-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LbJAmG0fzODwUxqdGj5%2Fuploads%2Fxo4PxUKDqrTh9tbEHIBR%2Fplus.png?alt=media\&token=55139481-a6bb-4221-a047-b90359047ccd) левее имени одной из переменных, то развернется древовидная структура свойств данного объекта. С помощью этой структуры можно определить объекты, которые располагаются в иерархии уровнем ниже или выше объекта, соответствующего текущей переменной.

[Описание окна локальных переменных](https://docs.microsoft.com/ru-ru/office/vba/language/reference/user-interface-help/locals-window) на официальном сайте.

### Схемы объектной модели

Классический вид объектной модели Visio представлен на рисунке 4.&#x20;

{% embed url="https://documentation.help/MS-Visio-Developer-Reference/OMD_online_Vis10.gif" %}
Рис. 4 - Microsoft Visio 2002 Developer Reference ([оригинал](https://documentation.help/MS-Visio-Developer-Reference/object.html))
{% endembed %}

{% embed url="https://surrogate-tm.github.io/helpful/VisioObjectModel/Sources.html#classic" %}
↑ Классическая схема с интерактивными возможностями: щелкните мышью по интересующему вас объекту для перехода↑ к англоязычному справочному материалу по данному объекту
{% endembed %}

Более современный вид объектной модели с отображением контейнеров представлен на рисунке 5.

{% embed url="http://jheyman.github.io/blog/assets/images/VisioAutoCompute/visio_object_model_subset.png" %}
Рис. 5 - Представление от jheyman ([оригинал](https://jheyman.github.io/blog/pages/VisioAutoCompute/#visio-object-model--base-concepts))
{% endembed %}

{% hint style="info" %}
Подготовленная лично мной [схема объектной модели (древовидная структура)](https://gist.github.com/Surrogate-TM/182cd0ab8b366516535de90e49b2f79b#file-visioobjectmodel-md) (за основу была взята классическая модель).
{% endhint %}

Приведенные схемы отображают основные компоненты объектной модели.

### Заключение <a href="#conclusion" id="conclusion"></a>

Для более эффективного написания кода вам необходимо представлять себе объекты, свойства, методы, связи и события приложения.&#x20;

К особенностям приложения Visio можно отнести наличие у него среды разработки ShapeSheet (известной русскоязычному пользователю под названием таблица свойств). Сам документ, все его страницы, каждая фигура на странице и некоторые другие объекты обладают собственной таблицей свойств, в которой в параметрической форме описываются свойства данного объекта.&#x20;

Без применения ShapeSheet программно в приложении Visio можно лишь первично добавлять объекты, удалять их, создавать события и изменять настройки самого приложения. Любое изменение свойств фигуры, страницы, документа сопровождается изменением соответствующих ячеек в таблице свойств относящихся к изменяемому параметру.&#x20;

Наибольший эффект от программирования в Visio можно получить при понимании объектной модели и ShapeSheet совместно.

Полезную информацию о таблице свойств вы можете найти на сайте [База знаний ShapeSheet](https://shapesheet-kb.github.io/).
