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

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

Настоящая статья продолжает цикл публикаций, посвященных инструментам, которые российские компании могут использовать для решения задач моделирования и совершенствования бизнес-процессов без существенных рисков. Напомним, что в предыдущей статье данного цикла рассказывалось о продуктах компании IDS Scheer, занимающей наивысшие позиции в рейтингах аналитических компаний. Сегодня же мы поговорим о продукте иного ценового диапазона, не столь функциональном с точки зрения моделирования бизнес-процессов, но зато весьма популярном и массовом - Microsoft Visio.

И снова мнение аналитиков…

Невысокая стоимость Visio, наряду с такими факторами, как принадлежность к лидирующему семейству офисных продуктов, выпускаемому лидером индустрии программного обеспечения, привела к весьма значительной занимаемой им доле рынка средств моделирования бизнес-процессов (по данным Gartner - 34%) и высоким рейтингам в отчетах аналитических компаний. Так, аналитическая компания Gartner относит данный продукт к лидерам рынка (рис. 1).

Рис. 1. Ведущие производители средств анализа бизнес-процессов
(источник: Blechar M. Magic Quadrant for Business Process Analysis Tools,
2H07-1H08 - Gartner research note G00161090, 23 September 2008)

По мнению Gartner, Visio - один из лучших инструментов для тех компаний, которые только начинают заниматься моделированием и анализом своих бизнес-процессов и ориентированы в первую очередь на их визуализацию. Однако в процессе развития данного направления в компании этот продукт обычно заменяется на более функциональный инструмент.

Visio на российском рынке

На российском рынке Visio представлен так же, как и другие офисные продукты Microsoft, - то есть доступен во всех регионах через весьма развитую партнерскую сеть. Через нее же оказываются услуги по сопровождению, технической поддержке и обучению на русском языке. Русская версия данного инструмента существует достаточно давно. Есть и книги о продукте, и решения на его основе (включая средства моделирования бизнес-процессов; впрочем, эти инструменты - предмет отдельного обсуждения, поскольку их доступность, возможности и цены существенно отличаются от доступности и возможностей оригинального продукта и цен на него).

Возможности продукта

Технические особенности. Хранение данных

Технически Visio представляет собой настольное приложение, манипулирующее отдельными файлами (документами). Документ Visio включает одну или несколько диаграмм, расположенных на одной либо ряде страниц. Каждый документ содержит набор символов (соответствующих объектам моделей) и коннекторов (соответствующих связям), при этом у символов, помимо имен, могут быть дополнительные атрибуты, определяемые пользователем в процессе моделирования.

При необходимости набор символов, входящих в комплект поставки продукта, может быть расширен за счет символов, создаваемых пользователями. Глобальных ограничений на правила и возможности создания связей между определенными типами символов в продукте нет, однако в нем доступен механизм так называемых шаблонов диаграмм, применение которых позволяет ограничить набор символов, доступных непосредственно на соответствующей инструментальной панели в процессе моделирования. Шаблоны могут быть созданы пользователями, при этом в комплекте поставки продукта имеется набор готовых шаблонов (рис. 2).

Рис. 2. Шаблоны диаграмм из комплекта поставки Visio

Как правило, совокупность моделей, описывающих деятельность компании, представляет собой набор отдельных файлов, и в случае достаточно крупных компаний и всестороннего описания деятельности количество таких файлов может составлять несколько тысяч. Технических средств для обеспечения взаимосвязей между моделями, хранящимися в разных файлах, на уровне продукта не реализовано, хотя средства для самостоятельной реализации таких взаимосвязей продукт предоставляет (о них будет рассказано чуть позже). Поэтому применение Visio в подобных случаях, особенно в условиях постоянно меняющихся процессов, требует немалых затрат на сопровождение столь внушительной совокупности моделей.

Поддерживаемые методологии и нотации

Коль скоро набор символов и шаблонов Visio может быть произвольно расширен и сам продукт не предполагает глобальных ограничений на возможности применения символов и связей между ними, описание бизнес-процессов с помощью Visio формально может быть осуществлено в рамках практически любой методологии. При этом в комплекте поставки продукта в любой редакции (Standard, Professional) есть набор шаблонов моделей для наиболее распространенных нотаций, таких как диаграммы потоков данных, диаграммы цепочки добавленного качества, диаграммы типа Event-driven Process Chain, IDEF0, SwimLane, а также шаблоны для моделирования оргструктур компаний (рис. 3 и 4).

Рис. 3. Модель процесса типа Swim Lane

Рис. 4. Модель типа EPC (Event-driven Process Chain)

Документирование процессов и создание решений на основе Visio

Microsoft Visio включает среду исполнения кода Visual Basic for Applications, позволяющую как записывать код во время работы пользователя, так и создавать его с помощью среды разработки (рис. 5).

Рис. 5. Среда разработки VBA в Microsoft Visio

Для доступа к данным моделей Visio предоставляет соответствующую объектную модель, доступную через COM-интерфейсы как из среды исполнения кода VBA внутри самого приложения, так и из внешних приложений. Отметим, что и язык программирования, и объектные модели всех приложений Microsoft Office, включая Visio, отлично документированы. Это означает, что при определенном навыке VBA-программирования пользователю доступны и генерация отчетов любой сложности, и создание средств переноса данных между Visio и другими средствами моделирования, и генерация моделей путем создания решений на основе приложений данного семейства, и расширение функциональности самого инструмента моделирования, и создание разнообразных решений (например, для имитационного моделирования, автоматизированной публикации моделей в Интернете и выполнения других задач).

Помимо VBA для документирования процессов можно использовать средства интеграции Visio с приложениями Microsoft Office, такие как вставка диаграмм Office Visio 2007 в документы Microsoft Office в качестве иллюстраций и создание диаграмм Visio 2007 непосредственно в этих приложениях, средства формирования календарей в Visio 2007 с использованием данных Office Outlook 2007, инструменты подключения диаграмм Visio 2007 к электронным таблицам Excel 2007 или базам данных Access 2007 для интеграции источников данных и компонентов диаграмм, средства формирования графиков и диаграмм Ганта в Visio 2007 путем импорта соответствующих данных из Project 2007, средства экспорта информационной составляющей диаграмм Ганта и графиков Visio 2007 в Office Project 2007, средства построения организационных диаграмм на основе глобальной адресной книги Exchange.

Для документирования процессов интересны также средства сохранения результатов работы в виде веб-страниц, предоставляемые последней версией Visio, а также средства динамического обмена данными о процессах с другими приложениями с использованием стандартизованных форматов обмена на основе XML, таких как ODX и BPEL.

Ограничения и возможные проблемы

Использованное в одном из предыдущих разделов статьи словосочетание «в рамках практически любой методологии» отнюдь не означает, что Visio - наилучший инструмент для моделирования и анализа бизнес-процессов. Так, в отличие от продуктов семейства ARIS, Visio не содержит в явном виде решения проблемы «что такое один и тот же объект» - правила, по которым принимается решение, отображают ли два символа на одной и той же модели один и тот же объект, пользователи должны выработать самостоятельно и самостоятельно же соблюдать, при этом технических средств, поддерживающих выработанное правило, продукт не предоставляет - их придется создавать самостоятельно с помощью имеющихся программных интерфейсов.

Кроме того, как только число моделей бизнес-процессов, требующихся для решения задач предприятия, превышает десяток, а авторов моделей становится несколько, весьма актуальным становится вопрос разграничения доступа авторов моделей к данным. Реализовать подобное разграничение при использовании Visio можно за счет применения средств разграничения доступа к файлам, предоставляемых операционной системой соответствующего файлового сервера, либо за счет использования системы управления документами наподобие EMC Documentum. В этом случае средства управления доступа к моделям представляют собой средства администрирования операционной системы либо системы управления документами, и это означает, что задачи по разграничению доступа к моделям возлагаются, по сути, на системного администратора.

Механизма методологических фильтров (инструментов ограничения типов моделей, объектов, связей, доступных конкретному пользователю или группе пользователей для конкретного проекта), аналогичного имеющемуся в ряде других инструментов (например, в продуктах семейства ARIS), Visio также не предоставляет.

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

Сравнение с другими продуктами

Попробуем сравнить Visio с другими инструментами моделирования.

Основным преимуществом Visio перед продуктами упомянутых семейств является низкая стоимость и простота применения, что делает его неплохим стартовым инструментом для компаний, которые только начали описывать свои бизнес-процессы и пока заинтересованы главным образом в их визуальном представлении. Еще одним достоинством данного продукта является его идеальная интеграция с другими приложениями Microsoft Office - офисным пакетом, безусловно лидирующим на рынке. Немаловажным преимуществом данного продукта являются и отлично документированные программные интерфейсы - благодаря им на основе Visio создано немало решений, в том числе и более дорогостоящих средств моделирования и анализа бизнес-процессов, разработанных компаниями - партнерами Microsoft.

Недостатки же Visio как средства моделирования бизнес-процессов - это, по сути, продолжение его достоинств. Простота применения оборачивается отсутствием функциональности, которая обычно ожидается от таких инструментов, например отсутствием средств разграничения доступа к данным, анализа и проверки корректности моделей, поддержки целостности и непротиворечивости данных. Это означает, что, решив использовать Visio на этапе становления процессного управления и анализа бизнес-процессов, в дальнейшем, скорее всего, придется обратить внимание на другие, более функциональные инструменты моделирования, к примеру на продукты компании IDS Scheer.

Обсуждение средств моделирования бизнес-процессов мы продолжим в следующих статьях данного цикла.

Вы можете создавать собственные фигуры и добавлять их в набор элементов Избранное или другой настраиваемый набор элементов. Ваша фигура становится образцом фигуры . Настраиваемыми являются набор элементов Избранное и наборы, созданные вами; наборы элементов, которые предоставляются с шаблонами Visio, изменять нельзя.

Дополнительные сведения о создании настраиваемой фигуры см. в статье Рисование линий и фигур с помощью инструментов "Карандаш", "Линия", "Дуга" и "Полилиния" . Дополнительные сведения о создании настраиваемого набора элементов см. в статье Создание, сохранение и совместное использование настраиваемых наборов элементов .

При перетаскивании образца фигуры на страницу документа создается его копия (или экземпляр ). Сам же образец остается в наборе элементов, так что его можно многократно использовать для создания копий фигуры.

Чтобы создать образец фигуры и добавить его в набор элементов

Чтобы создать новую фигуру, сделайте следующее:

Фигуры в наборах элементов Visio часто называют образцами фигур. При перетаскивании образца фигуры на страницу документа создается его копия (или экземпляр). Сам же образец остается в наборе элементов, поэтому его можно многократно использовать для создания копий фигуры.

Поставляемые корпорацией Майкрософт образцы фигур Visio защищены авторскими правами. Эти фигуры можно копировать, реорганизовывать и изменять для собственного использования. Можно также распространять содержащие их документы, но продавать и распространять исходные или измененные образцы фигур Visio нельзя.

Как вы знаете, переменная типа Variant может хранить информацию любого типа, в том числе и ссылки на объекты. Если вы объявляете переменную без явного указания на то, что это объект, то, выбирая позднюю привязку, вы сможете разместить в ней ссылку на объект позже.

После того как объектная переменная объявлена, перед ее использованием необходимо поместить в нее ссылку на объект. Это делается путем присваивания этой переменной объектного выражения с помощью ключевого слова Set. Например:

Set objShapeObject = ThisDocurcent.Pages(1).Shapes(4)

Обратите внимание, что синтаксис в данном случае немного отличается от того, каким вы присваивали данные обычным переменным (см. главу 9). Точно так же, как в случае данных других типов, между именем переменной и приписываемым ей объектом помещается знак равенства. Единственное отличие в том, что здесь оператор должен начинаться с ключевого слова Set.

Когда доступ к объекту уже не нужен, неплохо освободить объект от привязки к переменной. В результате программа сможет использовать участок памяти, ранее занятый объектом, а вы будете уверены в том, что ваш программный код не внесет по ошибке ненужные изменения в данный объект.

Сделать это совсем просто. С помощью оператора Set присвойте переменной ключевое слово Nothing, как в следующем примере:

Set objPriceIsNoObject = Nothing

Если объект, с которым вы собираетесь работать, еще не существует, вам придется его создать. В простых VBA-программах для этого используется метод Add, предназначенный для создания объектов, встроенных в ваше VBA-приложение, т.е. в приложение, с которым ассоциируется ваш проект. (В некоторых приложениях, возможно, именем такого метода будет что-то типа AddShape или AddDocument - проверьте в справочной системе приложения, чтобы знать точно.)

Самое главное - выяснить, метод Add какого именно из объектов следует применить. Цель - найти объект, который должен служить контейнером для создаваемого объекта. Обычно (но не всегда) подходящий контейнер представляет собой коллекцию.

Например, предположим, что нужно создать новый объект Layer в Visio. Объект Layer соответствует слою изображений в Visio. т.е. группе графических элементов, с которыми можно работать одновременно. Каждый объект Layer принадлежит объекту Layers, представляющему коллекцию из (одного или нескольких) слоев изображений. Исходя из лих соображений, для создания нового слоя вы должны выбрать метод Layers . Add.

Конечно, необходимо идентифицировать тот конкретный объект Layers, в котором

VBA придется создать ваш новый объект Layer. Коллекция Layers принадлежит конкретному объекту Page в объекте Document. Поэтому полностью оператор для создания нового объекта Laye r должен выглядеть примерно так:

ThisDocument.Pages(2).Layers.Add ("Новый слой")

Объект Layer тоже имеет метод Add, но его нельзя использовать для создания подобного нового слоя. Метод Add объекта Layer добавляет объект Layer в данный слой, а не создает еще один такой же Layer.

Точно так же, если нужно добавить новый слайд в презентации PowerPoint, понадобится примерно такой оператор:

АсtivePresentation.Slides.Add1.ppLayoutTextAndClipart

Как видите, новый слайд тоже добавляется в подходящий объект-контейнер - коллекция Slides.

Ввод длинных ссылок на объекты не приносит слишком много радости, а именно такие ссылки содержат операторы, использующие метод Add, - поэтому имеет смысл при создании объекта сразу же создать и переменную для этого нового объекта. Тогда в следующий раз вместо длинной ссылки на объект в программном коле можно использовать имя переменной. Вот пример использования такого подхода:

Dim objМойМалыш As Glide

Set objМойМалыш = ActivePresentation. Slides .Add 1, _

ppLayoutTextAndClipart

В иных случаях для создания объектов используются другие приемы. Вот несколько вариантов на выбор.

* Создание новой копии объекта, уже существующего в проекте.

* Использование объекта из другого приложения или компонента ActiveX (COM).

* Создание экземпляра объекта на основе класса, созданного вами в модуле класса.

В зависимости от ситуации, при этом используется либо ключевое слово New в объявлении переменной или операторе Set, либо функция Create Object. Здесь я не собираюсь объяснять, как конкретно используется такая техника - она относится к тонким вопросам программирования и обсуждается в главах 10 и 19. Я только обращаю ваше внимание на существование ключевого слова Mev,- и функции CreateObjеct с помощью которых создаются обычные объекты.

Раз уж вы собираетесь использовать переменные для хранения ссылок на объекты, наступит время, когда вы захотите выяснить, ссылается ли данная переменная на тот же объект, что и другая переменная или объектное выражение.

Проверить идентичность двух ссылок на объекты можно с помощью оператора Is. Значением соответствующего выражения будет True, если ссылки идентичны, и False, если ссылки указывают на разные объекты. Вот фрагмент программного кода, иллюстрирующий использование оператора Is:

Dim objObject l As Object, objOb]ect2 As Object

If objObjectl Is objObject2 Then

MsgBox "Это тот же самый объект!"

Else

MsgBox "Это разные объекты."

End If

С помощью оператора Is можно сравнить объектную переменную и с объектным выражением, например, так:

If objObiect3 Is ThisDocument.Pages(2).Shapes(3) Then

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

Эффективная работа с объектами в программе

Для упрощения работы с объектами в программе в VBA можно использовать две многострочные программные конструкции, называемые операторами With и Each . . .Next.

Использование оператора With

И когда для ссылки на объект используется мнемоническая переменная с коротким именем, и когда используется вполне инструктивное объектное выражение, их приходится вводить снова и снова. Но, оказывается, даже этого можно избежать.

Если в программе один и тот же объект используется в нескольких идущих один за другим операторах, то оператор With позволяет указать объект только один раз. Это не только избавит вас от необходимости печатать имя объекта для каждого из операторов, но и делает программный код более понятным, а его выполнение более быстрым. Например:

With objПолнаяОбъективность

Name = "Опрос общественного мнения" " установка свойства Name

DisplayName " вызов метода DisplayName

sngРегион = .Area " выяснение значения свойства Area

intПодтасовка = .Rotate(60) " вызов метода Rotate (Поворот)

" и сохранение возвращаемого им значения в переменной

End With

Как видите, конструкция With. . .End With может включать операторы, в которых читаются и устанавливаются свойства, вызываются методы. Обратите внимание на то, что данная конструкция не задает цикл - входящие в нее операторы выполняются только один раз.

Конструкции, использующие With, можно вкладывать одну в другую. Это удобно, когда нужно выполнить ряд действий и по отношению к некоторому объекту, и по отношению к одному из содержащихся в нем объектов. Пример предоставляет следующий фрагмент программного кода. В нем выполняются самые различные действия с объектом Block в AutoCAD. Во вложенной структуре With обрабатывается один из графических объектов, содержащихся в объекте Block.

Разобраться в деталях вам помогут комментарии.

With Block.Item("Монстр")

Эта книга поможет освоить интегрированную среду разработки VBA и научиться программировать в VBA с использование объектов, их свойств, методов и событий. Обсуждаемые приемы программирования иллюстрируются примерами, которые можно сразу же опробовать на практике. Полученные знания вы сможете применить как для настройки и усовершенствования популярный офисных приложений, включая приложения Office XP, так и для создания собственных приложений.

Книга рассчитана на тех, кто собирается быстро и без лишних усилий научиться программировать для Windows, используя VBA.

Книга:

Понимание объектных выражений

Понимание объектных выражений

Объектное выражение представляет собой фрагмент программного кода – выражение, "указывающее" на конкретный объект. С помощью правильно построенного объектного выражения можно изменять свойства объекта, вызывать его методы или присвоить объект переменной.

Обсуждаемые здесь приемы исключительно важны для практического программирования с использованием VBA, хотя сразу понять их не очень просто. Из-за того что в программе могут использоваться много объектов одновременно, полное объектное выражение должно включать все объекты, содержащие нужный вам объект. Попробую пояснить это следующим образом. Предположим, вас просят отправиться и найти "того парня". Вы сразу же спросите: "Какого еще того?"" А вот если бы вас попросили найти самого старшего школьника, живущего в доме №3 по улице Цветочной в городе Шепетовка, Украина, то вам не пришлось бы задавать такой вопрос. (Правда. вы бы тогда, наверное, спросили "Зачем?"") Конечно, если вы уже находитесь в доме №3 по улице Цветочной, и в том доме живет только один школьник, то команда типа "покормить мальчишку" будет вполне адекватной. Точно так же, когда контекст ясен, и VBA не требует полного списка объектов.

Свойство одного объекта может тоже оказаться объектом. Объекты сосуществуют в иерархии, когда один объект (например, документ) служит контейнером для других, подчиненных ему объектов (страниц, рабочих листов или чего-то другого).

Связь между двумя этими идеями очевидна: если объект содержит подчиненные объекты, то любой подчиненный объект можно идентифицировать посредством свойства первого объекта. Выражение, которое используется для указания нужного свойства, является объектным выражением.

Например, рассмотрим следующее выражение, идентифицирующее конкретный объект в документе Word;

В этом выражении не одна, а две точки. Посмотрите, Range является свойством объекта Section, который, в свою очередь, является свойством объекта ThisDocument. Возможно, чтобы понять идею, вам этого примера уже достаточно, но если нет, то в следующем разделе вы найдете более подробные объяснения.

В большинстве объектных моделей VBA объект Application (Приложение) находится на самой вершине иерархии. Однако обычно не возникает необходимости включать этот объект в выражения - VBA соображает достаточно неплохо для того, чтобы понять, что вы работаете с объектами текущего приложения, если вы специально не указываете иного.

Объект Application содержит объект Documents - коллекция, представляющая все открытые документы. Если вам нужно работать с конкретным документом, необходимо идентифицировать его среди членов этого объекта-коллекции Documents. Например.

Documents(5) представляет объект Document № 5 в коллекции Documents.

В примере объектного выражения вы, однако, видите ключевое слово ThisDocument. Во многих VBA-приложениях ThisDocument используется для обозначения объекта Document, ассоциированного с вашим проектом.

В Word каждый объект Document имеет свойство Sections, которое ссылается на коллекцию Sections, - объект, представляющий множество всех разделов документа. Поэтому первая часть указанного выше выражения - ThisDocument.Sections -идентифицирует конкретную коллекцию Sections, принадлежащую объекту ThisDocument. Идентифицировав объект Sections, вы получаете возможность выбрать конкретный член этой коллекции. Таким образом, Sections (2) ссылается на второй раздел документа.

Теперь о завершающей части выражения. Тонкость здесь заключается в том, что хотя.Range идентифицирует свойство объекта Section, значением этого свойства является объект Range. Таким образом, все выражение обеспечивает ссылку на этот объект Range.

Использование выражения, подобным образом прокладывающего путь к конкретному объекту сквозь дебри иерархии объектов, в профессиональной фразеологии VBA называется "получением объекта".

В рассмотренном выше примере объектного выражения

ThisDocument.Sections(2).Range

объект Sections представляет собой коллекцию. В VBA коллекцией называется объект специального типа, который может содержать любое число других объектов.

Определенные в VBA-приложениях коллекции обычно содержат объекты одного типа. Например, коллекции Sections в Word содержат только объекты Section, а коллекции Pages в Visio могут принадлежать только объекты Page. (Правда, VBA предлагает и родовой объект Collection, в котором вы можете разместить объекты любых типов. О том, как создавать и использовать свои собственные коллекции такого рода, говорится в главе 13.)

О коллекциях вам достаточно знать только то, как получить доступ к содержащимся в них конкретным объектам. Для этого у вас есть две возможности.

* Сослаться на объект по его месту или номеру индекса в коллекции. Именно это и сделано в рассмотренном выше примере объектного выражения - (2) задает ссылку на второй объект Section в коллекции Sections.

* Сослаться на объект по имени. Многие объекты имеют имена. Если вам известно имя объекта, который необходимо использовать, то вместо номера в объектном выражении можно указать имя. Например, в Visio объекты Page могут иметь имена, поэтому вполне допустим следующий пример:

ThisDocument.Pages ("Моя любимая страница")

Никто не любит вводить длинные и сложные объектные выражения, даже если они достаточно понятны, как выражение ThisDocument.Sections(2).Range.

Если в программе один и тот же объект используется несколько раз, создайте для него переменную, в которой будет храниться ссылка на объект. Тогда, при необходимости указать объект, вместо полного объектного выражения вы сможете ввести имя переменной.

Обычно объектная переменная имеет более короткое имя, которое легче запомнить и напечатать, чем оригинальное объектное выражение; кроме того, она имеет еще пару преимуществ. Во-первых, использование объектной переменной ускоряет выполнение программного кода, поскольку в этом случае VBA может обратиться к объекту напрямую, а не пробираться сквозь частокол свойств ряда промежуточных объектов. Во-вторых, одну и ту же переменную можно использовать для сохранения ссылок на различные объекты. Таким образом, программный код можно сделать более гибким, поскольку появляется возможность выбирать, ссылку на какой объект должна хранить переменная во время выполнения программы.

Процесс создание объектной переменной можно разбить на два этапа.

1. Создание переменной, которая будет использоваться для хранения ссылки на объект.

Подробно каждый из этих этапов обсуждается в следующих двух разделах.

Объектные переменные объявляются точно так же, как переменные любого другого типа.

Стандартным при этом является использование оператора Dim (но точно так же, как и с переменными других типов, вы можете использовать в объявлении ключевые слова Public.Private или Static вместо Dim). Вот два примера объявления объектных переменных:

Dim objВеликийОбъект As Object " типичный объект

Dim objShapeObject As Shape " объект Shape

Существует одно важное различие между этими двумя объявлениями. В первом операторе объявляется объектная переменная, но не указывается тип объекта, который будет в ней храниться. Переменную такого типа можно использовать по мере необходимости для ссылок на объекты любого типа. Во втором операторе объявляется конкретный тип, или класс объекта, для которого предназначается создаваемая переменная. VBA не позволит поместить в такую переменную объекты иных классов.

Эти два типа объявлений объектов имеют специальные названия: поздняя привязка, когда конкретный класс не указывается, и ранняя привязка, когда переменной сразу же назначается определенный класс объектов.

Всегда, когда это возможно, лучше использовать раннюю привязку, объявляя класс объектной переменной. При ранней привязке вы получаете следующие преимущества.

* Уменьшается вероятность появления ошибок. Как уже упоминалось, в этом случае VBA не позволит присвоить переменной объект неправильного типа. Кроме класса объекта, компилятор проверит также и остальную часть программного кода, чтобы убедиться в том, что вы везде используете только методы и свойства, допустимые для объектов данного класса. При поздней привязке компилятор не смог бы выполнить такую проверку, и попытка использования недопустимого свойства или метода обнаружилась бы только во время выполнения программы.

* Ускоряется выполнение программы. Поскольку компилятор может определить, имеет ли объект те методы и свойства, которые вызываются в программе, самой программе не придется тратить время на проверку этого во время ее выполнения.

* Упрощается программный код. Чтобы выяснить, для какого класса объектов предназначена данная переменная, вам нужно просто взглянуть на строку с ее объявлением.

Несмотря на все эти преимущества, поздняя привязка предпочтительнее в следующих двух ситуациях.

* Когда одну и ту же переменную предполагается использовать для объектов различных классов. Это оправданно, когда разным классам присуши одинаковые методы или свойства, используемые в программе. Имея подобную переменную, вам не придется переписывать программный код несколько раз, чтобы делать одно и то же с разными объектами.

* Когда объекты вызываются из других приложений и поэтому их нельзя объявить с помощью ранней привязки. Использование объектов из других приложений относится г к углубленным вопросам VBA-программирования (краткое обсуждение которых вы найдете в главах 10 и 19), но вам не мешает знать о таком потенциальном ограничении.

Как вы знаете, переменная типа Variant может хранить информацию любого типа, в том числе и ссылки на объекты. Если вы объявляете переменную без явного указания на то, что это объект, то, выбирая позднюю привязку, вы сможете разместить в ней ссылку на объект позже.

После того как объектная переменная объявлена, перед ее использованием необходимо поместить в нее ссылку на объект. Это делается путем присваивания этой переменной объектного выражения с помощью ключевого слова Set. Например:

Set objShapeObject = ThisDocurcent.Pages(1).Shapes(4)

Обратите внимание, что синтаксис в данном случае немного отличается от того, каким вы присваивали данные обычным переменным (см. главу 9). Точно так же, как в случае данных других типов, между именем переменной и приписываемым ей объектом помещается знак равенства. Единственное отличие в том, что здесь оператор должен начинаться с ключевого слова Set.

Когда доступ к объекту уже не нужен, неплохо освободить объект от привязки к переменной. В результате программа сможет использовать участок памяти, ранее занятый объектом, а вы будете уверены в том, что ваш программный код не внесет по ошибке ненужные изменения в данный объект.

Сделать это совсем просто. С помощью оператора Set присвойте переменной ключевое слово Nothing, как в следующем примере:

Set objPriceIsNoObject = Nothing

Если объект, с которым вы собираетесь работать, еще не существует, вам придется его создать. В простых VBA-программах для этого используется метод Add, предназначенный для создания объектов, встроенных в ваше VBA-приложение, т.е. в приложение, с которым ассоциируется ваш проект. (В некоторых приложениях, возможно, именем такого метода будет что-то типа AddShape или AddDocument - проверьте в справочной системе приложения, чтобы знать точно.)

Самое главное - выяснить, метод Add какого именно из объектов следует применить. Цель - найти объект, который должен служить контейнером для создаваемого объекта. Обычно (но не всегда) подходящий контейнер представляет собой коллекцию.

Например, предположим, что нужно создать новый объект Layer в Visio. Объект Layer соответствует слою изображений в Visio. т.е. группе графических элементов, с которыми можно работать одновременно. Каждый объект Layer принадлежит объекту Layers, представляющему коллекцию из (одного или нескольких) слоев изображений. Исходя из лих соображений, для создания нового слоя вы должны выбрать метод Layers . Add.

Конечно, необходимо идентифицировать тот конкретный объект Layers, в котором

VBA придется создать ваш новый объект Layer. Коллекция Layers принадлежит конкретному объекту Page в объекте Document. Поэтому полностью оператор для создания нового объекта Laye r должен выглядеть примерно так:

ThisDocument.Pages(2).Layers.Add ("Новый слой")

Объект Layer тоже имеет метод Add, но его нельзя использовать для создания подобного нового слоя. Метод Add объекта Layer добавляет объект Layer в данный слой, а не создает еще один такой же Layer.

Точно так же, если нужно добавить новый слайд в презентации PowerPoint, понадобится примерно такой оператор:

АсtivePresentation.Slides.Add1.ppLayoutTextAndClipart

Как видите, новый слайд тоже добавляется в подходящий объект-контейнер - коллекция Slides.

Ввод длинных ссылок на объекты не приносит слишком много радости, а именно такие ссылки содержат операторы, использующие метод Add, - поэтому имеет смысл при создании объекта сразу же создать и переменную для этого нового объекта. Тогда в следующий раз вместо длинной ссылки на объект в программном коле можно использовать имя переменной. Вот пример использования такого подхода:

Dim objМойМалыш As Glide

Set objМойМалыш = ActivePresentation. Slides .Add 1, _

ppLayoutTextAndClipart

В иных случаях для создания объектов используются другие приемы. Вот несколько вариантов на выбор.

* Создание новой копии объекта, уже существующего в проекте.

* Использование объекта из другого приложения или компонента ActiveX (COM).

* Создание экземпляра объекта на основе класса, созданного вами в модуле класса.

В зависимости от ситуации, при этом используется либо ключевое слово New в объявлении переменной или операторе Set, либо функция Create Object. Здесь я не собираюсь объяснять, как конкретно используется такая техника - она относится к тонким вопросам программирования и обсуждается в главах 10 и 19. Я только обращаю ваше внимание на существование ключевого слова Mev,- и функции CreateObjеct с помощью которых создаются обычные объекты.

Раз уж вы собираетесь использовать переменные для хранения ссылок на объекты, наступит время, когда вы захотите выяснить, ссылается ли данная переменная на тот же объект, что и другая переменная или объектное выражение.

В последнее время в некоторых (даже весьма уважаемых) источниках появляются примерно такие утверждения:
"Рисунки, связанные с данными – это функция Visio профессиональный 2013 и Visio Pro для Office 365 и она недоступна в Visio стандартный 2013".
"Обновление данных работает только в одну сторону (из базы на диаграмму), т.е. штатными средствами обновление данных в источнике не сделать".
Неправда все это! Вернее это бывает правдой в определенных случаях. Но начинающий пользователь не всегда может разобраться в тонкостях, поэтому такие утверждения сплошь и рядом его обманывают.
Любая версия Visio всегда обеспечивала как минимум несколько способов связи рисунка с данными. Вот основные из них.

Возможность разработки своего дополнения, обеспечивающего связь рисунка Visio с листом Excel или таблицей базы данных, существовала всегда (по крайней мере, последние 15 лет). Это работало и в простейших и в самых профессиональных версиях. Причем дополнение могло писать данные в любую ячейку шейп-листа, то есть в любой атрибут шейпа (фигуры). Естественно, этот путь работает и сейчас, в том числе и в Visio 2013. Только он не для всех удобен, потому что требует навыков разработки дополнения (или написания макросов).
Со временем Microsoft написала более-менее универсальное дополнение и стало включать его в комплект поставки. Это 5 визардов (помощников) для работы с БД. Визарды появились где-то в районе Visio 2000. Они считались ценными и включались в состав только профессиональных, дорогих версий. В Visio 2013 они тоже есть (только в профессиональном и Pro для Office365).
Дополнение не было в должной мере документировано, поэтому осваивается непросто. По сравнению с произвольным дополнением набор функций был конечно ограничен, но достаточно широк для решения многих универсальных задач. Передача данных поддерживается в обе стороны – из БД в шейпы и из шейпов в БД.
В качестве основного приемника данных в шейпах используются данные шейпа (Shape Data или несколько ранее Custom Properties). Хотя могут использоваться и другие атрибуты шейпов.
С введением этого дополнения стала возможным связь рисунка Visio с источником данных без программирования, только с помощью настроек.
В Visio 2007 введен еще более "продвинутый" элемент – окно "Внешние данные" и поддерживающий его транспорт данных. Принцип "без программирования" стал выражен еще ярче. Количество настроек снизилось. Количество выполняемых функций – тоже.
Новая технология стала однонаправленной. Теперь данные движутся только от базы данных в рисунок Visio. Обратный путь не обеспечивается. Дополнение работает только в профессиональных версиях Visio.
Одновременно введен еще и специальный элемент для отображения внешних данных Data Graphics – специальные выноски, которые могут автоматически прилепляться к любому шейпу после связывания его с внешними данными.
И как всегда, наиболее широко рекламируется самое последнее достижение. В случае Visio им как раз и стала связка окна "Внешние данные" и отображение в Data Graphics. То есть наиболее простая для пользователя технология с минимум функций. Именно она обладает указанными в начале свойствами – однонаправленность передачи данных и поставка только с профессиональными версиями.
Но забывать про наличие ранних, более мощных технологий – это большая ошибка. Да, они осваиваются чуть тяжелее. Зато их возможности намного превышают последний урезанный вариант. И, что тоже очень существенно, свое дополнение позволяет обойтись минимальной комплектацией Visio, а это может сэкономить (для Visio 2013) до 10 000 руб. на каждой лицензии.

Технология "Рисунки, связанные с данными"

Про эту технологию в последнее время сказано достаточно много. Вот несколько ссылок:
Связывание схем с внешними данными – пошаговый пример настройки связи между Visio 2010 и листом Excel. Тема Data Graphics не затрагивается.
Создание новых рисунков, связанных с данными – пошаговый пример добавления к шейпам предыдущей схемы элементов Data Graphics для отображения внешних данных.
Trilogy-meter Data Graphics Part I , Part II , Part III , – к сожалению, только на английском. Подробное описание решения задачи с использованием связи Visio с внешними данными. В трех последовательных статьях показан как сам процесс настройки связи с данными, так и решение сопутствующих задач (создание своих элементов Data Graphics, импорт изображений, технология обновления данных). Создавалось еще в 2009 г. для Visio 2007.
Building Custom Data Graphics for Visio 2007 – базовая статья Марка Нельсона о том, что такое Data Graphics, какие они бывают, как их создавать и как применять. Тоже на английском. От 2006 г., когда Data Graphics только зарождались.
Creating custom data graphics in Visio – современный пошаговый пример создания собственных значков. На английском.
Особенности технологии: данные двигаются только в одном направлении – из БД в рисунок Visio; технология доступна только в профессиональных версиях Visio.
Подробности
Начиная с Visio 2007 объект документ Visio содержит коллекцию объектов DataRecordSet. Объект DataRecordSet отвечает за передачу данных из БД в Visio.
Данные из DataRecordSet отображаются в окне "Внешние данные". Именно это окно пользователь видит и использует для настройки связи внешних данных с шейпами. Но программист имеет доступ и к самому объекту DataRecordSet, что позволяет использовать его в своих дополнениях, обеспечивающих, например, автоматическое соединение внешних данных с шейпами по определенному алгоритму.
В момент создания связи строки внешних данных с шейпом в шейпе автоматически создаются строки данных шейпа (Shape Data), соответствующие полям внешних данных. Строки добавляются только в том случае, если шейп не имеет строк данных с нужными наименованиями. То есть, если нужные поля создать заранее, они будут найдены и заполнены автоматически.
Область применения
Сокращенные возможности технологии предполагают и соответствующее сужение области применения. Технология применяется там, где нужно быстро добавить индикацию внешних данных на каком-либо готовом рисунке.
Яркий пример использования приведен на странице Карта Российских регионов . Здесь к основе (множество шейпов, составляющих карту) подключаются данные с сайта переписи населения в формате Excel. В результате на карте появляются в виде индикаторов данные о составе населения. Естественно, к одной и той же основе могут быть подключены различные источники данных для отображения нужной информации.
Основа не обязательно создается вручную. Она может быть получена другим дополнением Visio, например, путем автоматического построения оргсхемы организации. То есть сначала с помощью визарда оргсхем изображается структура организации, потом на нее накладывается нужная текущая информация из другой базы или файла.
Технология не обязательно заканчивается на Data Graphics. Для многих применений достаточно того, что данные появляются в Shape Data. При этом они легко могут просматриваться в интерактивном режиме через окно "Данные шейпа".
Наконец после появления внешних данных в Shape Data они могут отображаться не только в индикаторах, добавляемых к шейпу-основе. Этот шейп сам по себе может быть выполнен по технологии смарт-шейпа и изменяться в зависимости от данных. Вот пример, в котором смарт-шейпы применены в качестве таких сложных индикаторов, отображающих интенсивность использования веб-сервисов на предприятии.


Здесь каждый универсальный индикатор получает через внешние данные текущее значение измеряемого показателя, ограничители для раскраски и десяток предыдущих значений для отображения предыстории. Данные обновляются и публикуются по расписанию. Таким образом, довольно простыми средствами формируется экран для отображения измеряемых показателей.

Технология DataBase визардов

Пример подключения внешних данных из Excel к рисунку Visio 2003 рассмотрен в статье Связь шейпов Visio с данными в Excel . Пример охватывает подготовку файла в Excel, настройку связи, настройку шейпов для отображения данных, прямое и обратное обновление данных. Как уже отмечалось, по этой технологии передача данных осуществляется в обе стороны.
Через меню Add-Ons / Visio Extras в Visio 2007 доступны следующие дополнения:
  • Database Export Wizard
  • Database Refresh
  • Database Settings...
  • Database Update
  • Database Wizard
  • Export to Database...
  • Link to ODBC Database.
Два из них (Database Refresh и Database Update) являются простыми исполняющими дополнениями, а остальные 5 выполнены по типу визардов, подразумевающих настройку выполняемых операций.
Совсем не обязательно использовать весь этот комплект дополнений полностью. В описанном выше примере понадобились только Database Settings, Link to ODBC Database, Database Refresh и Database Update. В других задачах могут быть задействованы другие комбинации.
Общая схема передачи данных следующая
DataBase дополнение использует выбираемый при настройке ODBC драйвер, связывающий его с нужным источником – таблицей БД или файлом Excel. В рисунке Visio данные поставляются в секцию Shape Data.
Так же как и в вышеописанной технологии, целевой шейп может быть автоматически подстроен для приема данных в момент настройки соединения. В секцию добавляются именованные строки для приема данных, существующих в присоединяемой таблице.
Технология в основном рассчитана на ручную работу, хотя синхронизирующие дополнения Refresh и Update, как и любое дополнение могут быть вызваны программным путем из некоторого пользовательского приложения.
Область применения
Технология в принципе могла бы использоваться везде, где сейчас используется технология с окном "Внешних данных", и дополнительно в тех случаях, когда нужна обратная передача данных. Она тоже не требует знания программирования.
Тем не менее, широкого распространения она не получила. Причина скорее всего в том, что она уже вызывала трудности освоения у неподготовленного пользователя и в то же время не давала той свободы, которую предоставляет технология с разработкой своих дополнений.
Существенным ограничением является то, что связь устанавливается между конкретным шейпом и конкретной таблицей БД. Связываемые объекты должны появиться заранее и не поддерживаются сложные связки данных.

Разработка своих дополнений

Главное отличие этой технологии в том, что во всех остальных пользователю приходилось подстраиваться под функции, предоставляемые чужим дополнением. В этой технологии подстраиваться не надо, сделать можно все, что угодно.
Для связи с базой данных обычно используется ADODB, предоставляющий всю мощь SQL, произвольные запросы к любым таблицам БД.


К рисунку Visio доступ осуществляется через объектную модель Visio, то есть к произвольным объектам.
Но большие возможности сопровождаются большим разнообразием решений. Единственная типовая схема приложения типа окна "Внешние данные" уже не сможет закрыть всего этого разнообразия.
Один из возможных примеров, в котором Visio выступает в качестве графического редактора данных, находящихся в базе, показан в статье . О других примерах, различных областях применения и возможных схемах приложений, пожалуй, лучше поговорить отдельно.

 

 

Это интересно: