Текст
                    справочник
VBA 6.3
Гюнтер Штайнер
1 Первые шаги	11
2 Типы данных и операции 44
3 Управляющие структуры VBA 81
4 Операторы и функции VBA	102
5 Меню, панели	209
6 Объект Word	267
7 Объект Excel	433
8 Объект PowerPoint	540
9 Объект Access	667
10 Объекты доступа	к данным 730

Гюнтер Штайнер VBA 6.3 СПММВЮЧ^иК Москва Лаборатория Базовых Знаний ЮНИМЕДИАСТАЙЛ 2 0 0 2
УДК 004.65 ББК 32.973 Ш87 Научный редактор С. Молявко Штайнер Г. VBA 6.3. — М.: Лаборатория Базовых Ш 87 Знаний, 2002. — 784 с.: ил. — (Справочник). ISBN 5-93208-127-9 В книге приведены справочные сведения по программирова- нию на языке Visual Basic 6.3 для приложений (VBA 6.3) в рам- ках Microsoft Office ХР Professional. Подробно описаны объек- ты, их свойства и методы, операторы, функции, типы данных. Отдельная глава посвящена проектированию меню, панелей и форм. Описание иллюстрировано примерами. Сведения структу- рированы по приложениям, входящим в состав Microsoft Office ХР: Word, Excel, PowerPoint, Access. Книга предназначена для начинающих пользователей и не требует знакомства с предыдущими версиями языка Visual Ba- sic. УДК 004.65 ББК 32.973 Серия «Справочник» Производственно-техническое издание Гюнтер Штайнер VBA 6.3. Справочник Художник Н. Лозинская Верстка Л. Черепанова Подписано в печать 28.03.02. Формат 70x100 1/32. Гарнитура Прагматика. Бумага газетная. Печать офсетная. Усл. печ. л. 31,85. Тираж 3000 экз. Заказ ! 855 Издательство «Лаборатория Базовых Знаний» Адрес для переписки: 103473, Москва, а/я 9 Телефон (095)955-03-98. E-mail: lbz@aha.ru Лицензия на издательскую деятельность №066140 от 12 октября 1998 г. Гигиеническое заключение № 77.99.1.953.П.998.3.99 от 03.03.1999 г. Отпечатано с готовых диапозитивов в полиграфической фирме «Полиграфист» 160001, г. Вологда, ул. Челюскинцев, 3 © Штайнер Г., 2002 ISBN 5-93208-127-9 © Лаборатория Базовых Знаний, 2002
Содержание Предисловие...................................8 Работа со справочником........................9 Оформление текста............................10 1. Первые шаги...............................11 1.1. Запись макросов.........................12 1.2. Редактирование макросов.................15 1.3. Создание макроса в программном коде.....16 1.4. Редактор Visual Basic...................17 1.5. Основные понятия VBA....................38 2. Типы данных и операции...................44 2.1. Объявления и область видимости..........44 2.2. Простые типы данных.....................52 2.3. Массивы.................................61 2.4. Типы данных, определяемые пользователем.64 2.5. Арифметические операции.................66 2.6. Логические операции.....................68 2.7. Операции сравнения......................76 2.8. Операции объединения....................79 3. Управляющие структуры VBA................81 3.1. Переход по метке........................81 3.2. Конструкции выбора......................83
4 VBA 6.3 3.3. Ветвление по условию........................85 3.4. Циклы.......................................88 3.5. Досрочный выход из цикла....................93 3.6. Процедуры (Макросы).........................95 3.7. Функции.....................................97 3.8. Внешние ссылки..............................99 4. Операторы и функции VBA.....................102 4.1. Интерфейс..................................103 4.2. Файловые операции..........................108 4.3. Дата и время...............................148 4.4. Информация о среде.........................161 4.5. Финансовые вычисления......................167 4.6. Математические вычисления..................174 4.7. Строки.....................................180 4.8. OLE........................................194 4.9. Коллекции..................................198 4.10. Обработка ошибок..........................203 5. Меню, панели инструментов, экранные формы..................................209 5.1. Меню и панели инструментов.................209 5.2. Экранная форма.............................226 6. Объект Word.................................267 6.1. Обзор объектной модели Word................268 6.2. Объект Application.........................294 6.3. Единицы измерения и их преобразование......311 6.4. Параметры среды Word.......................312 6.5. Доступ к документам — объект Document......318
Содержание 5 6.6. Раздел документа — объект Section..........349 6.7. Колонтитулы — объект HeaderFooters.........353 6.8. Абзацы (параграфы) — объект Paragraph......354 6.9. Предложения — коллекция Sentences..........366 6.10. Отдельные слова — коллекция Words.........367 6.11. Текст документа и объект Range............368 6.12. Границы — коллекция Borders...............388 6.13. Управление табуляцией — объект TabStop....397 6.14. Форматирование символов — объект Font.....400 6.15. Пример форматирования.....................408 6.16. Манипуляции с таблицами — коллекция Tables . . . 412 6.17. Столбцы таблицы — коллекция Columns.......418 6.18. Строки таблицы — коллекция Rows...........421 6.19. Ячейка таблицы — объект Cell..............426 6.20. Форматирование таблицы (пример)...........430 7. Объект Excel.................................433 7.1. Обзор объектной модели Excel...............434 7.2. Уровень приложения — объект Application....452 7.3. Книга — объект Workbook....................471 7.4. Лист книги — объект Worksheet..............486 7.5. Доступ к ячейкам — объект Range............497 7.6. Доступ к содержимому ячеек — объект Range..507 7.7. Форматирование ячеек — объект Range........513 7.8. Операции со списками — объект Range........518 7.9. Внедренные диаграммы — объект Chartobject..523 7.10. Диаграммы — объект Chart..................527 8. Объект PowerPoint............................540 8.1. Обзор объектной модели PowerPoint..........541
6 VBA 6.3 8.2. Уровень приложения — объект Application......559 8.3. Основной объект — Presentation...............564 8.4. Образцы — объект Master......................577 8.5. Слайды — объект Slide........................581 8.6. Объекты слайда - коллекция Shapes............588 8.7. Объект Shape.................................598 8.8. Обработка событий — объект ActionSetting.....612 8.9. Параметры анимации — объект Animationsettings . . 614 8.10. Параметры заливки — объект FillFormat.......617 8.11. Форматирование линий — объект LineFormat....622 8.12. Управление тенью — объект ShadowFormat......626 8.13. Эффекты объемности — объект ThreeDFormat. . . . 630 8.14. Форматирование текста — объект Textstyle....635 8.15. Область текста — объект TextFrame...........636 8.16. Объект TextRange............................640 8.17. Форматирование абзаца — объект ParagraphFormat.............................652 8.18. Форматирование символов — объект Font.......655 8.19. Таблица — объект Table......................658 8.20. Столбец — объект Column.....................660 8.21. Строка — объект Row.........................662 8.22. Ячейка — объект Cell........................664 9. Объект Access.................................667 9.1. Обзор........................................667 9.2. Уровень приложения — объект Application......672 9.3. Управление приложением — объект DoCmd........681 9.4. Экранная форма — объект Form.................696 9.5. Элемент управления — Control.................713 9.6. Отчеты — объект Report.......................715
МЯИИ Содержание 7 9.7. Экран — объект Screen.........................720 9.8. База данных — объект CurrentData..............722 9.9. Проект — объект CurrentProject................725 10. Объекты доступа к данным (DAO)................730 10.1. DAO: что это такое?..........................730 10.2. Обзор DAO.....................................731 10.3. Начало начал — объект DBEngine...............735 10.4. Подключение к базе данных ODBC...............745 10.5. База данных — объект Database................751 10.6. Запросы — объект QueryDef....................758 10.7. Набор записей — объект Recordset.............761 10.8. Таблицы — объект TableDef....................777 10.9. Поле данных — объект Field...................780 Приложение. Указатель терминов Visual Basic .... 782
Предисловие С ростом производительности персональных компьютеров и сложности программных средств пользователям становится все труднее «держать в уме» все функции применяемого языка программирования. По этой причине в повседневной работе, как правило, используется далеко не весь спектр существую- щих возможностей конкретного инструментария или операци- онной среды, а только небольшая их часть. Практика показыва- ет, что и вводные обучающие курсы дают представление толь- ко о самых важных командах и навязывают пользователю при- менение ряда типовых процедур, многие из которых далеко не оптимальны. Большинство пользователей, преодолев пер- вый страх перед новым инструментарием и накопив достаточ- ный опыт, начинают испытывать естественное желание позна- комиться с возможностями среды разработки поближе. Им хочется использовать если не все, то многие из доступных средств. Им не нужны подробные и длинные (как в учебниках) описания операторов: они уже с полуслова понимают, о чем речь... Именно для пользователей, которые принадлежат к группе «нетерпеливых», предназначена серия книг нашего изда- тельства, объединенных в серию «Справочник». Вся информация изложена как раз в том порядке, в кото- ром она обычно требуется во время работы. Единообразное построение глав способствует быстрому пониманию/усвоению необходимой информации и суще- ственно упрощает поиск. Многочисленные перекрестные ссылки позволяют найти всю информацию, имеющую отношение к рассматривае- мому вопросу. Небольшой и удобный формат исключает проблему «раз- мещения» книги на рабочем столе.
(gOlPfeWliW Работа co справочникомПредисловие 9 Все книги серии построены по единой схеме. Поэтому зна- комство с одной из них позволит в дальнейшем быстро со- риентироваться при изучении следующего программного продукта. Желаем вам успехов и трудовых свершений при работе со «Справочником VBA 6.3». Автор Работа со справочником Соблюдайте следующие рекомендации при работе со Спра- вочником и вы сможете эффективно использовать это посо- бие и быстро найти необходимую информацию. Типовая структура главы Краткое описание главы дается сразу после ее заглавия. Описание последовательности действий (Процедура) позволит вам шаг за шагом решить наиболее важные проблемы как при работе с IDE, с различными дополните- льными программами, так и при собственно программи- ровании. Я в примечаниях даны советы и рассмотрены отдельные детали. Каждый раз при упоминании вопроса, более подробные комментарии к которому можно получить в других главах, вы найдете соответствующую ссылку с номером раздела в виде: (см. *.*). Для того чтобы учесть все многообразие возможностей Vi- sual Basic For Applications 6.3, при построении некоторых глав автор позволил себе отойти от типовой структуры.
10 Предисловие Оформление текста Оформление элементов текста В Справочнике используются следующие оформительские приемы для выделения различных элементов текста. Жирный шрифт применяется для выделения элементов инструментальной среды, команд, ключевых слов и других элементов языка, которые должны быть записаны без из- менений. Моноширинный шрифт (похожий на шрифт принтера) используется для примеров команд и программ. Описание синтаксиса Все формальные описания синтаксиса построены по опреде- ленной схеме, с использованием специальных оформитель- ских приемов. Ключевые слова и другие элементы языка, которые дол- жны быть использованы без изменений, набраны обычным шрифтом. Курсив используется для выделения идентификаторов функ- ций, классов, параметров, а также других идентификаторов. В квадратных скобках [] перечисляются необязательные элементы синтаксической конструкции. Эти элементы мо- гут быть включены в команду только в случае необходимо- сти. Такие скобки не нужно вводить при записи команды.
| Первые шаги Visual Basic For Applications (VBA—Visual Basic для приложений) реализован в пяти важнейших компонентах пакета Microsoft Of- fice ХР. VBA представляет собой полностью унифицированный язык программирования и почти полностью унифицированную среду разработки. Как следует из названия VBA, он относится к диалектам BASIC, являясь при этом объектно-ориентированным языком, облада- ющим значительными возможностями в отношении объектной модели и многократно используемого кода, что позволяет реа- лизовать с его помощью достаточно сложные проекты. Visual Basic For Applications — открытая система, допускающая расширение посредством элементов управления ActiveX. Бла- годаря этому качеству VBA существенно превосходит по своим возможностям старые редакторы макросов, которыми компо- ненты Office оснащались раньше. В то же время макрос можно записать «старым, добрым» спо- собом, при этом он будет записан и станет доступным для ре- дактирования в форме процедуры на языке Visual Basic; с од- ной стороны, это может оказаться полезным при создании сложной VBA-программы, с другой — представляет собой наи- более простой и легкий способ сделать первые шаги в про- граммировании на VBA. При более близком знакомстве с VBA вы обнаружите новые возможности, выражающиеся в облегчении доступа к данным разных видов и упрощении манипуляций с ними. Конечно, при всех усовершенствованиях даже визуальное программирова-
1.1. Запись макросов ние не сводит работу программиста к нулю — для создания правильно работающего приложения все равно придется по- трудиться. 1.1. Запись макросов Обзор. Процедура записи Перед записью макроса необходимо точно представлять себе последовательность действий, подлежащих записи. В противном случае будут записаны также ошибки и дей- ствия по их исправлению. Начните запись макроса. Задайте его атрибуты. Выполните последовательность действий, подлежащих за- писи. Прекратите запись макроса. Процедура. Запись макроса в среде PowerPoint 1. Сервис / Макрос / Начать запись... 2. Введите имя макроса (латиницей) и его описание, выбе- рите, если необходимо, значение поля Записать в. 3. Щелкните на ОК. 4. Выполните в среде PowerPoint необходимые действия. 5. Сервис / Макрос / Остановить запись.
1.1. Запись макросов 13 Примечания Макрос можно сохранить в любой открытой презентации. Назначить кнопку панели инструментов для вызова запи- санного макроса можно с помощью диалога Сервис / На- стройка. Процедура. Запись макроса в среде Excel 1. Сервис / Макрос / Начать запись ... 2. Введите имя макроса (латиницей) и его описание, выбе- рите, если необходимо, значение поля Сохранить в и на- значьте макросу сочетание клавиш. 3. Щелкните на ОК. 4. Выполните в среде Excel необходимые действия. 5. Сервис / Макрос / Остановить запись. Примечания В зависимости от выбора, сделанного на шаге 2, записан- ный макрос помещается в текущую книгу, в новую книгу или в личную книгу макросов, которую Excel при необходи- мости создаст автоматически.
14 1.1. Запись макросов Назначенное макросу сочетание клавиш будет заменять любое сочетание, установленное в среде Excel по умолча- нию, пока книга, где записан макрос, открыта. Назначить кнопку панели инструментов для вызова макро- са можно с помощью диалогов Сервис / Настройка и Сервис / Макрос / Макросы / Параметры. Процедура. Запись макроса в среде Word 1. Сервис / Макрос / Начать запись ... 2. Введите имя макроса (латиницей) и его описание, выбе- рите документ или шаблон, для которых макрос должен быть доступен. 3. Назначьте кнопку панели инструментов или сочетание кла- виш для вызова макроса. 4. Щелкните на ОК. 5. Выполните в среде Word необходимые действия. 6. Сервис / Макрос / Остановить запись.
1.2. Редактирование макросов 15 Примечания В зависимости от выбора, сделанного на шаге 2, записан- ный макрос будет доступен либо только в текущем доку- менте, либо во всех документах — пункт Всех документов (Normal.dot). Назначать макросу сочетание клавиш следует только пос- ле того, как определено его имя. После выбора сочетания клавиш запись макроса начнется немедленно. Назначить кнопку панели инструментов одновременно с сочетанием клавиш невозможно, в случае необходимости это можно сделать после окончания записи макроса. Процедура. Запись макроса в среде Access В среде Access отсутствует функция записи макросов. Процедура. Запись макроса в среде Outlook В среде Outlook отсутствует функция записи макросов. 1.2. Редактирование макросов Процедура. Вызов редактора Visual Basic 1. Сервис / Макрос / Макросы ... 2. Выберите макрос из списка. 3. Отредактируйте его. Или: 1. Сервис / Макрос / Редактор Visual Basic ... Или: Сочетание клавиш [Alt]+[F11 ]. 2. В панели проекта Project—... разверните поддерево моду- лей Modules. 3. Выполните двойной щелчок на имени программного модуля.
16 1.3. Создание макроса в программном коде Примечание Местоположение программного модуля, содержащего VBA-запись макроса, зависит от выбора, сделанного пе- ред началом записи (см. выше). 1.3. Создание макроса в программном коде 1.3.1. Создание макроса Процедура. Создание макроса 1. Сервис / Макрос / Редактор Visual Basic ... или [Alt]+ [F11]. 2. Выберите проект в панели Project. 3. Insert I Module. 4. В окне созданного модуля введите программный код мак- роса (Sub или Function).
1.4. Редактор Visual Basic 17 1.4. Редактор Visual Basic Для всех основных компонентов Office ХР (Access, Outlook, PowerPoint, Word и Excel) существует унифицированная среда редактирования VBA-кода — редактор Visual Basic, при этом макрос записывается и существует только в виде процедуры на языке VBA. К тому же манипуляции с записью макросов в этих трех приложениях мало чем отличаются друг от друга. Несколько особняком стоит Access — здесь сохранен старый механизм макросов, и взаимодействие между макросом и VBA-программой требует принятия специальных мер. Запущенный тем или иным способом редактор Visual Basic представляет собой самостоятельное приложение, интегри- рующее в себе все средства, необходимые для разработки (визуального программирования и программирования в коде) VBA-программы.
18 1.4. Редактор Visual Basic Примечание Каждое из окон (панелей) редактора Visual Basic может быть закреплено (припарковано) или же сделано плаваю- щим (при этом оно будет располагаться на рабочей по- верхности на правах «свободного» дочернего окна). 1.4.1. Окно программы (окно кода) Примечания Можно работать одновременно с несколькими окнами про- граммы (окнами кода). Окно кода можно закрепить (припарковать) или освобо- дить от связи с соседними окнами (сделать плавающим). При вводе имен объектов имя метода, свойства или собы- тия можно выбрать из всплывающего списка, вызываемо-
1.4. Редактор Visual Basic 19 го из контекстного меню командой List Properties/Met- hods (Список свойств и методов). Синтаксис программного кода проверяется непосредствен- но при вводе. Для того чтобы создать процедуру обработки события не- которого объекта, необходимо выбрать имя объекта и имя события в комбинированных полях (полях со списком) в верхней части окна кода. Две кнопки в левом нижнем углу окна кода служат для вы- бора между двумя режимами отображения текста — весь текст или только текущая процедура. 1.4.2. Окно проекта Примечания Аналогично Проводнику Win- dows окно (панель) проекта отображает состав и строе- ние проекта в форме древо- видной структуры. Дерево проекта может вклю- чать в себя (кроме собствен- но проекта) презентации, до- кументы или рабочие книги, а также модули, модули клас- сов, формы, ссылки и т. д. Модули, модули классов и формы можно перемещать из проекта в проект с помощью метода «перетащить и оста- вить» (технология Drag&Drop) а VBAProject (PERSONAL.XLS) i±? £sfe Microsoft Excel Objects Et Modules Moduiel E VBAProject (vba6_exl-5.xls) E Microsoft Excel Objects । i ® Лист! (Лист!) = k ® Лист2 (Лист2) I- • ® ЛистЗ (ЛистЗ) !""4Г| ЭтаКнига 3 Modules ^ЕШЯ
20 1.4. Редактор Visual Basic 1.4.3. Окно свойств Примечания Окно свойств Properties предоставляет доступ ко всем свойствам объекта, доступным для изменения на этапе программирова- ния. Список свойств можно упо- рядочить в алфавитном по- рядке или по категориям. Окно свойств можно закре- пить или сделать плаваю- щим. 1.4.4. Просмотр объектов Примечания Окно просмотра объектов Object Browser позволяет най- ти и выбрать любой объект, относящийся к проекту, а так- же его свойства, методы и события. В сущности, просмотр объектов подразумевает доступ ко всей иерархии объектной модели VBA и каждого из компо- нентов Office. Возможен просмотр всех объектов или только объектов, относящихся к выбранному компоненту Office. Кроме того, окно Object Browser содержит объявления всех предопределенных констант. Здесь доступны также определенные пользователем эле- менты управления, типы данных, константы, процедуры и функции.
1.4. Редактор Visual Basic 21 Двойным щелчком на имени процедуры можно перейти к редактированию ее кода. 1.4.5. Окно формы Примечания В объектной модели формы (экранные формы) представ- лены библиотекой MSForms. Объекты этого типа, пользовательские формы (UserForms) располагают собственными программными модулями, со- держащими процедуры обработки событий для элементов форм. На поверхности формы можно использовать цвет, различ- ные шрифты, а также фоновые точечные рисунки. На форму можно поместить любой доступный через ссыл- ку элемент управления ActiveX (ActiveX-элемент).
22 1.4. Редактор Visual Basic Чтобы связать с формой ActiveX-элемент, необходимо сна- чала вывести его на панель инструментов элементов управ- ления Toolbox, воспользовавшись командой Tools /Addi- tional Controls. В открывшемся окне следует установить
1.4. Редактор Visual Basic 23 флажки интересующих вас ActiveX-элементов и нажать кнопку ОК. Теперь можно выбрать на панели инструмен- тов Toolbox требуемый элемент. Помещенные на форму элементы управления можно пере- мещать методом «перетащить и оставить» (Drag&Drop). Значения свойств элементов формы и самой формы мож- но изменить с помощью окна Properties. 1.4.6. Отладка и тестирование программы Редактор Visual Basic располагает целым рядом возможностей в плане тестирования и отладки макросов (VBA-процедур). Обзор. Тестирование программного кода Окно контрольных значений Watch window позволяет от- слеживать (в режиме пошаговой отладки или, что почти то же самое, в точке останова) значения выбранных перемен- ных и выражений.
24 1.4. Редактор Visual Basic Окно отладки Immediate window позволяет вводить под- лежащие немедленному выполнению инструкции (опера- торы) на языке VBA. Последовательность вызовов процедур и функций, привед- шую к текущему состоянию программы, можно увидеть с помощью команды View / Call Stack. В режиме пошаговой отладки можно увидеть значение пе- ременной или выражения, поместив указатель мыши на соответствующее место в тексте программы. Я Для выполнения очередной строки программного кода в режиме пошаговой отладки следует выбрать команду Step Into меню Debug или нажать клавишу [F8J. в Если очередная инструкция — вызов процедуры, то для выполнения процедуры без захода в нее следует восполь- зоваться командой Step Over меню Debug или сочетани- ем клавиш [Shift]+[F8]. Команда Step Out меню Debug или сочетание клавиш [Ctrl]+[Shift]+[F8] приведет к выполнению всех строк кода до конца текущей процедуры.
1.4. Редактор Visual Basic 25 Команда Debug / Run to Cursor или сочетание [Ctrl]+[F8] приведет к выполнению всех инструкций от текущей и до строки кода, в которой находится текстовой курсор. Установить точку останова или снять ранее установленную можно щелчком мыши на панели точек останова (серая вертикальная полоса в левой части окна кода (Code)). Командой Debug / Set Next Statement или сочетанием [Ctrl]+[F9] можно назначить строку программы, которая получит управление при следующем шаге. 1.4.7. Обзор команд меню редактора Visual Basic File (Файл) Команда меню Назначение Save... Сохраняет проект Import File Служит для импорта файлов Visual Basic (BAS, CLS и FRM-файлы) Export File Служит для экспорта файлов в Visual Basic (BAS, CLS и FRM-файлы) Remove Удаляет (исключает из состава проекта) мо- дуль или форму Print Выводит на печать текущий элемент проекта Close and Return to ... Закрывает окно редактора Visual Basic и воз - вращает управление компоненту Office
26 1.4. Редактор Visual Basic Edit (Правка) Undo Typrig C* gedo Typing o*z X a* . Cw-X Ий few cw.r j&E»« CnW . ‘ <Э» Del :: Select All CtihA •_ 04 EM J*F Find Ней F3 Fgplace... Clk Indent " Tab-- ^fiuMert iSWMeb' , E=^ Ш F^eftres^^hods С&Ы Л Ц., Constants Od*$h^4j fea|iuid-H6 CtM Ч*. P<s»aeWf Info : OkSMt-H A* Ccmptete^crd Od+Spaos god<rrtarks ► Команда меню Назначение Undo Отменяет последнюю операцию редактиро- вания Redo Отменяет последнюю отмену операции ре- дактирования Cut Переносит выделенный фрагмент в буфер обмена Copy Копирует выделенный фрагмент в буфер об- мена Paste Вставляет содержимое буфера обмена Clear Удаляет выделенный фрагмент
1.4. Редактор Visual Basic 27 Команда меню Назначение Select All Выделяет весь текст модуля или все элемен - ты формы Find Выполняет поиск заданной строки в проце- дуре, модуле или во всем проекте Find Next Продолжает поиск строки Replace Выполняет поиск с заменой в процедуре, модуле или во всем проекте Indent Смещает начало строки на одну позицию та - буляции вправо Outdent Смещает начало строки на одну позицию та - буляции влево List Properties/ Methods Открывает список свойств и методов текуще- го или выделенного в тексте объекта List Constant Открывает список констант, которые могут выступить в качестве значения текущего или выделенного в тексте объекта Quick Info Дает краткую подсказку относительно син- таксиса функции, процедуры или метода, на имени которого находится курсор в окне кода Parameter Info Дает краткую подсказку относительно пара - метров функции, процедуры или метода Complete Word Завершает введенное не до конца слово Bookmarks Открывает подменю, содержащее команды для манипуляций с закладками
®OlP(6Wl!W 28 1.4. Редактор Visual Basic V7eiv (Вид) E Code F? S.h'.?F7 ДеЫ&зп SHft+F2 Last Position ОЙ8Ш2 Browser F2 Ж• ' -“--- “? jiriFnedateWfndGw Chi+G D Locals Window j Watcf) Window Call Stack-., CW*L bojedExpbet CtrkR Й? Properties Window F4 - - J^’TAT! . .....:: тЙс/ч Tvmtr > pg Mi TOS<ЛЕтJ Ztrtt Команда меню Назначение Code Открывает или делает текущим окно програм - мы (кода) Object Открывает или делает текущим окно формы или объекта Office, к которому относится теку - щий модуль Definition Переводит курсор в то место программного кода, где содержится объявление текущей пе- ременной или константы Last Position Возвращает курсор на место в тексте, где была выполнена последняя операция редактирова - НИЯ
1.4. Редактор Visual Basic 29 Команда меню Назначение Object Browser Открывает или делает текущим окно просмот- ра объектов Immediate Window Открывает или делает текущим окно отладки Locals Window Открывает или делает текущим окно локаль - ных переменных, где при отладке программы отображаются значения переменных Watch Window Открывает или делает текущим окно контроль- ных значений Call Stack... Отображает последовательность вызовов про - цедур и функций, приведших к текущему со - стоянию программы Project Explorer Открывает или делает текущим окно проекта Properties Window Открывает или делает текущим окно свойств Toolbox Открывает или делает текущим окно панели элементов (панель инструментов элементов управления Toolbox) Tab Order Открывает диалог, позволяющий просмотреть и отредактировать последовательность перехо- да фокуса клавиатуры между элементами фор- мы при нажатиях на клавишу [Tab] Toolbars Открывает подменю, служащее для управления панелями инструментов Excel (Word И Т.Д.) Переключает в окно родительского приложения
30 1.4. Редактор Visual Basic Insert (Вставка) "£| . •'£$ 0355 Module Команда меню Назначение Procedure Открывает диалог, позволяющий вставить в текст заготовку процедуры или функции UserForm Включает в состав проекта пустую форму Module Включает в состав проекта новый програм- мный модуль Class Module Включает в состав проекта новый модуль класса File... Служит для вставки содержимого текстового файла в позиции курсора Format (Формат) Л«4,1 ’*► •geke Same See Bl See to Ft О Size to Gt^ Дс*еог&й Spacing * Vertical Spacing >! Renter >n Ferm ► ’ grangeButtons * Й&оур firdet >
1.4. Редактор Visual Basic 31 Команда меню Назначение Align Открывает подменю, служащее для выравни - вания позиций выделенной группы элементов формы Make Same Size Открывает подменю, служащее для выравни - вания размеров выделенной группы элемен - тов формы Size to Fit Позволяет задать размеры элементов формы Size to Grid Выравнивает размеры элементов по узлам сетки Horizontal Spacing Открывает подменю, служащее для измене- ния интервалов по горизонтали внутри выде- ленной группы элементов формы Vertical Spacing Открывает подменю, служащее для измене- ния интервалов по вертикали внутри выде- ленной группы элементов формы Center in Form Открывает подменю, служащее для центриро- вания элемента или выделенной группы эле - ментов на форме Arrange Buttons Открывает подменю, служащее для выравни - вания командных кнопок относительно ниж- него или правого края формы Group Объединяет выделенные элементы в группу Ungroup Отменяет группирование элементов Order Открывает подменю, служащее для управле- ния порядком расположения элементов фор - мы «в глубину»
32 1.4. Редактор Visual Basic Debug (Отладка) Corrib SsmphsFfe 4l ww rB ra Step five. ShMB ty StepOj# cttfcswft«Fa •O gun To Cutset ClrMTJ SddWpjA йГЙУЛ SWfl.FS •J* logtfeBreeLpoH Cte^AWieakpwtts CUkSHfUFS - Ф Set Statement CWF3 c*> Shew Next Statement Команда меню Назначение Compile... Компилирует проект и выдает сообщения об ошибках Step Into Выполняет очередную инструкцию с захо- ’ дом в процедуры Step Over Выполняет очередную инструкцию без за- хода в процедуры Step Out Выполняет все инструкции до выхода из процедуры Run to Cursor Выполняет программу до позиции курсора Add Watch Открывает диалог, позволяющий спреде - . лить новое контрольное значение Edit Watch Открывает диалог, позволяющий отредак- тировать ранее определенное контроль - ное значение Quick Watch... Отображает значение переменной или константы
1.4. Редактор Visual Basic 33 Команда меню Назначение Toggle Breakpoint Устанавливает или снимает точку останова Clear All Breakpoints Снимает все точки останова Set Next Statement Делает строку, где находится курсор, под- лежащей выполнению на следующем шаге Show Next Statement Выполняет сдвиг в окне кода так, чтобы подлежащая выполнению инструкция ста- ла видна Run (Запуск) > Run Sub/UsefFctm ,.F5.. || Вгез& СЫ+Break tfBes# -- * Design Mode - Команда меню Назначение Run Sub/ UserForm Выполняет текущую процедуру Break Прерывает выполнение программы (текущие значения переменных сохраняются и выпол - нение может быть продолжено) Reset Завершает выполнение программы (все пере- менные возвращаются в исходное состояние) Design Mode Переводит программу в режим конструктора (визуального программирования) 2 1855
34 1.4. Редактор Visual Basic Tools (Сервис) Д^есепсез... л ЧМаиси., ; i даст.. $дМ Signatuf©.. . Команда меню Назначение References... Открывает окно диалога для доступа к объек- там других приложений Additional Controls Открывает список зарегистрированных в сис- теме элементов управления ActiveX Macros Открывает диалог, служащий для выбора подлежащей выполнению макрокоманды Options Открывает диалог, позволяющий изменить различные параметры редактора Visual Basic VBAProject Properties... Открывает диалог, позволяющий изменить значения свойств проекта Digital Signature... Открывает диалог цифровой подписи проекта 1.4.8. Обзор панелей инструментов Visual Basic Standard (Стандартная)
1.4. Редактор Visual Basic 35 Значок Назначение «3 Делает текущим окно Word (PowerPoint и т.д.) Служит для включения в состав проекта формы, моду- ля или процедуры Г] Сохраняет проект X Переносит выделенный фрагмент в буфер обмена M Копирует выделенный фрагмент в буфер обмена Осуществляет вставку содержимого буфера обмена Выполняет поиск заданной строки E] Отменяет последнюю операцию редактирования г» Отменяет последнюю отмену операции редактирования F Выполняет текущую процедуру A Прерывает выполнение программы Завершает выполнение программы Переводит программу в режим конструктора 11 Открывает или делает текущим окно проекта Ijg] Открывает или делает текущим окно свойств Открывает окно просмотра объектов Открывает или делает текущим окно панели элементов Вызывает Справку или Помощника Office
36 1.4. Редактор Visual Basic Debug (Отладка) Значок Назначение И Включает режим конструктора ► Выполняет текущую процедуру и Прерывает выполнение программы _ Завершает выполнение программы Устанавливает или снимает точку останова Выполняет шаг с заходом Выполняет шаг с обходом Выполняет шаг с выходом Открывает или делает текущим окно локальных пе- ременных ©• Открывает или делает текущим окно отладки Открывает или делает текущим окно контрольных значении |ас] Отображает значение переменной или констант ы Отображает последовательность вызовов
1.4. Редактор Visual Basic 37 UserForm Значок Назначение Выводит объект на передний план * Убирает объект на задний план Id Группирует элементы #i. Отменяет группирование элементов Открывает меню выравнивания элементов gl Открывает меню центрирования элементов *o* Открывает меню выравнивания размеров элементов liocfe: Изменяет размеры элемента Edit (Правка) Значок Назначение Отображает список свойств и методов Отображает список предопределенных констант
38 1.5. Основные понятия VBA Значок Назначение Выдает синтаксическую подсказку Выдает подсказку о параметрах метода ** Завершает не до конца введенное слово ‘Це Сдвигает строку на одну позицию табуляции вправо Сдвигает строку на одну позицию табуляции влево £ Устанавливает или снимает точку останова Делает выделенные строки комментарием Снимает признак комментария с выделенных строк Т Устанавливает или снимает закладку ъ Переходит к следующей закладке % Переходит к предыдущей закладке & Снимает все закладки в тексте 1.5. Основные понятия VBA 1.5.1. Проект Под проектом всегда понимают отдельный файл — это мо- жет быть рабочая книга в Excel, документ Word или пре- зентация в PowerPoint. База данных в Access также может выступать в качестве проекта, однако поскольку в Access не допускается открытие нескольких баз данных одновре- менно, речь может идти только об одном проекте.
1.5. Основные понятия VBA 39 Проект включает в себя разнородные составные части — листы рабочей книги (или соответственно документы, слай- ды), а также модули, модули классов и формы. Элементы управления ActiveX также могут быть включены в состав проекта. VBA-проект невозможно создать в среде редактора Visual Basic: для этого должен быть вначале создан файл одного из компонентов Office — документ, рабочая книга, презен- тация или база данных. 1.5.2. Модуль Модуль (программный модуль) состоит из неограниченно- го количества процедур и функций. Модули допускают объявление переменных. Объявленная в модуле переменная доступна в пределах всего модуля. Создать модуль можно командой Module меню Insert. При записи макроса автоматически создается модуль, если он не был создан ранее. Двойным щелчком на имени объекта (документа, книги и т. д.) в окне проекта создается программный модуль, предназ- наченный для размещения процедур обработки событий данного объекта. Список всех возможных событий при этом доступен в соответствующем окне кода (окне Code). Для каждого объекта может существовать только один та- кой модуль. Обзор. Процедуры и функции Процедуры и функции — место хранения программного кода. За исключением нескольких операторов специаль- ного назначения и объявления данных и типов данных все операторы (инструкции) программы могут использоваться только внутри процедур и функций. Процедуры и функции могут вызывать друг друга. В Excel и Access функции могут использоваться для вычис- лений и вставки результата в лист, форму или отчет.
40 1.5. Основные понятия VBA 1.5.3. VBA и объектная модель VBA можно рассматривать как совокупность ядра языка и неко- торого множества объектов. Ядро языка VBA — это собственно сам язык, обеспечивающий выполнение BASIC-инструкций и поддерживающий типы и структуры данных. Ядро VBA нельзя расширить и никакой гибкости в обращении с собой оно не допускает. Гибкость и расширяемость обеспечивается в VBA благодаря объектному подходу. Каждое приложение, создан- ное в среде Office с помощью VBA, удовлетворяет требовани- ям объектной модели. При этом предполагается, что всю со- вокупность элементов, из которых состоит приложение, мож- но представить в форме некоторой иерархической структуры. Это касается как элементов управления (например, меню, па- нель инструментов и т. д.), так и данных (лист рабочей книги, абзац, слайд или таблица базы данных). Преимущество, которое дает объектная модель, состоит в том, что разные приложения могут получить доступ к объектам друг друга. Каждый объект обладает набором свойств, значения которых могут быть изменены, и набором методов, которые могут быть вызваны и выполнены. Кроме того, объекты могут реагировать на определенные события. Пример Sub Macrol() ActiveCell.FormulaRlCl = "15" Range("Al").Select Selection.NumberFormat = "#,##0.00$" Sheets.Add Sheets(1).Name = "TestSub" Sheets ("TestSub") .Select End Sub Комментарий И Пример иллюстрирует основные способы доступа к объек- ту, его свойствам и методам, а также обращение к объекту
1.5. Основные понятия VBA 41 как к элементу коллекции. Первая часть кода загружает значение 15 в ячейку текущего листа и задает для этой ячейки денежный формат отображения чисел. Вторая часть процедуры вставляет в рабочую книгу новый лист с име- нем «Пример» и делает его текущим. Обзор. Объекты Под объектом понимают программное представление эле- мента приложения. Типичные объекты PowerPoint: презентации, слайды, текс- товые поля, точечные рисунки. Типичные объекты Excel: рабочие книги, листы, ячейки, диа- граммы. Типичные объекты Word: документы, страницы, абзацы, таб- лицы. Типичные объекты Access: формы, записи, отчеты, запросы. Обзор. Свойства Кавдый объект обладает набором свойств. Значение свойст- ва можно прочитать и в большинстве случаев изменить. Примеры свойств для некоторых объектов: имя шрифта для текстового поля, формат чисел для поля записи в базе дан- ных, фоновый цвет для рисунка или содержимое ячейки для ячейки. Со свойствами объектов можно обращаться, как с перемен- ными — можно присваивать им значения и, наоборот, при- сваивать их значения другим переменным или свойствам. • Присваиваем значение свойству: Range("Al").Value = 15 • Читаем значение свойства в переменную: MyCellValue = Range("Al").Value
42 1.5. Основные понятия VBA Изменение значения свойства влечет за собой изменение вида объекта на экране — видимый объект «перерисовы- вает» себя с учетом изменившегося свойства. Обзор. Методы Каждый объект располагает методами. Методы служат для выполнения над объектом предусмот- ренных для этого вида объекта действий. Примеры применения методов к объектам: выделение ячей- ки, удаление записи, копирование выделенного текста в буфер обмена, запуск презентации. Имена методов и объектов разделяются точками и допус- кают логическое объединение. • Простой вызов метода, вставляющего в книгу новый лист: Sheets.Add • Вложенный вызов, выделяющий область размером 3x2 в 5 ячейках справа от текущей: ActiveCell.Offset(0,5)-Resize(3,2).Select Обзор. События Некоторые объекты способны реагировать на события — для этого в коде программы должна быть предусмотрена процедура-обработчикданного события (при наступлении события она будет выполнена автоматически). Примеры событий: открытие рабочей книги, создание до- кумента, изменение содержимого поля. Процедуры обработки событий пишутся для документов, форм, презентаций, рабочих книг и листов, а также для элементов управления (в том числе ActiveX-элементов). Программирование для среды, управляемой событиями, отличается от программирования в стиле «старого, добро- го BASIC» — каждая процедура здесь либо выполняется в ответ на некоторое событие, либо используется процеду- рой-обработчиком события.
1.5. Основные понятия VBA 43 Обзор.Коллекции Однородные объекты могут объединяться в специального вида списки, именуемые коллекциями. Состав большинства коллекций можно менять с помощью добавления и исключения объектов из коллекции. • Добавить лист в рабочую книгу: Sheets.Add • Удалить первый лист книги: Sheets(1).Delete Примеры коллекций: листы книги, поля сетки, абзацы текс- та или слайды презентации. Доступ к элементу (члену) коллекции осуществляется по его порядковому номеру или по имени. • Доступ по номеру: Sheets (1) .Name = "TestSub" • Доступ по имени: Sheets("TestSub").Activate Коллекции и их поддержка языком VBA делают возможны- ми массовые операции над объектами, а также поиск сре- ди однородных объектов.
Типы данных и операции 2.1. Объявления и область видимости Манипуляции с данными разных типов — элементарная зада- ча, которую приходится решать любой программе. В случае VBA-программы роль данных могут играть числовые и строко- вые значения, содержимое ячеек листа рабочей книги или за- пись в таблице базы данных Access, а также многое другое. Любые данные занимают место в памяти по некоторому адресу, но программисту нет нужды интересоваться адресами, посколь- ку в коде программы он обращается к данным по их именам. С чем бы ни имела дело VBA-программа — с переменными или константами, процедурами или функциями, с типами или, наконец, объектами — все они имеют имена. Обзор. Имена — необязательные правила Имена должны говорить сами за себя. • В имени должно отражаться назначение объекта, которо- му это имя присвоено. Например, W1, W2, W3 — неудач- ные имена. Гораздо лучшими были бы, например, Coun- ter, CurrentRecord или Счетчик, ТекущаяЗапись. Имена следует снабжать префиксами. • Имена объектов, относящихся к определенному типу, должны снабжаться коротким (но при этом понятным) префиксом, идентифицирующим тип объекта.
2.1. Объявления и область видимости 45 Имена необходимо объявлять (декларировать). • С одной стороны, предварительное объявление имен дис- циплинирует мысль и упорядочивает отношения програм- миста с данными, с другой — позволяет избежать оши- бок, возникающих в результате элементарной опечатки. • С помощью оператора Option Explicit, помещенного в об- щий раздел модуля (т. е. вне процедур и функций), пред- варительное объявление имен является обязательным. При объявлении имени следует указывать тип. • Явное задание типа данных, с которыми должно быть свя- зано объявляемое имя, не только сужает поле для ошибок, но и позволяет более эффективно распорядиться памя- тью и повысить скорость обращения к данным. Не следует пользоваться краткой формой идентификации типа. • Ради совместимости с предыдущими версиями в языке VBA все еще остается возможность задать тип перемен- ной с помощью одного символа в ее имени ($ % #), од- нако пользоваться этой возможностью не стоит — такие имена являются обычным источником ошибок. Обзор. Имена — обязательные правила Первым символом имени должна быть буква. В имени не должно содержаться пробелов, а также симво- лов ,!@&$#. В качестве имен нельзя использовать зарезервированные (ключевые слова) языка Visual Basic For Applications. Заглавные и строчные буквы в имени не различаются. 2.1.1. Константы Константами называются данные, значения которых опреде- ляются при разработке программы и не могут быть изменены в период выполнения программы.
46 2.1. Объявления и область видимости Константы могут быть как числовыми, так и строковыми. Име- нованная константа более наглядна, чем просто, скажем, чис- ло, особенно если имя константы отражает ее назначение. Кроме того, механизм констант позволяет изменить важные параметры программы, изменив всего одно значение в ис- ходном тексте вместо многих. Синтаксис [Public / Private] Const Имя [As Тип] = Выражение Параметр Назначение Public Объявление на уровне модуля. Константа доступ - на («видна») во всех процедурах и функциях всех модулей проекта Private Объявление на уровне модуля. Константа доступ - на в процедурах и функциях данного модуля Имя Имя константы, т. е. идентификатор, по которому должно происходить обращение к ней Тип Тип константы. Допустимы все простые типы Выражение Числовое или строковое значение, другая кон- станта или результат операции Пример Public Const Mwst As Single = 0.15 Public Const MwstFactor As Single = Mwst + 1 Sub TestPGMO Const PGMTitle As String = _ "тестовая VBA-программа" Const MaxNumber As Integer = 100 End Sub
2.1. Объявления и область видимости 47 Комментарий Mwst: Доступно во всех модулях. MwstFactor: Доступно во всех модулях. Значение зависит от значения константы Mwst. PGMTitle: Доступно только в процедуре TestPGM. MaxNumber: Доступно только в процедуре TestPGM. Примечания Если тип константы не задан явным образом, VBA исполь- зует тип выражения. Часто бывает удобным выделить под объявления констант специальный модуль — это облегчает создание вариантов приложения (например, варианты для разных языков). Переменные Синтаксис Dim Имя [As Тип] Dim Имя(Индексы) [As Тип] Параметр Назначение Имя Имя переменной, т. е. идентификатор, по которому должно происходить обращение к ней Тип Тип переменной. Допустимы любые типы, включая объектные (классы) Индексы Нижние и верхние границы изменения индексов (размерности). Допустимы многомерные массивы Переменные в противоположность константам могут менять свое значение в процессе выполнения программы. Но, как и к константам, обращение к переменным производится по их именам.
48 2.1. Объявления и область видимости Переменная может принадлежать к одному из простых типов или же к типу, определенному пользователем как комбинация простых типов. Кроме того, переменная может быть объявле- на, как массив. Пример Dim Number As Long Sub TestPGM() Dim Counter As Integer Dim MyMessages(5) As String End Sub Комментарий Number: Доступно во всех модулях. Counter: Доступно только в процедуре TestPGM. MyMessages: Одномерный массив строк с нумерацией эле- ментов от 0 до 5, доступный только в процедуре TestPGM. Примечания Если тип переменной не указан, по умолчанию будет ис- пользован тип Variant. Сделать предварительное объявление переменных обяза- тельным в пределах модуля можно с помощью оператора Option Explicit. При старте программы переменные численных типов ини- циализируются значением 0, переменные строковых ти- пов — значением «пустая строка», Variant-переменные — значением Empty и переменные объектных типов — значе- нием Nothing. Объявление переменных с областью видимости на уровне модуля необходимо помещать в начало модуля.
(gOlPfeWliW 2.1. Объявления и область видимости 49 Объявление переменных внутри процедуры следует поме- щать в начало процедуры (это повышает «прозрачность» текста и облегчает его понимание). Везде, где это возможно, желательно использовать локаль- ные переменные на уровне процедуры — неумеренное ис- пользование переменных, объявленных на уровне модуля, ведет к снижению «прозрачности» текста и затрудняет его понимание. 2.1.3. Область видимости Переменные и константы кроме всего прочего характеризу- ются областью видимости — областью, где они «видны», т. е. доступны для программы. За пределами своей области види- мости переменная или константа не может быть использована программой. Область видимости переменной или константы определяется двумя обстоятельствами: где она объявлена и какое дополнительное ключевое слово было при этом исполь- зовано. На приведенной ниже схеме изображены три облас- ти, на которые распространяется видимость (доступность) трех объявленных переменных.
50 2.1. Объявления и область видимости Примечания Рабочая книга (А): Переменная А доступна во всех проце- дурах всех модулей, относящихся к данной рабочей книге. Модуль (В): Переменная В доступна только в пределах модуля. Если где-то в рабочей книге объявлена глобаль- ная (т. е. уровня рабочей книги) переменная с таким же именем, то в процедурах этого модуля будет фактически использована эта переменная В. Процедура (С): Переменная С определена только внутри процедуры Prod. Если переменная с таким же именем объявлена на уровне рабочей книги или модуля, то внутри процедуры Prod будет все равно использоваться «своя», локальная переменная С. Синтаксис Public Const Имя [As Тип] = Выражение Public Имя [As Тип] Public Имя(Индексы) [As Тип] Комментарий В качестве дополнительного ключевого слова использует- ся Public, которое в случае объявления переменной заме- няется словом Dim. Зарезервированное слово Public можно использовать толь- ко на уровне модуля (т. е. вне процедур и функций). Переменные и константы, объявленные с помощью слова Public, доступны во всех модулях проекта. Область видимости Public допускает обращение к данной переменной из другого проекта при условии создания ссылки на текущий проект. Это можно сделать невозмож- ным с помощью оператора Option Private Module.
2.1. Объявления и область видимости 51 Синтаксис Private Const Имя [As Тип] = Выражение Private Имя [As Тип] Private Имя(Индексы) [As Тип] Комментарий Область видимости переменной или константы ограниче- на программным модулем, где она объявлена с использо- ванием зарезервированного слова Private. Область видимости Private используется по умолчанию. В случае объявления переменной слово Private заменяет- ся словом Dim. Зарезервированное слово Private можно использовать толь- ко на уровне модуля. Синтаксис Static Имя [As Тип] Static Имя(Индексы) [As Тип] Static Sub Имя() Комментарий Переменные, объявленные на уровне процедуры с исполь- зованием зарезервированного слова Static, остаются ло- кальными, но при этом продолжают существовать и сохра- няют свое значение и после возврата из процедуры (ста- тические переменные). Если слово Static использовано при объявлении процеду- ры, то все ее локальные переменные будут статическими. Пример Public Const Mwst As Integer = 0.15 Public DBName As String
52 2.2. Простые типы данных Private Const MwstFactor As Integer = Mwst + 1 Private DBRecordNum As Long Sub TestPGM() Dim Counter As Integer Static MyMessages(5) As String End Sub Комментарий Mwst: Константа, доступная во всех процедурах всех мо- дулей проекта. DBName: Переменная, доступная во всех процедурах всех модулей проекта. MwstFactor: Константа, доступная в пределах данного мо- дуля. DBRecordNum: Переменная, доступная в пределах модуля. MyMessages: Статическая переменная — одномерный мас- сив строк. Доступна только в пределах процедуры TestPGM, однако сохраняет свое значение и после выхода из проце- дуры. Counter: Локальная переменная, доступная только в пре- делах процедуры TestPGM. 2.2. Простые типы данных VBA (не в пример старому BASIC) поддерживает множество простых типов. Некоторые из них можно обозначить с помо- щью специального символа в имени объекта (%, $, & и др.), однако эта возможность существует в VBA только из сообра- жений совместимости и пользоваться ею не следует. Тип дан- ных в объявлении нужно указывать явным образом посредст- вом соответствующего ключевого слова.
2.2. Простые типы данных 53 В приведенной ниже таблице перечислены простые типы VBA, при этом указан объем памяти, занимаемый переменной каж- дого типа, и кратко охарактеризованы значения, которые та- кая переменная может в себе содержать. Тип Объем памяти Описание Boolean 2 байта Логические (булевы) значения Byte 1 байт Целые числа (0 - 255) Integer 2 байта Целые числа Long 4 байта Целые числа двойной длины Single 4 байта Дробные числа с плавающей точкой (плавающие) Double 8 байт Плавающие двойной точности Decimal 12 байт Знаковое с фиксированной точкой Currency 8 байт Числа в денежном формате Date 8 байт Значения даты и времени String 1 байт/символ Строки символов Object 4 байта Ссылки на объекты Variant 16 байт Тип определяется содержимым S-ju/car> Может принимать только значения True (Истинно) или Fal- se (Ложно). Переменные типа Boolean используются главным образом при организации циклов и ветвлений. Пример 'Возвращенное диалогом логическое значение 'сохраняется в булевой переменной, которая 'затем анализируется
54 2.2. Простые типы данных Dim RetValue As Boolean RetValue = Dialog(1).Show If RetValue = True Then End If Byte Наименьшее значение: О Наибольшее значение: 255 Ограничения: может принимать целочисленные беззнако- вые (положительные) значения. Присваивание недопустимого значения приводит к ошибке. Переменные типа Byte используются главным образом для хранения битовых строк. Отличается малым объемом занимаемой памяти и высо- кой скоростью обращения. Пример 'В битовой строке хранятся в упакованном 'виде флажки Dim Bitstring As Byte Dim FlagO As Integer Dim Flagl As Integer Dim Flag2 As Integer FlagO = 1 Flagl = 0 Flag3 = 1 BitString = FlagO + Flagl*2 + Flag3*8 Integer Наименьшее значение: -32768 Наибольшее значение: +32767
2.2. Простые типы данных 55 Ограничения: можно присваивать только целочисленные значения. Присваивание недопустимого значения приводит к ошибке. Часто используют в качестве счетчика цикла. Отличается малым объемом занимаемой памяти и высо- кой скоростью обращения. Пример 'Цикл на 1000 проходов Dim Counter As Integer For Counter = 1 to 1000 Next Lon- Наименьшее значение: -2147483648 Наибольшее значение: +2147483647 Ограничения: можно присваивать только целочисленные значения. Присваивание недопустимого значения приводит к ошибке. Отличается высокой скоростью обращения и наилучшим образом подходит для задач целочисленной арифметики. Пример 'Целочисленные вычисления с максимальной 'скоростью Dim Distance As Long Dim TotalTime As Long Dim Speed As Long Speed = 250 TotalTime = 8 Distance = Speed * TotalTime
56 2.2. Простые типы данных Single ______________ ; Наименьшее отрицательное значение: -3.402823Е+38 Наибольшее отрицательное значение: -1.401298Е-45 Наименьшее положительное значение: 1.401298Е-45 Наибольшее положительное значение: 3.402823Е+38 Обеспечивает точность до 6-го знака после десятичной точки. Присваивание недопустимого значения приводит к полу- чению неверного результата. Используется для вычислений с плавающей точкой. Пример 'Вычисления с дробными числами Dim MyWeight As Single Dim MyPrice As Single Dim PriceToWeight As Single MyWeight =2.5 MyPrice = 13.8 PriceToWeight MyPrice / MyWeight Наименьшее отрицательное значение: -1.79769313486232E+308 Наибольшее отрицательное значение: -4.94065645841247Е-324 Наименьшее положительное значение: 4.94065645841247Е-324 Наибольшее положительное значение: 1.79769313486232Е+308 Обеспечивает точность до 14-го знака после десятичной точки.
2.2. Простые типы данных 57 Присваивание недопустимого значения приводит к полу- чению неверного результата. Используется для вычислений с плавающей точкой. Пример 'Вычисление площади круга Dim PI As Double Dim Radius As Double Dim MySquare As Double PI = 3.14159265358979 Radius = 5.992 MySquare = PI * Radius * 2 Наименьшее отрицательное значение: -79228162514264337593543950335 Наибольшее отрицательное значение: -0.0000000000000000000000000001 Наименьшее положительное значение: 0.0000000000000000000000000001 И Наибольшее положительное значение: +79228162514264337593543950335 Обеспечивает точность до 28-го знака после десятичной точки. Присваивание недопустимого значения приводит к полу- чению неверного результата. Используется для вычислений с фиксированной точкой. В настоящей версии может использоваться только внутри типа Variant, т.е. объявить переменную с явным типом De- cimal невозможно. Преобразование в тип Decimal для пе- ременной Variant выполняется функцией CDec. Currency . - У '-i.---'1 Наименьшее значение: -922'337’203'685'477.5808 Наибольшее значение: +922'337'203'685'477.5807
58 2.2. Простые типы данных Обеспечивает точность до 4-го знака после десятичной точки. Ограничения: допускается не более 4 знаков после деся- тичной точки. Используется для расчетов в денежном формате. Отличается высокой скоростью вычислений, поскольку для внутреннего представления данных этого типа использу- ются целочисленные форматы. Пример 'Вычисление по курсу Dim MySum As Currency Dim USDChange As Currency Dim USDSum As Currency MySum = 123.45 USDChange = 6.21 USDSum = MySum / USDChange Oate Наименьшее значение: 1 января 100 года. Наибольшее значение: 31 декабря 9999 года. Значения даты и времени ограничиваются символами #...# или Значения дат и времени имеют внутреннее представление в виде числа с десятичной дробью, при этом целая часть числа соответствует дате, а дробная — времени. Это по- зволяет использовать операции сложения и вычитания в отношении дат и времени. Значения текущей системной даты и времени можно полу- чить с помощью функции Now(). Такие особенности, как разное количество дней в разных месяцах, а также особенности високосного года учитыва- ются автоматически.
2.2. Простые типы данных 59 Пример 'Вычисление возраста в днях Dim BirthDay As Date Dim TodayDay As Date Dim DaysAge As Long BirthDay = "23/12/56" TodayDay = "31/12/99" DaysAge = TodayDay - BirthDay String Максимальная длина: 2 миллиарда символов. Строковые значения необходимо заключать в символы Специальным видом строки является строка фиксирован- ной длины. Ее максимальная длина — 65536 символов (конкретная длина указывается при объявлении). Обраще- ние со строками фиксированной длины отличается неко- торыми особенностями. Пример 'Строки и строки Dim DBName As String * 50 Dim DBSurname As String * 50 Dim Title As String DBName - "Иван" 'Остальная часть заполнена пробелами DBSurname = "Иванов" 'Остальная часть заполнена пробелами Title = "TestPRG" 'Длина строки в точности 7 символов
60 2.2. Простые типы данных Объектную переменную можно объявить как таковую (тип Object), либо же указать определенный объектный тип. Переменная типа Object (ссылка на объект) может указы- вать на объект любого типа, а также на контейнер или пе- речень. Переменная, объявленная как ссылка на объект опреде- ленного типа, может указывать на объект только этого типа. Присваивание ей в качестве значения объекта друго- го типа вызовет ошибку. Присваивание объектного значения (точнее, ссылки на объ- ект) производится с помощью зарезервированного слова Set. Пример 'Доступ к ячейке и диалогу Dim Targetcell As Range Dim Dig As Object Dim ValueField As Object Set Targetcell = Worksheets(1)-Range("Al") 'Первый диалог листа Set Dig = Dialogsheets(1) 'Первое поле ввода листа Set ValueField = Dlg.EditBoxes(1) Dig.Show 'Открытие диалога Targetcell = ValueField.Text
2.3. Массивы 61 Variant Переменная Variant способна принять значение любого из простых типов. Конкретный тип значения, которое принимает переменная, определяется в момент присваивания. Variant — тип по умолчанию для всех переменных, которые не были объявлены или же были объявлены без указания типа. Занимает больше места в памяти, чем переменная любого простого типа, функции которого способна выполнять Va- riant-переменная. Применения этого типа следует по возможности избегать, поскольку обращение к данным типа Variant происходит медленнее, места в памяти они занимают больше, а про- грамму с их использованием труднее отлаживать. Пример 'Варианты применения типа Variant Dim Universal As Variant Dim MyNumber As Integer Dim MyString As String Universal = 38 MyNumber = Universal * 2 MyString = Universal & " попугаев" 2.3. Массивы Массивом называют совокупность переменных одного типа, доступ к которым осуществляется по их «общему» имени (име- ни массива) и номеру переменной в массиве (индексу). При- менение массивов упрощает массовые операции с данными.
62 2.3. Массивы Милые дамы! 3 Дорогие друзья! 2 Дамы и господа! 1 УважаемьЕ господа! 0 4. MyMessages О MyMessages (1) Синтаксис Dim Имя(Индекс) [As Тип] Параметр Назначение Имя Имя массива Тип Тип данных, к которым относятся элементы массива Индекс Максимальное значение индекса массива Dim Имя(Индекс!, Индекс2..) [As Тип] Параметр Назначение Имя Имя массива Тип Тип данных, к которым относятся элементы массива Индекс1, Индекс?.. Два или более (до 60) максимальных значе- ний индексов элементов массива
2.3. Массивы 63 Dim Имя(НижняяГраница to ВерхняяГраница) [As Тип] Параметр Назначение Имя Имя массива Тип Тип данных, к которым относятся элементы массива НижняяГраница Минимальное значение индекса элементов массива ВерхняяГраница Максимальное значение индекса элементов массива Пример 'Два массива Dim MyMessages(3) As String Dim Mylncom(12, 1990 to 1999) As Currency MyMessages(0) = "Уважаемые господа!" MyMessages(1) = "Дамы и господа!" I Mylncomd, 1990) = 120000 Mylncom(2, 1990) = 150000 I Mylncom(4, 1998) = 450000 Mylncom(5, 1998) = 560000 Комментарий MyMessages: Одномерный массив, состоящий из четы- рех строк с номерами от 0 до 3. Mylncom: Двумерный массив чисел в денежном формате. Первое измерение соответствует 12 месяцам года, вто- рое — годам с 1990 по 1999. Таким образом, 120 элемен- тов массива соответствуют 120 месяцам 10 лет и занима- ют в памяти 8 * 120 = 960 байт.
64 2.4. Типы данных, определяемые пользователем Примечания Если нижняя граница индекса не указана, то по умолчанию она принимается равной 0. • С помощью оператора Option Base значение нижней гра- ницы по умолчанию можно изменить. Массивы нельзя использовать в качестве значений констант. Попытка доступа к элементу с номером, выходящим за объ- явленные границы, вызовет ошибку. Размерность и границы индексов динамического (т.е. объ- явленного без указания индексов) массива можно переоп- ределить посредством оператора ReDim. Используя функции LBound и UBound, можно получить теку- щие значения границ изменения индексов элементов мас- сива. С помощью оператора Erase массив можно полностью уда- лить. 2.4. Типы данных, определяемые пользователем Определяемые пользователем типы данных называют также записями или структурами. Такой тип представляет собой не- кую совокупность типов (простых или определенных ранее), объединенных общим именем. Если затем создать (объявить) переменную, принадлежащую к вновь определенному типу, то доступ к ее компонентам мож- но будет осуществлять по имени переменной и отделенному точкой имени компонента (как оно было задано при объявле- нии типа). В отличие от массивов такой механизм позволяет объединять в единую структуру переменные разных типов.
2.4. Типы данных, определяемые пользователем 65 —► 5600.00 Salary OurEmployee 15.5.54 BirthDay Сюзанна Мюллер Name 124 PersNum OurEmployee.IName Синтаксис Туре ИмяТипа Имя1 [As Тип] Имя2 [As Тип] End Туре Параметр Назначение ИмяТипа Имя типа, которое должно фигурировать в объ- явлениях переменных определяемого типа Имя1, Имя2... Имена компонентов типа, по которым должно происходить обращение к компонентам создан- ных переменных Тип Тип компонента Пример 'Структура для карточки работника в файле данных Type OurEmployee PersNum As Long Name As String BirthDay As Date Salary As Currency End Type 3 1855
66 2.5. Арифметические операции Sub PGMTestO Dim TempEmployee As OurEmployee TempEmployee.PersNum = 124 TempEmployee.Name = "Сюзанна Мюллер" TempEmployee.BirthDay = "15/5/54" TempEmployee.Salary = 5600.00 End Sub Комментарий OurEmployee: Определяемый пользователем тип, необ- ходимый для последующего создания переменной этого типа. TempEmployee: Переменная типа OurEmployee. .PersNum, .Name, .BirthDay, .Salary: Переменные-ком- поненты, входящие в состав переменной определенного пользователем типа. Примечания Объявление пользовательских типов осуществляется на уровне модуля. После того как определяемый пользователем тип объяв- лен, переменную этого типа можно объявить (создать) как на уровне модуля, так и внутри процедуры или функции. Доступ к переменным-компонентам осуществляется че- рез имя переменной и имя компонента типа, разделенные точкой. Для переменных, принадлежащих к одному и тому же поль- зовательскому типу, допустима операция присваивания. 2.5. Арифметические операции Арифметические операции выполняются над числовыми зна- чениями, их результатом также является числовое значение. В качестве операндов могут выступать переменные, констан- ты и выражения.
2.5. Арифметические операции 67 Операция Описание + Сложение 7 + 2 = 9 - Вычитание или перемена знака 7 2 = 5 -7 - 2 = -9 / Деление 7 / 2 = 3.5 ♦ Умножение 7 * 2 = 14 Л Возведение в степень 7 + 2Л2 = 11 \ Целочисленное деление 7\2 = 3 Mod Деление по модулю I (остаток после целочисленного деления) I 7 Mod 2 = 1 Примечания Одноместные операции возведения в степень и перемены знака выполняются раньше всех остальных, двухместные операции *, /, \, Mod выполняются раньше + и -. Операции, имеющие одинаковый приоритет, выполняются слева направо. Последовательность выполнения операций можно явно за- дать с помощью скобок. Пример Result = 10 + 20 - 2 * 3' = 24 Result = 10 + 20 / 5' = 14 Result = 10 * (3+2) / 25' = 2
68 2.6. Логические операции Result = 10 * 7 \ 3' = 23 Result = 10 * (7 \ 3)' = 20 Result = 10 * 5 л 2 + 5* = 255 2.6. Логические операции Логические операции выполняются над логическими (булевы- ми) значениями. Кроме того, логические операции могут вы- полняться над целыми числами — в этом случае речь будет идти о выполнении логической операции над соответствую- щими двоичными разрядами операндов. Операция Описание Not Логическое отрицание And Логическое «И» Or Логическое «ИЛИ» Xor Исключающее «ИЛИ» Imp Импликация Eqv Эквивалентность Nat Операция отрицания — для инверсии логического значения. Операнд Результат операции True False False True Null Null Значение Null показывает, что переменная не содержит дан- ных. Это значение можно присвоить переменной непосредст- венно, или в результате операции с таким же значением.
2.6. Логические операции 69 При выполнении операции над целым числом каждый бит ре- зультата получается инверсией соответствующего бита (дво- ичного разряда) операнда. Пример ' Переменная-"переключатель" на два положения Dim ToggleVar As Boolean ToggleVar = Not ToggleVar 'Побитовая инверсия целого числа Dim Number As Integer Dim Result As Integer Number = 127 '0000 0000 0111 1111 => 127 Result = Not Number'1111 1111 1000 0000 => -128 Number = 4253 '0001 0000 1001 1101 => 4253 Result = Not Number'1110 1111 0110 0010 => -4254 And Логическое «И» дает в результате True лишь в случае, когда оба операнда имеют значение True. Операнд 1 Операнд 2 Результат True True True True False False True Null Null False True False False False False False Null False Null True Null Null False False Null Null Null
70 2.6. Логические операции Значение Null показывает, что переменная не содержит дан- ных. Это значение можно присвоить переменной непосредст- венно, или в результате операции с таким же значением. При выполнении операции And над целыми числами каждый бит результирующего целого числа является результатом опе- рации And над соответствующими битами операндов. Если оба этих бита равны 1, то и бит результата будет равен 1. Во всех остальных случаях бит результата будет равен 0. 1. Операнд 0001 0000 1001 1101 (4253) 2. Операнд 0000 0101 1001 1001 (1433) Результат 0000 0000 1001 1001 (0153) Пример ' Если значение PersAge находится между 12 ' и 18, то юноша If PersAge >= 12 And PersAge <= 18 Then MsgBox("Юноша") End If 'Сбросить старшие 8 бит в 16-битном числе в 0 Dim MyMask As Dim Number As Dim Result As Integer Integer Integer MyMask = 255 ' 0000 0000 1111 Number = 4253' 0001 0000 1001 Result = Number And MyMask ' 0000 0000 1001 1111 => 255 1101 => 4253 1101 => 157 dr Логическое «ИЛИ» дает в результате True в случаях, когда один из операндов имеет значение True.
2.6. Логические операции 71 Операнд 1 Операнд 2 Результат True True True True False True True Null True False True True False False False False Null Null Null True True Null False Null Null Null Null Значение Null показывает, что переменная не содержит дан- ных. Это значение можно присвоить переменной непосредст- венно, или в результате операции с таким же значением. При выполнении операции Or над целыми числами каждый бит результирующего целого числа является результатом опера- ции Or над соответствующими битами операндов. Если хотя бы один их этих битов равен 1, то бит результата будет равен 1. 1. Операнд 0001 0000 1001 1101 (4253) 2. Операнд 0000 0101 1001 1001 (1433) Результат 0001 0101 1001 1101 (5533) Пример 'Если значение PersAge меньше 12 или больше 18, 'то не юноша If PersAge < 12 Or PersAge > 18 Then MsgBox("He юноша") End If
72 2.6. Логические операции 'Установить старшие 8 бит в 16-битном числе в 1 Dim MyMask As Integer Dim Number As Integer Dim Result As Integer MyMask = -256' 1111 1111 0000 Number = 4253' 0001 0000 1001 Result = Number Or MyMask ' 1111 1111 1001 0000 => -256 1101 => 4253 1101 => -99 Xur Исключительное (исключающее) «ИЛИ» дает в результате True в случаях, когда значения операндов различаются, и Fal- se, когда значения операндов одинаковы. Операнд 1 Операнд 2 Результат True True False True False True False True True False False False При выполнении операции Хог над целыми числами каждый бит результирующего целого числа является результатом операции Хог над соответствующими битами операндов. Если значения этих битов не равны между собой, то бит результата будет ра- вен 1. В противном случае бит результата будет равен 0. 1. Операнд 0001 0000 1001 1101 (4253) 2. Операнд 0000 0101 1001 1001 (1433) Результат 0001 0101 0000 0100 (5380)
2.6. Логические операции 73 Пример ' Если значение PersAge находится между 12 'и 18, то юноша If PersAge > 12 Xor PersAge < 18 Then MsgBox("Юноша") End If 'Инвертировать старшие 8 бит 'в 16-битном числе в 1 Dim MyMask As Dim Number As Dim Result As Integer Integer Integer MyMask = -256' 1111 1111 0000 0000 => -256 Number = 4253' 0001 0000 1001 1101 => 4253 Result = Number Xor MyMask ' 1110 1111 1001 1101 =>-4195 Imp Операнд 1 Операнд 2 Результат True True True True False False True Null Null False True True False False True False Null True Null True True Null False Null Null Null Null
74 2.6. Логические операции Результат импликации в отличие от результата операций And, Or и Хог зависит от последовательности операндов. Если пер- вый операнд равен True, то результатом импликации будет значение второго операнда. Если первый операнд равен Fal- se, то—True вне зависимости от значения второго операнда. Значение Null показывает, что переменная не содержит дан- ных. Это значение можно присвоить переменной непосредст- венно, или в результате операции с таким же значением. При выполнении операции Imp над целыми числами каждый бит результирующего целого числа является результатом операции Imp над соответствующими битами операндов. Если бит первого операнда равен 1, то бит результата будет равен биту второго операнда. В противном случае бит резуль- тата будет равен 1. 1. Операнд 0001 0000 1001 1101 (4253) 2. Операнд 0000 0101 1001 1001 (1433) Результат 1110 111111111011 (-4101) Пример ' Если значение PersAge меньше 12 'или больше 18, то не юноша If PersAge > 11 Imp PersAge > 18 Then MsgBox("He юноша") End If 'Установить старшие 8 бит в 16-битном числе в 1 'и одновременно инвертировать младшие 8 бит Dim MyMask As Integer Dim Number As Integer Dim Result As Integer
2.6. Логические операции MyMask = -256 ' 1111 1111 0000 0000 => -256 Number = 4253 ' 0001 0000 1001 1101 => 4253 Result = Number Imp MyMask ' 1111 1111 0110 0010 => -158 'При другом порядке следования операндов 'результат отличается! Result = MyMask Imp Number ' 0001 0000 1111 1111 => -158 Результатом операции Eqv является значение True, если зна- чения обоих операндов равны, и False в противном случае. Фактически речь идет об отрицании результата операции Хог. Операнд 1 Операнд 2 Результат True True True True False False False True False False False True При выполнении операции Eqv над целыми числами каждый бит результирующего целого числа является результатом опе- рации Eqv над соответствующими битами операндов. Если значения этих битов равны между собой, то бит резуль- тата будет равен 1. В противном случае бит результата будет равен 0. 1. Операнд 0001 0000 1001 1101 (4253) 2. Операнд 0000 0101 1001 1001 (1433) Результат 1110 1010 1111 1011 (-5381)
76 2.7. Операции сравнения Пример ' Если значение PersAge меньше 12 'или больше 18, то не юноша If PersAge > 11 Eqv PersAge > 18 Then MsgBox("He юноша") End If 'Скопировать старшие 8 бит в 16-битном числе 'в 1 и одновременно инвертировать младшие 8 бит Dim MyMask As Dim Number As Dim Result As Integer Integer Integer MyMask = -256 ' 1111 1111 0000 Number = 4253 ' 0001 0000 1001 Result = Number Eqv MyMask ' 0001 0000 0110 0000 => -256 1101 => 4253 0010 => 4194 2.7. Операции сравнения Операции сравнения используются для сравнения данных (как числовых и строковых, так и объектных). Эти операции можно выполнять над переменными, константами и выражениями. Is Like Меньше Меньше или равно Больше Больше ли равно Равно Не равно Идентичность объектов или соответствие типу Соответствие типу
2.7. Операции сравнения 77 Примечания Операции сравнения допустимы только в отношении од- нородных данных. Результатом операции сравнения всегда является логичес- кое (булево) значение. При сравнении строк используется порядок символов в ANSI-коде. При сравнении плавающего значения с плавающим двой- ной точности последнее будет округлено. Пример Dim VI As Integer Dim V2 As Integer Result As Boolean VI = 10 V2 = 5 Result Result Result Result Result Result = VI < V2 = VI <= V2 = VI > V2 = VI >= V2 = VI = V2 = VI <> V2 'False 'False 'True 'True 'False 'True te Операция выполняется в отношении ссылок на объекты. Ре- зультат будет равным True только в том случае, когда обе ссы- лочные переменные указывают на один и тот же объект. Если вторым операндом является идентификатор типа, то опера- ция Is возвращает значение True в случае, когда объект, на ко- торый указывает ссылочная переменная (первый операнд), относится к указанному типу (второй операнд).
78 2.7. Операции сравнения Пример 'Поиск ячейки, содержащей "Устройство" Dim 01 As Object Set 01 = Sheets("Лист1") If 01 Is Nothing Then MsgBoxCB данной книге нет такого листа") Else 'Предпринять необходимые действия End If 1 Ute Результат — True, если строка соответствует маске, и False в противном случае. Примечания С помощью оператора Option Compare Binary можно за- дать режим бинарного сравнения операндов (т. е. сравне- ния на основе совпадения числовых значений байтов). Режим текстового сравнения задается с помощью опера- тора Option Compare Text (при этом различие между за- главными и строчными литерами не будет приниматься во внимание). Пример 'Поиск в строке по заданному образцу Dim Searchvalue As String Dim Result As Boolean Searchvalue = "Иванов, год 1990" Result = Searchvalue Like "Ив???в, *" 'True Result = Searchvalue Like "*1991" 'False Result = Searchvalue Like "*, год 199#" 'True Result = SearchValue Like "И[вбд]ано[вк], *" ' True Result = SearchValue Like "Ив[!ae]н[!ою]?, *" 'False
2.8. Операции объединения 79 Маскиру- ющий символ Назначение 7 Произвольный символ в данной позиции. «492-??-??» все телефонные номера, начинающие- ся с «492» * Произвольное число произвольных символов, на- чинающихся в данной позиции. «Иван*» — фамилии «Иванов», «Иванова», «Ива- ненко» и др. # Произвольная цифра в данной позиции. «Год 199#» - Все годы от 1990 до 1999 [список] Один из символов, содержащихся в списке. «[nP][eie][Tt][ee][rp]» - Петер, Питер, Peter и т. д. ['список] Любой символ, кроме содержащихся в списке. । «Год 199[!5-9]» - годы с 1990 по 1994 2.8. Операции объединения Операции объединения (слияния) выполняются над строками. Операция Описание & Объединение строк + Объединение строк Примечания В отношении строк символы операции объединения (+ и &) равнозначны, однако предпочтение следует отдавать символу &, поскольку при использовании символа + в слу- чае необъявленных или Variant-переменных может прои- зойти арифметическое сложение.
80 2.8. Операции объединения Символ & всегда следует отделять пробелами, чтобы он не мог быть интерпретирован как символ краткого определе- ния типа. Пример 'Получаем полное имя объединением 'имени и фамилии Dim FirstName As String Dim SurName As String Dim FullName As String FirstName = "Иван" SurName = "Иванов" FullName = FirstName & " ” & SurName
3 Управляющие структуры VBA Для управления процессом выполнения программы на языке VBA существует множество разного рода структур, с помо- щью которых можно организовать ветвление по условию, вы- бор из нескольких вариантов и разного рода циклы, а также вызов подпрограммы и возврат из нее. Такие базовые конст- рукции языка, как процедура или функция, тоже можно отнес- ти к управляющим структурам. Наконец, в языке VBA поддерживается самый «древний», на- верное, способ управления программой: переход по метке. Конечно, широкое использование оператора перехода — про- стейший способ сделать исходный текст невразумительным, а отладку программы практически невозможной, но в некото- рых случаях без перехода по метке не обойтись. 3.1. Переход по метке Gala Метка Параметр Назначение Метка Имя метки, на которую должно быть передано управление
Ж1Й1РОМ11Й 82 3.1. Переход по метке GoSub ... Return GoSub Метка! Метка!: Return Параметр Назначение Метка1 Имя метки вызова подпрограммы Return Оператор возврата из подпрограммы Конструкция GoSub...Return позволяет использовать фраг- мент кода в качестве подпрограммы. По достижении операто- ра Return управление будет передано в строку, следующую за строкой GoSub. On Выражение GoTo Метка 1, Метка2... Параметр Назначение Выражение Числовое значение от 0 до 255 Метка!... Метка перехода Переход будет выполнен на метку, соответствующую значе- нию выражения. On Выражение GaSub Метка 1, Метка2... Параметр Назначение Выражение Числовое значение от 0 до 255 Метка!... Метка вызова подпрограммы Переход будет выполнен на подпрограмму с меткой, соответ- ствующей значению выражения.
3.2. Конструкции выбора 83 3.2. Конструкции выбора Switchfyc.ioaH&t, Значение 1 [Услови&21 Значение2...]) Параметр Назначение Условие Выражение, возвращающее булево значение Значение Значение, которое должна вернуть конструкция в случае истинности соответствующего условия Комментарий Служит для присваивания одного из значений при выпол- нении одного из условий. Switch вернет первое значение, если истинным окажется первое условие, и второе значение, если — второе усло- вие и т. д. • Если ни одно из условий не выполнится, Switch вернет значение Null. Проверка условий выполняется слева направо. Пример Dim Age As Integer Dim MyText As String Age = 35 Text = Switch(Age<=18, "Слишком молод", Age<65, "O.K.") MsgBox MyText
84 3.2. Конструкции выбора 1ЩВырзж#ми&, ЕалиИстинни, ЕслнЛожно) Параметр Назначение Выражение Возвращает булево значение (условие) Если Истинно Значение, возвращаемое в случае истинности условия Выражение ЕслиЛожно Значение, возвращаемое в случае ложности условия Выражение Комментарий Возвращает одно из двух значений в зависимости от логи- ческого значения, которое примет выражение-условие. Пример Dim Age As Integer Age = 35 MsgBox Ilf(Age<=18, "Слишком молод", "O.K.") ОЬоозе(Индекс,Значен1/1е 1, Знэченме2„.) Параметр Назначение Индекс Выражение, возвращающее целочисленное зна- чение Значение!.. Список значений Комментарий Возвращает то значение из списка, порядковый номер ко- торого соответствует значению выражения-индекса.
3.3. Ветвление по условию 85 Пример Dim CodeNum As Integer 'Код лица: 1-Женщина, ' 2-Мужчина, 3-Фирма Dim CodeText As String CodeNum = 2 CodeText = Choose(CodeNum, "Женщина", "Мужчина", "Фирма") 3.3. Ветвление по условию tf...Than...Elso...Bnd If Синтаксис If Условие Then Оператор Else Оператор If Условие Then Группа операторов [Else Группа операторов] End If If Условие Then Группа операторов Elself Условие Then Группа операторов [Else Группа операторов] End If Параметр Назначение Условие Выражение, возвращающее булево значение Оператор Одиночный оператор (инструкция) языка VBA Группа операторов Один или несколько операторов языка VBA
86 3.3. Ветвление по условию Комментарий Обеспечивает выполнение одного или нескольких опера- торов в зависимости от выполнения заданного условия. Роль условия должно играть выражение, возвращающее логическое (булево) значение True или False. Пример Dim MyFlag As Boolean Dim MyAge As Integer MyAge = 16 'Младше 18 If MyAge < 18 Then MsgBox "молодой" Else MsgBox "старый" 'Старше 35 If MyAge >=35 Then MsgBox "старый" MyFlag = True Else MsgBox "молодой" MyFlag = False End If 'Младше 18, старше 35 и от 18 до 35 If MyAge < 18 Then MsgBox "молодой" MyFlag = False Elself MyAge <=36 Then MsgBox "среднего возраста" MyFlag = True Else MsgBox "старый" MyFlag = True End If
3.3. Ветвление по условию 87 Select Cas& End Sefect Синтаксис Select Case АнализируемоеВыражение Case СписокЗначений1 Группа операторов Case СписокЗначений2 Группа операторов Case СписокЗначенийМ Группа операторов [Case Else Группа опера торов] End Select Параметр Назначение Анализируемое- Выражение Выражение, значение которого определяет выбор одной из Case-строк СписокЗначений Значение, диапазон или список значений Группа операторов Один или несколько операторов языка VBA Комментарий Конструкция Select Case «принимает решение» на основе значения выражения. И Список значений можно задать несколькими способами. • С помощью символов <, >, о, <= и т.д. • В виде интервала НачальноеЗначение То КонечноеЗна- чение. • Простым перечислением: Значение!, Значение2, Значе- ниеЗ. Будет выполнена группа операторов, следующая за той Ca- se-строкой, в чьем списке значений окажется результат вы- ражения, заданного в строке Select Case.
88 3.4. Циклы После этого управление получит строка, следующая после строки End Select. Если ни одна из Case-строк не «сработает», произойдет ошибка. Чтобы этого избежать, следует использовать строку Case Else. Пример Dim MyAge As Integer MyAge = 16 Select Case MyAge Case Is < 18 MsgBox "Надежды юношей питают" Case 18 MsgBox "В начале славных дел" Case 19 То 25 MsgBox "Буря и натиск" Case 30, 40, 50, 60 MsgBox "Поздравляем с юбилеем" Case Is < 65 MsgBox "На покой нам рановато" Case Else MsgBox "Заслуженный отдых" End Select 3.4. Циклы While ... Wet nJ While Условие Группа операторов Wend
3.4. Циклы 89 Параметр Назначение Условие Выражение, возвращающее логическое значение Группа операторов Один или несколько операторов языка VBA Заключенная между строками While и Wend группа операто- ров выполняется циклически до тех пор, пока выражение в строке While возвращает значение True. Если условие не вы- полняется уже при входе в цикл, тело цикла не будет выполне- но ни разу. Примечание Описанные ниже конструкции циклов предоставляют бо- лее широкие возможности, в связи с чем цикл While...Wend используют редко. Оо... Loop Синтаксис Do While/Until Условие Группа операторов Loop Do Группа операторов Loop While/Until Условие Параметр Назначение Условие Выражение, возвращающее логическое зна- чение Группа операторов Один или несколько операторов языка VBA
90 3.4. Циклы Комментарий Заключенная между строками Do и Loop группа операто- ров выполняется циклически в зависимости от значения выражения Условие. • В случае While тело цикла выполняется, пока верно усло- вие (выражение возвращает значение True). • В случае Until тело цикла выполняется, пока условие не станет верным (пока выражение возвращает значение False). Проверку выполнения условия можно поместить в начало или в конец цикла. Пример 'Чтение текстового файла в массив 'строк построчно Dim DatRec(1500) As String Dim I As Integer 1 = 1 Open "C:\adr.txt" For Input As If J Do Until EOF(l) Input #1, DatRec(I) 1 = 1 + 1 Loop Close #1 Far... N&xt ** Синтаксис For СчетчикЦикла = Старт To Стоп [Step Шаг] Группа операторов Next [СчетчикЦикла]
3.4. Циклы 91 Параметр Назначение СчетчикЦикла Переменная одного из численных типов Старт Начальное значение счетчика цикла Стоп Конечное значение счетчика цикла Шаг Шаг приращения значения счетчика цикла Группа операторов Один или несколько операторов языка VBA Комментарий Количество проходов цикла определяется начальным и ко- нечным значениями счетчика, а также значением шага. Если шаг цикла не указан, то он будет принят равным 1. Пример Sub VolToEmpl() Dim ActReg As Range 'Список всех дат Dim I As Integer 'Счетчик цикла Dim SumEmpl As Long 'Общее число сотрудников Dim SumVol As Double 'Общий оборот Dim EmplToVol As Double 'Оборот на одного сотрудника 'Задать область дат Set ActReg = Range("А5").CurrentRegion 'Вычисление оборота на сотрудника For I = 1 То ActReg.Rows.Count SumEmpl = SumEmpl + ActReg.Cells(I, 2) SumVol = SumVol + ActReg.Cells(I, 3) Next EmplToVol = SumVol / SumEmpl 'Выделение цветом значений выше 'и ниже полученного среднего
92 3.4. Циклы With ActReg For I = 1 To .Rows.Count If .Cells (I, 3) / .Cells (I, 2) < EmplToVol Then .Cells(I, 4).Interior.Colorindex = 3 Else .Cells(l, 4).Interior.Colorindex = 4 End If Next End With End Sub For Each ... Next Синтаксис For Each ИмяОбъекта In ИмяКоллекции Группа операторов Next Комментарий С помощью конструкции For...Each можно организовать пере- бор всех объектов, принадлежащих к некоторой коллекции. На каждом проходе переменная цикла будет содержать в себе очередной объект коллекции. Доступ к свойствам и методам объекта при этом становит- ся возможным через имя переменной цикла. Параметр 1 Назначение ИмяОбъекта Переменная одного из объектных типов ИмяКоллекции Имя коллекции объектов, в отношении которой выполняются действия цикла Группа операторов Один или несколько операторов языка VBA
3.5. Досрочный выход из цикла 93 Пример Sub ColorMark() Dim ActReg As Range 'Область Dim CurrObj As Object 'Переменная цикла 'Задать область дат Set ActReg = Range("АЗ").CurrentRegion 'Выделить все отрицательные значения 'в области красным цветом For Each CurrObj In ActReg If CurrObj.Value < 0 Then CurrObj.Interior.Colorindex = 3 End If Next End Sub 3.5. Досрочный выход из цикла Du Events Комментарий Принудительно обрабатывает ожидающие обработки со- бытия. События мыши и клавиатуры не могут быть обработаны Windows до того, как процедура (макрос) завершит свою работу и вернет управление. Чтобы элементы управления могли реагировать на дейст- вия пользователя при выполнении процедуры (например, занятой вычислениями большого объема и длительности), необходимо, чтобы в коде такой процедуры вызывалась функция DoEvents.
94 3.5. Досрочный выход из цикла Пример 'Эта процедура выполняет интенсивные 'циклические вычисления, поэтому в ней 'производится вызов DoEvents через каждую 1000 'проходов для обновления экрана Dim N As Double For N = 0 To 5000 If N Mod 1000 = 0 Then DoEvents Cells(N + 1, 1) = _ Sin((N/1000)Л5)*Cos((N/1000)Л2) Next End Комментарий Завершает выполнение программы (макроса), закрывает все незакрытые файлы и заново инициализирует пере- менные. Stop Комментарий Прерывает выполнение программы (макроса) таким же образом, как это делает точка останова. Открытые файлы остаются открытыми, переменные со- храняют значения, полученные к моменту выполнения ин- струкции Stop. Выполнение программы можно продолжить со следующей инструкции.
3.6. Процедуры (Макросы) 95 3.6. Процедуры (Макросы) Sub . . . End Sub Синтаксис [Private / Public][Static] Sub ИмяПроцедуры([Параметры]) Группа операторов End Sub Параметр Назначение Public Процедура доступна в рамках проекта Private Процедура доступна в рамках модуля Static Все переменные процедуры должны быть статическими ИмяПроцедуры Имя процедуры Параметры Набор параметров, передаваемых проце- дуре при ее вызове Группа операторов Один или несколько операторов языка VBA Синтаксис задания параметров: [Optional][ByVal/ByRef]Переменная As Тип [=3начение] Параметр Назначение Optional Параметр необязателен ByVai Параметр передается по значению ByRef Параметр передается по ссылке Переменная Имя параметра в коде процедуры
96 3.6. Процедуры (Макросы) Тип Тип данных, к которому принадлежит параметр Значение Начальное значение параметра по умолчанию (только для необязательных параметров) Комментарий Процедуры наряду с функциями представляют собой ба- зовую конструкцию языка VBA. Макросы (макрокоманды) приложений Office также записываются в форме процедур на языке VBA. Для вызова процедуры необходимо указать ее имя и пара- метры, если они предусмотрены. Можно использовать так- же зарезервированное слово Call. По умолчанию используется способ передачи параметров по ссылке. • При передаче по ссылке процедура имеет дело непо- средственно с той переменной, которая передана ей в качестве параметра, и может изменить ее значение. Если этого необходимо избежать, следует использовать зарезервированное слово ByVai. Пример 'Простая процедура Sub МуРгос() End Sub 'Процедура с параметром, передаваемым по ссылке Private Sub МуРгос(MyNumber As Integer) End Sub 'Процедура с параметром, передаваемым 'по значению Private Sub МуРгос(ByVai MyNumber As Integer) End Sub
3.7. функции 97 [Call] ИмиПрацадуры[Париметры] Параметр Назначение ИмяПроцедуры Имя вызываемой процедуры (макроса) Параметры Один или несколько параметров Комментарий Зарезервированное слово Call необязательно. Процедуру можно вызвать просто по ее имени. 3.7. Функции Function ... End Function Синтаксис [Private / Public][Static] Function _ ИмяФункции([Параметры]) As Тип Группа операторов ИмяФункции = Значение End Function Параметр Назначение Public Функция доступна в рамках проекта Private Функция доступна в рамках модуля Static Все переменные функции должны быть статическими ИмяФункции Имя функции Параметры Набор параметров, передаваемых функции при ее вызове 4 1855
(gOlPfeWliW 98 3.7. Функции Тип Тип значения Группа операторов Один или несколько операторов языка VBA Значение Значение Синтаксис задания параметров: [Optional][ByVal/ByRef]Переменная As Тип [=3начение] Параметр Назначение Optional Параметр необязателен By Vai Параметр передается по значению ByRef Параметр передается по ссылке Переменная Имя параметра в коде процедуры Тип Тип данных, к которому принадлежит параметр Значение Начальное значение параметра по умолчанию (только для необязательных параметров) Комментарий Функция отличается от процедуры лишь тем, что возвра- щает некоторое значение в ту точку, откуда она была вы- звана. Вызов функции (т. е. просто ее имя) может фигурировать только в выражении или в правой части оператора присва- ивания, т. е. там, где могло бы фигурировать значение, возвращаемое функцией. Пример 'Вызов функции и выдача возвращенного 'ею значения Sub MuProc()
3.8. Внешние ссылки 99 MsgBox Piph(3, 4) End Sub 'Вычисление длины гипотенузы Function Piph (a As Double, b As Double) As Double Piph = Sqr(аЛ2 + ЬЛ2) End Function 3.8. Внешние ссылки Синтаксис [Private/Public] Declare Sub ИмяПроцедуры Lib "ИмяБиблиотеки" [Alias "Псевдоним"] [Параметры] [Private/Public] Declare Function ИмяФункции Lib "ИмяБиблиотеки" [Alias "Псевдоним"] [Параметры] As Тип Параметр Назначение Public Разрешает доступ во всех модулях проекта Private Разрешает доступ только в пределах модуля Имя- Процедуры Имя процедуры Имяфункции Имя функции Имя- Библиотеки Имя файла DLL-библиотеки, где содержится объ- являемая функция Псевдоним Имя процедуры/функции в DLL-библиотеке Параметры Набор параметров, передаваемых процеду- ре/функции при ее вызове Комментарий Вызов внешних процедур и функций необходим в случаях, когда требуется получить доступ к функциям интерфейса
100 3.8. Внешние ссылки API или другим функциям и процедурам, исполняемый код которых размещен в DLL-библиотеках. Синтаксис задания параметров: [Optional][ByVal/ByRef]Переменная As Тип _ [=Значение] Параметр Назначение Optional Необязателен ByVai Передается по значению ByRef Передается по ссылке Переменная Имя параметра в коде процедуры Тип Тип данных, к которому принадлежит параметр Пример 'Вызов функции GetVersion Declare Function GetVersion Lib "Kernel32" () As Integer Sub ShowVersion() Dim Ver As Integer Dim VerS As String Ver - GetVersion VerS = Str(Ver And &HFF) & VerS = VerS & Trim(Str((Ver And _ &HFF00) / 256)) MsgBox "Версия " & VerS End Sub
3.8. Внешние ссылки 101 Примечание редактора Некоторые процедуры и функции VBA поддерживают меха- низм именованных параметров. Для таких процедур (функ- ций) применимы два способа передачи значений. Предполо- жим, процедура ИмяПроцедуры требует трех параметров: Па- раметр^ Параметр? и Параметр?. Предположим далее, что первые два параметра можно (или даже нужно) опустить. Тогда обращение к процедуре должно выглядеть следующим образом: ИмяПроцедуры , , ЗначениеПараметраЗ Если же процедура ИмяПроцедуры поддерживает именован- ные параметры, то возможен и второй вариант: ИмяПроцедуры ИмяПараметраЗ:= ЗначениеПараметраЗ Собственно имена параметров можно без труда узнать с по- мощью справочной системы Office. В данной книге при описа- нии встроенных процедур и функций VBA имена параметров не приводятся. Вне зависимости от того, поддерживает ли описываемая процедура (функция) именованные параметры, в описа- нии каждый параметр обозначается конструкцией из рус- ских слов (например, ИмяФайла, РежимДоступа и т. п.). ♦ Это делает описание полностью унифицированным. • Смысл и назначение параметров более ясны и легче за- поминаются. При необходимости воспользоваться именованным парамет- ром, как таковым, следует обратиться к описанию функции или процедуры в справке Office.
4 Операторы и функции VBA Ядро VBA поддерживает наряду со структурами данных и управляющими конструкциями множество операторов (инст- рукций), предназначенных для решения собственно тех задач, ради которых пишутся программы. Сюда входят как класси- ческие операторы BASIC, так и некоторые дополнительные элементы, которые расширяют возможности языка. Обзор. Круг задач, решаемых операторами языка VBA Интерфейс (см. 4.1): простейшие формы взаимодействия с пользователем и другими программами (без OLE). Файловые операции (см. 4.2): манипуляции с файлами раз- ных типов. Дата и время (см. 4.3): преобразования и вычисления со значениями даты и времени. Информация о среде (см. 4.4): получение информации о среде (окружении) и доступ к системному реестру Windows. Математика (см. 4.5, 4.6): «математические и финансовые вычисления». Строки (см. 4.7): редактирование и форматирование сим- вольных строк. OLE-Automation (см. 4.8): использование технологии OLE- Automation. Коллекции (см. 4.9): создание коллекций объектов и мани- пуляции с ними. Обработка ошибок (см. 4.10): обработка ошибок периода выполнения и получение сведений об ошибках.
4.1. Интерфейс 103 4.1. Интерфейс Для взаимодействия программы с пользователем в языке VBA предусмотрены простейшие диалоги, позволяющие выдать со- общение или запрос и предоставить пользователю возмож- ность выбрать одну из кнопок или ввести строку. Для взаимодействия с другим приложением VBA-программа может воспользоваться технологией OLE. Если приложение не поддерживает OLE, несколько возможностей в распоряжении VBA-программы все-таки остается. М£дВох(&зобщение[,КнопкиИЗначки, Заголовок, „______ФаИлСпр^ики,Каи'^Кьт]) Параметр Назначение Сообщение Строка сообщения КнопкиИЗначки Число (сумма констант), определяющее на- бор кнопок и значков в окне сообщения, а также кнопку по умолчанию Заголовок Титульная строка в окне сообщения ФайлСправки Имя файла справки Контекст Идентификатор контекста справки Комментарий Позволяет выдать краткое сообщение пользователю. Если в окне сообщения будут присутствовать несколько кно- пок, то у пользователя появится возможность выбора. И В окне сообщения могут присутствовать кнопки OK, Yes (Да), No (Нет), Retry (Повтор), Abort (Стоп), Cancel (От- мена), Ignore (Пропустить).
104 4.1. Интерфейс Набор кнопок и значков задается суммой предопределен- ных констант VBA, переданной в качестве параметра Кноп- киИЗначки. Пример MyQuest = "Вы уверены?" MyButtons = vbYesNo + vbQuestion + vbDefaultButton2 If MsgBox(MyQuest, MyButtons) = vbYes Then End If 1при)8ож(Сообщение[, Заголовок, Строка,X, Y, ' ФайлСправки, Контекст])______________ Параметр Назначение Сообщение Строка сообщения (приглашение ввести строку) Заголовок Титульная строка в окне сообщения Строка Строка-заготовка, помещаемая в поле ввода при открытии окна X, Y Координаты левого верхнего угла окна диалога Файл Справки Имя файла справки Контекст Контекст справки Комментарий Открывает окно диалога, дающее пользователю возмож- ность ввести строку. В окне диалога присутствуют кнопки ОК и Cancel (Отмена).
4.1. Интерфейс 105 Пример 'Получить от пользователя строку имени MyMessage = "Введите имя:" MyName = InputBox(MyMessage) If MyName <> "" Then End If Beep Комментарий Выполнение этого оператора приводит к изданию звуко- вого сигнала. Параметры издаваемого звука зависят от конфигурации сис- темы. 4.1.1. Взаимодействие с программной средой DoEvents Комментарий Инициирует принудительную обработку ожидающих событий. Необходимо в случаях, когда процедура не возвращает управление в течение ощутимого времени (Windows при этом обработает события клавиатуры, мыши др.). Пример 'Эта процедура выполняет интенсивные 'циклические вычисления, 'поэтому в ней производится вызов 'DoEvents через каждые 1000
106 4.1. Интерфейс 'проходов для обновления экрана Dim N As Double For N = 0 To 5000 If N Mod 1000 = 0 Then DoEvents Cells(N + 1, 1) = _ Sin ((N/1000)'5)*Cos((N/1000)Л2) Next ЗМЦИмяФайли, СтильОкн^) Параметр Назначение ИмяФайла Полное имя исполняемого файла и параметры командной строки СтильОкна Числовое значение, определяющее стиль окна приложения Комментарий Осуществляет асинхронный запуск другого приложения. • При этом VBA-программа после возврата значения из функции Shell продолжает свою работу. • VBA-программа не ожидает никакой реакции от запу- щенного приложения. Пример 'Запуск редактора файлов настройки Windows Dim AppNum As Integer On Error Resume Next AppNum = Shell("c:\windows\system\sysedit.exe", 1)
(gOlPfeWliW 4.1. Интерфейс 107 AppActivcite 1*мм[, ФлагОжидания] Параметр Назначение Имя Титульная строка окна приложения или иден- тификатор процесса ФлагОжидания Булево значение, указывающее, следует ли программе дожидаться выполнения команды Комментарий Делает текущим заданное окно приложения. Пример 'После запуска редактора файлов 'настройки Windows 1 его окно делается текущим Dim AppNum As Integer On Error Resume Next AppNum = Shell("c:\windows\system\sysedit.exe", 1) AppActivate "Редактор файлов настройки". False SendKeys Строка[, ФлагОжидания] Параметр Назначение Строка Строка символов, соответствующая нажатиям клавиш ФлагОжидания Булево значение, указывающее, следует ли программе дожидаться выполнения команды
108 4.2. Файловые операции Комментарий Посылает нажатия клавиш активному приложению («нажа- тия» клавиш произойдут в текущем окне). Получившее нажатия клавиш приложение не в состоянии отличить их от реальных нажатий клавиш на клавиатуре. Пример 'Запустить калькулятор, сделать его окно текущим, 'вычислить факториал от значения переменной MyVal 'и поместить результат в буфер обмена Dim MyValue As Integer Dim AppNum As Integer MyValue = 5 On Error Resume Next AppNum = Shell("c:\windows\calc.exe", 1) AppActivate "Калькулятор", True SendKeys MyValue & "!Ac%{F4}", True 'Предполагается, что в меню "Вид" калькулятора 'выбран пункт "Инженерный", а режим клавиатуры 'по умолчанию — английский MsgBox "Факториал числа " & Str(MyValue) & _ " помещен в буфер" 4.2. Файловые операции VBA-программы часто имеют дело с файлами неявным обра- зом — взаимодействуя с Word, Excel, Access или PowerPoint они одновременно манипулируют файлами данных, принад- лежащих этим приложениям.
4.2. Файловые операции 109 Visual Basic For Applications обладает обширным инструмента- рием для файловых операций. Операторы, функции и проце- дуры языка позволяют работать с дисковыми устройствами (приводами), каталогами и собственно файлами. В отноше- нии файлов определен ряд операций (открытие и закрытие, чтение и запись, позиционирование и др.), однако если речь идет о конкретном файле, многое зависит от его формата и режима доступа, с которым открыт файл. В VBA различают три вида файлов (или, что практически то же самое, три режима доступа к файлу). Обзор. Три вида файлов Файлы последовательного доступа (см. 4.2.2). Все текстовые файлы (ASCII-, ANSI-файлы) состоят из по- следовательности строк символов, при этом каждая стро- ка может иметь произвольную длину и доступ к этим стро- кам может быть только последовательным.
110 4.2. Файловые операции Файлы произвольного доступа (см. 4.2.3). Файл произвольного доступа состоит из записей фиксиро- ванной длины, поэтому местоположение записи в файле можно вычислить умножением номера записи на ее длину. Благодаря этому оказывается возможным позициониро- ваться на произвольную запись. Бинарные (двоичные) файлы (см. 4.2.4). Бинарный файл представляет собой частный случай файла произвольного доступа — достаточно принять длину запи- си равной одному байту и становится возможным позици- онироваться на произвольный байт в файле. 4.2.1. Дисковые операции общего назначения ChDrive ИмяУстройства Параметр Назначение ИмяУстройства Имя дискового устройства, которое должно стать текущим Комментарий Делает дисковое устройство текущим. В качестве параметра должна выступать текстовая строка, первым символом которой должна быть литера—имя диска. Пример 'Сделать текущим диск Е: ChDrive "Е"
4.2. Файловые операции 111 MkDir ИмйКгГГэлога Параметр Назначение ИмяКаталога Имя каталога, который необходимо создать Комментарий Создает подкаталог с заданным именем. Пример 'Создать каталог MkDir "C:\TEMP\TMP" ChDir ИмнКаталога Параметр Назначение ИмяКаталога Имя каталога, который необходимо сделать текущим Комментарий Делает текущим каталог с заданным именем. Дисковое устройство, на котором располагается каталог, должно быть текущим. Если это не так, то вначале следует использовать оператор ChDrive. Пример 'Сделать каталог C:\TEMP\TMP текущим Dim MyPath As String
112 4.2. Файловые операции MyPath = "C:\TEMP\TMP" ChDrive MyPath ChDir MyPath RmOir ИмяКаталага Параметр Назначение 1 ИмяКаталога Имя каталога, который необходимо удалить Комментарий Удаляет заданный каталог (при условии, что он существует и пуст). • Если каталог не пуст, произойдет ошибка выполнения. • Задавая имя каталога, следует указывать также имя диска. Пример 'Удалить каталог RmDir "C:\TEMP\TMP" CurDir (ИмяДиска) Параметр Назначение ИмяДиска Имя дискового устройства (при отсутствии этого параметра будет выбран текущий диск)
4.2. Файловые операции 113 Комментарий Функция возвращает строку, содержащую полное имя ка- талога, который является текущим на заданном (или по умолчанию текущем) диске. Пример 'Запомнить текущий каталог перед сменой Dim SeekPath As String Dim TargetPath As String SeekPath = CurDirO MsgBox SeekPath & " будет сохранен" TargetPath = "C:\TEMP\TMP" ChDrive TargetPath ChDir TargetPath Dir (ИмяКаталыа, Атрибуты) Параметр Назначение ИмяКаталога Имя каталога Атрибуты Сумма констант, определяющих атрибуты файлов Комментарий Возвращает поочередно имена всех файлов заданного ка- талога, обладающих заданным набором атрибутов. В маске имени файлов можно использовать символы «*» и «?» по правилам MS DOS. При каждом вызове функции она возвращает имя очеред- ного файла.
114 4.2. Файловые операции Ж При первом вызове должно быть задано имя каталога (и, если требуется, маска), затем функция вызывается без па- раметров. После того как имена файлов исчерпаны, функция возвра- щает пустую строку. Пример 'Сообщить имена всех файлов с расширением TXT 'в каталоге C:\TMP Dim BV As String BV = Dir ("C:\TMPV.TXT") Do While BV <> "" MsgBox BV BV = Dir Loop Nani? СгэрзеИмя Аз НэвоеИм* Параметр Назначение СтароеИмя Старое имя каталога или файла НовоеИмя Новое имя каталога или файла Комментарий Изменяет имя каталога или файла. При изменении имени каталога перемещает содержащие- ся в нем файлы. Позволяет использовать маскирующие символы «?» и «*» для групповых операций с файлами.
115 4.2. Файловые операции Пример 'Переименовать и переместить файлы Name "C:\TMP\MyText.txt" As "C:\ARCHIVE\MyTextAr.txt" Name "C:\TMP" As "C:\TMP\OLDFILES" f-tleC'.itty Имн1, Имм2 Параметр Назначение Имя1 Имя файла, подлежащего копированию Имя2 Имя нового файла, являющегося копией файла- оригинала Комментарий Копирует файл с заданным именем в новый файл с задан- ным же именем. Использование маскирующих символов «?» и «*» недопус- тимо. Пример 'Скопировать файл FileCopy "C:\TMP\MyText.txt", "С:\TMP\MyBackUp.txt"
не 4.2. Файловые операции Kill ИмяФайла Параметр Назначение ИмяФайла Имя файла, подлежащего удалению Комментарий Удаляет файл или группу файлов. Позволяет применять маскирующие символы «?» и «*». Пример 'Удалить все ТХТ-файлы в заданном каталоге Kill "С:\ТМР\*.txt" FilbAttr (НомерФайла, ТнпДоступа) Параметр Назначение НомерФайла Номер, присвоенный файлу при открытии ТипДоступа Номер файла или тип доступа Комментарий Возвращает информацию о виде доступа, с которым был ранее открыт файл с заданным номером. Необходимо, чтобы указанный файл был уже открыт с по- мощью оператора Open.
4.2. Файловые операции 117 Пример 'Выдать пользователю тип доступа к файлу Open "C:\TMP\MyData.dat" For Random As 1 MsgBox FileAttr(l, 1) Close 1 GatA 11г(ИмяФайла) Параметр Назначение ИмяФайла Имя файла, атрибуты которого необходимо получить Комментарий Возвращает числовое значение, являющееся суммой конс- тант-атрибутов заданного файла. Выделить конкретный атрибут из полученного значения можно с помощью операции And. Пример 'Проанализировать атрибуты файла 'с заданным именем Dim MyAttr As Integer MyAttr = GetAttr("C:\TMP\MyText.txt") If MyAttr And vbSystem Then MsgBox _ "Это системный файл." If MyAttr And vbReadOnly Then MsgBox _ "Файл только для чтения."
118 4.2. Файловые операции SetAttr ИмяФайла, Атрибуты Параметр Назначение ИмяФайла Полное имя файла Атрибуты Сумма всех заданных констант-атрибутов Комментарий Устанавливает атрибуты файла с заданным именем соот- ветственно заданной сумме констант-атрибутов. Пример 'Задать атрибуты файла SetAttr "C:\TMP\MyText.txt", vbReadOnly + vbSystem РПе[)а1еПте(ИмяФайла) Параметр Назначение ИмяФайла Имя файла Комментарий Возвращает строку, описывающую значения даты и вре- мени последней модификации (или создания) файла. Пример 'Сообщить пользователю дату и время файла MsgBox FileDateTime("С:\TMP\MyText.txt")
4.2. Файловые операции 119 Р11е1.еп(ИмиФайла) Параметр Назначение ИмяФайла Имя неоткрытого файла, длину которого требуется узнать Комментарий Возвращает длину файла с заданным именем в байтах. Функцию нельзя использовать в отношении открытых фай- лов, в этом случае следует применить функцию LOF. Если в качестве параметра передано имя несуществующе- го файла, произойдет ошибка выполнения. Пример 'Сообщить пользователю длину файла MsgBox FileLen("С:\TMP\MyData.dat") ЬОР(НамсрФайлз) Параметр Назначение Номерфайла Номер открытого ранее файла, длину которого требуется узнать Комментарий Возвращает длину открытого ранее файла с заданным но- мером в байтах. Функцию можно использовать только в отношении откры- тых файлов, в противном случае следует воспользоваться функцией FileLen.
120 4.2. Файловые операции Если в качестве параметра передано имя несуществующего или неоткрытого файла, произойдет ошибка выполнения. Пример 'Сообщить пользователю длину файла Open "C:\TMP\MyData.dat" For Random As 1 MsgBox LOF(l) Close 1 РгжРП&[(ГраницяН<эмгра) ] Параметр Назначение ГраницаНомера Числовое значение, обозначающее область, к которой должен принадлежать возвращаемый номер файла Комментарий Возвращает ближайший свободный номер, который мож- но использовать для открытия очередного файла. Пример 'Открыть файл и присвоить ему 'гарантированно свободный номер Dim FileNum As Integer FileNum = FreeFile(O) Open "C:\TMP\MyFile.dat" For Random As FileNum Close FileNum
4.2. Файловые операции 121 4.2.2. Файлы: последовательный доступ Обзор Все текстовые файлы, использующие ASCII- или ANSI-кодиро- вание символов, относятся к файлам последовательного до- ступа. Все они состоят из строк символов, причем строки от- деляются друг от друга специальными символами. Запись в такие файлы или чтение из них можно произво- дить только построчно. Для того чтобы модифицировать произвольную строку по- следовательного файла, необходимо прочитать последо- вательно все его строки, а затем заново записать их. Определить местоположение конкретной строки в файле невозможно. Пример 'Скопировать в новый файл только строки, 'начинающиеся с "112" Sub MyCopyFilell2() Dim SourFile As Integer Dim DestFile As Integer Dim TempStr As String 'Открыть файл-источник для чтения SourFile = FreeFileO Open "C:\TEXT\MySource.txt" For Input As SourFile 'Открыть файл для записи DestFile = FreeFileO Open "C:\TEXT\MyDest.txt" For Output As DestFile
122 4.2. Файловые операции 'Прочитать все строки исходного файла 'и записать требуемые Do While Not EOF(SourFile) Input #SourFile, TempStr If Left(TempStr, 3) = "112" Then Print #DestFile, TempStr End If Loop 'Закрыть оба файла Close SourFile, DestFile End Sub □ppn ИмяФяйла Far Р&жимДаступк As НамарФяйля Параметр Назначение ИмяФайла Имя файла, который необходимо открыть РежимДоступа Одно из ключевых слов, обозначающих режим доступа к файлу НомерФайла Номер, который будет присвоен файлу при открытии Комментарий Выполняет открытие файла. Любой вид доступа к данным файла возможен только пос- ле того, как он будет открыт. С открытым файлом возможны только те операции, которые допускает режим доступа, заданный при открытии файла. Для всех дальнейших манипуляций с открытым файлом он будет идентифицироваться присвоенным ему при откры- тии номером.
4.2. Файловые операции 123 Пример 'Открыть файл для чтения SourFileNum = FreeFileO Open "C:\TEXT\MySource.txt" For Input As SourFileNum Input ИНамерФайла, Переменная Параметр Назначение НомерФайла Номер, присвоенный файлу при его открытии Переменная Переменная (или список переменных), в кото- рую (или которые) должны читаться данные из файла Комментарий Читает данные из последовательного файла в указанную переменную (переменные). Пример Input #1, TempStr Line/пр.ut ИНимерФайла, Переменная Параметр Назначение НомерФайла Номер, присвоенный файлу при его открытии Переменная Строковая переменная, в которую должна быть прочитана строка из файла
124 4.2. Файловые операции Комментарий В Осуществляет построчное считывание из последователь- ного (текстового) файла. Очередная строка файла при этом прочитывается в стро- ковую переменную. Пример Dim TempStr As String Line Input #1, TempStr Print ЯНомерФайла, СписРкЗначаний Параметр Назначение НомерФайла СписокЗначений Номер, присвоенный файлу при его открытии Список значений, подлежащих выводу (запи- си) в файл Комментарий Записывает строку в последовательный файл. В отличие от оператора Write # табулирует значения в строке. Пример Print #1, TempStr
(gOlPOMW 4.2. Файловые операции 125 Write ЯНамерФемля, СписакЗначений Параметр Назначение НомерФайла Номер, присвоенный файлу при его открытии СписокЗначений Список значений, подлежащих выводу (запи - си) в файл Комментарий И Записывает строку в последовательный файл. В отличие от оператора Print # не табулирует значения в строке. Пример Write #1, TempStr Width ХНамерФайля, ДлиняСтрики Параметр Назначение НомерФайла Номер, присвоенный файлу при его открытии ДлинаСтроки Длина строки в символах Комментарий Устанавливает длину строки для вывода в последователь- ный файл. При дальнейшем выводе (с помощью оператора Print #) в файл с номером НомерФайла длина выводимых строк бу- дет равна значению ДлинаСтроки.
126 4.2. Файловые операции Пример 'Разбить строку на строки длиной 4 символа Sub SeparateNumbers() Dim I As Integer Dim NumStr As String NumStr = "125544785543210232165487" Open "C:\TEXT\StrNum.txt" For Output As #1 Width #1, 4 For 1=1 To Len(NumStr) Print #1, Mid(NumStr, I, 1); Next I Close #1 End Sub 8рс(К1>лич&ствиПргг6елов) Параметр Назначение КоличествоПробелов Количество пробелов, которые должны быть вставлены в строку Комментарий Используется в качестве одного из параметров оператора Print при выводе в последовательный файл. В результиру- ющую строку будет вставлено заданное количество про- белов.
4.2. Файловые операции 127 Пример 'Вставить 5 пробелов между именем и фамилией Const NumberOfNames As Integer =50 Dim N As Integer Dim MyFirstNames(NumberOfNames) As String Dim MySurNames(NumberOfNames) As String Open "C:\TEXT\Names.txt" For Output As #1 For N = 1 To NumberOfNames Print #1, MyFirstNames(N);Spc(5);MySurNames(N) Next N Close #1 ТаЫПогмцмя) Параметр Назначение Позиция Позиция табуляции (следующая позиция вывода) Комментарий Используется в качестве одного из параметров оператора Print при выводе в последовательный файл. Позиция выво- да в результирующей строке будет перенесена в соответ- ствии со значением параметра. Пример 'Перенести фамилию в позицию 50 Const NumberOfNames As Integer = 50
128 4.2. Файловые операции Dim N As Integer Dim MyFirstNames(NumberOfNames) As String Dim MySurNames(NumberOfNames) As String Open "C:\TEXT\Names.txt" For Output As #1 For N = 1 To NumberOfNames Print #1, MyFirstNames(N); Tab (50); MySurNames(N) Next N Close #1 ЕС)Р(НомерФайла) Параметр Назначение НомерФайла Номер, присвоенный файлу при его открытии Комментарий Функция EOF (End Of File — Конец файла) возвращает бу- лево значение True, если при чтении достигнут конец фай- ла с заданным номером, и False в противном случае. Пример 'Прочитать файл до конца Dim TempStr As String Open "C:\TEXT\MyText.txt" For Input As #1 Do While Not EOF(l) Input #1, TempStr Loop Close #1
,«ин 4.2. Файловые операции 129 С/озе НомерФайла], НомерФайла...] Параметр Назначение НомерФайла Номер, присвоенный файлу при его открытии Комментарий Закрывает один или несколько открытых ранее файлов. Пример Close 1 'Закрывает файл, открытый под номером 1 Close 'Закрывает все открытые файлы Комментарий Закрывает все открытые файлы. Пример Reset 4.2.3. Файлы: произвольный доступ Обзор. Режим произвольного доступа Сточки зрения операционной системы все файлы равны. Ког- да говорят «последовательный файл» или «файл с произ- вольным доступом», то имеют в виду то, каким образом про- грамма интерпретирует данные, содержащиеся в файле. Если речь идет о режиме произвольного доступа, то предполагает- ся, что файл состоит из записей одинаковой (и заранее из- 5 1855
130 4.2. Файловые операции вестной) длины. Благодаря этому становится возможным по- местить позицию ввода или вывода на произвольную запись, положение которой в файле можно вычислить умножением номера записи на ее длину. При манипуляциях с файлом произвольного доступа обычно используют понятие текущей записи, т. е. записи, к которой производилось обращение в последний раз (или первой за- писи файла, если обращений не было). При этом, если при последующем обращении номер требуемой записи не будет указан, то по умолчанию текущей станет следующая запись, т. е. указатель текущей записи по умолчанию перемещается по- следовательно вперед. Пример 'Прочитать имя и код из записи с заданным номером 'Дать пользователю возможность изменить код 'Записать модифицированную запись обратно в файл Public Type CodeRec Name As String * 50 Code As Integer End Type Sub EditCode() Const Fil As String = "C:\MyCode.dat" Dim TRec As CodeRec Dim FilNum As Integer Dim RecNum As Long 'При ошибке переходить к следующему оператору On Error Resume Next 'Открыть файл FilNum = FreeFileO Open Fil For Random Access Read Write As FilNum _ Len=Len(TRec)
4.2. Файловые операции 131 'Открывать окно ввода, пока не будет 'выбрана кнопка "Отмена" RecNum = -1 RecNum = InputBox("Введите номер записи") Do Until RecNum = -1 Lock FilNum, RecNum Get FilNum, RecNum, TRec TRec.Code = InputBox("Введите новый код для" & TRec.Name, , TRec.Code) Put FilNum, RecNum, TRec Unlock FilNum, RecNum RecNum = -1 RecNum = InputBox("Введите номер записи") Loop 'Закрыть файл Close FilNum End Sub Open ИмяФаила For Handom Access ВидДостула AsНамерФайлаЬепДлинаЗзписи Параметр Назначение ИмяФайла Имя дискового файла, который необходимо от- крыть или создать ВидДоступа Вид доступа к файлу (чтение, запись) НомерФайла Номер файла, который должен быть присвоен ему при открытии ДлинаЗаписи Длина записи в файле (количество байт)
132 4.2. Файловые операции Комментарий Любой файл должен быть открыт прежде, чем произойдет какое-либо обращение к содержащимся в нем данным. При открытии файла в режиме произвольного доступа суще- ствует ряд особенностей. • В отношении записей файла возможны операции чтения и записи (ввода и вывода), при этом речь может идти только об одной из записей, как неделимом целом. • Можно запретить доступ к некоторой записи для других программ (пользователей). • Доступ к любой записи осуществляется по ее порядко- вому номеру в файле. • Значение переменной, играющей роль указателя теку- щей записи, вместе со значением длины записи в файле дает возможность поместить позицию ввода/вывода не- посредственно на начало требуемой записи. Пример Public Type CodeRec Name As String * 50 Code As Integer End Type Dim TRec As CodeRec FilNum = FreeFileO Open "C:\DATA\Code.dat" For Random Access Read Write As FilNum Len=Len(TRec)
4.2. Файловые операции 133 Seufc НомерФайла[, НомерЗаписи] Параметр Назначение НомерФайла Номер, присвоенный файлу при его открытии НомерЗаписи Порядковый номер записи, на которую необхо- димо позиционироваться Комментарий Если параметр НомерЗаписи не задан, то функция возвра- щает номер текущей записи. Если заданы оба параметра, то позиция ввода/вывода по- мещается на запись с заданным номером. • Если значение параметра НомерЗаписи превышает ко- личество записей в файле, то позиция ввода/вывода бу- дет помещена в конец файла. Пример CurrPos = Seek 1 NewPos = InputBox("Введите номер записи") Seek 1, NewPos Loe (НомерФайла} Параметр Назначение НомерФайла Номер, присвоенный файлу при его открытии Комментарий Возвращает номер записи, в отношении которой послед- ний раз выполнялась операция чтения или записи.
134 4.2. Файловые операции Пример LastRec = Loc(l) Qet НомерФайла, [НимерЗаПиси], Переменная •' Параметр Назначение НомерФайла Номер, присвоенный файлу при его открытии НомерЗаписи Номер записи, к которой производится обращение Переменная Имя переменной, в которую должно быть прочи- тано содержимое записи файла Комментарий Прочитывает содержимое записи с заданным номером в заданную переменную. • Если номер записи опущен, то будет прочитана текущая запись, а указатель текущей записи переместится на сле- дующую. Пример 'Чтение данных и запись в таблицу Public Type CodeRec Name As String * 50 Code As Integer End Type Sub File2Table() Const Fil As String = "C:\MyCode.dat" Dim TRec As CodeRec
4.2. Файловые операции 135 Dim FilNum As Integer Dim N As Long 'Открыть файл FilNum = FreeFileO Open Fil For Random Access Read As FilNum Len=Len (TRec) 'Перенести все записи в таблицу N = 1 Get FilNum, ,TRec Do While Not EOF(FilNum) Range("al")(N, 1) = TRec.Name Range("bl")(N, 2) = TRec.Code N = N + 1 Get FilNum, ,TRec Loop 1 Закрыть файл Close FilNum End Sub Put НомерФайла, [НомерЗаписи], Переменная Параметр Назначение НомерФайла Номер, присвоенный файлу при его открытии НомерЗаписи Номер записи, к которой производится обращение Переменная Имя переменной, значение которой должно быть записано в заданную или текущую запись файла Комментарий Записывает содержимое указанной переменной в файл.
136 4.2. Файловые операции Если номер записи опущен, то операция будет выполнена в отношении текущей записи (при этом текущей станет сле- дующая по порядку). Пример 'Запись данных в файл из таблицы Public Type CodeRec Name As String * 50 Code As Integer End Type Sub Table2File() Const Fil As String = "C:\MyCode.dat" Dim TRec As CodeRec Dim FilNum As Integer Dim TItem As Object 'Открыть файл FilNum = FreeFileO Open Fil For Random Access Write As FilNum Len=Len(TRec) 'Перенести записи из таблицы в файл For Each TItem In Range("al").Rows TRec.Name = TItem.Cells(1, 1) TRec.Code = TItem.Cells(1, 2) Put FilNum, , TRec Next 'Закрыть файл Close FilNum End Sub
4.2. Файловые операции 137 £ис* Нам^рФайла, Н&м&рЗэписи Lи’£<15* '_25£5255VlZ : г ~’ыерЗалмаи2 Параметр Назначение НомерФайла Номер, присвоенный файлу при его открытии НомерЗаписи Номер записи, подлежащей блокировке НомерЗаписи1 Начало диапазона номеров записей, подлежа - щих блокировке НомерЗаписи? Конец диапазона номеров записей, подлежа - щих блокировке Комментарий Блокирует (переводит в режим исключительного доступа) запись или группу записей. Блокированные записи становятся недоступными для мо- дификации другим приложением. Чтобы исключить возможность одновременной модифика- ции записи двумя приложениями (например, при работе в локальной сети), необходимо блокировать запись перед модификацией. Пример Lock 1, 15 Get 1, 15, TRec Put 1, 15, TRec Unlock 1, 15
138 4.2. Файловые операции Unlock НомврФаИло, НомерЗапиом Unlock НомерФайла, НимерЗзпиеи 1 То НомерЗапаси2 Параметр Назначение НомерФайла Номер, присвоенный файлу при его открытии НомерЗаписи Номер записи, которую необходимо разблоки- ровать НомерЗаписи1 Начало диапазона номеров записей, которые необходимо разблокировать НомерЗаписи2 Конец диапазона номеров записей, которые необходимо разблокировать Комментарий Отменяет режим исключительного доступа (разблокирует запись или группу записей). После выполнения данной операции другие приложения получат возможность модифицировать запись/записи. Пример Lock 1, 15 Get 1, 15, TRec Put 1, 15, TRec Unlock 1, 15
4.2. Файловые операции 139 ЕОР(НомерФайла) Параметр Назначение НомерФайла Номер, присвоенный файлу при его открытии Комментарий Функция EOF (End Of File — Конец файла) возвращает бу- лево значение True, если при чтении достигнут конец фай- ла с заданным номером, и False в противном случае. Пример 'Прочитать все записи файла Open FilName For Random Access Read _ As 1 Len=Len(TRec) Get 1, , TRec Do While Not EOF(l) Get 1, , TRec Loop Close 1 Close НомерФэйла[, НомерФайла] Параметр Назначение НомерФайла Номер, присвоенный файлу при его открытии Комментарий Закрывает один или несколько ранее открытых файлов.
140 4.2. Файловые операции Пример Close 1 'Закрывает файл 1 Close 'Закрывает все открытые программой файлы Комментарий Закрывает все открытые программой файлы. Пример Reset 4.2.4. Файлы: двоичный (бинарный) доступ Обзор. Бинарный доступ Если в файлах произвольного доступа отказаться от внутрен- ней структуры записи и установить размер записи равным 1, то получим файлы бинарного доступа. В этом случае позиция ввода/вывода помещается на произвольный байт файла, а опе- рация чтения или записи выполняется в отношении также про- извольного числа байт. Задача интерпретации считываемых или записываемых дан- ных полностью ложится на программу— понятие записи и ее структуры становится неприменимым. Количество байт, которые подлежат записи или чтению, зависит от размера переменной, использованной в опера- торах Put или Get.
4.2. Файловые операции 141 Использование переменных типа Variant, строк переменной длины и динамических массивов в данном случае пробле- матично. Open ИмяФэйла For Binary Access ВидДоступа Аз НомерФайла Параметр Назначение ИмяФайла Имя дискового файла, который необходимо от- крыть или создать ВидДоступа Вид доступа к файлу (чтение, запись) НомерФайла Номер файла, который должен быть присвоен ему при открытии Комментарий Любой файл должен быть открыт прежде, чем произойдет какое-либо обращение к содержащимся в нем данным. При открытии файла в режиме двоичного (бинарного) до- ступа существует ряд особенностей. • Относительно данных, содержащихся в файле, возмож- ны операции чтения и записи (ввода и вывода), при этом операция выполняется в отношении произвольной по- следовательности байт, начиная с произвольной пози- ции в файле. • Можно запретить доступ к файлу в целом для других про- грамм (пользователей). Пример FilNum = FreeFileO Open "C:\DATA\Code.dat" For Binary Access Read Write As FilNum
142 4.2. Файловые операции Seek НомерФайла), НомерБайта] Параметр Назначение НомерФайла Номер, присвоенный файлу при его открытии НомерБайта Порядковый номер байта, на который необходи- мо позиционироваться Комментарий Если параметр НомерБайта не задан, то функция возвра- щает номер текущего байта. Если заданы оба параметра, то позиция ввода/вывода по- мещается на байт с заданным номером. • Если значение параметра НомерБайта превышает коли- чество байт в файле, то позиция ввода/вывода будет по- мещена в конец файла. Пример CurrPos = Seek 1 NewPos = InputBox("Введите номер байта") Seek 1, NewPos | hoc (НомерФайла): Параметр Назначение НомерФайла Номер, присвоенный файлу при его открытии
4.2. Файловые операции 143 Комментарий Возвращает номер байта, в отношении которого послед- ний раз выполнялась операция чтения или записи. Пример LastRec = Loc(l) Get НомерФайла, [НимерВайтя], Переменная Параметр Назначение НомерФайла Номер, присвоенный файлу при его открытии НомерБайта Номер байта, к которому производится обращение Переменная Имя переменной, в которую должно производи - ться чтение из файла Комментарий Прочитывает содержимое файла с заданной или текущей позиции в заданную переменную. • Если номер байта опущен, то чтение будет начато с теку- щей позиции. Пример Public Type CodeRec Name As String * 50 Code As Integer End Type
144 4.2. Файловые операции Dim TRec As CodeRec Get 1, ,TRec Put Номерфайаа, [НрмэфБэйта], Переменная Параметр Назначение НомерФайла Номер, присвоенный файлу при его открытии НомерБайта Номер байта, начиная с которого должна произ - водиться запись в файл Переменная Имя переменной, значение которой должно быть записано в заданную или текущую позицию в файле Комментарий Записывает содержимое указанной переменной в файл. Если номер байта опущен, то операция будет выполнена, начиная с текущей позиции. Пример Public Type CodeRec Name As String * 50 Code As Integer End Type Dim TRec As CodeRec Put 1, , TRec
4.2. Файловые операции 145 Lack НамерФайла, НомерБайта Lock НомерФайла, НамерБайта 1 Та НомерБэйтэЗ Комментарий Блокирует (переводит в режим исключительного доступа) байт или последовательность байт в файле. Блокированные байты становятся недоступными для мо- дификации другим приложением. Параметр Назначение НомерФайла Номер, присвоенный файлу при его открытии НомерБайта Номер байта, подлежащего блокировке НомерБайта1 Начальная позиция блокировки НомерБайта2 Конечная позиция блокировки Пример Lock 1, 15 Get 1, 15, TRec Put 1, 15, TRec Unlock 1, 15 Unlock НомерФайла, НомерБайга Unlock НомерФайла, НомерБайта 1 To НомерБайта2 Комментарий Отменяет режим исключительного доступа (разблокирует) заданные байты файла.
146 4.2. Файловые операции После выполнения данной операции другие приложения получат возможность модифицировать файл в данных по- зициях. Параметр Назначение НомерФайла Номер, присвоенный файлу при его открытии НомерБайта Номер байта, который необходимо разблокировать НомерБайта1 Начальная позиция отмены блокировки НомерБайта2 Конечная позиция отмены блокировки Пример Lock 1, 15 Get 1, 15, TRec Put 1, 15, TRec Unlock 1, 15 EOF( НомерФайла) Параметр Назначение НомерФайла Номер, присвоенный файлу при его открытии Комментарий Функция EOF (End Of File — Конец файла) возвращает бу- лево значение Тrue, если при чтении достигнут конец фай- ла с заданным номером, и False в противном случае.
4.2. Файловые операции 147 Пример 'Прочитать файл до конца Open FilName For Binary Access Read As 1 Get 1, , TRec Do While Not EOF(l) Get 1, , TRec Loop Close 1 C/ose Нс-мярФуйла[, НомерФайла] Параметр Назначение НомерФайла Номер, присвоенный файлу при его открытии Комментарий Закрывает один или несколько ранее открытых файлов. Пример Close 1 'Закрывает файл 1 Close 'Закрывает все открытые программой файлы 4es"t Комментарий Закрывает все открытые программой файлы.
148 4.3. Дата и время Пример Reset 4.3. Дата и время Значения даты и времени представляются в приложениях Offi- ce в форме так называемого кода дата-время (называемом также датой_в_числовом_формате). Код дата-время представ- ляет собой число, целая часть которого кодирует дату (день), а дробная — время. Формат ввода и представления значений даты и времени за- висит от конфигурации системы и от локализации конкретной версии Windows. Обзор. Значения времени Промежутку времени, равному 24 часам, соответствует чис- ло 1 (оно же соответствует одному дню в значениях даты). Полудню (12:00) соответствует значение 0.5, шести часам вечера (18:00) — 0.75 и т. д. Отсюда легко получить дробные числа, соответствующие элементарным промежуткам времени: 1 час — 1/24, 1 ми- нута — 1/1440 и 1 секунда — 1/8640. Обзор. Значения даты Значения даты представляют собой целое число, обозна- чающее количество дней, отсчитанных от так называемой первой даты. В разных системах дат используются разные «первые да- ты» (т. е. даты, которым соответствует код дата-время, рав- ный 1). По умолчанию приложения Office используют Сис- тему дат 1900. Кроме того, Office может работать в Систе- ме дат 1904, именуемой также «Системой дат XXI века».
4.3. Дата и время 149 В среде VBA существует небольшое отличие для «Систе- мы дат 1900» — в качестве первой даты VBA использует 31 декабря 1899 года, в то время как компоненты Office — 1 января 1900 года. Для дат позднее 29 февраля 1900 года описанное выше различие не существует. Оа1е8аг1э1(Г<лды, Месяцы, Дни)_________ Параметр Назначение Годы Число лет Месяцы Число месяцев Дни Число дней Комментарий Возвращает дату в числовом формате для указанных зна- чений года, месяца и числа. Пример 'Способы задания дат Dim MyDate As Date MyDate = DateSerial(5, 10, 11) '11.10.2005 MyDate = DateSerial(1996, 15, 6) '06.03.1997 MyDate = DateSerial(1996, 15, 45)'14.04.1997 MyDate = DateSerial (2035, 2, 3) '03.02.2035
150 4.3. Дата и время DateValue (Дата) Параметр Назначение Дата Строковое значение, описывающее дату Комментарий Преобразует строку, описывающую дату, в значение даты. Обеспечивает известную гибкость в интерпретации стро- ковых значений. Пример 1 Способы задания дат Dim MyDate As Date MyDate = DateValue("11/10/2005") '11.10.2005 MyDate = DateValue("6 марта 1997")'06.03.1997 MyDate = DateValue("14 Anp 97") '14.04.1997 MyDate = DateValue("3.2.2035") '03.02.2035 Примечание Формат строкового значения даты зависит от настроек вкладки Дата диалога Свойства: язык и стандарты (Пуск/ Настройка/Панель управления/Язык и стандарты). Под- ходящий вариант можно выбрать с помощью списков Крат- кий формат даты и Полный формат даты. В примерахдан- ной главы предполагается, что выбраны форматы дд.ММ.гт и дд ММММ гггг ’г.’ соответственно.
4.3. Дата и время 151 TimeSerialfHacu, Минуты, Секунды) Параметр Назначение Часы Число часов Минуты Число минут Секунды Число секунд Комментарий Возвращает значение времени в формате «код дата-вре- мя» для указанных значений часов, минут и секунд. Пример 'Способы задания времени Dim MyTime As Date MyTime = TimeSerial (12, 8, 5) '12:08:05 MyTime = TimeSerial(14, 80, 6) '15:20:06 MyTime = TimeSerial(8, 85, 95) '9:26:35 MyTime = TimeSerial(36, 85, 95) '31.12.1899 ' 13:26:35 TimeValue(apeMa) Параметр Назначение Время Строковое значение, описывающее время Комментарий Преобразует строку, описывающую время, в значение вре- мени в формате «код дата-время». Допускает известную гибкость в интерпретации строк.
152 4.3. Дата и время Пример 'Способы задания времени MyTime As Date MyTime = TimeValue("12:08:05") '12:08:05 MyTime = TimeValue("3:20:06pm") '15:20:06 MyTime = TimeValue("9:26:35 AM") '9:26:35 Data = Дата : : : Параметр Назначение Дата Строковое значение, описывающее дату, или дата в числовом формате Комментарий Функция возвращает значение текущей системной даты в числовом формате. Присваиванием значения функция позволяет задать сис- темную дату. Пример 'Вычислить значение даты 30 дней вперед 'от сегодняшней Dim MyDate As Date MyDate = Date + 30
4.3. Дата и время 153 Now Комментарий Возвращает текущие значения системной даты и систем- ного времени в формате «код дата-время» (дата_в_число- вом_формате). Пример 'Получить текущие значения даты и времени Dim TimeStamp As Date TimeStamp — Now Time - Время Параметр Назначение Время Строковое значение, описывающее время или время в формате «код дата-время» Комментарий Функция возвращает текущее значение системного вре- мени. Присваиванием значения функция позволяет задать сис- темное время. Пример 'Вычислить значение времени "2 часа вперед 'от текущего" Dim NewTime As Date NewTime = Time + (2/24)
154 4.3. Дата и время DateAJdfHHTt/peajt, Количество, Дата) Параметр Назначение Интервал Единичный интервал времени Количество Число единичных интервалов Дата Исходная дата Комментарий Функция возвращает дату, получаемую добавлением задан- ного количества единичных интервалов к заданной дате. Пример 'Вычисление даты Dim MyDate As Date MyDate = DateAdd("yyyy", 5, "01.01.1997") •01.01.2002 MyDate = DateAdd("q", 2, "01.01.1997") '01.07.1997 MyDate = DateAddfm", 2, "01.01.1997") '01.03.1997 MyDate = DateAdd("ww", 5, "01.01.1997") 29.01.1997 DateQiff(Интераал, Дата1, Дата2 (,ПераыиДе:ньНедели '_________ L ПерааяНеделяГода]]) ; Комментарий Возвращает количество единичных интервалов между дву- мя заданными датами. Позволяет учесть поправки, вытекающие из несовпадения начала и конца отсчета с началом недели или года.
4.3. Дата и время 155 Параметр Назначение Интервал Единичный интервал времени Дата1 Первая дата Дата? Вторая дата ПервыйДеньНедели Константа, определяющая день недели, ко- торый должен считаться первым ПерваяНеделяГода Константа, определяющая, которую из не- дель конца/начала года следует считать первой в году Пример 'Вычисление количества интервалов между 'двумя датами Dim Num As Long Num = DateDiff("yyyy","01.01.1992", "31.12.1997") '5 Num = DateDiff("q", "01.01.1995", "31.05.1996") '5 Num = DateDiff("m","15.04.1995", "01.01.1997”) '21 Num = DateDiff("ww","01.01.1997", "30.11.1997",vbSunday)'48 Num = DateDiff("ww","01.01.1997", "30.11.1997",vbMonday)'47
156 4.3. Дата и время DatePartfИнтераал, Дата [,ПервыиДеньНедели[, - .______ПерааяНвдьляГида]]) Параметр Назначение Интервал Единичный интервал времени Дата Строка, описывающая дату ПервыйДеньНедели Константа, определяющая день недели, который должен считаться первым ПерваяНеделяГода Константа, определяющая, которую из не- дель конца/начала года следует считать первой в году Комментарий Возвращает порядковый номер заданного интервала, к ко- торому принадлежит указанная дата. С помощью этой функции можно определить, например, к какому кварталу, месяцу или календарной неделе относит- ся заданная дата. Пример 'Определение интервала Dim Num As Long Num = DatePart("yyyy", "01.01.1992") '1992 Num = DatePart("q", "12.08.1995") '3 Num = DatePart("m", "15.04.1995") '4 Num = DatePart("ww", "01.06.1997", vbSunday)'23 Num = DatePart("ww", "01.06.1997", vbMonday)'22
4.3. Дата и время 157 Уеаг(Датэ) Параметр Назначение Дата Значение даты Комментарий Возвращает значение типа Integer, соответствующее году в дате-параметре. Пример 'Получить значение текущего года YearNum = Year(Now) Monthfffara) Параметр Назначение Дата Значение даты Комментарий Возвращает значение типа Integer, соответствующее ме- сяцу в дате-параметре. Пример 'Получить значение текущего месяца MonthNum = Month(Now)
(gOlPfeWliW 158 4.3. Дата и время Оау(Дэ1а) Параметр Назначение Дата Значение даты Комментарий Возвращает значение типа Integer, соответствующее дню месяца в дате-параметре. Пример 'Получить сегодняшнее число DayNum = Day(Now) Waekd 'а у (Да ra[, ПервыйДеньНедели}) Параметр Назначение Дата Значение даты ПервыйДеньНедели День недели (константа Visual Basic), при- нимаемый за начало недели Комментарий Возвращает номер дня недели, соответствующего дате- параметру. С помощью параметра ПервыйДеньНедели можно опре- делить день, с которого начинается неделя при расчете.
4.3. Дата и время 159 Пример 1 Определить дни недели Dim MyDyOfWeek As Integer MyDyOfWeek = Weekday("14.01.1997") '3 MyDyOfWeek = Weekday("14.01.1997", vbSunday)'3 MyDyOfWeek = Weekday("14.01.1997", vbMonday)'2 Huurf Зрамя) Параметр Назначение Время Значение времени Комментарий Возвращает значение типа Integer, соответствующее ча- сам в значении времени, переданном функции в качестве параметра. Пример 'Определить час MyHour = Hour(Now) Minutt-(Bpi-'Mfi) Параметр Назначение Время Значение времени
160 4.3. Дата и время Комментарий Возвращает значение типа Integer, соответствующее ми- нутам в значении времени, переданном функции в качест- ве параметра. Пример 'Определить минуту MyMinute = Minute(Now) Параметр Назначение Время Значение времени Комментарий Возвращает значение типа Integer, соответствующее се- кундам в значении времени, переданном функции в каче- стве параметра. Пример 'Определить секунду MySecond = Second(Now) Комментарий Возвращает значение типа Long, соответствующее числу секунд, прошедших с последней полуночи.
4.4. Информация о среде 161 Пример 'Сколько секунд исполнилось текущим суткам? DayAge = Timer 4.4. Информация о среде Имеющиеся в языке VBA возможности в плане информации о среде (окружении) немногочисленны. Сюда относятся опера- торы, которые реализуют некоторые API-вызовы Windows и предназначенные для получения доступа к переменным среды и значениям, содержащимся в системном реестре Windows. Епу1гоп(СтрокяИмя) ЕпУ1г<»п(НимерСтр<}ки) Параметр Назначение СтрокаИмя Имя переменной среды (строка) НомерСтроки Номер строки в таблице переменных среды (число) Комментарий Я Возвращает строку из таблицы переменных окружения или пустую строку. Я Если в качестве параметра задано строковое значение (имя переменной), то функция вернет ее значение (т. е. строку символов после знака равенства '='). Если в качестве параметра задан номер строки в таблице переменных среды (окружения), то функция вернет задан- ную строку полностью, т. е. вместе с именем переменной и знаком равенства '='. 6 1855
162 4.4. Информация о среде Пример 'Получить строку "РАТН=..." 'из таблицы переменных среды Dim PathStr As String Dim N As Integer n’= 1 Do 'Получить очередную строку 'из таблицы переменных среды PathStr = Environ(N) 'Если это строка "РАТН=...", то сообщить If Left(PathStr, 5) = "РАТН=" Then MsgBox PathStr Exit Do Else N = N + 1 End If Loop Until PathStr = "" ЯйВ(Красный, Зеленый, Синий) Параметр Назначение Красный Значение красной компоненты (0..255) Зеленый Значение зеленой компоненты (0..255) Синий Значение синей компоненты (0..255) Комментарий Функция возвращает RGB-значение цвета, полученное на основе значений трех компонентов.
4.4. Информация о среде 163 Пример 'Несколько простых цветовых тонов Dim ResColor As Long ResColor = RGB(255, 0, 0) 'чистый красный ResColor = RGB(0, 255, 0) 'чистый зеленый ResColor = RGB(0, 0, 255) 'чистый синий ResColor = RGB(255, 255, 0) 'желтый ResColor = RGB(255, 255, 255) 'белый ResColor = RGB(0, 0, 0) 'черный Обзор. Работа с системным реестром Windows Всю необходимую информацию о приложениях, программной и аппаратной среде Windows хранит в системном реестре. Ре- естр имеет иерархическую структуру—часть реестра, относя- щаяся к некоторому приложению, состоит из разделов, каж- дый из которых представляет собой набор параметров и со- ответствующих им значений. Кроме того, раздел может со- держать подразделы и т. д. Значение каждого параметра можно прочитать и модифицировать, параметр можно также удалить. Примечания Системный реестр Windows играет исключительно важную роль в функционировании этой операционной системы, и любые манипуляции с ним требуют осторожности — при наличии серьезных нарушений загрузка Windows будет связана с проблемами. Результаты работы приведенных ниже примеров можно увидеть с помощью Редактора реестра Windows.
164 4.4. Информация о среде Пример 'Чтение, запись и удаление параметров Dim LUName As String Dim LUDate As Date 'Запись параметров в реестр SaveSetting "МуАрр", "LastUser”, "Name", "Петер" SaveSetting "МуАрр", "LastUser", "Date", Now 'Чтение параметров из реестра LUName = GetSetting("МуАрр", "LastUser", "Name", "") LUDate = GetSetting("МуАрр”, "LastUser", _ "Date", 'Удаление параметров DeleteSetting "МуАрр", "LastUser"... SaveSetting Приложение, Раздел, Параметр, Значение Комментарий Записывает в реестр параметр и его значение. Функция требует наличия всех четырех своих параметров Параметр Назначение Приложение Имя приложения, к которому относится требуе- мый раздел Раздел Имя раздела Параметр Имя параметра Значение Значение параметра
4.4. Информация о среде 165 Пример SaveSetting "МуАрр", "LastUser", "Name", "Петер" SaveSetting "МуАрр", "LastUser", "Date", Now Раздал, Параметр ЗначаниеПаУмсычаннк*) Параметр Назначение Приложение Имя приложения, к которому относится требуе- мый раздел Раздел Имя раздела Параметр Имя параметра ЗначениеПо- Умолчанию Значение параметра, которое функция вернет в случае ошибки (заданный параметр в реестре не найден) Комментарий И Возвращает значение заданного параметра в реестре Win- dows. И Если требуемый параметр в реестре не найден, функция вернет ЗначениеПоУмолчанию. Функция возвращает значение типа Variant. Пример Dim LUName As String Dim LUDate As Date LUName = GetSetting("МуАрр", "LastUser", "Name", "")
166 4.4. Информация о среде LUDate = GetSetting("МуАрр", "Lastuser", "Date", "") GetAUS&ttings(npnnojK^HHe, Раздал) Параметр Назначение Приложение Имя приложения, к которому относится требуе- мый раздел Раздел Имя раздела Комментарий Возвращает значения всех параметров в заданном разде- ле реестра. Значение, возвращаемое функцией, относится к типу Vari- ant и представляет собой двумерный массив строк. Мас- сив содержит список имен параметров и соответствую- щие им значения из заданного раздела реестра. Пример 'Получить значения всех параметров раздела Dim LUA11 As Variant LUA11 = GetAllSettings("МуАрр", "LastUser") For N = 0 To UBound(LUA11) MsgBox LUA11(N, 0) & " " & LUA11(N, 1) Next
4.5. Финансовые вычисления 167 DelvteSetting Приложение, Раздел, Параметр Параметр Назначение Приложение Имя приложения, к которому относится требуе- мый раздел Раздел Имя раздела Параметр Имя параметра, подлежащего удалению Комментарий Удаляет заданный параметр. Если имя параметра не указано, будет удален весь раздел. Пример DeleteSetting "МуАрр", "LastUser" 4.5. Финансовые вычисления Кроме функций, предназначенных для чисто математических вычислений, VBA располагает финансовыми функциями. Они аналогичны финансовым функциям Excel и Access. При обращении к этим функциям в качестве параметров для достижения наибольшей точности вычислений следует ис- пользовать значения типа Double.
168 4.5. Финансовые вычисления ООВ((Зтиимость, ОстапзчнаяСтиимоатъ Длительность, Период, Фактор) - Параметр Назначение Стоимость Первоначальная стоимость фондов ОстаточнаяСтоимость Стоимость фондов в конце периода амортизации Длительность Длительность периода амортизации Период Период времени, используемый в каче- стве единичного при расчете Фактор Фактор уменьшения стоимости Комментарий Вычисляет амортизацию фондов в течение заданного ин- тервала времени. SLN( Стоимость, ОстаточнаяСтоимость, Длительность) Параметр Назначение Стоимость Первоначальная стоимость фондов ОстаточнаяСтоимость Стоимость фондов в конце периода амортизации Длительность Длительность периода амортизации Комментарий Вычисляет величину амортизации фондов за период с по- мощью линейного метода.
4.5. Финансовые вычисления 169 ЗУО(Стоимость, ОстаточнаяОт&имость, Длительность, П&рицд) Параметр Назначение Стоимость Первоначальная стоимость фондов ОстаточнаяСтоимость Стоимость фондов в конце периода амортизации Длительность Длительность периода амортизации Период Период времени, используемый в качест- ве единичного при расчете Комментарий Вычисляет величину амортизации фондов за определен- ный период с помощью арифметического дегрессивного метода. (^(Ставка, ЧислоПвриодов, -Взнос-;. _____[,ПриведеннаяСтоимасть[, Тип]]) Параметр Назначение Ставка Процентная ставка ЧислоПериодов Число периодов в аннуитете Взнос Размер (сумма) регулярного взноса ПриведеннаяСтоимость Стоимость аннуитета, приведенная к началу временного периода Тип Тип выплат (в начале или в конце каждого периода)
170 4.5. Финансовые вычисления Комментарий Вычисляет будущую стоимость при известном размере ре- гулярного взноса и постоянной процентной ставке. ЯШе/ЧислоПариоров, взнос, ПриведеннаяСтаимостъ _____[, БудущаяСтоимость], Тип], Оценка]]})___ Параметр Назначение ЧислоПериодов Число периодов в аннуитете Взнос Размер (сумма) регулярного взноса ПриведеннаяСтоимость Стоимость аннуитета, приведенная к началу временного периода БудущаяСтоимость Расчетная конечная стоимость аннуите- та Тип Тип выплат (в начале или в конце каж- дого периода) Оценка Приблизительная оценка предполагае- мого результата Комментарий И Вычисляет процентную ставку, необходимую для получе- ния заданной приведенной стоимости при известном пе- риоде выплат и размере взноса. /ЯЯ (Платежи])], Оценки])_______* - Wf Комментарий Вычисляет внутреннюю норму доходности при известной последовательности выплат и поступлений.
4.5. Финансовые вычисления 171 Параметр Назначение Платежи () Массив значений типа Double, описывающий дина - мику денежных потоков - по меньшей мере одно отрицательное значение (платеж) и ряд положите- льных (поступления) Оценка Приблизительная оценка предполагаемого результата М1ЯЯ(Платежн{), финСтаака, РеинСтаака) Параметр Назначение Платежи () Массив значений типа Double, описывающий ди - намику денежных потоков — по меньшей мере одно отрицательное значение (платеж) и ряд по- ложительных (поступления) ФинСтавка Ставка финансирования РеинСтавка Ставка реинвестирования Комментарий И Вычисляет модифицированную внутреннюю норму доход- ности при известной последовательности выплат и поступ- лений. НРег(Ставка, Ванос, ПриведеннаяСтоимость f, Будущ зиСтоймостг. [, Тип}]) Комментарий Я Устанавливает количество периодов времени, требующих- ся для достижения заданной приведенной стоимости при постоянном размере выплат и постоянной процентной ставке.
(gOlPfeWliW 172 4.5. Финансовые вычисления Параметр Назначение Ставка Ставка доходности Взнос Размер (сумма) регулярного взноса ПриведеннаяСтоимость Стоимость аннуитета, приведенная к началу временного периода БудущаяСтоимость Расчетная конечная стоимость аннуитета Тип Тип выплат (в начале или в конце каж- дого периода) /РтЦСгазка, Период, ЧислоПериодов, ПриаеденнияСтоимость[, БудущаяСтоимость[, Тип]]) < ••________ . Параметр Назначение Ставка Ставка доходности Период Период времени, используемый в качестве единичного при расчете ЧислоПериодов Число периодов в аннуитете Приведенная- Стоимость Стоимость аннуитета, приведенная к нача- лу временного периода БудущаяСтоимость Расчетная конечная стоимость аннуитета Тип Тип выплат (в начале или в конце каждого периода) Комментарий Вычисляет стоимость аннуитета при известном размере регулярного взноса и постоянной процентной ставке.
4.5. Финансовые вычисления 173 РтЦСтавка, ЧислоПериодов, ПриааденнаяСтоимос.п _____[, БудущаяСтоимость [, Тиа]]}_______ Параметр Назначение Ставка Ставка доходности ЧислоПериодов Число периодов в аннуитете ПриведеннаяСто- имость Стоимость аннуитета, приведенная к началу временного периода БудущаяСтоимость Расчетная конечная стоимость аннуитета Тип Тип выплат (в начале/конце каждого периода). Комментарий Вычисляет величину постоянного взноса, который необхо- димо вносить или выплачивать для достижения опреде- ленной стоимости аннуитета при постоянной процентной ставке. РРтЦСгаака, Период, ЧислоПериодов, ПриаеденнаяСтоимость], БудущаяСтоимость], Т*П]]) __________ Параметр Назначение Ставка Ставка доходности Период Период времени, используемый в качестве единичного при расчете ЧислоПериодов Число периодов в аннуитете Приведенная- Стоимость Стоимость аннуитета, приведенная к началу временного периода БудущаяСтоимость Расчетная конечная стоимость аннуитета Тип Тип выплат (в начале/конце каждого периода)
174 4.6. Математические вычисления Комментарий Вычисляет полную сумму аннуитета, исходя из размера постоянного взноса, числа периодов и процентной ставки. PV(Cth3kh, ЧислоПарис1Дои, Взнис[, БудущзяСтоимиа [, Тип]])__________________________________'.,А Параметр Назначение Ставка Ставка доходности ЧислоПериодов Число периодов в аннуитете Взнос Размер (сумма) регулярного взноса БудущаяСтоимость Расчетная конечная стоимость аннуитета Тип Тип выплат (в начале или в конце каждого периода) Комментарий в Вычисляет приведенную стоимость при известном и по- стоянном размере взноса, периоде выплат и постоянной процентной ставке. 4.6. Математические вычисления Для математических вычислений VBA располагает рядом со- ответствующих функций. Набор этих функций не слишком об- ширен, однако покрывает все элементарные потребности. Atn/Значение) Параметр Назначение Значение Числовое значение
4.6. Математические вычисления 175 Комментарий Возвращает выраженный в радианах арктангенс от задан- ного значения. Результат, возвращаемый функцией, находится в диапа- зоне от -PI/2 до PI/2. Чтобы выразить результат в градусах, достаточно умно- жить его на 180/PI. Пример MsgBox Atn(l) * (180/3.14) '45 градусов Сеа( Значение) Параметр Назначение Значение Угловое значение, выраженное в радианах Комментарий Возвращает косинус от заданного углового значения. Результат находится в диапазоне от -1 до 1. Чтобы выразить результат в градусах, достаточно умно- жить его на 180/PI. Пример MsgBox Cos(1.1) '0.45
176 4.6. Математические вычисления Sin (Значение} Параметр Назначение Значение Угловое значение, выраженное в радианах Комментарий Возвращает синус от заданного углового значения. Результат находится в диапазоне от -1 до 1. Чтобы выразить результат в градусах, достаточно умно- жить его на 180/PI. Пример MsgBox Sin (1.1) '0.89 Тап(Зничение) Параметр Назначение Значение Угловое значение, выраженное в радианах Комментарий Возвращает тангенс от заданного углового значения. Чтобы выразить результат в градусах, достаточно умно- жить его на 180/PI. Пример MsgBox Tan(1.1) '1.96
4.6. Математические вычисления 177 Ехр(Знэччнив) Параметр Назначение Значение Числовое значение Комментарий Возвращает экспоненту от заданного значения. Пример MsgBox Ехр(З) '20.09 1.оу(3начение) Параметр Назначение Значение Числовое значение Комментарий Возвращает натуральный логарифм от заданного значения. Для получения логарифма по основанию, отличному от основания натуральных логарифмов (числа е), необходимо разделить результат на натуральный логарифм основания. Пример 'Вычислить количество знаков до запятой 'в числе-параметре Function NumSigns(MyValue As Double) As Integer
4.6. Математические вычисления NumSigns = Int(Log(MyValue) / Log(10)) + 1 End Function Параметр Значение Назначение Числовое значение Комментарий Возвращает корень квадратный от заданного значения. Пример MsgBox Sqr(9) '3 Параметр Значение Назначение Числовое значение Комментарий Возвращает абсолютное значение числа-параметра. Результат принадлежит к тому же типу, что и параметр. Пример MsgBox Abs(-45) '45 MsgBox Abs(45) '45
4.6. Математические вычисления 179 Randomize Значение Параметр Назначение Значение Стартовое значение Комментарий Выполняет предустановку генератора случайных чисел на различные участки псевдослучайной последовательности. Пример Randomize Now ЯпсЦЗначение) Параметр Назначение Значение Необязательный параметр, определяющий значе- ние, которое вернет функция Комментарий Функция возвращает случайное (в статистическом смыс- ле) число в диапазоне от 0 до 1. С помощью параметра можно управлять значением, кото- рое возвращает функция. Пример MsgBox Rnd(l)
180 4.7. Строки 5дп(3начениа) Параметр Назначение Значение Числовое значение Комментарий Функция возвращает знак числа-параметра. Для отрицательных значений параметра функция возвра- щает -1, а для положительных +1. Для параметра, равного 0, функция вернет 0. Пример MsgBox Sgn(-15) 4.7. Строки Функции и операторы, предназначенные для манипуляций с символьными строками, имелись уже в первых версиях BA- SIC. Конечно, не обошелся без таких инструментов и Visual Basic For Applications. StrCampfCrpoKJl, Ст(юка2. КонстРежим) кч Параметр Назначение Строка1 Первая сравниваемая строка Строка2 Вторая сравниваемая строка КонстРежим Константа, определяющая режим, в котором бу- дут сравниваться строки
4.7. Строки 181 Комментарий Возвращает целочисленное значение, характеризующее ре- зультат сравнения двух заданных строк в заданном режиме. Пример 'Сравнить две строки в разных режимах Dim Res As Integer Res = StrComp("Meyer", "meyer", vbBinaryCompare) '-1 Res = StrComp("Meyer", "meyer", _ vbTextCompare) '0 Res = StrComp("meyer", "Meyer", _ vbBinaryCompare) '1 Res = StrComp("meyer", "meyer", vbBinaryCompare) '0 lnStr(Ha4ano, Строка 1, Стрика2, КонстРежим) lnStrB(Ha4aao, Строка!, Строка2, КонстРежим} Параметр Назначение Начало Позиция начала поиска подстроки в строке Строка! Строка, в которой производится поиск подстроки Строка? Подстрока, являющаяся предметом поиска КонстРежим Константа, определяющая режим, в котором будут сравниваться символы строк Комментарий В случае безуспешности поиска функция возвращает значе- ние 0.
182 4.7. Строки Выполняет поиск заданной подстроки в заданной же стро- ке и возвращает позицию начала найденной подстроки (поиск производится только до первого обнаруженного вхождения). Если строка содержит двоичные данные, то аналогичную задачу можно решить с помощью функции InStrB. Пример 'Выделить фамилию из строки вида "фамилия, имя" Dim FullName As String Dim LastName As String FullName = "Шмидт, Сюзанна" LastName = Left(FullName, InStr(FullName, ",") - 1) *.* ase(C ~ok.u) Параметр Назначение Строка Строка, подлежащая преобразованию в нижний ре- гистр Комментарий Преобразует строку-параметр в нижний регистр (заглав- ные и строчные буквы становятся строчными). Возвращает строку-результат. Пример SmallChr = LCase("Произвольный Текст")
4.7. Строки 183 иСазе(Строкз) Параметр Назначение Строка Строка, подлежащая преобразованию в верхний регистр Комментарий Преобразует строку-параметр в верхний регистр (заглав- ные и строчные буквы становятся заглавными). Возвращает строку-результат. Пример CapChr = UCase("Произвольный Текст") 5рэсе(КаличестнаПробе/к>в) Параметр Назначение КоличествоПробелов Число, задающее количество пробелов в результирующей строке Комментарий Возвращает строку, состоящую из заданного числа про- белов. Пример FullName = FirstName & Space (15) & LastName
184 4.7. Строки 5(ппд(Количк-отвоСымаолоа, Символ} Параметр Назначение Количество- Символов Число, задающее количество символов в резу- льтирующей строке Символ Код символа или строка, первым символом ко- торой определяется вид символов в строке-ре- зультате Комментарий Возвращает строку, состоящую из заданного числа задан- ных символов. Пример 'Снабдить строку ведущими пробелами Const MyCurrStrLen As Integer = 20 Dim MyCurrSum As Currency Dim MyCurrStr As String Dim MyResStr As String MyCurrSum = 15.8 MyCurrStr = Format(MyCurrSum, "Currency") MyResStr = String(MyCurrStrLen - _ Len(MyCurrStr), " ") MsgBox MyResStr
4.7. Строки 185 L&n(Crp<jK3) LenffTeptf мерная) LanB(Crpaica) ^аВ(Пуреманняя) Параметр Назначение Строка Строковое значение Переменная Произвольная переменная Комментарий Если в качестве параметра функции передано строковое значение, то она вернет длину строки в символах. Если параметром окажется переменная (например, принад- лежащая к определяемому пользователем типу), то функция вернет размер переменной в байтах. В варианте LenB функция возвращает число байт в памя- ти, использованных для размещения строки или соответ- ственно объем памяти, фактически расходуемый на пред- ставление переменной пользовательского типа. Пример 'Определить размер переменной 'при открытии файла Public Type PhoneNum Name As String * 50 PhNumber As Integer End Type Sub OpenPhoneFile()
186 4.7. Строки Dim CrRec As PhoneNum 'Открыть файл в режиме произвольного доступа Open Fil For Random Access Read Write _ As 1 Len = Len(CrRec) -LSet Строка 1 = Строка2 Параметр Назначение Строка) Строковая переменная Строка2 Строковое значение, подлежащее передаче в гере - менную Комментарий Копирует (загружает) строковое значение Строка2 в стро- ковую переменную Строка1 с левым выравниванием, т. е. так, что значение Строка2 занимает крайнюю левую часть строки Строка 1, а оставшееся место заполняется пробе- лами. Пример Dim MyString As String * 10 MyString = "0123456789" 'MyString содержит "0123456789" LSet MyString = "Привет" 'MyString содержит "Привет "
4.7. Строки 187 RSef Строка 1 = Строка2 Параметр Назначение Строка1 Строковая переменная Строка2 Строковое значение, подлежащее передаче в пе- ременную Комментарий Копирует (загружает) строковое значение Строка2 в строко- вую переменную Строка 1 с правым выравниванием, т. е. так, что значение Строка2 занимает крайнюю правую часть стро- ки Строка1, а оставшееся место заполняется пробелами. Пример Dim MyString As String * 10 MyString = "0123456789" 'MyString содержит "0123456789" RSet MyString = "Привет" 'MyString содержит " Привет" ГопшМ(Выражони<э[. Формат [, Пераы*ДеньНедели[, ПерааяНеделяГода]]]) Комментарий Возвращает строку, отформатированную в соответствии с заданными параметрами. Для форматирования, как числовых значений, так и значе- ний даты-времени можно использовать предопределенные форматы VBA, а также пользовательские форматирующие строки. Если формат не определен, то функция вернет строку.
188 4.7. Строки Параметр Назначение Выражение Выражение, возвращающее числовое зна- чение или значение даты-времени Формат Строка форматирования или имя формата ПервыйДеньНедели Константа, определяющая день недели, ко- торый должен считаться первым ПерваяНеделяГода Константа, определяющая, которую из не- дель конца/начала года следует считать первой в году Пример 'Разные виды форматирования строк Dim MySum As Double Dim MyNum As Long Dim MyEnabled As Boolean Dim MyControl As Single Dim MyDate As Date Dim Res As String MySum = 1856.87 Res = Format(MySum,"Currency") ' $1'856.87 Res = Format(MySum,"Fixed") ' 1856.87 Res = Format(MySum,##0.0000") ' 1'856.8700 MyNum = 14512201 Res = Format(MyNum,"000 000 00")' 145 122 01 MyControl = 0.15 Res = Format(MyControl,"Percent")' 15.00% MyEnabled = True Res = Format(MyEnabled,"Yes/No”)' Да MyDate = "1.9.98" Res = Format(MyDate,"Long Date")
4.7. Строки 189 ' 01 сентября 1998г. Res = Format(MyDate,"ww. ""Week""") '36.Week Res = Format(MyDate,"ww. ""Week""",, vbFirstFullWeek) '33.Week Res = Format(MyDate,"w. ""Day""") '3.Day Res - Format(MyDate,"w. ""Day""", vbMonday) '2.Day Lt- ftfCrpoKu, Длина) Lcffti'Страк j . Длина) . ~ t 1 Параметр Назначение Строка Исходная строка Длина Количество символов (байт), подлежащих выделе- нию в подстроку Комментарий Возвращает подстроку, состоящую из Длина символов ис- ходной строки, начиная с первого. Если строка содержит двоичные данные, то следует испо- льзовать функцию LeftB. В этом случае параметр Длина задает число байт. Пример 'Выделить фамилию из строки вида "фамилия, имя" Dim FullName As String Dim LastName As String FullName = "Шмидт, Сюзанна" LastName = Left(FullName, InStr(FullName, ",") - 1)
190 4.7. Строки Riyht(Crp<3Ka, Длина) RightB(CrpoKa, Длина) Параметр Назначение Строка Исходная строка Длина Количество символов (байт), подлежащих выделе- нию в подстроку Комментарий Возвращает подстроку, состоящую из Длина символов ис- ходной строки, кончая последним. Если строка содержит двоичные данные, то следует ис- пользовать функцию RightB. В этом случае параметр Дли- на задает число байт. Пример 'Выделить имя из строки вида "фамилия, имя" Dim FullName As String Dim FirstName As String FullName = "Шмидт, Сюзанна" FirstName = Right(FullName, Len(FullName) - InStr(FullName, ",") - 1) % МШ(С»г'^ака, Начали,, ина) MidSfCrpoKa, Начала, Длина) Комментарий Возвращает подстроку, состоящую из Длина символов ис- ходной строки, начиная с символа Начало.
4.7. Строки 191 Если строка содержит двоичные данные, то следует ис- пользовать функцию MidB. В этом случае параметр Длина задает число байт. Параметр Назначение Строка Исходная строка Начало Начальная позиция выделяемой подстроки в ис- ходной строке Длина Количество символов (байт), подлежащих выде- лению в подстроку Пример 'Выделить пятый и шестой символы в строке Dim MyString As String Dim MySubString As String MyString = "12440512" MySubString = Mid(MyString, 5, 2) Тгнл(Строка) ___________________________ Параметр Назначение Строка Исходная строка Комментарий Возвращает строку, полученную из исходной путем удале- ния ведущих и замыкающих пробелов. Пример Dim MyFirstName As String * 20 Dim MyLastName As String * 20
192 4.7. Строки Dim MyFullName As String MyFirstName = "Генрих" MyLastName = "Мейер" MyFullName = Trim(MyFirstName) & " " & Trim(MyLastName) Rlrim(GrpaKJi) Параметр Назначение Строка Исходная строка Комментарий Возвращает строку, полученную из исходной путем удале- ния замыкающих пробелов. Пример Dim MyFirstName As String * 20 Dim MyFullName As String MyFirstName = "Генрих" MyFullName = RTrim(MyFirstName) LTrfm(CrpoKa) s Параметр Назначение Строка Исходная строка Комментарий Возвращает строку, полученную из исходной с помощью удаления ведущих пробелов.
4.7. Строки 193 Пример Dim MyFirstName As String * 20 Dim MyLastName As String * 20 Dim MyFullName As String MyFirstName = "" MyLastName = "Мейер" MyFullName = RTrim(LTrim(MyFirstName & MyLastName)) Л->сВ(Строка) AscW(CrpoKa) Параметр Назначение Строка Строковое значение Комментарий Возвращает код первого символа строки-параметра. Если строка-параметр содержит двоичные данные, то сле- дует использовать функцию AscB (возвращает первый байт строки), а для Unicode-кодировки или AscW (возвра- щает шестнадцатиразрядное слово — Unicode-код симво- ла). Пример MsgBox Asc("A") '65 7 1855
(gOlPfeWliW 194 4.8. OLE Chr(Kvu Сюйвйла) \ СЬгВ(КидС»м90ЛЭ) СЬгУУ{КимСиыиила) Параметр Назначение КодСимвола Целочисленное значение, обозначающее код символа в коде ASCII или Unicode Комментарий Возвращает строку, состоящую из одного символа, код ко- торого задан параметром. Если строка должна содержать двоичные данные, то сле- дует воспользоваться функцией ChrB. Если необходимо получить символ в коде Unicode, следует воспользоваться функцией ChrW (если система не поддер- живает Unicode, то функция действует аналогично Chr). Пример MsgBox Chr(65) 'А 4.8. OLE Технология OLE, позволяющая приложениям Windows управ- лять друг другом и пользоваться данными и функциональными возможностями друг друга, широко поддержана всеми компо- нентами Office. Обзор. OLE Технология OLE основывается на доступе к объектам.
4.8. OLE 195 Объекты порождаются классами. Класс является шабло- ном объекта и позволяет создать его экземпляр. Каждое приложение, поддерживающее OLE, располагает рядом определенных классов. Непосредственный доступ к объектам осуществляется с по- мощью функций GetObject и CreateObject. И Иерархию классов, принадлежащих приложениям Windows, можно увидеть в системном реестре (раздел HKEY_CLAS- SES_ROOT). Чтобы VBA-программа смогла получить доступ к внешним объектам, необходимо включить в ее состав соответству- ющие библиотеки и ссылки (команда References... меню Tools). 4.8.1. Доступ к OLE-объекту ваО1лесЦ[ИмяФийлз][, Класс]) Параметр Назначение ИмяФайла Полное имя файла, содержащего в себе требуемый объект. Если этот необязательный параметр опу- щен, то второй параметр становится обязательным Класс Имя класса, к которому относится требуемый объект Комментарий Если задано имя файла, то функция возвращает ссылку на объект, размещенный в этом файле. • Параметр ИмяФайла должен при этом содержать пол- ное (включая имя диска и путь) имя файла. • Файл будет открыт посредством связанного с ним при- ложения, и функция вернет ссылку на активизированный таким образом объект.
196 4.8. OLE Если имя файла опущено, то должно быть указано имя клас- са, к которому принадлежит требуемый объект. • В этом случае будет создан новый экземпляр. • Указанный класс должен присутствовать в системном ре- естре Windows (раздел HKEY CLASSES ROOT). Возвращаемое функцией значение должно быть присвое- но переменной объектного типа. Пример 'Открыть презентацию PowerPoint из среды Excel Sub CallPowerPointFromExcel() 'Файл презентации Const FilName = "C:\FILES\MyPres.ppt" 'Переменные для объектов PowerPoint Dim PR As Presentation 'Презентация Dim SL As Slide 'Слайд 'Открыть презентацию Set PR = GetObject(FilName) 'Создать новый слайд Set SL = PR.Slides.Add(PR.Slides.Count + 1, ppLayoutTitleOnly) 'Присвоить заголовку слайда презентации 'имя листа рабочей книги SL.Shapes(1).TextFrame.TextRange.Text = _ Sheets(1).Name 'Сохранить презентацию PR.Save 'Закрыть окно PowerPoint PR.Application-Quit 'Обнулить ссылку Set PR = Nothing End Sub
4.8. OLE 197 ,иим CresteObjttut(K;ncc) Параметр Назначение Класс Параметр вида ИмяПриложения.ИмяКласса, опре- деляющий класс, к которому должен принадлежать создаваемый объект Комментарий 1 Создает объект (экземпляр) заданного класса. • Объект будет создан и активизирован с помощью свя- занного с ним приложения. • Указанный класс должен присутствовать в системном реестре Windows (раздел HKEY_CLASSES_ROOT). М Возвращаемое функцией значение должно быть присвое- но переменной объектного типа. Пример Sub MySQLQueryO Const SQLString = "SELECT ANName,Land " & _ "FROM Authors ORDER BY Land" Dim MyServer As SQLOLE.SQLSERVER 'Создать переменную для доступа к SQL-серверу Set MyServer = CreateObject_ ("sqlole.SQLServer") 'Соединиться и передать запрос MyServer.Connect "MySrv", "SA", "Geheim" Set MyResult = _ MyServer1Verleger.ExecuteWithResults(SQLString) 'Записать результат в рабочую книгу For I = 1 То MyResult.Rows ActiveSheet.Cells(i, 1).Value = _ MyResult.GetColumnString(i, 1)
198 4.9. Коллекции ActiveSheet.Cells(i, 2).Value = MyResult.GetColumnString(i, 2) Next 'Завершить соединение MyServer.Close End Sub 4.9. Коллекции Коллекция представляет собой совокупность объектов, но в то же время сама является объектом. Объект можно включить в состав коллекции или исключить из ее состава. Механизм коллекций позволяет выполнять групповые операции с объек- тами. Среди конструкций языка VBA есть цикл специального вида, позволяющий обратиться ко всем объектам, входящим в со- став некоторой коллекции (цикл For Each Object In Collection). Коллекции могут включать в себя однотипные объекты, а так- же объекты определяемых пользователем типов. В состав коллекций могут входить также классы. В приведенном ниже примере (упрощенная библиотека для операций с лицевыми счетами) показана техника работы с коллекциями. Пример 'В модуле класса: определить класс Counts Public CountNumber As Long 'номер счета Public CountName As String 'название счета Public CountSaldo As Double 'исходящий остаток Dim LastCred As Date 'дата последнего кред.оборота Dim LastDeb As Date 'дата последнего дебет.оборота
4.9. Коллекции 199 'Проводка по кредиту счета Sub Credit(Sum As Double) CountSaldo = CountSaldo + Sum LastCred = Now End Sub 'Проводка по дебету счета Sub Debet(Sum As Double) CountSaldo = CountSaldo - Sum LastDeb = Now End Sub 'Дата последнего кредитового оборота по счету Function LastCredit() As String Lastcredit = Format(LastCred, "Short Date") End Function 'Дата последнего дебетового оборота по счету Function LastDebetO As String LastDebet = Format(LastDeb, "Short Date") End Function Пример 'В программном модуле, использующем класс Counts Dim CountsCol As New Collection 'создать коллекцию Sub CountRun() 'Объявить переменные Dim CountObj As Object Dim Nlst As String Dim I As Integer 'Создать три новых счета AddCount "Герда Мюллер", 123, 25000 AddCount "Ганс Шмидт", 554, 1000 AddCount "Клаус Кримц", 887, 80000 'Выдать сообщение о состоянии всех счетов
200 4.9. Коллекции For Each CountObj In CountsCol Nlst = Nlst & CountObj.CountName & " " _ & CountObj.CountSaldo & Chr(13) Next MsgBox "Всего " & CountsCol.Count & "Счета:" & vbCr &Nlst 'Проводки по счету 123 CountsCol("123").Credit 10000 CountsCol("123").Debet 2000 1 Дата последнего движения With CountsCol("123") MsgBox "Последнее движение по кредиту: " & .LastCredit & vbCr & "Исходящий остаток ” _ & Space(14) & " & Format(.CountSaldo, "Currency") End With 'Удалить все счета For I = 1 To CountsCol.Count CountsCol.Remove I Next End Sub 'Создать объект "счет" и включить его 'в коллекцию "счета" Sub AddCount(Name As String, Number As Long, Saldo As Double) 'Создать новый экземпляр объекта "счет" Dim TempCount As New Counts 'Обнулить указатель Set TempCount = Nothing 'Заполнить поля объекта With TempCount .CountName = Name .CountNumber = Number
4.9. Коллекции 201 .CountSaldo = Saldo End With 'Включить новый объект в коллекцию CountsCol.Add TempCount, CStr(TempCount.CountNumber) End Sub □tyecf. Count Параметр Назначение Object Имя объекта-коллекции Комментарий Возвращает количество объектов в коллекции (значение типа Long). Пример 'Удалить все счета For I = 1 То CountsCol.Count CountsCol.Remove I Next Qbj^tt.Add а&ъ»кт[, Ктич[, ОйъаггДоГ, ОбъектПас/iti}]] Комментарий И Включает объект в состав коллекции. При этом включаемо- му объекту можно присвоить строковый «ключ», т. е. иден- тификатор, который позволит обращаться к объекту в со- ставе коллекции не только по порядковому номеру.
(gOlPfeWliW 202 4.9. Коллекции Параметр ОбъектДо или ОбъектПосле, если это необходи- мо, дает возможность указать место в коллекции, куда сле- дует включить новый объект. Использовать можно только один из этих параметров (при этом необходимо указать либо порядковый номер, либо идентификатор соответст- вующего объекта). Параметр Назначение Object Имя объекта-коллекции Объект Имя объекта, подлежащего включению в состав коллекции Ключ Строка-идентификатор («ключ»), которая позво- лит впоследствии обращаться к объекту внутри коллекции «по имени» ОбъектДо Номер или строка-идентификатор объекта, пред- шествующего включаемому ОбъектПосле Номер или строка-идентификатор объекта, сле- дующего за включаемым Пример 'Включить новый объект в коллекцию CountsCol.Add TempCount, CStr(TempCount.CountNumber) Object.Hemove Индекс Параметр Назначение Object Имя объекта-коллекции Индекс Порядковый номер объекта в коллекции или его ключ-идентификатор
4.10. Обработка ошибок 203 Пример 'Удалить все счета For I = 1 То CountsCol.Count CountsCol.Remove I Next Комментарий Исключает указанный объект из состава коллекции. OUjsot. Пот(Индяка) Параметр Назначение Object Имя объекта-коллекции Индекс Порядковый номер объекта в коллекции или его ключ - идентификатор Комментарий Возвращает объект, входящий в состав коллекции. Пример 'Проводки по счету 123 CountsCol("123").Credit 10000 CountsCol("123").Debet 2000 4.10. Обработка ошибок При выполнении программы могут возникнуть разного рода ситуации, ведущие к ошибкам периода выполнения. Напри- мер, может произойти обращение к несуществующему или недоступному в данный момент дисковому файлу. Если обра-
204 4.10. Обработка ошибок ботка такой ошибки не предусмотрена программистом, то вы- полнение программы будет прервано аварийно. Чтобы этого избежать, необходимо предусмотреть обработку ошибок, ко- торые могут возникнуть при выполнении программы. Язык VBA располагает рядом операторов, предназначенных для работы с ошибками, а также объектом Error, чьи методы и свойства позволяют получать сведения о возникшей ошибке, а также управлять процессом ее обработки. On Error 9ato Мотка On Error Resume Next On Error GoTo 0 Параметр Назначение GoTo Метка При возникновении ошибки переход на метку Resume Next При возникновении ошибки продолжить со сле- дующего оператора GoTo 0 При возникновении ошибки перезапустить про- грамму Комментарий Включает обработку ошибок в текущей процедуре (макросе). В первом случае при возникновении ошибки управление будет передано на строку Метка (речь идет о строке внут- ри текущей процедуры). С метки должен начинаться код обработчика ошибок в данной процедуре. Во втором случае выполнение программы будет продол- жено с оператора, следующего за тем, при выполнении ко- торого возникла ошибка. Третий вариант предусматривает «сброс» программы с ини- циализацией всех переменных и запуск ее с начала.
4.10. Обработка ошибок 205 Пример 'Обработчик ошибок в процедуре: 'файл не существует Sub TestPGM 'В случае ошибки выполнения перейти по метке On Error GoTo ErrorLabell Open "C:\test.txt" For Input As 1 Exit Sub ErrorLabell: 'Обработка ошибки открытия файла End Sub Resume Next Resume tl Resume Метка Параметр Назначение Next Продолжить выполнение со следующего операто- ра 0 Продолжить выполнение с того оператора, где возникла ошибка. Метка Перейти по метке. Комментарий Оператор Resume определяет, что в случае возникновения ошибки выполнение программы должно быть продолжено. Обычно Resume используют в коде обработчика ошибок.
206 4.10. Обработка ошибок В первом варианте оператора выполнение программы бу- дет продолжено со следующего оператора. Во втором варианте программа вновь попытается выпол- нить «ошибочный» оператор и так будет продолжаться до тех пор, пока ошибка не исчезнет или, если ошибка возни- кает вновь и вновь, бесконечно. Если задана метка, то при ошибке управление будет пере- дано на строку с меткой. Пример 'Обработчик ошибок в процедуре: деление на нуль Sub TestPGM Dim Res As Double 'В случае ошибки выполнения перейти по метке On Error GoTo ErrorLabell Res =15/0 Exit Sub ErrorLabell: 'Обработка ошибки If Err = 11 Then MsgBox "Ошибка выполнения: деление на нуль!" Resume Next End If End Sub 4.10.1. Объект Err Объект Err содержит сведения о случившейся ошибке вы- полнения. Анализ содержимого свойств этого объекта по- зволяет распознать вид ошибки и принять соответствую- щее решение. Кроме того, объект Err позволяет сгенери- ровать ошибку периода выполнения с заданными атрибу- тами.
4.10. Обработка ошибок 207 Пример 'Использовать объект Err 'для распознавания вида ошибки Dim ErrMessage As String On Error GoTo ErrorLabell Err.Clear Err.Raise 6, "Тестовая программа", "Деление на нуль!" ErrorLabell: If Err.Number <> 0 Then ErrMessage = "Произошла ошибка номер " & Err.Number _ & vbCr & "Источник: " & Err.Source _ & vbCr & "Описание: " & Err.Description MsgBox ErrMessage End If Err. Raise Номер, Источник, Описание, ______ФиилСпрааки, КонтькстОпраики Параметр Назначение Номер Номер ошибки Источник Имя приложения или объекта-источника ошибки Описание Описание ошибки ФайлСправки Полное имя файла справки КонтекстСправки Идентификатор контекста в файле справки
208 4.10. Обработка ошибок Комментарий Генерирует ошибку периода выполнения с заданными па- раметрами. Пример Err.Raise 6, "Тестовая программа", _ "Деление на нуль!" Err. Clear Комментарий Очищает свойства объекта Err. Метод вызывается автоматически при выполнении опера- торов Resume или On Error. Пример Err.Clear Err.Raise 6, "Тестовая программа", "Деление на нуль!"
5 Меню, панели инструментов, экранные формы Такие компоненты Office, как Word, Excel и PowerPoint, позво- ляют стандартным (с точки зрения VBA) образом оснастить свои объекты дополнительными пунктами меню, панелями ин- струментов, а также экранными формами. Исключение состав- ляет Access — связанные с этим приложением особенности будут рассмотрены в главе 9. 5.1. Меню и панели инструментов Панели меню и панели инструментов представляются в сре- де Office как объект типа CommandBar и, таким образом, существенного различия между ними нет. Меню представляет собой частный случай панели инстру- ментов (панель, где отсутствуют командные кнопки, а есть только текстовые элементы). • Объекты типа CommandBar являются составной частью стандартных библиотек Office. Ссылки на стандартные библиотеки Office автоматически включаются в состав каждого проекта, и нет необходимос- ти указывать их явным образом. Командные кнопки, как и команды меню, могут распола- гаться только на панели (которую именуют соответственно панелью инструментов или панелью меню). • Панель является носителем элементов управления (командных кнопок, команд меню и др.) и не выполняет никаких самостоятельных функций.
210 5.1. Меню и панели инструментов Обзор. Объектная модель панели инструментов (меню) Объект Назначение Com ma nd Bars Коллекция объектов типа CommandBar CommandBar Панель инструментов/меню (объект типа CommandBar) CommandBarControls Коллекция объектов типа CommandBar- Control CommandBarControl Элемент управления (одного из несколь- ких типов), предназначенный для поме -1 щения на панель инструментов (меню) I CommandBarButton Командная кнопка с точечным рисун- ком (значок), предназначенная для по- мещения на панель инструментов CommandBarComboBox Текстовое поле, поле списка или ком- бинированное поле, предназначенное для помещения на панель инструментов CommandBarPopup Команда (элемент) меню, предназна- ченная для помещения на панель меню
5.1. Меню и панели инструментов 211 5.1.1. Коллекция CommandBars — панели инструментов Свойства AaHv&Mi-nuBar Возвращает текущую панель инструментов. Пример 'Получить имя текущей панели инструментов MsgBox CommandBars.ActiveMenuBar.Name AdnpttveMisnua Возвращает/устанавливает состояние настраиваемых меню. Пример 'Разрешить настраиваемые меню CommandBars.AdaptiveMenus = True DisplayTooltips Определяет наличие всплывающих подсказок у элементов управления, помещенных на панель инструментов. Пример 'Отключить всплывающие подсказки CommandBars.DisplayTooltips = False
212 5.1. Меню и панели инструментов Ldrg&Buttuns Разрешает или запрещает режим «крупных значков» (кно- пок). Пример 'Крупные значки CommandBars.LargeButtons = True Count Число объектов в коллекции. Пример 'Сообщить число панелей меню и инструментов MsgBox CommandBars.Count Методы Add (Имя. Позиция, ПпнельМеню, ВременныйСтатус) Параметр Назначение Имя Имя новой панели инструментов (меню) — строковое значение Позиция Позиция новой панели ПанельМеню Булево значение, определяющее, должна ли новая панель (True) быть панелью меню ВременныйСтатус Булево значение, определяющее, должно ли (True) окно новой панели закрываться после закрытия окна приложения
5.1. Меню и панели инструментов 213 Комментарий Создает новую панель инструментов (меню) с заданными параметрами и включает ее в состав коллекции. • Вновь созданная панель первоначально пуста, для по- мещения на нее тех или иных элементов управления не- обходимо предпринять соответствующие действия. • Если параметру ВременныйСтатус будет задано значе- ние False, то окно вновь созданной панели останется на рабочей поверхности после закрытия окна приложения. • Попытка создать еще одну панель с тем же именем вы- зовет ошибку периода выполнения. • Вновь созданная панель инструментов (меню) невиди- ма. Для отображения ее на экране требуется предпри- нять соответствующие действия. Пример Dim MyCmdBar As CommandBar 'Создать новую панель инструментов Set MyCmdBar = CommandBars.Add("Моя Панель", msoBarFlDating) 5.1.2. Панель инструментов (меню) — объект CommandBar Свойства Возвращает коллекцию элементов управления, размещен- ных на данной панели (объекты CommandBarControl).
214 5.1. Меню и панели инструментов Пример Dim MyCmdBar As CommandBar Dim MyBtn As CommandBarControl 'Создать новую панель инструментов Set MyCmdBar = CommandBars.Add("Моя Панель", msoBarFloating) 'Создать командную кнопку, 'как объект в коллекции Controls Set MyBtn = MyCmdBar.Controls.Add (msoControlButton) MyCmdBar.Visible = True Visible Определяет видимость (True) или невидимость (False) объ- екта. Пример Dim MyCmdBar As CommandBar 'Создать новую панель инструментов и сделать ее видимой Set MyCmdBar = CommandBars.Add("Моя Панель", msoBarFloating) MyCmdBar.Visible = True Методы В&1е(е[(ВременныйСтатус) ] Комментарий Удаляет объект и исключает его из состава коллекции.
5.1. Меню и панели инструментов 215 Параметр Назначение ВременныйСтатус Булево значение, определяющее, должно ли (False) удаление объекта сохранить силу по- сле нового запуска приложения Пример Dim MyCmdBar As CommandBar 'Создать новую панель инструментов 'и сделать ее видимой Set MyCmdBar = CommandBars.Add("Моя Панель", msoBarFloating) MyCmdBar.Visible = True 'Удалить панель инструментов MyCmdBar.Delete 5.1.3. Элемент управления ConimandBarControl Обзор. Все элементы управления, предназначенные для помеще- ния на панель инструментов, основываются на объекте типа CommandBarControl. Все свойства и методы этого объекта автоматически наследуются элементами управления, для которых он служит основой. Свойства Co'.'ct Число объектов в составе коллекции CommandBarControls.
(gOlPfeWliW 216 5.1. Меню и панели инструментов Пример 'Сообщить число кнопок на панели инструментов MsgBox CommandBars("Standard").Controls.Count On Action Имя макроса (процедуры), подлежащего выполнению при щелчке на данном элементе управления. Пример 'Создать кнопку на панели инструментов и назна- чить ей процедуру Set MyBtn = MyCmdBar.Controls.Add _ (msoControlButton) MyBtn.OnAction = "MakeDiag" JoottipText Текст всплывающей подсказки, связанной с элементом. Пример 'Создать кнопку на панели инструментов 'и назначить ей текст Set MyBtn = MyCmdBar.Controls _ .Add(msoControlButton) MyBtn.TooltipText = "Создание диаграммы" Enabled V Булево значение, разрешающее (True) или запрещающее (False) объекту реагировать на действия пользователя
5.1. Меню и панели инструментов 217 Пример 'Создать кнопку на панели инструментов 'и "отключить" ее Set MyBtn = MyCmdBar.Controls.Add _ (msoControlButton) MyBtn.Enabled = False Методы A(!d(Tnn[, ID[, n&paMarpf, Позиция [, Яр^менныйСт^тус]]]]) Комментарий Создает новый объект типа CommandBarControl в составе коллекции CommandBarControls. Параметр Назначение Тип Константа, определяющая тип создаваемого эле- мента управления ID Идентификатор объекта Параметр Параметр для передачи процедуре (макросу), связанной с объектом CommandBarControl Позиция Позиция объекта в коллекции Временный- Статус Булево значение, определяющее, должен ли (True) объект CommandBarControl быть удален после закрытия окна приложения Пример Dim MyCmdBar As CommandBar Dim MyBtn As CommandBarControl
218 5.1. Меню и панели инструментов 'Создать новую панель инструментов Set MyCmdBar = CommandBars.Add("Моя панель", msoBarFloating) MyCmdBar.Visible = True 'Создать кнопку Set MyBtn = MyCmdBar.Controls.Add _ (msoControlButton) MyBtn.FacelD = 17 Exeoute Комментарий Выполняет процедуру (макрос), связанную с кнопкой. Пример MyBtn.Execute (Вр&м&нныйСтхтус) ] Параметр Назначение ВременныйСтатус Булево значение, определяющее, должно ли (False) удаление объекта сохранить силу пос- ле нового запуска приложения , Комментарий Удаляет объект и исключает его из состава коллекции.
5.1. Меню и панели инструментов 219 Пример 'Создать кнопку и удалить ее Set MyBtn = MyCmdBar.Controls -Add(msoControlButton) MyBtn.Delete False 5.1.4. CommandBarButton — кнопка с рисунком (значок) Элемент управления типа CommandBarButton представляет собой командную кнопку, на поверхность которой можно по- местить точечный рисунок или надпись. Объект CommandBar- Button обладает всеми методами и свойствами своего «базо- вого» объекта — CommandBarControl (см. 5.1.3). Свойства style Определяет стиль кнопки. • На поверхности кнопки могут быть размещены рисунок, надпись или и то, и другое. • Свойства Caption и FacelD можно использовать только в соответствии с выбранным стилем. Пример 'Создать кнопку с надписью Set MyBtnl = MyCmdBar.Controls.Add (msoControlButton) MyBtnl.Style = msoButtonCaption MyBtnl.Caption = "Пуск"
220 5.1. Меню и панели инструментов 'Создать кнопку с точечным рисунком Set MyBtn2 = _ MyCmdBar.Controls.Add(msoControlButton) MyBtn2.Style = msoButtonlcon MyBtn2.FacelD = 17 Caption Определяет текст надписи на кнопке. • Свойство Style должно при этом содержать константу msoButtonCaption. Пример 'Создать кнопку с надписью Set MyBtn = _ MyCmdBar.Controls.Add(msoControlButton) MyBtn.Style = msoButtonCaption MyBtn.Caption = "Пуск" Face/O Должно содержать порядковый номер точечного рисунка (0, если речь идет о пользовательском рисунке) • Свойство Style должно при этом содержать константу msoButtonlcon. Пример 'Создать кнопку с точечным рисунком Set MyBtn = _ MyCmdBar.Controls.Add(msoControlButton) MyBtn.Style = msoButtonCaption MyBtn.FacelD - 17
5.1. Меню и панели инструментов 221 Отражает состояние кнопки (нажата/не нажата) и позволя- ет им управлять. Пример 'Создать кнопку с рисунком 'и "нажать" ее программно Set MyBtn = _ MyCmdBar.Controls.Add(msoControlButton) MyBtn.FacelD = 17 MyBtn.Style = msoButtonCaption MyBtn.State = msoButtonDown 5.1.5. CommandBarComboBox — комбинированное поле Объект типа CommandBarComboBox представляет собой уни- версальное поле ввода, сочетающее в себе возможности текс- тового поля и поля списка. Метод Add коллекции CommandBarControls позволяет создать несколько разновидностей комбинированного поля — наиболее часто используют список (msoControlDropDown) и поле ввода со списком (msoControlCom- ЬоВох). Объекты типа CommandBarComboBox обладают всеми свой- ствами и методами CommandBarControl. Свойства OrofiDownLinet; И Содержит число видимых элементов списка при его раз- вертывании.
222 5.1. Меню и панели инструментов Пример 'Создать комбинированное поле Set MyCombo = _ MyCmdBar.Controls.Add(msoControlComboBox) MyCombo.DropDownLines = 3 DropDawnWldth Определяет ширину окна списка. Пример 'Создать комбинированное поле Set MyCombo = _ MyCmdBar.Controls.Add(msoControlComboBox) MyCombo.DropDownWidth = 200 Инде tec) Возвращает элемент списка с порядковым номером Ин- декс. Пример 'Получить 2-й элемент списка MyMessage = MyCombo.List(2) UstCQunt Число элементов списка.
5.1. Меню и панели инструментов 223 Пример Dim MyMessage As String For I = 1 To MyCombo.ListCount MyMessage = MyMessage & MyCombo.List(I) & vbCr Next MsgBox MyMessage Listlnsiex Возвращает и позволяет задать номер выделенного эле- мента списка. Пример 'Выбрать сообщение MyCombo.ListIndex = 1 'Прочитать в строку MyMessage = MyCombo.List(MyCombo.Listindex) Text Содержит текст, отображающийся в поле ввода. Пример MsgBox MyCombo.Text
224 5.1. Меню и панели инструментов Методы Параметр Назначение Строка Строковое значение, добавляемое в список Индекс Номер элемента списка Комментарий Включает в список новый элемент. Пример 'Создать комбинированное поле 'и заполнить список Set MyCombo = MyCmdBar.Controls.Add _ (msoControlComboBox) MyCombo.Additem "Уважаемые господа, " MyCombo.Additem "Дорогие друзья, " MyCombo.Additem "Дамы и господа, " Параметр Назначение Индекс Номер элемента списка Комментарий Исключает из списка элемент с указанным номером
5.1. Меню и панели инструментов 225 Пример 'Удалить второй элемент MyCombo.RemoveItern 2 5.1.6. Меню и подменю — CommandBarPopup Объекты типа CommandBarPopup являются основным «строи- тельным материалом» для создания меню и подменю на пане- лях инструментов. Каждый такой объект представляет собой элемент меню — пункт меню или заголовок подменю. Кроме общих для всех Command- BarControl-объектов свойств (см. 5.1.3) следует остановиться на двух свойствах объекта CommandBarPopup. Свойства Caption Текст надписи на элементе меню. Пример 'Создать меню "Файл" Set MyMenu = MyCmdBar.Controls. _ Add(msoControlPopup) MyMenu.Caption = "Файл" Controls Возвращает коллекцию объектов CommandBarControl, со- держащую в себе элементы меню, связанные с данным. X I855
(gOlPOMW 226 5.2. Экранная форма Пример 'Создать меню Set MyMenu = MyCmdBar.Controls. Add(msoControlPopup) With MyMenu.Controls .Add msoControlButton, 3 .Add msoControlButton, 4 End With 5.2. Экранная форма В среде таких компонентов Office, как Excel, Word и PowerPo- int, наряду с панелями инструментов можно создавать также экранные формы (мы будем называть их просто формами). Обзор. Форма Форма входит в состав проекта как полноправный его эле- мент (наряду с модулями, листами, документами и т. д.). Для создания и модификации форм используют редактор форм, полностью интегрированный в среду разработки со- ответствующего компонента Office. Форма является объектом и обладает собственными свой- ствами, методами и событиями. На форму можно поместить как стандартные управляющие элементы, так и дополнительные элементы, созданные на основе технологии ActiveX (ActiveX-элементы). Пример 'Доступ к элементу на форме в коде Dim Name As String DlgAddress.InName = "Иван" 'Заготовка имени 'в поле ввода
5.2. Экранная форма 227 DlgAddress.Show 'Вывод формы на экран Name = DlgAddress.InName 'Получить введенное имя Процедура. Включение новой формы в состав проекта 1. Insert/UserForm или щелкнуть на кнопке Insert UserForm. Процедура. Редактирование экранной формы 1. Открыть панель Project. 2. Выполнить двойной щелчок на имени формы, которую тре- буется отредактировать. Процедура. Добавление элементов управления - на форму 1. Найти в окне Toolbox значок необходимого элемента управ- ления и поместить на него указатель мыши. 2. Нажать (и удерживать) левую кнопку мыши. 3. Переместить указатель мыши на форму. 4. Отпустить левую кнопку мыши. Или: 1. Выполнить одиночный щелчок левой кнопкой мыши на знач- ке элемента в окне Toolbox. 2. Поместить указатель мыши на форму. 3. Выполнить одиночный щелчок.
228 5.2. Экранная форма Процедура. Создание процедуры-обработчика события для элемента управления 1. Выполнить двойной щелчок левой кнопкой мыши на эле- менте, помещенном на форму. Или: 1. Одиночным щелчком или клавишей [Tab] поместить фокус на требуемый элемент на форме. 2. View/Code или клавиша [Е7]. Процедура. Добавление дополнительных элементов управления на форму 1. Tools/Additional Controls. 2. Отметить необходимый элемент (или группу элементов). Закрыть окно кнопкой ОК. 3. Перетащить элемент с панели Toolbox на форму. 5.2.1. Экранная форма как объект Обзор. Объектная модель формы
®Ы1Р(б№®[^ 5.2. Экранная форма 229 Объект Назначение UserForm Экранная форма с размещенными на ней элемента - ми управления Controls Коллекция, включающая в себя все элементы управления данной формы Font Стандартный шрифт (шрифт по умолчанию) для данной формы MultiPage Набор страниц. Объект-контейнер, способный со- держать в себе объект-коллекцию типа Pages Pages Коллекция объектов Раде Page Страница в наборе страниц MultiPage TabStrip Объект-контейнер, способный содержать в себе объект-коллекцию типа Tabs Tabs Набор вкладок — коллекция объектов Tab Tab Вкладка, в отличие от страницы Раде, не является контейнером DataObject Предназначен для промежуточного хранения тек- стовых данных для операций буфера обмена
230 5.2. Экранная форма Обзор. Объектная модель коллекции Controls
5.2. Экранная форма 231 Объект Назначение CheckBox Поле флажка (флажок) Combo Box Комбинированное поле (поле со списком) CommandButton Кнопка (командная кнопка) Frame Группа (рамка) Image Рисунок Label Надпись (этикетка) ListBox Список (поле списка) Multi Page Набор страниц OptionButton Переключатель (позиция переключателя) ScrollBar Полоса прокрутки SpinButton Кнопка-счетчик TabStrip Набор вкладок Text Box Поле (текстовое поле ввода) ToggleButton Выключатель (кнопка-выключатель)
232 5.2. Экранная форма 5.2.2. Общие события Многие события поддерживаются как самой формой, так и большинством элементов управления. Событие Описание BeforeDragOver Генерируется в процессе перетаскивания (drag&drop) BeforeDropOr- Paste Происходит перед выполнением операции вставки Change Содержимое элемента управления изменилось Click На объекте произведен щелчок мышью DbICIick Аналогично — двойной щелчок KeyDown Нажата клавиша (фокус клавиатуры находится на объекте) KeyPress Нажата и отпущена одна из ASCII-клавиш KeyUp Отпущена клавиша MouseDown Нажата одна из кнопок мыши (указатель мыши находится над объектом) MouseMove Генерируется в процессе перемещения мыши MouseUp Отпущена ранее нажатая кнопка мыши 5.2.3. Общие свойства Форма и многие элементы управления располагают также ря- дом одноименных свойств, имеющих сходное назначение. ВэскСч1&г Определяет цвет фона (заднего плана) объекта.
5.2. Экранная форма 233 Пример 'Задать цвет фона формы: светло-голубой DlgAddress.BackColor = RGB(140, 170, 200) DlgAddress.Show BardurCalor Определяет цвет бордюра (рамки) или линий объекта. Пример 'Задать цвет бордюра формы: светло-голубой DlgAddress.BorderColor = RGB(140, 170, 200) DlgAddress.Borderstyle = fmBorderStyleSingle DlgAddress.Show Saptfon Текст титульной строки или надписи на объекте. Пример 'Титульная строка формы DlgAddress.Caption = "Адреса" DlgAddress.Show Разрешает (True) или запрещает (False) объекту реагиро- вать на действия пользователя.
(gOlPfeWliW 234 5.2. Экранная форма Пример 'Отключить кнопку "ОК" DlgAddress.Controls("OkBtn").Enabled = False Fant Содержит в себе объект Font, чьи свойства определяют размер, атрибуты и признаки начертания шрифта. Пример 'Задать параметры шрифта для кнопки "ОК" DlgAddress-Controls("OkBtn").Font.Name = _ "Arial" DlgAddress.Controls("OkBtn").Font.Size = 14 DlgAddress.Controls("OkBtn").Font.Bold = True ForuCalor Определяет цвет переднего плана объекта. Пример 'Задать цвет переднего плана формы: черный DlgAddress.BackColor = RGB(0, 0, 0) DlgAddress.Show Max Задает максимальное значение свойства Value (для эле- ментов управления ScrollBar и SpinButton).
5.2. Экранная форма 235 Пример DlgNumber.Controls("hsbNumber").Max = 100 Mln Задает минимальное значение свойства Value (для эле- ментов управления ScrollBar и Spin Button). Пример DlgNumber.Controls("hsbNumber").Min = 1 Value Эго свойство возвращает (или задает) значение, содержащее- ся в объекте. Тип возвращаемого/задаваемого значения зависит от типа объекта. ♦ Свойство Value текстового поля возвращает содержа- щийся в поле текст. • Полоса прокрутки или кнопка-счетчик вернет число. • Флажок CheckBox или переключатель OptionButton вер- нут булево значение. Пример Dim Name As String Name - DlgAddress.Controls("DlgName")-Value
236 5.2. Экранная форма Vlsil/le Делает объект видимым (True) или невидимым (False). Пример DlgAddress.EditBoxl.Visible = True 5.2.4. Элемент управления MultiPage Набор страниц MultiPage представляет собой форму (диалог), включающую в себя несколько страниц, причем в каждый мо- мент времени видна только одна из них (типичный пример — диалог Сервис/Параметры). Содержит коллекцию Pages, включающую в себя все стра- ницы диалога (объекты Раде). • Коллекция Pages дает возможность обратиться к любой странице. • Каждая страница Раде является элементом-контейнером и способна содержать в себе элементы управления. Пример 'Добавить страницу и снабдить 'ее всплывающей подсказкой DlgSample. MP.Pages.Add "Адрес", "Address" DlgSample.MP.Pages("Адрес").ControlTipText = "Введите адрес" DlsSample.Show Свойства TabOrientatiun Определяет местоположение ярлычков, служащих для пе- реключения между страницами диалога (сверху, снизу, слева или справа).
5.2. Экранная форма 237 Пример 'Расположить ярлычки справа DlgSample.MP.TabOrientation = fmTabOrientationRight Возвращает и позволяет задать номер активной страницы. • Счет страниц ведется от 0. Пример 'Открыть пятую страницу диалога DlgSample.MP.Value = 4 5.2.5. Объект Раде Каждый объект типа Раде представляет собой одну страницу, содержащуюся в элементе MultiPage (см. 5.2.4). Свойства Picture Определяет фоновый рисунок страницы. Пример DlgSample.MP.Adr.Picture = _ LoadPicture("С:\Windows\Lanma256.bmp")
238 5.2. Экранная форма Pic tureAlignment . Определяет режим выравнивания на странице фонового рисунка. Пример DlgSample.MP.Adr.PictureAlignment = fmPictureAlignmentTopLeft PictureSizeM&de Определяет режим согласования размеров страницы и ри- сунка. Пример DlgSample.MP.Adr.PictureSizeMode = fmPictureSizeModeStretch Picture. Tiling Разрешает «размножение» рисунка по всей поверхности страницы в случае, когда рисунок меньше страницы. Пример DlgSample.MP.Adr.PictureTiling = True TrartsttfonEffect в Определяет разновидность визуального эффекта при пе- реключении между страницами.
5.2. Экранная форма 239 Пример DlgSample.MP.Adr.TransitionEffeet = fmTransitionEffeetPushUp Transiti<jnPe>ri<jcJ Определяет длительность визуального эффекта при пере- ключении между страницами (в миллисекундах, от 1 до 10000). Пример DlgSample.MP.Adr.TransitionPeriod = 250 5.2.6. Элемент управления Tabstrip Элемент TabStrip представляет собой набор вкладок, между которыми пользователь может переключаться точно так же, как и между страницами набора страниц. Отличие набора вкладок состоит в том, что на каждой вкладке присутствуют одни и те же элементы управления (меняются только отобра- жаемые в них данные). Вкладка не является контейнером и помещенные на нее объекты «принадлежат» форме, на кото- рой находится набор вкладок TabStrip. Свойства зЫе И Определяет вид (стиль) набора вкладок. Пример DlgSample.TS.Style = fmTabStyleButtons
240 5.2. Экранная форма TabOrientation Определяет местоположение элементов, служащих для переключения между вкладками (сверху, снизу, слева или справа). Пример 'Расположить элементы справа DlgSample.TS.TabOrientation = fmTabOrientationRight Value Возвращает и позволяет задать номер активной вкладки. • Счет вкладок ведется от 0. Пример 'Открыть пятую вкладку DlgSample.TS.Value = 4 Примечание редактора Элементы управления MultiPage и TabStrip во многом схожи. Различие состоит в том, что каждая страница элемента Multi- Page является контейнером и способна нести самостоятель- ный набор элементов управления, в то время как вкладки эле- мента TabStrip отображают один и тот же «общий» набор. Всплывающая подсказка в окне панели элементов идентифи- цирует их соответственно как MultiPage (Набор страниц) и TabStrip (Набор вкладок). Однако в Справке Office «страницы» диалогов типа MultiPage называются вкладками, что, кстати, соответствует традицион- ному пониманию этого термина.
(gOlPfeWliW 5.2. Экранная форма 241 В рамках данной книги мы будем использовать слово «вклад- ка» применительно к диалогам обоих типов. 5.2.7. Флажок CheckBox Флажок (поле флажка) CheckBox отображает (и позволяет вводить) логические значения. Значение True (Да, Истинно) соответствует установленному флажку, значение False (Нет, Ложно) — сброшенному. В отличие от позиций переключателя флажки могут устанавливаться и сбрасываться вне зависимо- сти друг от друга. Свойства SpecialEffect Определяет вид поля флажка. Пример DlgSample.CheckBoxl.SpecialEffeet = fmSpecialEffeetFlat TripleState Разрешает (True) доступность третьего состояния флажка (соответствует значению Null, включается и выключается щелчком на надписи рядом с флажком), при этом поле флажка изображается потускневшим. Пример DlgSample.CheckBoxl.TripleState = True
242 5.2. Экранная форма Value Возвращает и позволяет задать значение, свидетельству- ющее о состоянии флажка. • 1, True соответствует состоянию «флажок установлен». • 0, False соответствует состоянию «флажок сброшен». • Null соответствует третьему состоянию флажка. Пример Status = DlgSample.CheckBoxl.Value 5.2.8. Комбинированное поле ComboBox Комбинированное поле (его также называют полем со спис- ком) представляет собой сочетание текстового поля и списка. Пользователь может выбрать значение из списка или ввести его с клавиатуры. Свойства Column (Столбец, Строка) Обеспечивает доступ к элементу списка в заданных столб- це и строке. Если задан только номер столбца, то объектом доступа бу- дет весь столбец. Пример DlgSample.ComboBoxl.Additem DlgSample.ComboBoxl.Additem DlgSample.ComboBoxl.ColumnCount = 2 DlgSample.ComboBoxl.Column(0, 0) = "Петер"
5.2. Экранная форма 243 DlgSample.ComboBoxl.Column(1, 0) = "100" DlgSample.ComboBoxl.Column(0, 1) = "Клаус" DlgSample.ComboBoxl.Column(1, 1) = "200" ColumnCount Задает количество столбцов в списке. Пример DlgSample.ComboBoxl.ColumnCount = 2 Drjp3uttonStyle Задает вид значка на кнопке развертывания списка. Пример DlgSample.ComboBoxl.DropButtonStyle = fmDropButtonStyleEllipsis ListCount Возвращает количество элементов списка (только для чте- ния, счет с 1). Пример NumList = DlgSample.ComboBoxl.ListCount
244 5.2. Экранная форма Us ((Строка, Столбец) Обеспечивает доступ к элементу списка в заданных столб- це и строке. Параметры могут быть опущены, в этом случае свойство List позволяет обратиться к списку, как таковому. Пример Dim MyArray(3, 2) As Variant MyArray(0, 0) = "Петер" MyArray(0, 1) = 100 MyArray(0, 2) = "15.10.99" DlgSample.ComboBoxl.ColumnCount = 3 DlgSample.ComboBoxl.List = MyArrayO MsgBox DlgSample.ComboBoxl.List (0, 1) LisdndoK Возвращает и позволяет задать номер выделенного эле- мента списка. Пример 'Выделить первый элемент DlgSample.ComboBoxl.Listindex = 0 MitchFound Возвращает булево значение, отражающее факт совпаде- ния (True) или несовпадения (False) введенного в тексто- вое поле значения с одним из элементов списка.
5.2. Экранная форма 245 Пример If DlgSample.ComboBoxl.MatchFound Then MsgBox "O.K" Sty/e Задает разновидность (стиль) комбинированного поля (поле со списком или список без возможности ввода с клавиатуры). Пример 'Исключить возможность ввода с клавиатуры DlgSample.ComboBoxl.Style = fmStyleDropDownList TextAlign Определяет режим выравнивания в текстовом поле. Пример 'Включить правое выравнивание DlgSample.ComboBoxl.TextAlign = fmTextAlignRight TvxtCalumn Определяет номер столбца, для которого элемент выде- ленной строки будет отображаться в текстовом поле. Пример DlgSample.ComboBoxl.TextColumn = 2
246 5.2. Экранная форма Методы AM Item [Элемент!, Номер]] Параметр Назначение Элемент Добавляемый в список элемент Номер Позиция, куда следует вставить добавляемый элемент Комментарий Служит для включения в список нового элемента (для спис- ков в один столбец) или новой строки (для списков, состо- ящих из нескольких столбцов). Пример DlgSample.ComboBoxl.Additem "Клаус Мюллер" Clear Пример DlgSample.ComboBoxl.Clear Комментарий Удаляет все элементы списка.
5.2. Экранная форма 247 R&moveltemfHoMep) Параметр Назначение Номер Порядковый номер элемента, подлежащего уда- лению Комментарий Служит для удаления элемента списка (или строки для спис- ков из нескольких столбцов). Счет с 0. Пример 'Удалить второй элемент DlgSample.ComboBoxl.Removeitem(1) 5.2.9. Командная кнопка CommandButton Командная кнопка (или просто кнопка) представлена объек- том CommandButton. Ее основная задача — реагировать на щелчок мышью вызовом процедуры, обрабатывающей это со- бытие. Свойства Cancel Переводит кнопку в режим кнопки Отмена (Cancel). • В этом режиме кнопка реагирует на нажатие клавиши [Esc] вне зависимости от того, на каком элементе фор- мы находится фокус клавиатуры. • На форме может присутствовать только одна кнопка От- мена.
248 5.2. Экранная форма Пример DlgSample.CommandButtonl.Cancel = True Picture Определяет точечный рисунок на поверхности кнопки. Ри- сунок не исключает наличия надписи. Пример 'Надпись и рисунок DlgSample.CommandButtonl.Caption = "Отмена" DlgSample.CommandButtonl.Picture = LoadPicture("C:\Windows\MyPic.£>mp") PicturePosition Определяет положение точечного рисунка на кнопке отно- сительно надписи. Пример 'Поместить рисунок слева от текста DlgSample.CommandButtonl.Picture = _ LoadPicture("С:\Windows\MyPic.bmp") DlgSample.CommandButtonl.PicturePosition = fmPicturePositionLeftCenter 5.2.10. Рамка Frame Рамка (группа) Frame является элементом-контейнером, ко- торый визуально выделяет группу элементов управления, а также «изолирует» их от формы, на которую помещена рамка.
5.2. Экранная форма 249 Это бывает необходимым, когда требуется разместить на форме несколько независимых переключателей (групп пози- ций переключателя). Свойства Picture Определяет фоновый рисунок. Пример DlgSample.Framel.Picture = _ LoadPicture("С:\Windows\MyPic.bmp") Pic tureAlignmen l Определяет режим выравнивания фонового рисунка. Пример DlgSample.Framel.PictureAlignment = _ fmPictureAlignmentTopLeft P t .reSizeMode Определяет режим согласования размеров рисунка и рамки. Пример DlgSample.Framel.PictureSizeMode = fmPictureSizeModeStretch
(gOlPfeWliW 250 5.2. Экранная форма PictureTHing Разрешает «размножение» рисунка по всей поверхности рамки в случае, когда рисунок меньше рамки. Пример DlgSample.Framel.PictureTiling = True SpvcialEffect Определяет вид рамки. Пример DlgSample.Framel.SpecialEffeet = fmSpecialEffectRaised 5.2.11. Рисунок Image Точечный рисунок (графический образ) Image служит для отображения на участке рабочей поверхности рисунка, загру- женного из графического файла. Свойства Picture; " Определяет источник рисунка. Пример DlgSample.Imagel.Picture = _ LoadPicture("С:\Windows\MyPic.bmp")
5.2. Экранная форма 251 Pictur&Alignm&nt > Определяет режим выравнивания рисунка в границах эле- мента Image. Пример DlgSample.Imagel.PictureAlignment = _ fmPictureAlignmentCenter PictureSizeMixJe Определяет режим согласования размеров рисунка и эле- мента Image. Пример DlgSample.Imagel.PictureSizeMode = _ fmPictureSizeModeStretch PictureTiling Разрешает «размножение» рисунка по всей поверхности рамки в случае, когда рисунок меньше элемента Image. Пример DlgSample.Imagel.PictureTiling = True CpecialEffect Определяет вид элемента Image.
(gOlPfeWliW 252 5.2. Экранная форма Пример DlgSample.Imagel.SpecialEffeet = fmSpecialEffectRaised 5.2.12. Этикетка Label Этикетка (надпись) Label используется для нанесения надпи- сей (возможно, сопровождаемых рисунками) на рабочую по- верхность формы. Текст надписи определяется содержимым свойства Caption. Picture ; Определяет точечный рисунок на поверхности этикетки. Пример DlgSample.Labell.Picture = _ LoadPicture("С:\Windows\MyPic.bmp") PicturaPa^Hion Определяет положение точечного рисунка на этикетке от- носительно надписи. Пример 'Поместить рисунок слева от текста DlgSample.Labell.PicturePosition = fmPicturePositionLeftCenter
5.2. Экранная форма 253 T&xtAliyn Задает режим выравнивания текста в границах этикетки. Пример DlgSample.Labell.TextAlign = fmTextAlignRight 5.2.13. Поле списка ListBox Поле списка (список) ListBox служит для представления дан- ных в форме развертывающегося списка. Пользователь мо- жет выбрать один или несколько элементов списка, но в отли- чие от комбинированного поля не может при этом ввести зна- чение с клавиатуры. Элементами списка могут быть как стро- ковые значения, так и флажки или позиции переключателя. Свойства Соlumn (Столбец, Строка) Обеспечивает доступ к элементу списка в заданных столб- це и строке. Если задан только номер столбца, то объектом доступа бу- дет весь столбец. Пример DlgSample.ListBoxl.Additem DlgSample.ListBoxl.ColumnCount = 2 DlgSample.ListBoxl.Column(0, 0) = "Петер" DlgSample.ListBoxl.Column(1, 0) = "100"
(gOlPfeWliW 254 5.2. Экранная форма ColumnCount Задает количество столбцов в списке. Пример DlgSample.ListBoxl.ColumnCount = 2 ListCount Возвращает число элементов списка. Пример MyNum = DlgSample.ListBoxl.ListCount Li st (Строка, Столбец) Обеспечивает доступ к элементу списка в заданных столб- це и строке. Параметры могут быть опущены, в этом случае свойство List позволяет обратиться к списку, как таковому. Пример Dim MyArray(3, 2) As Variant MyArray(0, 0) = "Петер" MyArray(0, 1) = 100 MyArray(0, 2) = "15.10.99" DlgSample.ListBoxl.ColumnCount = 3 DlgSample.ListBoxl.List = MyArrayO MsgBox DlgSample.ListBoxl.List (0, 1)
5.2. Экранная форма 255 ListlmJex Возвращает и позволяет задать номер выделенного эле- мента списка. Пример 'Выделить первый элемент DlgSample.ListBoxl.Listindex = О I’UstSfyfe Определяет вид элементов списка, позволяет заменить «простые» строковые элементы на флажки или позиции переключателя (в зависимости от значения свойства Mul- tiSelect). • В случае флажков пользователь может выделить несколь- ко элементов. • В случае позиций переключателя пользователь может вы- брать только один элемент списка. Пример DlgSample.ListBoxl.Liststyle = fmListStyleOption MultiStflect Разрешает или запрещает выделение нескольких элемен- тов списка одновременно. Пример DlgSample.ListBoxl.MultiSelect = fmMultiSelectExtended
256 5.2. Экранная форма TextGolumn Определяет номер столбца, для которого элемент выде- ленной строки будет отображаться в текстовом поле. Пример DlgSample.ListBoxl.TextColumn = 2 Методы А<МНет((Эл&аент[, Номер]]) Параметр Назначение Элемент Добавляемый в список элемент Номер Позиция, куда следует вставить добавляемый элемент Комментарий Служит для включения в список нового элемента (для спис- ков в один столбец) или новой строки (для списков, состо- ящих из нескольких столбцов). Пример DlgSample.ListBoxl.Additem "Клаус Мюллер" Clear i's Комментарий Удаляет все элементы списка.
5.2. Экранная форма 257 Пример DlgSample.ListBoxl.Clear Remuv-a Пот (Наше ft) Параметр Назначение Номер Порядковый номер элемента, подлежащего удалению Комментарий Служит для удаления элемента списка (или строки для списков из нескольких столбцов). Счет с 0. Пример 'Удалить второй элемент DlgSample.ListBoxl.Removeitem 1 5.2.14. Переключатель OptionButton Переключатель (позиция переключателя) OptionButton обес- печивает возможность выбора одного элемента из несколь- ких. Все позиции переключателя, находящиеся в одном кон- тейнере (форме, рамке и др.), действуют, как один переклю- чатель на несколько положений — пользователь может вы- брать только одну из позиций внутри данного контейнера (рамки, например). 9 1855
258 5.2. Экранная форма Свойства Alignment Определяет положение надписи относительно позиции переключателя (справа или слева). Пример DlgSample.OptionButtonl.Alignment = fmAlignmentLeft Croup Name • * Позволяет выделить группу позиций переключателя в от- дельный переключатель, не прибегая к рамке или иному элементу-контейнеру. Для этого достаточно присвоить одинаковые значения свойству GroupName всех требуе- мых элементов. Пример DlgSample.OptionButtonl.GroupName = "Groupl" DlgSample.0ptionButton2.GroupName = "Groupl" Picture i • i. : il , ' Определяет точечный рисунок рядом с позицией переклю- чателя. Рисунок не исключает наличия надписи. Пример DlgSample.OptionButtonl.Picture = _ LoadPicture("С:\Windows\MyPic.bmp")
5.2. Экранная форма 259 PicturePositian Определяет положение точечного рисунка рядом с пози- цией переключателя относительно надписи. Пример 'Поместить рисунок слева от текста DlgSample.OptionButtonl.Pictureposition = fmPicturePositionLeftCenter Value Возвращает и позволяет задать значение, свидетельству- ющее о состоянии позиции переключателя. • 1, True соответствует состоянию «флажок установлен». • 0, False соответствует состоянию «флажок сброшен». • Null соответствует третьему состоянию флажка. Пример Status = DlgSample.OptionButtonl.Value 5.2.15. Полоса прокрутки ScrollBar Полоса прокрутки ScrollBar предназначена для ввода число- вых значений без помощи клавиатуры (в зависимости от по- ложения ползунка меняется значение свойства Value). Про- граммист может задать диапазон вводимых значений (свой- ства Min и Мах), а также шаг изменения при перемещении ползунка по полосе. Максимальный диапазон вводимых зна- чений соответствует диапазону целочисленного типа Integer.
(gOlPfeWliW 260 5.2. Экранная форма Свойства LargeChange Определяет шаг изменения содержимого свойства Value при щелчках непосредственно на полосе прокрутки. Пример DlgSample.ScrollBarl.LargeChange = 10 ProportktnalThumti Определяет, должен ли размер ползунка быть пропорцио- нальным удельному размеру прокручиваемой области. Пример DlgSample.ScrollBarl.ProportionalThumb = True SmallChanga Определяет шаг изменения содержимого свойства Value при щелчках на кнопках со стрелками в обоих концах поло- сы прокрутки. Пример DlgSample.ScrollBarl.Smallchange = 1
5.2. Экранная форма 261 5.2.16. Кнопка-счетчик SpinButton Подобно полосе прокрутки кнопка-счетчик SpinButton пред- назначена для ввода числовых значений без помощи клавиа- туры. Значение свойства Value (ограниченное значениями свойств Min и Мах) меняется под действием щелчков мыши. Максимальный диапазон вводимых значений соответствует диапазону целочисленного типа Integer. SmjIlCtinnge Определяет шаг изменения содержимого свойства Value при щелчках на кнопке-счетчике. Пример DlgSample.SpinButtonl.SmallChange = 1 5.2.17. Текстовое поле TextBox Текстовое поле (его называют также просто полем) TextBox предназначено для ввода и отображения строковых значений. Свойства AutaTab Разрешает (True) или запрещает (False по умолчанию) ав- томатический переход фокуса клавиатуры на следующий элемент управления в случае, когда пользователь ввел максимально разрешенное число символов. Пример DlgSample.TextBoxl.AutoTab = True
262 5.2. Экранная форма CurLina Возвращает номер строки, где находится текстовый кур- сор (счет с 0). Пример StrNum = DlgSample.TextBoxl.CurLine £ > i г rFieidBfth^vioi Определяет поведение выделенной области при получе- нии текстовым полем фокуса клавиатуры. • При этом выделенным может оказаться весь текст или только часть текста, выделенная до того, как поле поте- ряло фокус. Пример 'Выделить весь текст при входе в поле DlgSample.TextBoxl.EnterFieldBehavior = fmEnterFieldBehaviorSelectAll Определяет поведение текстового поля при нажатии кла- виши [Enter], • При этом может быть вставлена новая строка (True) или же фокус клавиатуры может быть передан следующему элементу (False). Пример 'При нажатии [Enter] вставить строку DlgSample.TextBoxl.EnterKeyBehavior = True
5.2. Экранная форма 263 UneCount Возвращает число строк в тексте. Пример StrNum = DlgSample.TextBoxl.LineCount MaxLvngth Ограничивает количество символов, которое пользователь сможет ввести в поле. Пример 'В поле можно ввести не более 50 символов DlgSample.TextBoxl.MaxLength = 50 MultiLina Разрешает (True) или запрещает (False) многострочный ре- жим текстового поля. Пример 'В поле можно ввести только одну строку DlgSample.TextBoxl.MultiLine = False PasswordChar В случае, когда текстовое поле используется для ввода па- роля, это свойство должно содержать символ, который бу- дет отображаться в поле вместо символов, вводимых по- льзователем.
264 5.2. Экранная форма Пример DlgSample.TextBoxl.PasswordChar = T^xtAHgn Определяет режим выравнивания текста в поле. Пример DlgSample.TextBoxl.TextAlign = fmTextAlignRight Методы Copy Комментарий Копирует выделенную область в буфер обмена Windows. Пример DlgSample.TextBoxl.Copy Cut Комментарий Переносит выделенную область в буфер обмена Windows (при этом содержимое выделенной области в текстовом поле удаляется).
5.2. Экранная форма 265 Пример DlgSample.TextBoxl.Cut Paste Комментарий Вставляет содержимое буфера обмена Windows в тексто- вое поле. Пример DlgSample.TextBoxl.Paste 5.2.18. Кнопка-выключатель ToggleButton Кнопка-выключатель (ее называют также просто выключате- лем) ToggleButton представляет собой кнопку, которая после щелчка на ней остается «нажатой» до следующего щелчка. Состояние кнопки отражается в содержимом ее свойства Va- lue (True или False). Свойства Picture Определяет точечный рисунок на поверхности кнопки. Ри- сунок не исключает наличия надписи. Пример 'Надпись и рисунок DlgSample.ToggleButtonl.Caption = "Нажми меня!"
266 5.2. Экранная форма DlgSample.ToggleButtonl.Picture = _ LoadPicture("C:\Windows\MyPic.bmp") PicturePositian Определяет положение точечного рисунка на кнопке отно- сительно надписи. Пример 'Поместить рисунок слева от текста DlgSample.ToggleButtonl.Picture = LoadPicture("С:\Windows\MyPic7bmp") DlgSample.CommandButtonl.PicturePosition = fmPicturePositionLeftCenter
Объект Word Иерархическая структура Word как объекта достаточно сложна. Полное ее описание потребовало бы отдельной книги, да и вряд ли в таком описании есть необходимость. Мы рассмот- рим лишь наиболее важные с практической точки зрения эле- менты объектной модели Word. VBA-процедуры «живут» в документах Word и способны мани- пулировать параграфами (абзацами), предложениями и сло- вами, обрабатывать таблицы и делать многое другое. Чтобы воспользоваться многообразными возможностями VBA в отношении документов Word, необходимо уметь ориентиро- ваться в объектной модели Word. Обзор. Структура объекта Word
268 6.1. Обзор объектной модели Word 6.1. Обзор объектной модели Word 6.1.1. Приложение Application Application —j Addins (Addin) —I AnswerWi*ard —j KeyBinding s (KeyBinding) —I Languages(Language) — j Assistant j — j AutoCaptions (AutoCaption) j — | AutoCorrect —J Browser Dictionaries (Dictionary) —1 l-an9ua9eSctt*n9s —| ListGalleries (ListGaliery)~ —| CaptionLabels (CaptionLabel) j — [ COMAddlns (COMAddln) — | CommandBars (CommandBar)j LI CommandBarControls (CommandBarControl) — |~Pe^u>tWeb0ptions ~ | — | Dialogs (Dialog) j — j Dictionaries (Dictionary) — | Documents (Document) — | EmailOptions ~ | ।| ListTemplates (ListTemplate) ~j I—| ListLevels (ListLevel) ~ —| MailingLabel I—| CustomLabels (CustomLabel) j — FileConverters (FileConverter)j MailMessage NewDocument Options RecentFiles (RecentFile) Selection Spellingsuggestions (SpellingSugestion) Synonyminfo System FileSearch FontNames —| Tasks(Task) — HangulHanjaConversionDictionaries (Dictionary) —| TaskPanes (TaskPane) —j Templates (Template) —j KeysBoundTo (KeyBinding) —| Windows (Window)
6.1. Обзор объектной модели Word 269 Объект Назначение Application Приложение, корневой объект иерархии Addin Надстройка Addin Answer - Wizard Мастер AnswerWizard Assistant Помощник Office AutoCaption Автотекст (элемент списка автотекста) AutoCorrect Автозамена (элемент списка автозамены) Browser Кнопка Выбор объекта перехода на полосе про- крутки справа Caption Label Надпись-название (см. диалог Вставка / Назва- ние) COMAddln COM-надстройка в приложении CommandBar Панель инструментов или панель меню DefaultWeb- Options Глобальные атрибуты открытия/сохранения Web-страницы Dialog Диалог Word Dictionary Словарь (грамматики, правописания, тезаурус и др.) Document Документ Word Emailoptions Глобальные атрибуты создания/изменения сооб- щения электронной почты FileConverter Конвертор файлов FileSearch Диалог Открытие документа FontNames Список всех установленных в системе шрифтов HangulHanja- Conversion- Dictionary Словарь преобразования хангыль-ханджа
(gOlPfeWliW 270 6.1. Обзор объектной модели Word Объект Назначение KeyBinding Определенные пользователем сочетания клавиш KeysBoundTo Коллекция объектов типа KeyBinding Language Определяет правила форматирования и проверки текста в соответствии с языком Language- Settings Установка языка в приложении ListGallery Шаблоны представления списков (доступны в диалоге Формат / Список) MailingLabel Наклейка (см. диалог Сервис / Конверты и на- клейки) MailMessage Сообщение электронной почты, сформированное Word NewDocu- ment Документ на панели Создание документа в об- ласти задач Word Options Набор параметров документа или приложения RecentFile Файл из списка недавно открытых файлов Selection Выделенная область SpellingSug- gestion Представляет подсказку по правописанию для ошибочных слов Synonyminfo Подсказка о синонимах System Содержит сведения о системе Task Выполняющаяся программа TaskPane Панель в области задач Template Шаблон Window Окно приложения или документа
6.1. Обзор объектной модели Word 271 AutoCorrect AutoCorrect AutoCorrectEntries (AutoCorrectEntry) — FirstLetterExceptions (FirstLetterException) —j TwolnitialCapsExceptions (TwolnitialCapsException) Объект Назначение AutoCorrect Автозамена (элемент списка автозамены) I AutoCorrectEntries | (AutoCorrectEntry) Элемент автозамены FirstLetterExceptions (FirstLetterException) Аббревиатура, исключенная из сферы действия автозамены TwolnitialCapsExcep- tions (TwolnitialCap- sException) Слово, начинающееся с двух заглавных букв, исключенное из сферы действия ав - тозамены Languages Application Languages (Language) Dictionaries (Dictionary) Объект Назначение Language Определяет правила форматирования и проверки текста в соответствии с языком Dictionary Словарь
272 6.1. Обзор объектной модели Word ListGalleries ListGalleries (ListGallery) ListTemplates (ListTemplate) — ListLevels (ListLevel) Объект Назначение ListGallery Шаблоны представления списков (доступны в диалоге формат / Список) ListTemplate Один шаблон из объекта ListGallery ListLevel Уровень вложенности в наборе шаблонов пред- ставления списков Templates
6.1. Обзор объектной модели Word 273 Объект Назначение Template Шаблон документа AutoTextEntry Элемент списка автотекста (см. вкладку Ав- тотекст диалога Сервис / Автозамена) Document Документ Documentproperty Содержит сведения о документе (заголовок, автор и т. д.) ListTemplate Один из шаблонов представления списков MailingLabel Application MailingLabel CustomLabels (CustomLabel) Объект Назначение MailingLabel Наклейка (см. диалог Сервис / Конверты и на- клейки) CustomLabel Наклейка, определяемая пользователем
274 6.1. Обзор объектной модели Word Windows Windows (Window) Document — Panes (Pane) Selection View Объект Назначение Window Окно документа Pane Разделительная панель Docu- ment Документ Selection Выделенная в окне область View Обеспечивает доступ к параметрам просмотра
6.1. Обзор объектной модели Word 275 6.1.2. Документ Document Documents (Document) Illi ±_LJ LJ I I LJ_J_ Bookmarks (Bookmark) LJ LJ LJ_U L Paragraphs (Paragraph) Characters (Range) ProofreadingErrors (Range) CommandBars (CommandBar; Range Comments (Comment) Readability Statistics (ReadabilityStatistic) . .. . Documentproperties (Documentproperty) Revisions (Revision) Email RoutingSlip Endnotes (Endnote) Scripts (Script) Envelope Sections (Section) Fields (Field) Sentences (Range) Footnotes (Footnote) Shapes(Shape) FormFietds (FormField) Story Ranges (Range) Frames (Frame) Styles (Style) FrameSet Subdocuments (Subdocument) HTMLProject Tables (Table) - TablesOf Authorities Hyperlinks (Hyperlink) Hyperlinks (Hyperlink) - TablesOfAuthor ItiesCategories Indexes (Index) TableOf Contents InlineShapes (InlineShape) TableOfFIgures LetterContent Template Li st Paragraphs (Paragraph) Variables (Variable) Lists (List) Versions (Version) ListTemplates (ListTemplate) WebOptions MailMerge Windows (Window) PageSetup Words (Range)
276 6.1. Обзор объектной модели Word Объект Назначение Document Собственно документ Bookmark Закладка Characters Коллекция Range-объектов CommandBar Панель инструментов или меню Comment Примечание Document- Property Сведения о документе Email Сообщение электронной почты Endnote Примечание в конце документа (концевая сноска) Envelope Конверт Field Поле ввода, вставленное в текст Footnote Примечание в конце страницы (сноска) Form Field Элемент управления, вставленный в текст Frame Рамка (группа) FrameSet Страница рамок или рамка на странице рамок Hyperlink Гиперссылка HTMLProject Проект HTML Index Указатель (см. диалог Вставка / Оглавление и указатели) InlineShape Рисунок, OLE-объект или ActiveX-элемент, вставленный в текст на правах символа LetterContent Элемент письма ListParagraphs Коллекция объектов типа Paragraph List Формат списка
(gOlPfeWliW 6.1. Обзор объектной модели Word 277 Объект Назначение ListTemplate Шаблон списка из объекта ListGallery MailMerge Обеспечивает доступ к функциям, связанным с подготовкой серии писем PageSetup Обеспечивает доступ к параметрам страницы Paragraph Параграф (абзац) текста Proofreading- Errors Коллекция Range-объектов, указывающих на грамматические и орфографические ошибки в тексте документа Range Непрерывный фрагмент текста Readability- Statistic Содержит статистические сведения о тексте (статистика удобочитаемости) Revision Исправление в тексте документа RoutingSlip Маршрут для отправки сообщения электронной почты Section Раздел текста Sentences Коллекция Range-объектов, ссылающаяся на все предложения текста (абзаца, секции) Script HTML-скрипт Shape Фигура StoryRanges Коллекция Range-объектов, ссылающаяся на структурные компоненты текста Style Стиль (встроенный или определенный пользо- вателем) Subdocument Вложенный документ Table Таблица TableOf- Authorities Таблица ссылок (см. вкладку Таблица ссылок диалога Вставка / Ссылка / Оглавление и указатели)
278 6.1. Обзор объектной модели Word Объект Назначение TableOf- Authorities- Categories Разновидности ссылок TableOf- Contents Оглавление (см. вкладку Оглавление диалога Вставка / Оглавление и указатели) TableOfFigures Список иллюстраций (см. вкладку Список ил- люстраций диалога Вставка / Оглавление и указатели) Template Шаблон Variable Переменная документа Version Версия документа WebOptions Web-параметры открытия/сохранения докумен- тов Window Окно документа Words Коллекция Range-объектов, ссылающихся на все слова документа FormFields
6.1. Обзор объектной модели Word 279 Объект Назначение | FormField Элемент управления, помещенный на документ CheckBox Поле флажка DropDown Развертывающийся список Range Непрерывный фрагмент текста Textinput Текстовое поле ввода Lists Lists (List) ListParagraphs (Paragraph) ---1 Range Объект Назначение List Формат списка ListParagraph Коллекция объектов типа Paragraph Paragraph Абзац (параграф) Range Непрерывный фрагмент текста ListTemplates
280 6.1. Обзор объектной модели Word Объект Назначение ListTem plate Шаблон представления списка ListLevel Уровень представления списка Font Шрифт InlineShape Объект в тексте MailMerge Documents (Document) MailMerge MailMergeDataSource MailMergeDataFields (MailMergeDataField) Объект Назначение MailMerge Обеспечивает доступ к функциям, свя- занным с подготовкой серии писем Mail MergeDataSource Источник данных в операциях, связанных с подготовкой серии писем MailMergeDataField Поле в источнике данных PageSetup PageSetup LineNumbering TextColumns (Textcolumn)
6.1. Обзор объектной модели Word 281 Объект Назначение PageSetup Обеспечивает доступ к параметрам страницы LineNumbering Номера строк текста TextColumn Колонка Styles | Styles (Style) —| Frame" —| ParagraphForma? Объект Назначение Style Стиль, встроенный или определенный пользователем Border Стиль границ объекта (см. диалог Формат / Гра- ницы и заливка) Font Обеспечивает доступ к параметрам шрифта Frame Рамка ListTemplate Шаблон представления списков Paragraph- Format Форматирование параграфа (абзаца) Shading Обеспечивает доступ к параметрам штриховки полей
282 6.1. Обзор объектной модели Word 6.1.3. Текст Selection Selection — AutoTextEntry HTMLDivisions Bookmarks (Bookmark) Hyperlinks (Hyperlink) Borders (Border) InlineShapes (InlineShape) - Cells (Cell) PageSetup Characters (Range) ParagraphFormat Columns (Column) Paragraphs (Paragraph) Comments (Comment) — Revision Document Range -J End notes (End note) Rows (Row) Fields (Field) Sections (Section) Find Sentences (Range) Font Shading Footnotes (Footnote) ShapeRange (Shape) FormFields (FormField) SmartTags Frames (Frame) — — . Tables (Table) HeaderFooter Words (Range)
6.1. Обзор объектной модели Word 283 Объект Назначение AutoTextEntry Элемент автотекста Selection Выделенная область Bookmark Закладка Border Стиль границ объекта (см. диалог Формат / Границы и заливка) Cell Ячейка таблицы Characters Коллекция Range-объектов, ссылающихся на все символы текста Column Столбец таблицы Comment Примечание Document Собственно документ Endnote Примечание в конце документа (концевая сно- ска) Field Поле ввода, вставленное в текст Find Обеспечивает доступ к функциям поиска Font Обеспечивает доступ к параметрам шрифта Footnote Примечание в конце страницы (сноска) FormField Элемент управления, вставленный в текст Frame Рамка (группа) HeaderFooter Колонтитул (верхний или нижний) HTMLDivision Раздел HTML в документе Hyperlink Гиперссылка InlineShape Рисунок, OLE-объект или ActiveX-элемент, вставленный в текст на правах символа PageSetup Обеспечивает доступ к параметрам страницы
284 6.1. Обзор объектной модели Word Объект Назначение Paragraph - Format Форматирование параграфа (абзаца) Paragraph Абзац (параграф) Revision Исправление в тексте документа Range Непрерывный фрагмент текста Row Строка таблицы Section Раздел текста Sentences Коллекция Range-объектов, ссылающаяся на все предложения текста (абзаца, секции) Shading Обеспечивает доступ к параметрам штриховки полей ShapeRange Коллекция объектов типа Shape SmartTag Смарт-таг 1 Table Таблица Words Коллекция Range-объектов, ссылающихся на все слова документа
6.1. Обзор объектной модели Word 285 Range
286 6.1. Обзор объектной модели Word Объект Назначение Range Непрерывный фрагмент текста Bookmark Закладка Border Стиль границ объекта (см. диалог Формат / Границы и заливка) Cell Ячейка таблицы Characters Коллекция Range-объектов, ссылающихся на все символы текста Column Столбец таблицы Comment Примечание Endnote Примечание в конце документа (концевая сноска) Field Поле ввода, вставленное в текст Find Обеспечивает доступ к функциям поиска Font Обеспечивает доступ к параметрам шрифта Footnote Примечание в конце страницы (сноска) FormField Элемент управления, вставленный в текст Frame Рамка Hyperlink Гиперссылка InlineShape Рисунок, OLE-объект или ActiveX-элемент, вставленный в текст на правах символа List Format Параметры форматирования списков ListParagraphs Коллекция объектов типа Paragraph PageSetup Обеспечивает доступ к параметрам страницы Paragraph- Format Форматирование параграфа (абзаца) Paragraph Абзац (параграф)
6.1. Обзор объектной модели Word 287 Объект Назначение Readability- Statistic Содержит статистические сведения о тексте (статистика удобочитаемости) Revision Исправление в тексте документа Row Строка таблицы Script HTML-скрипт Section Раздел текста Sentences Коллекция Range-объектов, ссылающаяся на все предложения текста (абзаца, секции) Shading Обеспечивает доступ к параметрам штриховки ShapeRange Коллекция объектов типа Shape Shape Фигура Proofreading- Errors Коллекция Range-объектов, указывающих на । грамматические и орфографические ошибки в тексте документа Subdocument Вложенный документ Synonym Info Подсказка о синонимах Table Таблица TextRetrieval- Mode Объект, определяющий режимы доступа к тек- сту со стороны Range-объектов Words Коллекция Range-объектов, ссылающихся на все слова документа
288 6.1. Обзор объектной модели Word Paragraphs Paragraphs (Paragraph) Borders (Border) DropCap ParagraphFormat Range Shading TabStops (TabStop) Объект Назначение Paragraph Абзац (параграф) Border Стиль границ объекта (см. диалог Формат / Границы и заливка) DropCap Буквица (большая буква в начале абзаца) ParagraphFormat Форматирование параграфа (абзаца) Range Непрерывный фрагмент текста Shading Обеспечивает доступ к параметрам штриховки Tabstop Позиция табуляции
6.1. Обзор объектной модели Word 289 Sections Sections (Section) Borders HeadersFooters Range PageSetup Объект Назначение Section Раздел текста Borders Стиль границ объекта (см. диалог формат / Границы и заливка) Headers- Footers Колонтитулы PageSetup Обеспечивает доступ к параметрам страницы Range Непрерывный фрагмент текста ListFormat 10 1855
290 6.1. Обзор объектной модели Word Объект Назначение ListFormat Параметры форматирования списков List Формат списка ListTemplate Шаблон представления списка Find Find Font Frame Paragraph Format Replacement Объект Назначение Find Обеспечивает доступ к функциям поиска Font Обеспечивает доступ к параметрам шрифта Frame Рамка ParagraphFormat Форматирование параграфа (абзаца) Replacement Обеспечивает доступ к параметрам поиска с заменой (см. диалог Правка / Заменить)
6.1. Обзор объектной модели Word 291 6.1.4. Таблица Tables Tables (Table) ---- Borders (Border) --- Cells (Cell) --- Columns (Column) --- Range --- Rows (Row) --- Shading Объект Назначение Table Таблица Border Стиль границ объекта (см. диалог Формат / Грани- цы и заливка) Cell Ячейка таблицы Column Столбец таблицы Range Непрерывный фрагмент текста Row Строка таблицы Shading Обеспечивает доступ к параметрам штриховки
292 6.1. Обзор объектной модели Word Rows Rows (Row) Borders (Border) Cells (Cell) Range Shading Объект Назначение Row Строка таблицы Border Стиль границ объекта (см. диалог Формат / Гра- ницы и заливка) Cell Ячейка таблицы Range Непрерывный фрагмент текста Shading Обеспечивает доступ к параметрам штриховки Columns
6.1. Обзор объектной модели Word 293 Объект Назначение Column Столбец таблицы. Border Стиль границ объекта (см. диалог Формат / Грани- цы и заливка) Cell Ячейка таблицы Shading Обеспечивает доступ к параметрам штриховки Cells Cells (Cell) Borders (Border) Row Range Column Shading Объект Назначение Cell Ячейка таблицы Border Стиль границ объекта (см. диалог Формат / Грани- цы и заливка) Column Столбец таблицы Range Непрерывный фрагмент текста Row Строка таблицы Shading Обеспечивает доступ к параметрам штриховки
294 6.2. Объект Application 6.2. Объект Application Объект Application представляет приложение Word в целом. Его свойства и методы возвращают объекты, занимающие наибо- лее высокий уровень в иерархии объектной модели Word. Речь тут может идти о документах, элементах среды, выводе на пе- чать, завершении работы приложения и тому подобном. Примечания Объект Application находится в вершине иерархической структуры объектов Word. И Многие (но не все) свойства и методы объекта Application являются глобальными и не требуют при обращении иден- тификатора Application. 6.2.1. События Событие Описание DocumentBefore- Close Происходит непосредственно перед за- крытием открытого документа DocumentBeforePrint Происходит непосредственно перед печа- тью документа DocumentBeforeSave Происходит непосредственно перед сохра - нением документа Documentchange Создан новый документ, открыт существу- ющий документ или текущим стал другой документ DocumentOpen Происходит в момент открытия документа NewDocument Происходит в момент создания документа Quit Word завершает свою работу WindowActivate Происходит в момент активизации окна документа
6.2. Объект Application 295 Событие Описание WindowBefore- DoubleClick Происходит в момент двойного щелчка в области редактирования окна документа (перед событием двойного щелчка) WindowBeforeRight- Click Происходит в момент щелчка правой кнопкой мыши в области редактирования окна документа (перед событием щелчка правой кнопкой) Window Deactivate Происходит в момент деактивизации окна документа WindowSelection- Change Происходит в момент изменения области выделения 6.2.2. Свойства АсГйдеЭздш/гют t Возвращает текущий документ. Пример 'Сохранить текущий документ ActiveDocument.Save ActivifPrintfir Возвращает имя текущего принтера. Пример 'Сообщить имя текущего принтера MsgBox ActivePrinter
296 6.2. Объект Application ActiveWini/jw Возвращает текущее окно. Пример 'Максимизировать текущее окно ActiveWindow.Windowstate = wdWindowStateMaximize AutoCorrect Объект, обеспечивающий доступ к списку автозамены. Пример 'Сообщить первый элемент списка автозамены With AutoCorrect.Entries(1) MsgBox .Name & " - ” & .Value End With BacbgtXHinciPrintingStatus_______ '**&' . '' k Возвращает число заданий в очереди фоновой печати. • При завершении работы приложения должно иметь зна- чение 0. Пример 'Сообщить число заданий печати MsgBox BackgroundPrintingStatus
6.2. Объект Application 297 Browser Объект, обеспечивающий доступ к кнопке Выбор объекта перехода на полосе прокрутки в окне документа справа. Пример 'Перейти к предыдущей сноске With Application.Browser .Target = wdBrowseFootnote .Previous End With Build Возвращает полный номер версии приложения Word. Пример 'Сообщить номер текущей версии MsgBox Application.Build Cafition И Возвращает и позволяет задать титульную строку окна приложения Word. Пример 'Задать титульную строку Application.Caption = "Моя собственная программа"
298 6.2. Объект Application 'Очистить титульную строку Application.Caption = "" Cti&ckL3ngu3g& Возвращает и позволяет задать режим автоматического распознавания языка фрагмента. Пример 'Включить режим автораспознавания языка Application.CheckLanguage = True Gummar^Ban; „...,v ,; Коллекция панелей инструментов и меню. Пример 'Включить режим "Крупные значки" CommandBars.LargeButtons = True O/atogs .? ?. x a Возвращает коллекцию диалогов Word. • Объект позволяет получить доступ к любому из диалогов Word. • Подлежащие вводу с помощью конкретного диалога данные могут быть заданы через свойства соответству- ющего объекта.
6.2. Объект Application 299 Пример 'Открыть диалог "Вставка файла" With Dialogs(wdDialoglnsertFile) .Name = "*.doc" . Show End With DmplayAutuCumple'teTips Включает (True) и выключает (False) автоматическое за- вершение слов. Пример 'Выключить автоматическое завершение слов DisplayAutoCompleteTips = False DisplayScrcenTips Включает (True) и выключает (False) всплывающую под- сказку. Пример 'Выключить всплывающую подсказку DisplayScreenTips = False DisplayScrpllBars И Включает (True) и выключает (False) отображение полос прокрутки.
300 6.2. Объект Application Пример 'Убрать полосы прокрутки Application.DisplayScrollBars = False DisplayStatusBar' г Включает (True) и выключает (False) отображение строки состояния. Пример 'Убрать строку состояния Application.DisplayStatusBar = False Oocuments Возвращает коллекцию всех открытых документов. Пример 'Закрыть первый документ Documents(1).Close FuntNames Возвращает список установленных в системе шрифтов. Пример Dim FList As String 'Составить список имен всех шрифтов
6.2. Объект Application 301 For I = 1 То FontNames.Count FList = FList & FontNames(I) & vbCr Next ActiveDocument.Range.InsertBefore FList Language Возвращает язык интерфейса. Пример If Application.Language = _ msoLanguagelDEnglishUS Then MsgBox _ "Язык интерфейса - U.S. English.” Else MsgBox _ "Язык интерфейса - не U.S. English." End If flame Возвращает имя программы. Пример MsgBox Application.Name NormaHemplate 1 ~ ‘ Обеспечивает доступ к шаблону стиля Normal (Обычный).
302 6.2. Объект Application Пример 'Сообщить путь к файлу шаблона Normal MsgBox NormalTemplate.Path Options Обеспечивает доступ к диалогу Параметры. Пример 'Поднять флажок "Разрешить перетаскивание 'текста при правке" Options.AllowDragAndDrop = True Содержит полное имя файла приложения. Пример 'Сообщить полное имя файла приложения MsgBox Application.Path SyreenUpJating Разрешает (True) или запрещает (False) обновление экра- на при выполнении процедуры VBA (макроса). Пример Application.Screenupdating = False
6.2. Объект Application 303 Se/acCZun Обеспечивает доступ к выделенной области. Пример 'Скопировать выделенную область в буфер обмена Selection.Сору SturtupPath Возвращает и позволяет задать полное имя стартового ка- талога приложения. Пример MsgBox Application.StartupPath StutusBar Определяет текст в строке состояния (только для записи). Пример Application.StatusBar = _ "Производится открытие файла, ждите..." Sy. tan Обеспечивает доступ к сведениям о системе.
304 6.2. Объект Application Пример 'Сообщить название операционной системы MsgBox System.OperatingSystem Tusks Возвращает коллекцию объектов, содержащих сведения о всех выполняющихся программах. Пример 'Сообщить имена всех выполняющихся программ For I = 1 То Tasks.Count MsgBox Tasks(I).Name Next Templates Возвращает коллекцию шаблонов. Пример 'Сообщить имя первого шаблона MsgBox Templates(1).Name UserControl Возвращает булево значение True в случае, когда прило- жение запущено или открыто пользователем, и False, если это было сделано программой.
6.2. Объект Application 305 Пример If Application.UserControl Then 'Интерфейс с пользователем возможен End If User Name Возвращает и позволяет задать имя пользователя. Пример MsgBox Application.UserName Miaa^State Определяет состояние окна приложения. Пример 'Максимизировать текущее окно ActiveWindow.Windowstate = _ wdWindowStateMaximize 6.2.3. Методы df№ckSp&lling(Crp<iKa, СлоаарггПпльзаааталя, ИгнорироаатьРегмстр, ГлавныйСлааарь, Сл<>варьПользоаат&ля2 СлаварьПальзбаателяЮ)
306 6.2. Объект Application Комментарий Проверяет заданную строку символов, возвращает значе- ние True, если ошибок не обнаружено, и False в противном случае. • Обязателен только первый параметр, все остальные мо- гут быть опущены — в этом случае будут использованы значения по умолчанию. Параметр Назначение Строка Строковое значение — подлежащий проверке текст СловарьПользователя Имя файла словаря или объект типа Dictionary ИгнорироватьРегистр Значение True влечет игнорирование регистра символов - различия меж- ду малыми и большими литерами делаться не будет ГлавныйСловарь Имя файла словаря или объект типа Dictionary СловарьПользователя2 - Имя файла словаря или объект типа Dictionary СловарьПользователяЮ Можно задать до 9 дополнительных словарей Пример 1 Проверить текст первого раздела документа If Not Checkspelling _ (ActiveDocument.Sections(1).Range) Then MsgBox "Обнаружена ошибка!" End If
6.2. Объект Application 307 CtaanStrinif (Строка) * Параметр Назначение Строка Строка, подлежащая преобразованию Комментарий Возвращает строку, полученную удалением из заданного строкового значения всех непечатаемых символов, а так- же специальных символов Word. Некоторые из символов исключаются, другие будут заменены на пробелы. • Полученная строка представляет собой «чистый» текст и может быть использована для вывода в текстовый файл. • Это преобразование бывает необходимым также при эк- спорте текста в базу данных. Пример Dim ExpStr As String ExpStr = CleanString(ActiveDocument.Range) LiatCommands(BceKoManpKi) Параметр Назначение ВсеКоманды Булево выражение, определяющее, должна ли идти речь о всех командах Word (True) или то- лько о пользовательских (False) Комментарий Создает новый документ и вставляет в него таблицу команд Word и назначенных им сочетаний клавиш и пунк- тов меню.
308 6.2. Объект Application Пример Application.Listcommands True Printout (Фоновая Печать, ПннатьВКонацФайла, ДиапазонПечати, ИмяФайла, От, До, О&ьектПечати, ЧислоКопий, НомераСтрзниц, Страницы, ПечатьВФзйл, РазобратьПоКопиям, ФайлДокументы) Параметр Назначение ФоноваяПечать Значение True — разрешить печать в фоно- вом режиме ПечатьВКонец- Файла Значение True — разрешить присоединение к существующему файлу (в случае печати в файл) Диапазон Печати Константа, определяющая диапазон печати — весь документ, текущая страница и т.д ИмяФайла Имя файла (в случае печати в файл) От Начальная страница (в случае, когда пара- метр ДиапазонПечати получил значение wdPrintFromTo) До Конечная страница (в случае, когда параметр ДиапазонПечати получил значение wdPrintF- romTo) ОбъектПечати Константа, определяющая объект печати - текст, примечания, стиль и т. д. ЧислоКопий Число копий НомераСтраниц Строка, описывающая номера страниц, под- лежащих выводу на печать. Например, зна- чения «2, 5, 7-9» соответствуют 2, 5, 7, 8, 9 страницам
®Ы1Р(б№®[^ 6.2. Объект Application 309 Параметр Назначение Страницы Константа, определяющая вид страниц для печати (четные, нечетные, все) ПечатьВФайл Значение True разрешает печать в файл Разобрать- ПоКопиям (Для случая печати нескольких копий) Значе- ние True соответствует печати копий целыми документами. False — печати копий постра- нично ФайлДокумента Полное имя файла документа (если пара - метр опущен, печатается текущий открытый документ) Комментарий Служит для вывода на печать текущего документа или до- кумента в файле. Если существует открытый документ, то следует вызывать его метод Printout (см. 6.5), если же ни один документ не от- крыт, то нужно пользоваться методом объекта Application. Возможен вывод как на принтер, так и в файл. Пример Application.Printout True, , , , , "2, 3-5" "myprn.prn", . ОиЩСахранитъИзм&нения, Фо^ауСахранени*. Комментарий Завершает выполнение программы.
(gOlPfeWliW 310 6.2. Объект Application Параметр Назначение СохранитьИзменения Константа, определяющая тип сохране- ния изменений в документах ФорматСохранения Константа, определяющая формат сохра - нения документов, созданных не в Word ПоМаршруту Булево значение, разрешающее (True) отправку документа по маршруту Пример 'Закрыть приложение, сохранив все открытые файлы Application.Quit wdSaveChanges Scra&nRafranh Комментарий Обновляет (перерисовывает) изображение на экране. • Используется в случаях, когда Screenupdating = False Пример 'Запретить автоматическое обновление экрана Application.Screenupdating = False 'Работаем, выполняются массовые операции ActiveDocument.Sections(1).Range.InsertBefore "Текст" 'Экран пока не перерисовывается MsgBox "На экране ничего не изменилось" 'Пора увидеть вставленный текст Application.ScreenRefresh
63. Единицы измерения и их преобразование 311 6.3. Единицы измерения и их преобразование Word способен оперировать разнообразными единицами из- мерения. Для преобразования величин из одной системы в другую существует ряд специальных функций (все они явля- ются методами объекта Application). Ниже приведены наибо- лее употребляемые в среде Word единицы измерения и функ- ции для их преобразования. Милли- метр Санти- метр Дюйм Строка Пика Пункт Милли- метр 1.00 0.10 0.04 0.24 0.24 2.83 Санти- метр 10.00 1.00 0.39 2.36 2.36 28.35 Дюйм 25.44 2.54 1.00 6.00 6.00 72.00 Строка 4.24 0.42 0.17 1.00 1.00 12.00 Пика 4.24 0.42 0.17 1.00 1.00 12.00 Пункт 0.35 0.04 0.01 0.08 0.08 1.00 Обзор. Функции преобразования единиц измерения CeintimetersTc>PQints(CaHrnMvTpM) InChesTePoiutsfДюймы) LlnesToPointsfCrpOKH) Millinie-tc rs TaPaints(MnniwM^Tpbi) PicaaTpPuintsfnHKH) PainteTp&rntimvtersf Пункты)
312 6.4. Параметры среды Word Puin Is Т <з1псЬ&з(Пункты) PointsToLinftsfriyHKTw) PjintaToMillime ters(nynKTbi) P’jint-jToPic'ixfnyHKTM) *. _________У:-.. . 6.4. Параметры среды Word Объект Options полностью эквивалентен диалогу Парамет- ры (меню Сервис). Все параметры среды Word, доступные в диалогеПараметры, доступны также в форме свойств объек- та Options. 6.4.1. Свойства AlluwOragAndDrup Разрешает (True) перетаскивание текста при правке. Пример 'Разрешить перетаскивание Options.AllowDragAndDrop = True AllawFatstSavv Разрешает (True) быстрое сохранение. Пример 'Разрешить быстрое сохранение Options.AllowFastSave = True
6.4. Параметры среды Word 313 tfmate&F^nMovem&nts Разрешает (True) анимацию указателя мыши и текстового курсора. Пример 'Запретить анимацию указателя мыши Options.AnimateScreenMovements = False BackgroundSave Ж Разрешает (Тrue) сохранение файлов в фоновом режиме. Пример 'Разрешить сохранение в фоновом режиме Options.BackgroundSave = True BlucScreen H Включает (True) режим «белый текст на синем фоне». Пример 'Белый текст на синем фоне Options.BlueScreen = True [CheckQrammarAa YauType Разрешает (True) автоматически проверять грамматику при вводе текста.
314 6.4. Параметры среды Word Пример 'Автоматически проверять грамматику Options.CheckGrammarAsYouType = True ChbckGratnmetrWilhSpalling Разрешает (True) автоматически проверять грамматику при проверке орфографии. Пример 'Проверять грамматику и орфографию Options.CheckGrammarWithSpelling = True ChbckSpellingAsYuuTypi Разрешает (True) автоматически проверять орфографию при вводе текста. Пример 'Автоматически проверять орфографию Options.CheckSpellingAsYouType = True ConfirntCiWneirbions Разрешает (True) запрашивать подтверждение преобра- зований. Пример Options.ConfirmConversions = True
(gOlPOMW 6.4. Параметры среды Word 315 BefaultBanfarCulur Позволяет проанализировать/задать цвет рамки по умол- чанию. Пример Options.DefaultBorderColor = wdColorTeal EnatdeSaund Разрешает (True) звуковое сопровождение событий. Пример 'Запретить звук Options.EnableSound = False Ignur&lnt&rn&tAndfileAiJiJreases ». j» Разрешает (True) пропускать адреса Internet и имена фай- лов при проверке правописания. Пример 'Игнорировать адреса Options.IgnorelnternetAndFileAddresses = True IgnorcUpperCase Разрешает (True) игнорировать регистр символов при проверке орфографии.
316 6.4. Параметры среды Word Пример 'Игнорировать регистр Options.IgnoreUpperCase = True Measur^mentUnit • ,?=- • -pV" Определяет единицу измерения. Пример Options.Measurementunit = wdCentimeters 'сантиметры Options.Measurementunit = wdlnches 'дюймы Options.Measurementunit = wdPoints 'пункты Overtype Возвращает значение True, если включен режим замены символов при вводе, и False для режима вставки. Пример If Options.Overtype Then End If Pagination Разрешает (True) фоновую разбивку на страницы. Пример 'Фоновая разбивка Options.Pagination = True
6.4. Параметры среды Word 317 PrintBackground Разрешает (True) печать в фоновом режиме. Пример 'Печать в фоновом режиме Options.PrintBackground = True RefflaceStilectitan Разрешает (True) заменять выделенный фрагмент при вво- де или вставке. Пример 'Заменять выделенный фрагмент Options.ReplaceSelection = True Savelnterval Интервал (в минутах) для автосохранения. Пример 'Автоматически сохранять документ каждые 10 минут Options.Savelnterval = 10 UpdatiiFieldisAtPrint Разрешает (True) обновлять поля при печати.
318 6.5. Доступ к документам — объект Document Пример 1 Обновлять ПОЛЯ Options.UpdateFieldsAtPrint = True Updu te-UnksA tOfMn Разрешает (True) автоматически обновлять связи при от- крытии документа. Пример 'Обновлять связи при открытии документа Options.UpdateLinksAtOpen = True 6.5. Доступ к документам — объект Document Роль объекта Document в среде Word трудно переоценить. С помощью его многочисленных свойств, методов и событий VBA-программа может делать с документами Word практичес- ки все. Обзор. Документ Создание нового документа так же, как и открытие суще- ствующего, производится с помощью методов коллекции Documents. Каждый объект типа Document соответствует одному от- крытому файлу документа. Каждому открытому документу автоматически присваива- ется ссылка на шаблон. При открытии документа открывается соответствующий шаблон.
6.5. Доступ к документам — объект Document 319 Макросы (процедуры VBA) могут быть вызваны как из до- кументов, так и из шаблонов. Документ, где размещается некоторый макрос (процедура VBA), имеет с точки зрения VBA стандартное имя: ThisDo- cument. 6.5.1. События В отношении документов и шаблонов VBA распознает три основных события: создание нового, открытие существующе- го и его закрытие. Процедура. Создание процедуры-обработчика события 1. В окне проекта выполните двойной щелчок на элементе ThisDocument. 2. В окне программы выберите нужное событие, развернув список в правом верхнем углу. 3. Введите программный код в созданную автоматически за- готовку процедуры. Событие Описание New Происходит при создании нового документа Open Происходит при открытии существующего документа Close Происходит при закрытии ранее открытого или со- зданного документа 6.5.2. Свойства AaUveThet'r& Возвращает имя темы документа.
320 6.5. Доступ к документам — объект Document Пример ' Вывести тему активного документа MsgBox ActiveDocument.ActiveTheme Activ&Windaw Возвращает окно (объект типа Window), принадлежащее документу. Пример 'Максимизировать окно первого документа Documents(1).ActiveWindow.Windowstate = wdWindowStateMaximize AttaahadT&mplate -«У**» i- Возвращает шаблон (объекттипаТетр1а1е), присоединен- ный к документу. Пример 'Сообщить имя текущего шаблона MsgBox Documents(1).AttachedTemplate.Name 'Задать новый шаблон Documents(1).AttachedTemplate = _ "С:\MS0ffice\Template\l.dot" AutoHyph&nation Разрешает (True) автоматический перенос.
6.5. Доступ к документам — объект Document 321 Пример 'Автоматический перенос MyDoc.AutoHyphenation = True Background Определяет фон (задний план) документа. • Роль фона может играть фоновый цвет или рисунок. Пример 'Задать цвет фона ActiveWindow.View.Type = wdOnlineView With MyDoc.Background.Fill .TwoColorGradient msoGradientHorizontal, 1 .ForeColor = RGB(192, 192, 192) .BackColor = RGB(255, 255, 255) End With 'Загрузить фоновый рисунок MyDoc.Backgroud.Fill.UserTextured _ "C:\Windows\My.bmp" Bookmarks Содержит коллекцию закладок, имеющихся в документе. Пример 'Перейти к 5-й закладке MyDoc.Bookmarks(5).Select 'Перейти к закладке "MyBookmark" MyDoc.Bookmarks("MyBookmark").Select 11 1855
322 6.5. Доступ к документам — объект Document Characters Содержит коллекцию Range-объектов, ссылающихся на все символы документа. • Это свойство дает возможность обратиться к любому сим- волу в документе. • Каждый символ представлен при этом Range-объектом. Пример 'Перейти в конец документа MyDoc.Characters.Last.Select Content Возвращает главный структурный компонент документа (текст документа без сносок, примечаний и т.п.). Пример 1 Скопировать текст документа в буфер обмена MyDoc.Content.Copy 'Вставить текст в конец документа MyDoc.Content.InsertAfter "Новый текст" Count Возвращает число открытых документов (свойство кол- лекции Documents).
6.5. Доступ к документам — объект Document 323 Пример 'Сообщить число открытых документов MsgBox "Открыто " & Documents.Count & " документов" J^fauitTabStop Определяет расстояние (в пунктах) между позициями та- буляции в документе. Пример 'Установить расстояние между позициями 'табуляции: 2 см. MyDoc.DefaultTabStop = CentimetersToPoints(2) EmbedTrueTypeFc-nts Разрешает (True) или запрещает (False) внедрение шриф- тов TrueType в сохраняемый документ. Пример 'Внедрить шрифты TrueType в документ MyDoc.EmbedTrueTypeFonts = True Endnutes Возвращает коллекцию всех концевых сносок, имеющихся в документе. М Удаление элемента коллекции влечет удаление как самой сноски, так и соответствующего ей номера в тексте.
324 6.5. Доступ к документам — объект Document Пример 'Удалить четвертую концевую сноску MyDoc.Endnotes(4).Delete -ields Содержит коллекцию всех полей, вставленных в документ. Пример 'Обновить ПОЛЯ MyDoc.Fields.Update Footnotes Возвращает коллекцию всех сносок внизу страницы, име- ющихся в документе. Удаление элемента коллекции влечет удаление как самой сноски, так и соответствующего ей номера в тексте. Пример 'Вставить новую сноску в текущей позиции MyDoc.Footnotes.Add Selection.Range, , "Моя сноска" FullN.ime Содержит полное имя файла.
6.5. Доступ к документам — объект Document 325 Пример 'Сообщить имя файла MsgBox MyDoc.FullName GrammarChecked Возвращает булево значение True, если выполнялась про- верка грамматики и после этого в документ не были внесе- ны изменения (False в противном случае). Пример 'Если проверка грамматики не выполнялась, 'то выполнить If Not MyDoc.GrammarChecked Then MyDoc.CheckGrammar End If Grammatical Errors Возвращает коллекцию ProofreadingErrors, содержащую все предложения, где были обнаружены ошибки при про- верке грамматики. Пример 'Сообщить все ошибочные предложения 'в первом абзаце Set myErrors = _ ActiveDocument.Paragraphs(1).Range. GrammaticalErrors
326 6.5. Доступ к документам — объект Document For Each myerr In myErrors MsgBox myerr.Text Next myerr Hyperlinks__________________________________ Возвращает коллекцию, содержащую все гиперссылки в документе. Пример 'Перейти по первой гиперссылке ' (с открытием нового окна) MyDoc.Hyperlinks(1).Follow True widexes Содержит коллекцию всех указателей в документе. • Для создания нового указателя используют метод Add коллекции Indexes, а для создания нового элемента ука- зателя — ее же метод MarkEntry. Пример 'Создать элемент указателя MyDoc.Indexes.MarkEntry Selection.Range, Selection.Range.Text MailMerge Содержит одноименный объект, обеспечивающий доступ к функциям, связанным с подготовкой серии писем.
6.5. Доступ к документам — объект Document 327 Пример MyDoc.MailMerge.Execute Name Имя файла. • Только для чтения. Пример 1 Сообщить имя файла MsgBox MyDoc.Name PageSetup Возвращает объект PageSetup, обеспечивающий доступ к параметрам страницы. Пример 'Установить верхнее поле равным 4.5 см. MyDoc.PageSetup.TopMargin = _ CentimetersToPoints(4.5) Paragraphs ' Возвращает коллекцию, содержащую все абзацы (параг- рафы) документа.
328 6.5. Доступ к документам — объект Document Пример 'Во втором абзаце установить левый 'отступ равным 3 см. MyDoc.Paragraphs(2).Leftindent = _ CentimetersToPoints(3) Path Полное имя каталога, где содержится файл документа. Пример 'Сообщить имя каталога MsgBox MyDoc.Path ReaJOnly Возвращает значение True, если сохранение изменений в документе запрещено, и False в противном случае. Пример If MyDoc.Readonly Then MsgBox "Документ только для чтения" End If Saved Ж Флаг, свидетельствующий о том, что документ был сохра- нен и после этого не изменялся (True).
МЯИИ 6.5. Доступ к документам — объект Document 329 Пример 'Если несохраненных изменений в документе нет, ' то закрыть If MyDoc.Saved Then MyDoc.Close End if SaveFormsOnto Булево значение, определяющее, что введенные в поля формы данные должны (True) сохраняться в виде записей с символом Tab в качестве разделителя. Пример 'Сохранять данные в виде записей MyDoc.SaveFormsData = True Sections Возвращает коллекцию, содержащую все разделы доку- мента. Пример 'Задать колонтитул для первого раздела MyDoc.Sections(1).Headers( _ wdHeaderFooterFirstPage).Range = "Глава 1"
ззо 6.5. Доступ к документам — объект Document Sentences Ж Возвращает коллекцию, содержащую все предложения до- кумента. Пример 'Вставить заданную строку после первого 'предложения MyDoc.Sentences(1).InsertAfter "Новый текст" ShowGratnmaticalErrws Разрешает (True) выделять грамматические ошибки вол- нистой линией. Пример MyDoc.ShowGrammaticalErrors = True Sh&wSpeliingEiror?. Разрешает (True) выделять орфографические ошибки под- черкиванием. Пример MyDoc.ShowSpellingErrors = False SpeHingCheckaci Возвращает булево значение True, если выполнялась про- верка орфографии и после этого в документ не были вне- сены изменения (False в противном случае).
6.5. Доступ к документам — объект Document 331 Пример 'Если проверка орфографии не выполнялась, 'то выполнить If Not MyDoc.SpellingChecked Then MyDoc.Checkspelling End If SjJulhngErrors Возвращает коллекцию, содержащую все слова, где были обнаружены ошибки при проверке орфографии. Пример 'Сообщить все ошибочные предложения 'в первом абзаце Set myErrors = _ ActiveDocument.Paragraphs(1).Range. SpellingErrors For Each myerr In myErrors MsgBox myerr.Text Next myerr StoryR^nges Содержит одноименную коллекцию, обеспечивающую до- ступ к структурным компонентам текста. • Возвращает объект типа Range. • Требуемый компонент задается с помощью константы.
332 6.5. Доступ к документам — объект Document Пример 'Установить шрифт для основного текста MyDoc.StoryRanges(wdMainTextStory).FontName = "Arial" 'Выделить жирным нижний колонтитул 1-й страницы MyDoc.StoryRanges( _ wdFirstPageFooterStory).Bold = True Styles Возвращает одноименную коллекцию, содержащую все сти- ли документа. Пример 'Определить новый стиль MyDoc.Styles-Add "NewStyle", wdStyleTypeParagraph . at Возвращает одноименную коллекцию, содержащую все таб- лицы в документе. Пример 'Добавить таблицу MyDoc.Tables.Add MyDoc.Content, 3, 2
6.5. Доступ к документам — объект Document 333 Variables Возвращает одноименную коллекцию, содержащую все переменные документа. Пример 'Создать новую переменную MyDoc.Variables.Add "LastNr", 15 'Получить значение переменной OldNr = MyDoc.Variables("LastNr") Window? Возвращает одноименную коллекцию, содержащую все открытые окна. Пример 'Сделать текущим второе окно MyDoc.Windows(2).Activate Words Возвращает одноименную коллекцию, содержащую все слова документа. Пример 'Сообщить число слов в документе MsgBox "Текст состоит из " & _ MyDoc.Words.Count & " слов"
334 6.5. Доступ к документам — объект Document 6.5.3. Методы Activate Комментарий Делает окно документа текущим. Пример MyDoc.Activate | АбсЦШаблон, НовыйШаблон) Параметр Назначение Шаблон Имя шаблона, который должен быть использо- ван при создании документа НовыйШаблон Логическое значение, указывающее, должен ли быть создан новый документ (False по умолча- нию) или шаблон (True) Комментарий Служит для создания нового документа или шаблона. • Окно вновь созданного документа становится текущим. • Если метод вызван без параметров, будет создан пус- той документ с использованием шаблона стиля Normal (Обычный). Пример Dim MyDoc As Document
6.5. Доступ к документам — объект Document 335 Set MyDoc = Documents.Add Set MyDoc = _ Documents.Add("C:\MSOfficeTemplates\My.dot") Арр1уТЬсте(Ими) Параметр Назначение Имя Имя темы, которая должна использоваться при оформлении документа Комментарий Применяет тему оформления к документу. Пример ActiveDocument.ApplyTheme "artsy 100" ChuckGrammar Комментарий Осуществляет проверку орфографии и грамматики. Обнаружив ошибку, открывает диалог Правописание. Пример MyDoc.CheckGrammar
336 6.5. Доступ к документам — объект Document ''heckSpe'ling Комментарий Осуществляет проверку орфографии. Обнаружив ошибку, открывает диалог Правописание. Пример MyDoc.Checkspelling С1о§е(СохранитьИзменения, ФорматСохраненья. ПоМаршруту) Параметр Назначение СохранитьИзменения Константа, определяющая тип сохранения изменений в документе ФорматСохранения Константа, определяющая формат сохра- нения документов, созданных не в Word ПоМаршруту Булево значение, разрешающее (True) отправку документа по маршруту Комментарий Как метод объекта Document закрывает документ и со- храняет изменения в файле. Как метод коллекции Documents закрывает все докумен- ты и сохраняет изменения в файлах.
6.5. Доступ к документам — объект Document 337 Пример 'Закрыть документ без сохранения MyDoc.Close wdDoNotSaveChanges 'Закрыть все документы с сохранением 'по подтверждению Documents.Close wdPromptToSaveChanges ClosePrintPreview Комментарий Выключает режим Предварительный просмотр и возвра- щает документ в предыдущий режим просмотра. е Если режим Предварительный просмотр не был вклю- чен, произойдет ошибка выполнения. Пример 'Выключить предварительный просмотр If ActiveWindow.View.Type = wdPrintPreview Then MyDoc.ClosePrintPreview End If DataForm Комментарий Открывает диалог Форма данных, облегчающий ввод дан- ных в таблицы.
338 6.5. Доступ к документам — объект Document Пример 'Открыть окно диалога "Форма данных" MyDoc.DataForm | DvtbctLanyuagti Комментарий Позволяет автоматически распознать язык документа. Результат распознавания языка (идентификатор языка) метод DetectLanguage заносит в свойство LanguagelD. Если для документа язык уже распознавался, то свойство LanguageDetected имеет значение True. Для повторного распознавания языка следует сначала присвоить этому свойству значение False. Пример With ActiveDocument If .LanguageDetected = True Then x = MsgBox _ ("Этот документ уже анализировался" & "Хотите повторить распознавание языка" & "снова?", vbYesNo) If х = vbYes Then .LanguageDetected = False .DetectLanguage End If Else .DetectLanguage End If If .Range.LanguagelD = wdRussian Then MsgBox _ "В документе используется русский язык." Else
6.5. Доступ к документам — объект Document 339 MsgBox "В документе используется язык,” & " отличный от русского." End If End With FollowHyperlink(Aapec, СубАдрес, HobooQumo, ИеторияМаршрупт, ДопИнформацея, Метод, Заголовок) Параметр Назначение Адрес Путь к документу, на который указывает гиперссылка СубАдрес Определяет требуемые данные внутри до- кумента НовоеОкно True, если необходимо открыто новое окно для документа, загружаемого по ссылке (по умолчанию — False) ИсторияМаршрута Зарезервирован для будущих применений Допйнформация Дополнительная информация для HTTP Метод Определяет метод обработки дополнитель - ной информации Заголовок Строка, описывающая заголовок НТТР-за- проса Комментарий Открывает или загружает, а затем открывает документ, на который указывает гиперссылка. Гиперссылка определяется URL-адресом. Если требуется открыть новое окно, то будет использован штатный для системы Web-браузер. • Все параметры, кроме первого, необязательны.
340 6.5. Доступ к документам — объект Document Пример 'Загрузить страницу с SQLWeb-сервера MyDoc.FollowHyperlink "http://SQLWeb/Му.asp", , True GoTo(Bn^(Jui акта, ВицДаступа. Номер, Имя) Параметр Назначение ВидОбъекта Константа, определяющая вид объекта (страница, закладка, сноска и т. д.) ВидДоступа Константа, определяющая вид доступа к объекту (к первому, следующему, последнему и т. д.) Номер Порядковый номер объекта в документе Имя Имя объекта, если он им обладает Комментарий Возвращает Range-объект, указывающий местоположе- ние искомого объекта в документе. Не влияет на положение текстового курсора. Пример 'Получить 3-ю страницу документа ActiveDocument.GoTo wdGoToPage, wdGoToAbsolute, 3 'Перейти на 5 страниц вперед от текущей ActiveDocument.GoTo wdGoToPage, wdGoToRelative, 5 'Получить 2-ю таблицу ActiveDocument.GoTo wdGoToTable, wdGoToAbsolute, 2
6.5. Доступ к документам — объект Document 341 'Получить закладку с именем "Закладка1" ActiveDocument.GoTo wdGoToBookMark, , , "Закладка!" 'Перейти к следующей закладке ActiveDocument.GoTo wdGoToBookmark, wdGoToNext Ореп(ИмяФайлз; ПодаерждатьПр&ибразование, ТолькоДляЧтения, ДобэвитьВСпнсок, ПарольДокументаО, ПарольШэблонаО, УжеОткрыт, ПаральДакум'днтаЗ, ПаряльШаОлонаЗ, Формат} Параметр Назначение ИмяФайла Имя файла, подлежащего открытию ПодверждатьПре- образование Открывать (True) диалог Преобразование файла в случае, если открывается не доку- мент Word ТолькоДляЧтения Открывать файл в режиме «только для чтения» (True) ДобавитьВСписок Включить открытый файл в «список фай - лов, открытых последними» (True) ПарольДокументаО Пароль для открытия документа ПарольШаблонаО Пароль для открытия шаблона УжеОткрыт Если документ уже открыт, то: True - от- крыть заново. False - сделать текущим уже открытый П а рол ь Доку ментаЗ Пароль для сохранения документа ПарольШаблонаЗ Пароль для сохранения шаблона Формат Константа, определяющая программу пре- образования файла
342 6.5. Доступ к документам — объект Document Комментарий Метод коллекции Documents. Открывает файл и делает его текущим документом. • Имя файла должно быть полным. • Все остальные параметры необязательны. Пример Dim MyDoc As Document Set MyDoc = Documents.Open("С:\MyDocl.doc") Documents.Open "C:\MyDocl.doc" Documents.Open "C:\MyDocl.doc", , , , "МойПароль" РппЮиЦФоноааяПечать, ПечатъЗКонецФайла, ДиапазонПечати, ИмяФайла, От, До, ОбъектПечати, ЧислоКопий, НомераСтраниц, Страницы, ПечатьВФайл, РазобратьПоКопиям, ФайлДокум&нта) Комментарий Выводит документ на печать. Возможен вывод как на принтер, так и в файл. Пример 'Напечатать документ MyDoc.Printout 'Напечатать страницы MyDoc.Printout True, с 3-й по 5-ю ,,,,,,, "3-5"
6.5. Доступ к документам — объект Document 343 Параметр Назначение ФоноваяПечать Значение True - разрешить печать в фо- новом режиме ПечатьВКонецФайла Значение True — разрешить присоедине- ние к существующему файлу (в случае печати в файл) ДиапазонПечати Константа, определяющая диапазон печа- ти - весь документ, текущая страница и т.д. ИмяФайла Имя файла (в случае печати в файл) От Начальная страница (в случае, когда па- раметр ДиапазонПечати получил значе- ние wdPrintFromTo) До Конечная страница (в случае, когда пара- метр ДиапазонПечати получил значение wdPrintFromTo) ОбъектПечати Константа, определяющая объект печати — текст, примечания, стиль и т. д. ЧислоКопий Число копий НомераСтраниц Строка, описывающая номера страниц, подлежащих выводу на печать. Напри- мер, значение «2, 5, 7-9» соответствует 2, 5, 7, 8, 9 страницам Страницы Константа, определяющая вид страниц для печати (четные, нечетные, все) ПечатьВФайл Значение True разрешает печать в файл Разобрать ПоКопиям (Для случая печати нескольких копий) Значение True соответствует печати копий целыми документами. False соответствует печати копии постранично ФайлДокумента Полное имя файла документа (если пара - метр опущен, печатается текущий откры - тый документ)
344 6.5. Доступ к документам — объект Document PrintPreview Комментарий Переключает режимы просмотра в «предварительный про- смотр» и обратно. Пример MyDoc.PrintPreview Protect (ТипЗащиты СбросПолей, Пароле,) Параметр Назначение ТипЗащиты Константа, определяющая тип защиты документа СбросПолей Сохранять (True) значения полей, если документ защищен Пароль Пароль для снятия защиты с документа Комментарий Защищает документ от изменений. Пример 'Разрешить изменение только полей формы MyDoc.Protect wdAllowOnlyFormFields, True, "мой пароль"
6.5. Доступ к документам — объект Document 345 Яапде(ПераыйСимаол, ПиследнийСимаил) Параметр Назначение ПервыйСимвол Первый символ требуемого фрагмента ПоследнийСимвол Последний символ требуемого фрагмента Комментарий Возвращает заданный фрагмент текста, как Range-объект. • Требуемый фрагмент задается номерами первого и по- следнего символов (счет с О). • Метод учитывает все символы, включая служебные и скрытые. Пример 'Выделить жирным символы с 10 по 20 MyDoc.Range(10, 20)-Bold = True Save Комментарий Сохраняет документ под собственным именем. • При первом вызове метода будет открыт диалог Сохра- нение документа. Пример MyDoc.Save
346 6.5. Доступ к документам — объект Document 5ауеА$(ИмяФайла, ФорматФайла, Примечании, Пароль, ДобавмтьВСписок, ПаральЗ. ТалькоДляЧгения, ВнедритьШрифты, ФорматГрафики, СохранитьПоля} Параметр Назначение ИмяФайла Имя файла, в котором необходимо сохра- нить документ ФорматФайла Константа, определяющая формат сохране- ния файла Примечания Блокировать (True) примечания Пароль Пароль для открытия файла ДобавитьВСписок Включить сохраняемый файл в «список фай - лов, открытых последними» (True) ПарольЗ Пароль для сохранения изменений в доку- менте ТолькоДляЧтения Рекомендовать (True) пользователю открыть файл в режиме «только для чтения» ВнедритьШрифты Внедрить шрифты TrueType в сохраняемый документ ФорматГрафики Для случая графики, импортированной из других систем: True соответствует сохране- нию исходного формата Сохранить Поля Сохранить (True) значения полей формы Комментарий Сохраняет документ в файле с заданным именем. • Метод должен быть использован при первом сохранении файла — это позволит задать имя файла и параметры.
6.5. Доступ к документам — объект Document 347 Пример MyDoc.SaveAs "C:\MyDocl" 'Сохранить файл в формате RTF MyDoc.SaveAs "C:\MyDocl", wdFormatRTF SendFax(A^itec, Тама) Параметр Назначение Адрес Строка, содержащая телефонный номер Тема Строка, описывающая тему сообщения Комментарий Отправляет документ в форме факсимильного сообщения по заданному телефонному номеру. • Операция производится в фоновом режиме. Пример MyDoc.SendFax "2244221", "Ответ на Ваш 154/а" SendMaH Комментарий Позволяет отправить документ в форме сообщения элект- ронной почты.
348 6.5. Доступ к документам — объект Document Пример MyDoc.SendMail UnP.otectfflapcx ь) Параметр Назначение Пароль Пароль для снятия защиты Комментарий Позволяет снять с документа защиту от изменений. • Верхний и нижний регистры в строке пароля различаются. Пример MyDoc.UnProtect "мой пароль" WebPagePreview Комментарий Позволяет выполнить предварительный просмотр докумен- та в таком виде, какой он приобретет, будучи сохранен как Web-документ. Пример ActiveDocument.WebPagePreview
6.6. Раздел документа — объект Section 349 6.6. Раздел документа — объект Section Документ может состоять из нескольких разделов, каждый из которых при этом будет представлен объектом Section. Все разделы документа (все объекты Section) собраны в коллек- ции Sections. Обзор. Каждый документ содержит по меньшей мере один раздел. В каждом разделе могут использоваться самостоятельные нумерация и форматирование страниц, сносок и т. д. 6.6.1. Свойства коллекции Sections Count Возвращает число разделов в документе. Пример MsgBox MyDoc.Sections.Count First Возвращает первый раздел в форме Section-объекта. Пример 'Установить верхнее поле на страницах 'первого раздела: 5 см. MyDoc.Sections.First.PageSetup.TopMargin = CentimetersToPoints(5)
350 6.6. Раздел документа — объект Section Last Возвращает последний раздел в форме Section-объекта. Пример 'Установить нижнее поле на страницах 'последнего раздела: 5 см. MyDoc.Sections.Last.PageSetup.BottomMargin = CentimetersToPoints(5) PagtfS&tup Возвращает одноименный объект, служащий для установ- ки параметров страницы. Пример 'Задать левое и правое поля страницы 'для всех разделов With MyDoc.Sections.PageSetup .LeftMargin = CentimetersToPoints(3) .RightMargin = CentimetersToPoints (2.5) End With 6.6.2. Свойства объекта Section Borders Возвращает коллекцию объектов типа Border, определяю- щих вид границ. Пример 'Выделить синим границы страниц первого раздела MyDoc.Sections.First.Borders.OutsideColorIndex = _ wdBlue
6.6. Раздел документа — объект Section 351 Footers И Возвращает коллекцию HeadersFooters, содержащую ниж- ние колонтитулы раздела. Пример 'Задать нижний колонтитул 1-й страницы '1-го раздела MyDoc.Sections.First.Footers( wdHeaderFooterFirstPage).Range = "Предисловие" Headers Возвращает коллекцию HeadersFooters, содержащую верх- ние колонтитулы раздела. Пример 'Задать верхний колонтитул 1-й страницы '1-го раздела MyDoc.Sections.First.Headers( _ wdHeaderFooterFirstPage).Range = _ "Предисловие" PratectedFerForms Запрещает (True) ввод данных с помощью форм в преде- лах раздела. Пример If MyDoc.Sections(1).ProtectedForForms Then MsgBox "Ввод невозможен!" End If
(gOlPfeWliW 352 6.6. Раздел документа — объект Section Range Возвращает текст раздела в форме Range-объекта. Пример 'Поместить текст первого раздела в буфер обмена MyDoc.Sections.First.Range.Copy 6.6.3. Методы *ddi ОбъектДо, ТипРазпыва) Параметр Назначение ОбъектДо Range-объект, указывающий структурную едини - цу текста, перед которой должен быть вставлен разрыв раздела (по умолчанию — в конец доку- мента) ТипРазрыва Константа, определяющая тип разрыва раздела Комментарий Вставляет в документ новый раздел (разрыв раздела). Пример 'Новый раздел в конце документа MyDoc.Sections.Add , wdSectionEvenPage
6.7. Колонтитулы — объект HeaderFooters 353 6.7. Колонтитулы — объект HeaderFooters Колонтитулы (верхние и нижние) можно определить для каж- дого раздела отдельно. Кроме того, можно раздельно задать колонтитулы для первой страницы раздела, для четных и не- четных страниц. 6.7.1. Свойства Е sis Возвращает булево значение True, если указанный колон- титул существует (и False в противном случае). Пример 'Если верхний колонтитул для четных страниц '1-го раздела существует, то сообщить If MyDoc.Sections.First.Headers( _ wdHeaderFooterEvenPages).Exists Then MsgBox "Верхний колонтитул существует" End If 'Если нижний колонтитул для четных страниц '1-го раздела существует, то сообщить If MyDoc.Sections.First.Footers( wdHeaderFooterEvenPages).Exists Then MsgBox "Нижний колонтитул существует" End If Link T&Prvviouat Возвращает и позволяет задать булево значение, опреде- ляющее (True), что указанный колонтитул связан с колон- титулом в предыдущем разделе (в этом случае их содер- жимое будет идентичным). 12 1855
354 6.8. Абзацы (параграфы) — объект Paragraph Пример 'Связать колонтитул с колонтитулом 'предыдущего раздела MyDoc.Sections(2).Headers( wdHeaderFooterEvenPage).LinkToPrevious = True Range ' ' Возвращает текст указанного колонтитула. Пример MyDoc.Sections(2).Headers( wdHeaderFooterEvenPage).Range.Copy 6.8. Абзацы (параграфы) — объект Paragraph Любой текст состоит по меньшей мере из одного абзаца (па- раграфа). Все абзацы текста, содержащегося в документе, доступны для VBA-программы посредством коллекции Parag- raphs, которая состоит, в свою очередь, из объектов Para- graph. Обзор Абзацы нумеруются последовательно и непрерывно. Пустые абзацы также участвуют в нумерации. Новый абзац можно создать с помощью коллекции Parag- raphs.
6.8. Абзацы (параграфы) — объект Paragraph 355 Пример Процедура, исходный код которой приведен ниже, генерирует документ-заготовку для составления распорядка дня. Пункты распорядка снабжены комментариями, при этом попутно про- демонстрированы некоторые приемы форматирования абза- цев. Sub DemoProc() Dim ThePar As Paragraph Dim DT As String Dim I As Integer Dim J As Integer 'Создать новый документ Documents.Add For I = 1 To 5 DT = DT + "Пункт " & CStr(I) & vbTab & "и т.д. и т.п." & vbCr For J = 1 To 5 DT = DT + " Комментарий к пункту распорядка;" Next DT = DT & vbCr Next ActiveDocument.Range = DT 'Форматировать все абзацы For Each ThePar In ActiveDocument.Paragraphs 'Пункт или комментарий? If Left(ThePar.Range, 5) = "Пункт" Then With ThePar .SpaceBefore = 14 .SpaceAfter = 6 .Leftindent = CentimetersToPoints(2) .FirstLinelndent = CentimetersToPoints(-2) .KeepWithNext = True .Range.Font.Bold = True .Range.Font.Size = 14 End With
(gOlPfeWliW 356 6.8. Абзацы (параграфы) — объект Paragraph Else With ThePar .Leftindent = CentimetersToPoints(2) .Range.Font.Size = 12 End With End If Next End Sub 6.8.1. Свойства Alignment Определяет режим выравнивания в абзаце. Пример 'Задать для третьего абзаца правое выравнивание MyDoc.Paragraphs(1).Alignment = _ wdAlignParagraphRight Borders Возвращает коллекцию объектов типа Border, определяю- щих вид границ абзацев. Пример 'Заключить первый абзац в рамку стиля "3D" MyDoc.Paragraphs(1).Borders.OutsideLineStyle= wdLineSyleEmboss3D
6.8. Абзацы (параграфы) — объект Paragraph 357 Count Возвращает число абзацев в документе (для коллекции Paragraphs). Пример Dim Num As Long Dim Par As Paragraph Num = 0 For Each Par In MyDoc.Paragraphs If Len(Par.Range) 1 Then Num = Num + 1 End If Next MsgBox "Из " & MyDoc.Paragraphs.Count & _ " абзацев ” & Num & " содержат текст." Буквица (большая буква в начале абзаца). Пример 'Перевести первый символ первого абзаца 'в режим буквицы MyDoc.Paragraphs.First.DropCap.Enable First '• Возвращает первый абзац документа (для коллекции Pa- ragraphs). • С таким же успехом можно воспользоваться выражени- ем Paragraphs! 1).
358 6.8. Абзацы (параграфы) — объект Paragraph Пример 'Задать для первого абзаца правое выравнивание MyDoc.Paragraphs.First.Alignment = _ wdAlignParagraphRight Firs t Line Indent Определяет отступ первой строки абзаца в пунктах. • Положительные значения определяют отступ первой стро- ки абзаца. • Отрицательные значения используются для задания от- ступа висячих строк. Пример 'Отступ висячей строки: 1.25 см. MyDoc.Paragraphs(1).FirstLinelndent = CentimetersToPoints(-1.25) Format Возвращает объект типа ParagraphFormat, служащий для форматирования абзаца. • Форматирование абзаца можно осуществлять копиро- ванием объекта типа ParagraphFormat. Пример 'Создать формат Dim ParForm As New ParagraphFormat With ParForm .Alignment = wdAlignParagraphCenter
6.8. Абзацы (параграфы) — объект Paragraph 359 .KeepWithNext = True .SpaceAfter = 18 End With 'Отформатировать первый абзац MyDoc.Paragraphs(1).Format = ParForm Hyphenation Включает (True) или исключает (False) абзац из сферы дей- ствия автоматического переноса. Пример 'Запретить автоперенос в первом абзаце MyDoc.Paragraphs(1).Hyphenation = False KvepTogether Запрещает (True) вставлять разрыв страницы в пределах указанного абзаца при разбивке на страницы. Соответст- вует флажку не разрывать абзац вкладки Положение на странице диалога Формат / Абзац. Пример 'Разрешить разрыв страницы MyDoc.Paragraphs(1).KeepTogether = False [Ke&pWithN&xt Определяет (True), что указанный абзац при разбивке на страницы должен в любом случае оказаться на одной странице со следующим. Соответствует флажку не отры- вать от следующего вкладки Положение на странице диалога Формат / Абзац.
360 6.8. Абзацы (параграфы) — объект Paragraph Пример 'Следующий абзац на той же странице MyDoc.Paragraphs(1).KeepWithNext = True Last Возвращает последний абзац (для коллекции Paragraphs). Пример 'Вставить текст после последнего абзаца MyDoc.Paragraphs.Last.Range.InsertAfter "Какой-то текст" Leftfiictent Определяет левый отступ в пунктах. Пример 'Установить отступ для второго абзаца 'равным 3 см. MyDoc.Paragraphs(2).Leftindent = _ CentimetersToPoints(3) lutlit,eLevel Определяет уровень абзаца в документе (имеет значение только для режима просмотра Вид / Структура).
6.8. Абзацы (параграфы) — объект Paragraph 361 Пример '5-й абзац на 2-й уровень MyDoc.Paragraphs(5).OutlineLevel = wd0utlineLeve!2 PageBreakBefore Определяет (True), что абзац должен начинаться с новой страницы. Соответствует флажку с новой страницы вклад- ки Положение на странице диалога Формат / Абзац. Пример 'С новой страницы MyDoc.Paragraphs(2).PageBreakBefore = True Range Возвращает текст абзаца в форме Range-объекта.. Пример 'Выделить первый абзац жирным MyDoc.Paragraphs(1).Range.Bold = True Rightindent Определяет правый отступ в пунктах.
(gOlPfeWliW 362 6.8. Абзацы (параграфы) — объект Paragraph Пример 'Установить отступ для второго абзаца 'равным 3 см. MyDoc.Paragraphs(2).Rightindent = _ CentimetersToPoints(3) Shjdintj Возвращает одноименный объект, обеспечивающий до- ступ к параметрам штриховки. Пример 'Штриховка 15% MyDoc.Paragraphs(1).Shading.Texture = wdTexturel5Percent CpaceAfte I Определяет интервал после абзаца в пунктах. Соответст- вует счетчику после вкладки Отступы и интервалы диа- лога Формат / Абзац. Пример 'Установить интервал после 1-го абзаца равным '24 пунктам MyDoc.Paragraphs(1).SpaceAfter = 24
6.8. Абзацы (параграфы) — объект Paragraph 363 Spac&Btffore Определяет интервал перед абзацем в пунктах. Соответ- ствует счетчику Перед вкладки Отступы и Интервалы диалога Формат / Абзац. Пример 'Установить интервал перед 1-м абзацем 'равным 24 пункта MyDoc.Paragraphs(1).SpaceBefore = 24 Style Содержит имя стиля, назначенного для абзаца. Пример 'Задать стиль 1-го абзаца - заголовок MyDoc.Paragraphs(1).Style = "Заголовок 1" TabStups Возвращает одноименную коллекцию, содержащую все позиции табуляции в абзаце. Пример 'Добавить позицию табуляции через '2 см. с выравниванием по центру MyDoc.Paragraphs(1).Tabstops.Add _ CentimetersToPoints(2) , wdAlignTabCenter
364 6.8. Абзацы (параграфы) — объект Paragraph 6.8.2. Методы АдсЦОбъектДо) Параметр Назначение ОбъектДо Range-объект, указывающий на объект, перед ко- торым должен быть вставлен новый абзац (по умолчанию - в конец) Комментарий Создает новый (пустой) параграф (для коллекции Parag- raphs). Пример 'Новый параграф перед выделенной областью MyDoc.Paragraphs.Add Selection OutlineDemote Комментарий Переводит абзац на следующий уровень вложенности в структуре документа. Пример MyDoc.Paragraphs(1).OutlineDemote
6.8. Абзацы (параграфы) — объект Paragraph 365 CutHneCemoteToBody Комментарий Переводит абзац на уровень основного текста заданием стиля «Normal». Пример MyDoc.Paragraphs(1).OutlineDemoteToBody ОиШг. (Promote Комментарий Переводит абзац на предыдущий уровень вложенности в структуре документа. Пример MyDoc.Paragraphs(1).OutlinePromote 4ese* Комментарий Удаляет все следы ручного форматирования из абзаца. Не влияет на параметры форматирования, определенные заданным стилем.
366 6.9. Предложения — коллекция Sentences Пример 'Вернуть абзац к первоначальному виду MyDoc.Paragraphs(1).Reset 6.9. Предложения — коллекция Sentences Все предложения текста можно рассматривать в форме набо- ра Range-объектов, которые возвращает коллекция Sentences. 6.9.1. Свойства Count Количество предложений в документе. Пример MsgBox "Число предложений в тексте: " & MyDoc.Sentences.Count First Возвращает первое предложение документа. Пример 'Выделить первое предложение курсивом MyDoc.Sentences.First.Italic = True
6.10. Отдельные слова — коллекция Words 367 Last Возвращает последнее предложение документа. Пример 'Выделить последнее предложение курсивом MyDoc.Sentences.Last.Italic = True 6.10. Отдельные слова — коллекция Words Подобно предложениям все слова текста можно рассматри- вать в форме набора Range-объектов, объединенных в кол- лекцию Words. 6.10.1. Свойства Count Количество слов в документе. Пример MsgBox "Число слов в тексте: " & MyDoc.Words.Count First Возвращает первое слово документа. Пример 'Выделить первое слово жирным MyDoc.Words.First.Bold = True
368 6.11. Текст документа и объект Range Last Возвращает последнее слово документа. Пример 'Выделить последнее слово жирным MyDoc.Words.Last.Bold = True 6.11. Текст документа и объект Range Range является базовым объектом в операциях редактирова- ния текста. Его можно рассматривать, как определенный тем или иным образом непрерывный фрагмент текста (никак не связанный с выделенной областью), который не зависит от положения курсора. Какой именно фрагмент текста будет со- держаться в Range-объекте—зависит от того, к какой коллек- ции или к какому объекту он относится (слова, предложения, выделенная область и др.). От этого же зависит набор мето- дов и свойств, которым обладает возвращенный коллекцией Range-объект. Пример Обратите внимание на тот факт, что в первой и последней строках исходного кода объект Range указан явным образом и в то же время во втором и третьем случаях слово Range отсут- ствует: элементы коллекций Sentences и Words сами по себе являются объектами типа Range. 'Вставить текст после 5-го абзаца MyDoc.Paragraphs(5).Range.InsertAfter _ "Новый текст" 'Вставить текст после 5-го предложения MyDoc.Sentences(5).InsertAfter "Новый текст"
6.11. Текст документа и объект Range 369 'Вставить текст после 5-го слова MyDoc.Words(5).InsertAfter "Новый текст" 'Выделить жирным символы с 10-го по 15-й MyDoc.Range(10,15).Bold = True 6.11.1. Свойства Bold Задает (True) для шрифта начертание «жирный». Пример MyDoc.Sentences(1).Bold = True Borders Возвращает коллекцию объектов типа Border, определяю- щих вид границ объекта. Пример MyDoc.Sentences(1).Borders.OutsideLineStyle = wdLineSyleEmboss3D Case Определяет регистр символов текста. Пример 'Преобразовать символы первого предложения 'в верхний регистр MyDoc.Sentences(1).Case = wdUpperCase
370 6.11. Текст документа и объект Range Font Возвращает одноименный объект, обеспечивающий до- ступ к параметрам шрифта. Пример 'Первый абзац — шрифт Arial MyDoc.Sentences(1).Font.Name = "Arial" HiyhlightCok>rlndax Определяет цвет выделения (подсветки). Пример 'Выделять зеленым MyDoc.Sentences(1).Highlightcolorindex = wdBrightGreen Italic Задает для шрифта начертание «курсив». Пример MyDoc.Sentences(1).Italic = True St&ryLength Возвращает длину (в символах) структурного компонента.
6.11. Текст документа и объект Range 371 Пример MsgBox Selection.StoryLength StciryType Определяет вид структурного компонента. Пример 'Если выделенная область является сноской, то.. If Selection.StoryType = wdFootnoteStory Then MsgBox "Сноска" End If Style Определяет стиль текста. Пример 'Задать для выделенного текста стиль — обычный 1 Selection.Style = "Normal 1" Text Возвращает неформатированный текст. Пример 'Передать в строковую переменную "голый" текст '1-го абзаца MyString = MyDoc.Sentences(1).Text
372 6.11. Текст документа и объект Range Undertine Задает для шрифта наличие атрибута «подчеркнутый» и его разновидность. Пример MyDoc.Sentences(1).Underline = wdUnderlineDouble 6.11.2. Методы CheckGrammar Комментарий Осуществляет проверку орфографии и грамматики. Обнаружив ошибку, открывает диалог Правописание. Пример 'Проверка 2-го абзаца MyDoc.Sentences(2).CheckGrammar Ch&ckSpelling(СлаваргЛотзоаателя, ИгнйрировагъРегисгр, ПредлагатьВарианты, СлоаарьПатл<мателя2 -• *' г 'ливарьПользователя 10) Пример 'Проверить текст второго предложения MyDoc.Sentences(2).Checkspelling
6.11. Текст документа и объект Range 373 Комментарий Проверяет текст, возвращает значение True, если ошибок не обнаружено, и False в противном случае. Параметр Назначение Словарь Пользователя Имя файла словаря или объект типа Dictionary ИгнорироватьРегисгр Значение True влечет игнорирование регистра символов - различия между малыми и большими литерами де- латься не будут Предлагать Варианты Определяет, что Word должен (True) предлагать варианты замены СловарьПользователя2 - Имя файла словаря или объект типа Dictionary СловарьПользователяЮ Можно задать до 9 дополнительных словарей СоЬарзе'Напр'Увление) Параметр Назначение Направление Направление сворачивания Комментарий Сворачивает выделенную область или область, определя- емую Range-объектом, к начальной или конечной позиции. • После вызова метода начальная и конечная позиции сов- падают.
374 6.11. Текст документа и объект Range Пример Dim myRange As Range Set myRange = ActiveDocument.Paragraphs(1).Range myRange.Collapse(wdCollapseEnd) ConvertToТаЬ1е(Разделител1>, ЧислоСтрок, ЧмслоСталбцан, НэчальнаяШиринаСталбца, Формат, Границы, Штрихоака, Шрифт, Цвет, ЗаглаанаяСтрока, ПосладняяСтроха, . ПервыйСтолбиц, ПоследнийСтолбец, АвтоШирина) Параметр Назначение Разделитель Константа, определяющая, какой символ в исходном фрагменте текста следует считать разделителем ЧислоСтрок Число строк в таблице ЧислоСтолбцов Число столбцов НачальнаяШирина- Столбца Ширина столбца при формировании таб- лицы Формат Константа Границы Булево значение, разрешающее использо- вать связанные с границами свойства за - данного формата Штриховка Булево значение, разрешающее использо - вать связанные со штриховкой свойства за- данного формата Шрифт Булево значение, разрешающее использо- вать связанные с шрифтом свойства задан - ного формата
6.11. Текст документа и объект Range 375 Параметр Назначение Цвет Булево значение, разрешающее использо- вать связанные с цветом свойства заданно- го формата ЗаглавнаяСтрока Булево значение, разрешающее использо- вать связанные с заглавной строкой свой - ства заданного формата ПоследняяСтрока Булево значение, разрешающее использо- вать связанные с последней строкой свой- ства заданного формата ПервыйСтолбец Булево значение, разрешающее использо- вать связанные с первым столбцом свойст- ва заданного формата ПоследнийСтолбец Булево значение, разрешающее использо- вать связанные с последним столбцом свойства заданного формата АвтоШирина Разрешает (True) автоматически управлять шириной столбцов Комментарий Преобразует фрагмент текста, заданный Range-объектом, в таблицу. ♦ Все параметры необязательны, большинство из них определяют детали оформления таблицы. Пример 'Преобразовать выделенную область 'в таблицу (3 столбца) Selection.ConvertToTable wdSeparateByTabs, 3, 3
376 6.11. Текст документа и объект Range Сар) Комментарий Копирует фрагмент текста в буфер обмена. Пример 'Скопировать в буфер 2-е предложение MyDoc.Sentences (2) .Copy Cut Комментарий Переносит (вырезает) фрагмент текста в буфер обмена. Пример 'Перенести в буфер 2-е предложение MyDoc.Sentences(2).Cut Delete Комментарий Удаляет фрагмент текста, определенный Range-объектом. Пример 'Удалить 2-е предложение MyDoc.Sentences(2).Delete
6.11. Текст документа и объект Range 377 Detecttenyvage Комментарий Позволяет автоматически распознать язык указанного фраг- мента (см. описание данного метода для объекта Docu- ment в п. 6.5.3). ЕпбОЦВидОбъекта. П^реш'сРасширнние); Параметр Назначение ВидОбъекта Константа, определяющая вид структур- ной единицы (абзац, предложение и т. д.) ПереносРасширение Константа, определяющая, должно ли вы- полняться расширение или перенос Комментарий Выполняет перенос или расширение конечной позиции определенного Range-объектом фрагмента текста на ко- нец заданной структурной единицы текста. • Возвращает число символов, на которые был фактичес- ки произведен перенос или расширение. Пример 'Выделить до конца слова NumChar = Selection.EndOf(wdWord, wdExtend) 'Выделить до конца предложения NumChar = Selection.EndOf(wdSentence, wdExtend) 'Поместить курсор в конец абзаца NumChar = Selection.EndOf(wdParagraph, wdMove)
378 6.11. Текст документа и объект Range ЕхрапР(ВидОбъекта) Параметр Назначение ВидОбъекта Константа, определяющая вид структурной еди- ницы текста Комментарий Расширяет сферу действия Range-объекта до границ струк- турной единицы текста. Пример Selection.Expand wdParagraph InRangef Range-объект) Параметр Назначение Range-объект Range-объект, область действия которого подле- жит анализу Пример 'Если выделен фрагмент внутри первого 'предложения, то ... If Selection.InRange(MyDoc.Sentences(1)) Then MsgBox "O.K." End If
6.11. Текст документа и объект Range 379 Комментарий Возвращает булево значение True, если фрагмент, опре- деляемый тем Range-объектом, метод InRange которого вызван, расположен внутри фрагмента, определенного объ- ектом-параметром. InsertA Her (Текст) < Параметр Назначение Текст Текст, подлежащий вставке Комментарий Выполняет вставку текста после фрагмента, определенно- го тем Range-объектом, метод InsertAfter которого вызван. Пример 'Вставить текст после первого предложения MyDoc.Sentences(1).InsertAfter "Новый текст" tosei tBe л е(Тексг) Параметр Назначение Текст Текст, подлежащий вставке Комментарий Выполняет вставку текста перед фрагментом, определен- ным тем Range-объектом, метод InsertBefore которого вы- зван.
(gOlPfeWliW 380 6.11. Текст документа и объект Range Пример 'Вставить текст перед последним предложением MyDoc.Sentences.Last.InsertBefore "Новый текст" nsertBre^BnnPasnuBa' Параметр Назначение ВидРазрыва Константа, определяющая вид разрыва Комментарий Вставляет разрыв заданного вида в текст вместо фрагмента, определенного Range-объектом. Пример 'Вставить разрыв страницы вместо выделенной 'области Selection.Range.InsertBreak wdPageBreak In ertDnte TimefGopMar, КакПьле) Параметр Назначение Формат Формат значения даты-времени КакПоле Разрешает (True) вставку даты-времени в виде поля TIME
6.11. Текст документа и объект Range 381 Комментарий Выполняет вставку значения даты или времени в текст. Пример Selection.Range.InsertDateTime "дддд, д, мммм гггг", False 'nseH$ тЬэ1(Код Символе Шрифт, Unir^dt Параметр Назначение КодСимвола Код символа, подлежащего вставке Шрифт Имя шрифта Unicode Разрешает (True) интерпретировать код символа как Unicode Комментарий Выполняет вставку в текст заданного символа. Пример 'Вставить перед первым предложением символ 75 MyDoc.Sentences(1).Insertsymbol 75, "Wingdings"
382 6.11. Текст документа и объект Range Моув(ВидОбъекта, ЧислаШапзв) Параметр Назначение ВидОбъекта Константа, определяющая вид структурной еди- ницы текста ЧислоШагов Число единиц, на которые следует переместить фрагмент Комментарий Сворачивает определенный Range-объектом фрагмент к его начальной или конечной позиции и перемещает его на заданное число структурных единиц текста. • Возвращает число фактически выполненных шагов сдвига. Пример 'Переместить выделенную область 'на два абзаца вперед NumUnit = Selection.Move(wdParagraph, 2) МиуеВмЦВйдОЗъскта,, ЧислоШагоа) Параметр Назначение 1 ВидОбъекта Константа, определяющая вид структурной едини- цы текста ЧислоШагов Число единиц, на которые следует переместить позицию
6.11. Текст документа и объект Range 383 Комментарий Переносит конечную позицию фрагмента, определенного Range-объектом, на заданное число структурных единиц текста. • Размер фрагмента при этом увеличивается, если значе- ние параметра ЧислоШагов положительное. Пример 'Расширить выделенную область до конца слова NumUnit = Selection.MoveEnd(wdWord, 1) MaveEnc/UntilfCnMaonu, ДальностьПоиска) Параметр Назначение Символы Строковое значение - один или несколько символов ДальностьПоиска Число символов, ограничивающее дальность поиска Комментарий Переносит конечную позицию фрагмента, определенного Range-объектом, до тех пор, пока не встретится один из заданных символов или не будет превышено максималь- ное число шагов поиска (необязательный параметр Даль- ностьПоиска).
384 6.11. Текст документа и объект Range Пример 'Расширить выделенную область до символа "А" NumUnit = Selection.MoveEndUntil("А") Mc»'eFndWnile‘(CttMBonu) Цальноат^По^ска) Параметр Назначение Символы Строковое значение - один или несколько символов ДальностьПоиска Число символов, ограничивающее дальность поиска Комментарий Переносит конечную позицию фрагмента, определенного Range-объектом, до тех пор, пока не встретится символ, отличный от любого из заданных или не будет превышено максимальное число шагов поиска (необязательный пара- метр ДальностьПоиска). Пример 'Расширить выделенную область до первого 'нецифрового символа NumUnit = Selection.MoveEndWhile("1234567890")
6.11. Текст документа и объект Range 385 M<jveStart(Bn^(.)(ibeKTd, ЧислоШагов) Параметр Назначение ВидОбъекта Константа, определяющая вид структурной еди- ницы текста ЧислоШагов Число единиц, на которые следует переместить позицию Комментарий Переносит начальную позицию фрагмента, определенно- го Range-объектом, на заданное число структурных еди- ниц текста. • Размер фрагмента при этом уменьшается, если значе- ние параметра ЧислоШагов положительное. Пример 'Перенести начало выделенной области 'на одно слово NumUnit = Selection.MoveStart(wdWord, 1) MoveStartUntilfCHMBonu. ДальностьПоиска) Параметр Назначение Символы Строковое значение - один или несколько сим- волов Дальность- Поиска Число символов, ограничивающее дальность по- иска 13 1855
386 6.11. Текст документа и объект Range Комментарий Переносит начальную позицию фрагмента, определенно- го Range-объектом, до тех пор, пока не встретится один из заданных символов или не будет превышено максималь- ное число шагов поиска (необязательный параметр Даль- ностьПоиска). Пример 'Сократить выделенную область до символа "А" NumUnit = Selection.MoveStartUntil("А") MoveStartWhile(CnMaani.i, ДальностьПоиска) Параметр Назначение Символы Строковое значение — один или несколько символов ДальностьПоиска Число символов, ограничивающее даль- ность поиска Комментарий Переносит начальную позицию фрагмента, определенно- го Range-объектом, до тех пор, пока не встретится сим- вол, отличный от любого из заданных или не будет превы- шено максимальное число шагов поиска (необязательный параметр ДальностьПоиска).
6.11. Текст документа и объект Range 387 Пример 'Сократить выделенную область до первого 'нецифрового символа NumUnit = Selection.MoveEndWhile("1234567890") Paste < Комментарий Выполняет вставку содержимого буфера обмена вместо фрагмента, определенного Range-объектом. Пример Selection.Paste Select Комментарий Выделяет фрагмент, заданный Range-объектом. Пример 'Выделить символы с 10-го по 15-й MyDoc.Range(10, 15).Select
388 6.12. Границы — коллекция Borders $1агЮ/(ВидО<5ъакгэ, ПереносРэсширениа) Параметр Назначение ВидОбъекта Константа, определяющая вид структур- ной единицы (абзац, предложение и т. д.) ПереносРасширение Константа, определяющая, должно ли вы- полняться расширение или перенос Комментарий Выполняет перенос или расширение начальной позиции определенного Range-объектом фрагмента текста на на- чало заданной структурной единицы текста. • Возвращает число символов, на которые был фактичес- ки произведен перенос или расширение (отрицательное значение в случае переноса назад). Пример 'Выделить до начала абзаца NumChar = Selection.StartOf(wdParagraph, wdExtend) 6.12. Границы — коллекция Borders Коллекция Borders представляет границы, в которые может быть заключена структурная единица текста (страница, абзац или даже одиночный символ). Примечание Коллекция Borders не допускает расширения — включить в ее состав новый Border-объект нельзя.
6.12. Границы — коллекция Borders 389 Пример 'Заключить в рамки страницы первого раздела MyDoc.Sections(1).Borders.Enable = True 'Красная рамка вокруг текущего раздела With Selection.Borders .Enable = True .OutsideColorIndex - wdRed End With 'Синяя граница сверху Selection.Borders(wdBorderTop).Colorindex = wdBlue 6.12.1. Свойства ysInFron, Определяет положение рамки страницы относительно текс- та (True соответствует варианту «рамка перед текстом»). Пример MyDoc.Sections(1).Borders.AlwaysInFront = True Artstyle Определяет вид границ для страницы (для отдельного объекта Border). Пример MyDoc.Sections(1).Borders(wdBorderBottom) .ArtStyle = wdArtStyleBalloonsHotAir
(gOlPOMW 390 6.12. Границы — коллекция Borders ArtWidth Определяет толщину линий для границ страницы в пунктах (для отдельного объекта Border). Пример MyDoc.Sections(1).Borders(wdBorderBottom) .Artwidth = 12 Cularlndex Определяет цвет границ (для отдельного объекта Border). Пример Selection.Borders(wdBorderTop).Colorindex = wdBlue OistanceFremBattum Определяет расстояние в пунктах между текстом и нижней границей. Пример Selection.Borders.DistanceFromBottom = 12 LiistanceFrainLeft И Определяет расстояние в пунктах между текстом и левой границей.
6.12. Границы — коллекция Borders 391 Пример Selection.Borders.DistanceFromLeft = 12 Oisi.anceFi’vmfMght Определяет расстояние в пунктах между текстом и правой границей. Пример Selection.Borders.DistanceFromRight = 12 BistariceFrwnTop Определяет расстояние в пунктах между текстом и верх- ней границей. Пример Selection.Borders.DistanceFromTop = 12 Enable Возвращает и позволяет задать булево значение, опреде- ляющее наличие границ. Пример MyDoc.Sections(1).Borders.Enable = True
(gOlPfeWliW 392 6.12. Границы — коллекция Borders EnabluFirstPitgelnSeatibfn Возвращает и позволяет задать булево значение, опреде- ляющее наличие границ у первой страницы раздела. Пример MyDoc.Sections(1).Borders. _ EnableFirstPagelnSection = True EnableOtherPagesInSecti'jn Возвращает и позволяет задать булево значение, опреде- ляющее наличие границ у всех страниц раздела, кроме первой. Пример MyDoc.Sections(1).Borders. EnableOtherPagesInSection = True HasHorizontal ». г Возвращает булево значение True, если объект можно снабдить горизонтальными границами, и False в против- ном случае. Пример If Selection.Borders.HasHorizontal Then MsgBox "горизонтальные границы возможны." End If
6.12. Границы — коллекция Borders 393 HasVcrtiaal Возвращает булево значение True, если объект можно снабдить вертикальными границами, и False в противном случае. Пример If Selection.Borders.HasVertical Then MsgBox "вертикальные границы возможны" End If Inaide Возвращает булево значение True, если объект можно снабдить внутренними границами, и False в противном случае (для отдельного объекта Border). Пример If Selection.Borders(wdBorderBottom). Inside Then MsgBox "внутренние границы возможны" End If InsideColorlndex Определяет цвет внутренних границ. Пример Selection.Borders.InsideColorlndex = wdBlue
394 6.12. Границы — коллекция Borders InsideLineStyle Определяет наличие и стиль внутренних границ. Пример Selection.Borders.InsideLineStyle = wdLineStyleDouble JuinBunlcrs Разрешает (True) горизонтальным границам абзаца со- прикасаться с вертикальными границами страницы (вер- тикальные границы абзаца при этом удаляются). Пример MyDoc.Sections(1).Borders.JoinBorders = True LintiStylv 2 ‘ Определяет стиль линий для границ (для отдельного объ- екта Border). Пример Selection.Borders(wdBorderLeft).Linestyle = wdLineStyleDouble LinaWictth Определяет толщину линий для границ (для отдельного объекта Border).
(gOlPOMW 6.12. Границы — коллекция Borders 395 Пример г Selection.Borders(wdBorderLeft).Linewidth = wdLineWidth300pt OutsideColorlndex Определяет цвет внешних границ. Пример Selection.Borders.OutsideColorIndex = wdBlue JutsideLineStyle Определяет стиль линий для внешних границ. Пример Selection.Borders.OutsideLineStyle = _ wdLineStyleDashDot OutxideLineWidth Определяет толщину линий для внешних границ. Пример Selection.Borders.OutsideLineWidth = _ wdLineWidthl50pt
396 6.12. Границы — коллекция Borders Shaduw Разрешает изображение тени для границ. Пример Selection.Borders.Shadow = True SurruunJFo'jter Я Разрешает (True) границам страницы охватывать нижний колонтитул. Пример MyDoc.Sections(1).Borders.SurroundFooter - True SurruuniiHeuder Разрешает (True) границам страницы охватывать верхний колонтитул. Пример MyDoc.Sections(1).Borders.SurroundHeader = True 6.12.2. Методы ApplyPa<je4orders'!'oAllS -dns Комментарий Распространяет форматирование границ на все разделы документа.
6.13. Управление табуляцией — объект TabStop 397 Пример MyDoc.Sections(1).Borders. ApplyPageBordersToAllSections 6.13. Управление табуляцией — объект TabStop Объект TabStop представляет позицию табуляции. Все объ- екты TabStop данного абзаца или группы абзацев объедине- ны в коллекцию TabStops. 6.13-1. Свойства Alignment Определяет режим выравнивания в данной позиции табу- ляции. Пример MyDoc.Paragraphs(1).TabStops(1).Alignment = wdAlignTabRight CustomTan Возвращает булево значение True, если позиция табуляции определена пользователем, и False в противном случае. Пример If MyDoc.Paragraphs(1).TabStops(1). CustomTab Then MsgBox "CustomTub" End If
398 6.13. Управление табуляцией — объект TabStop Leader Определяет тип заполнителя для позиции табуляции. Пример 'Задать тип заполнителя:... MyDoc.Paragraphs(1).TabStops(l).Leader = wdTabLeaderDots Position Определяет расстояние от левого края абзаца до позиции табуляции в пунктах. Пример MyDoc.Paragraphs(1).TabStops(1).Position = CentimetersToPoints(2) 6.13.2. Методы ^ежимвыравниванля, '^полнитем) Параметр Назначение Отступ Расстояние от левого края абзаца до пози - ции табуляции в пунктах Режим- Выравнивания Константа, определяющая режим выравни- вания Заполнитель Константа, определяющая тип заполнителя
6.13. Управление табуляцией — объект Tabstop 399 Комментарий Вставляет в текст новую позицию табуляции с заданными параметрами в коллекцию TabStops. Пример MyDoc.Paragraphs(1).TabStops.Add CentimetersToPoints(2), wdAlFgnTabCenter, wdTabLeaderDots Cl&ar Комментарий Удаляет заданную позицию табуляции. Пример MyDoc.Paragraphs(1).TabStops(1).Clear CiearAJ Комментарий Удаляет все определенные пользователем позиции табу- ляции из коллекции TabStops. Пример MyDoc.Paragraphs(1).TabStops.ClearAll
400 6.14. Форматирование символов — объект Font 6.14. Форматирование символов — объект Font Свойства и методы объекта Font служат для форматирования символов и управления шрифтами. 6.14.1. Свойства AllCaps Возвращает и позволяет задать значение, определяющее регистр символов: True соответствует верхнему, False — нижнему, wdToggle — противоположному. Пример MyDoc.Sentences(1).Font.AllCaps = True Animation Определяет наличие анимации шрифта и ее тип. Пример MyDoc.Sentences(1).Font-Animation = _ wdAnimationLasVegasLights Ml Задает начертание «жирный» для шрифта. Пример MyDoc.Sentences(1).Font.Bold = True
6.14. Форматирование символов — объект Font 401 Borders Возвращает одноименную коллекцию, служащую для управ- ления границами. Пример MyDoc.Sentences(1).Font.Borders.Enable = True Colorindex Определяет цвет символов. Пример MyDoc.Sentences(1).Font.Colorindex = wdDarkBlue DoubleSzril.eThreugt' Задает эффект «двойное зачеркивание» для символов. Пример MyDoc.Sentences(1).Font.DoubleStrikeThrough = True Duplicate Возвращает объект типа Font, обладающий идентичным форматированием.
402 6.14. Форматирование символов — объект Font Пример 'Скопировать форматирование 2-го предложения 'из 1-го MyDoc.Sentences(2).Font = _ MyDoc.Sentences(1).Font.Duplicate Cmbos Задает эффект «приподнятый» для символов. Пример MyDoc.Sentences(1).Font.Emboss = True Engruve Задает эффект «утопленный» для символов. Пример MyDoc.Sentences(1).Font.Engrave = True Hidden Задает эффект «скрытый» для символов. Пример MyDoc.Sentences(1).Font.Hidden = True
6.14. Форматирование символов — объект Font 403 | Italic Задает для шрифта начертание «курсив». Пример MyDoc.Sentences(1).Font.Italic = True Kerning Определяет наименьший размер шрифта, для которого кер- нинг будет выполняться автоматически. Пример MyDoc.Sentences(1).Font.Kerning = 24 Name Определяет имя шрифта. Пример MyDoc.Sentences(1).Font.Name = "Arial" Jutline Задает эффект «контур» для символов. Пример MyDoc.Sentences(1).Font-Outline = True
404 6.14. Форматирование символов — объект Font Position Определяет смещение символов в пунктах (положитель- ные значения соответствуют смещению вверх, отрицате- льные — вниз). Пример MyDoc.Sentences(1).Font.Position = 3 Scaling Определяет масштаб отображения символов. • Значения задаются в процентах от нормального размера. Пример MyDoc.Sentences(1).Font.Scaling = 150 Shading Возвращает объект, служащий для управления штрихов- кой символов. Пример MyDoc.Sentences(1).Font.Shading.Texture = _ wdTexturel5Percent Shadow Задает эффект «с тенью» для символов.
(gOlPfeWliW 6.14. Форматирование символов — объект Font 405 Пример MyDoc.Sentences(1).Font.Shadow = True Size Определяет размер шрифта в пунктах. Пример MyDoc.Sentences(1).Font.Size = 24 SmeUCeps Возвращает и позволяет задать значение, определяющее регистр символов: True соответствует нижнему, False — верхнему, wdToggle — противоположному. Пример MyDoc.Sentences(1).Font.SmallCaps = True Определяет интервал между символами в пунктах. Пример MyDoc.Sentences(1)-Font.Spacing = 3
406 6.14. Форматирование символов — объект Font Strike Through Задает эффект «зачеркнутый» для символов. Пример MyDoc.Sentences(1).Font.StrikeThrough = True Subscript Задает эффект «нижний индекс» для символов. Пример MyDoc.Sentences(1).Font.Subscript = True Superscript Задает эффект «верхний индекс» для символов. Пример MyDoc.Sentences(1).Font.Superscript = True Underline Определяет наличие и тип подчеркивания для символов. Пример MyDoc.Sentences(1).Font.Underline = wdUnderlineDotted
6.14. Форматирование символов — объект Font 407 UndbrlineColo Определяет цвет подчеркивания для символов. Пример MyDoc.Sentences(1).Font.Underlinecolor = wdColorBlue 6.14.2. Методы (Iruw Комментарий Увеличивает размер шрифта до следующего из доступных. Пример MyDoc.Sentences(1).Font.Grow StttAsT»m^lat&Defauft_ Комментарий Определяет набор параметров форматирования символов по умолчанию. • Формат по умолчанию сохраняется в стиле «обычный». Пример MyDoc.Sentences(1).Font.SetAsTemplateDefault
(gOlPfeWliW 408 6.15. Пример форматирования Shrink - - - Комментарий Уменьшает размер шрифта до следующего из доступных. Пример MyDoc.Sentences(1).Font.Shrink 6.15. Пример форматирования Приведенный ниже пример предназначен для нужд некоторой воображаемой фирмы, которая регулярно проводит семина- ры на разные темы. Каждый участник очередного семинара должен получить сертификат, удостоверяющий, что он полу- чил определенные знания. Чтобы облегчить задачу создания сертификатов, требуется процедура на языке VBA, которая формировала бы документ Word исходя из имени участника, периода времени, когда проходил семинар, и его темы. Сертификат Герр Рудольф Мейер принял участие в семинаре VBA в действии в периоде 0711.99 до 0911 99 и прослувал ряд neiojid
6.15. Пример форматирования 409 1 Переменные уровня модуля Dim TTN(1 То 10) As String 'Имена участников Dim FirstDay As Date 'Дата начала семинара Dim LastDay As Date 'Дата окончания семинара Dim TTheme As String 'Тема семинара Dim TNum As Integer 'Число участников 'Главная процедура Sub Certificate() 'формируем неизменяемый текст Const KTitle As String = "Сертификат" & vbCr Const KEinl As String = _ "принял участиев семинаре" & vbCr Const KTime As String = "в период с" & vbCr Const KAusl As String = _ "и прослушал рядлекций" & vbCr Const KSign As String = _ "Подпись участника семинара" & vbCr 'Объявить переменные Dim TheDoc As Document 'Сам документ Dim TheBord As Border 'Рамка Dim TheText As String 'Общий текст Dim I As Integer 'Подготовить исходные данные о семинаре FilllnputData 'Главный цикл - по участникам семинара For I = 1 То TNum 'Создать новый документ для очередного участника Set TheDoc = Documents.Add 'Задать границы For Each TheBord In TheDoc.Sections(1).Borders With TheBord .Artstyle = wdArtCornerTriangles .Artwidth = 18 .ColorIndex = wdGray50
410 6.15. Пример форматирования End With Next 'Подготовить полный текст сертификата TheText = KTitle & TIN(I) & vbCr & KEinl TheText = TheText & TTheme & vbCr & KTime TheText = TheText & FirstDay & " до " & LastDay & vbCr TheText = TheText & KAusl & KSign 'Поместить текст в документ TheDoc.Range = TheText 1 Вначале общее форматирование With TheDoc.Content 'Шрифт With .Font .Name = "Arial" .Size = 22 End With 'Выравнивание и поля With .ParagraphFormat .Alignment = wdAlignParagraphCenter .SpaceBefore = 12 .SpaceAfter = 12 End With End With 'Теперь отдельно форматировать заголовок With TheDoc.Paragraphs(1) .Alignment = wdAlignParagraphCenter .SpaceBefore = 42 .SpaceAfter = 56 With .Range.Font .Name = "Arial" .Size = 56 .Bold = True .Shadow = True .Spacing = 4 .Kerning = 12
6.15. Пример форматирования 411 End With End With 'Выделить жирным тему семинара TheDoc.Paragraphs(4).Range.Font.Bold = True 'Последний абзац — место для подписи With TheDoc.Paragraphs.Last.Previous .Rightindent = CentimetersToPoints(10) .Borders(wdBorderTop).LineStyle = _ wdLineStyleSingle .SpaceBefore = 128 With .Range.Font .Size = 12 .Spacing = 1 End With End With 'И, вместо печати, автофигура "вертикальный ' свиток" ActiveDocument.Shapes.AddShape _ msoShapeVerticalScroll, 330, 620, 200, 150 Next 'Конец главного цикла End Sub 'Процедура для ввода исходных данных Sub FilllnputData() 'Данные можно получать и другими способами, 'например, импортировать их из рабочей книги ' Excel или базы данных Access TTN(1) TTN (2) TTN(3) TTN(4) TTN(5) Герр Рудольф Мейер Фрау Сюзанна Шмидт Фрау Элке Мюллер" Герр Герхард Зедек Герр Олле Йенсен" FirstDay = "7.11.99 LastDay = "9.11.99"
412 6.16. Манипуляции с таблицами — коллекция Tables TTheme = "VBA в действии" TNum = 5 End Sub 6.16. Манипуляции с таблицами — коллекция Tables Таблица (объект типа Table) состоит из строк (объекты типа Row, объединенные в коллекцию Rows) и столбцов (объекты типа Column, объединенные в коллекцию Columns). Кроме того, таблицу можно рассматривать как набор ячеек (объек- тов типа Cell, объединенных в коллекцию Cells). 6.16.1. Свойства Borders ’ " ../У !.__У Возвращает коллекцию Borders, представляющую границы. Пример 'Разрешить отображение границ для первой таблицы MyDoc.Tables(1).Borders.Enable = True Columns ( ' Возвращает коллекцию Columns, представляющую столбцы. Пример 'Удалить первый столбец MyDoc.Tables(1).Columns(1).Delete
(gOlPOMW 6.16. Манипуляции с таблицами — коллекция Tables 413 NustingLaval Возвращает глубину вложения таблицы (колонки, строки, ячейки. Самая внешняя таблица имеет уровень 1, каждая следующая (по уровню вложения) — на 1 больше. Пример 'Индикация уровня вложения таблицы MsgBox MyDoc.Tables(1).NestingLevel Язлуе Возвращает текст, содержащийся в таблице, в форме Ran- ge-объекта. Пример MyDoc.Tables(1).Range.Font.Name = "Arial" ROWS ' Возвращает коллекцию Rows, представляющую строки. Пример 'Выделить первую строку штриховкой MyDoc.Tables(1).Rows(l).Shading.Texture = wdTexturel5Percent Shading Возвращает объект Shading, управляющий штриховкой.
(gOlPfeWliW 414 6.16. Манипуляции с таблицами — коллекция Tables Пример MyDoc.Tables(1).Shading.Texture = wdTexturelOPercent 6.16.2. Методы Add (Объект, ЧислэСтрак, ЧислоСталЙцяи) Параметр Назначение Объект Range-объект, вместо которого будет вставлена таблица ЧислоСтрок Число строк в новой таблице ЧислоСтолбцов Число столбцов в новой таблице Комментарий Создает новую таблицу с заданными параметрами и заме- няет ею фрагмент, определенный Range-объектом. Пример MyDoc.Tables.Add Selection.Range, 4, 3 АиЬэГогтаЦФьрмэт, Границы, Штриховка, Шрифт, Цвет, ЗаглэвнаяСтрока, ПоследняяСтррка, ПераыйСталбец, ГкюледнийСтол&ец, АвтоШирина) _____________________ Комментарий Форматирует таблицу (отдельный объект Table).
6.16. Манипуляции с таблицами — коллекция Tables 415 Параметр Назначение Формат Константа, определяющая формат таблицы Границы Булево значение, разрешающее использовать свя- занные с границами свойства заданного формата Штриховка Булево значение, разрешающее использовать свя - занные со штриховкой свойства заданного форма - та Шрифт Булево значение, разрешающее использовать свя - занные с шрифтом свойства заданного формата Цвет Булево значение, разрешающее использовать свя - занные с цветом свойства заданного формата Заглавная- Строка Булево значение, разрешающее использовать свя - занные с заглавной строкой свойства заданного формата Последняя- Строка Булево значение, разрешающее использовать свя- занные с последней строкой свойства заданного формата Первый- Столбец Булево значение, разрешающее использовать свя - занные с первым столбцом свойства заданного формата Последний - Столбец Булево значение, разрешающее использовать свя- занные с последним столбцом свойства заданного формата Авто- Ширина Разрешает (True) автоматически управлять шири- ной столбцов Пример MyDoc.Tables(1).AutoFormat wdTableFormatColorfull
(gOlPfeWliW 416 6.16. Манипуляции с таблицами — коллекция Tables СеЩСтрока, Столбец) Параметр Назначение Строка Номер строки । Столбец Номер столбца Комментарий Возвращает указанную ячейку в форме объекта Cell (для отдельного объекта Table). Пример MyDoc.Tables(1).Cell(1, 1).Range = "1-я ячейка" С&пуеНТоТех^Раздеяитель) - у— Параметр Назначение Разделитель Константа, определяющая символ-разделитель Комментарий Преобразует таблицу в текст, используя заданный сим- вол-разделитель (для отдельного объекта Table). • После преобразования таблица превращается в абзац. Пример MyDoc.Tables(1).ConvertToText vbTab
6.16. Манипуляции с таблицами — коллекция Tables 417 delete Комментарий Удаляет таблицу (для отдельного объекта Table). Пример MyDoc.Tables(1).Delete Select Комментарий И Выделяет таблицу (для отдельного объекта Table). Пример MyDoc.Tables(1).Select Split(CrpoKa) Параметр Назначение Строка Номер строки таблицы, перед которой должен быть вставлен разрыв Комментарий Вставляет разрыв абзаца (новый пустой абзац) перед ука- занной строкой таблицы (для отдельного объекта Table). • Возвращает Table-объект, представляющий собой вто- рую часть разбитой надвое таблицы. 14 1855
418 6.17. Столбцы таблицы — коллекция Columns Пример 'Разбить перед 3-й строкой MyDoc.Tables(1).Split(3) Updtt tv Au to Farm я t Комментарий Обновляет (восстанавливает) автоформат в отношении таблицы (для отдельного объекта Table). Пример MyDoc.Tables(1).UpdateAutoFormat 6.17. Столбцы таблицы — коллекция Columns Каждый столбец таблицы представляет собой объект типа Column, все они объединены в коллекцию Columns. 6.17.1. Свойства Borders Возвращает одноименную коллекцию, представляющую границы. Пример 'Разрешить отображение границ для первого столбца MyDoc.Tables(1).Columns(1).Borders.Enable = True
6.17. Столбцы таблицы — коллекция Columns 419 FCounf Возвращает число столбцов в таблице. Пример 'Для всех столбцов в таблице выполнить... For I = 1 То MyDoc.Tables(1).Columns.Count Next Shading Возвращает объект, управляющий штриховкой. Пример 'Заштриховать первый столбец MyDoc.Tables(1).Columns(1).Shading.Texture = wdTexturelOPercent Width И Определяет ширину столбца в пунктах (для отдельного объекта Column). Пример MyDoc.Tables(1).Columns(1)-Width = 35
МЯИИ 420 6.17. Столбцы таблицы — коллекция Columns 6.17.2. Методы АМ(Сгилбац) : Параметр Назначение Столбец Столбец (Column-объект), перед которым необходи- мо вставить новый столбец Комментарий Вставляет новый столбец в указанную позицию. Пример MyDoc.Tables(1).Columns.Add MyDoc.Tables(1) .Columns(3) AutoFit - ' - — /• !• Комментарий Автоматически оптимизирует ширину столбца. Пример MyDoc.Tables(1).Columns(1).AutoFit Delate Комментарий Удаляет столбец.
6.18. Строки таблицы — коллекция Rows 421 Пример MyDoc.Tables(1).Columns(1).Delete Distribute Width Комментарий Уравнивает столбцы по ширине. Пример MyDoc.Tables(1).Columns.DistributeWidth Select Комментарий Выделяет столбец. Пример MyDoc.Tables(1).Columns(1).Select 6.18. Строки таблицы — коллекция Rows Каждая строка таблицы представляет собой объект типа Row, все они объединены в коллекцию Rows.
422 6.18. Строки таблицы — коллекция Rows 6.18.1. Свойства Alignment Определяет режим выравнивания в строке. Пример MyDoc.Tables(1).Rows(l).Alignment = wdAli gnRowCen te r ДПиыВгеэкАсгшзРэдез___________ Разрешает (True) или запрещает (False) вставку разрыва страницы в тексте строки. Пример MyDoc.Tables(1).Rows(1).AllowBreakAcrossPage = True Borders Возвращает коллекцию, предназначенную для управления границами. Пример 'Разрешить отображение границ для 1-й строки MyDoc.Tables(1).Rows(1).Borders.Enable = True
6.18. Строки таблицы — коллекция Rows 423 Count Определяет число строк в таблице. Пример 'Для всех строк в таблице выполнить... For I = 1 То MyDoc.Tables(1).Rows.Count Next HeactingFormat Определяет строку как заглавную. Пример MyDoc.Tables(1).Rows(1).HeadingFormat = True Haight Определяет высоту строки в пунктах. • Возвращаемое значение зависит от свойства HeightRule. Пример MyDoc.Tables(1).Rows(1).Height = 12 HeightRule 881 Определяет поведение строки при попытках изменить ее высоту.
424 6.18. Строки таблицы — коллекция Rows Пример MyDoc.Tables(1).Rows(1).HeightRule = wdRowHeightExactly Shading Возвращает объект, управляющий штриховкой. Пример 'Заштриховать первую строку MyDoc.Tables(1).Rows(l).Shading.Texture - wdTexturelOPercent 6.18.2. Методы AddfCrp&xaf Параметр Назначение Строка Строка (Row-объект), перед которой необходимо вставить новую строку Комментарий Вставляет новую строку в указанную позицию. Пример MyDoc.Tables(1).Rows.Add MyDoc. Tables(1).Rows(3)
Ж|й1Ж»[11й 6.18. Строки таблицы — коллекция Rows 425 СипуеЯТ&ТехЦРазя&литеяь)' *• Л Параметр Назначение Разделитель Константа, определяющая символ-разделитель Комментарий Преобразует строку таблицы в текст, используя заданный символ в качестве разделителя. Пример Selection.Tables(1).Rows(l).ConvertToText _ wdSeparateByTabs Deltate комментарий Удаляет строку таблицы. Пример MyDoc.Tables(1).Rows(1).Delete Select Комментарий Выделяет строку таблицы.
426 6.19. Ячейка таблицы — объект Cell Пример MyDoc.Tables(1).Rows(l).Select 6.19. Ячейка таблицы — объект Cell Любая ячейка таблицы доступна посредством свойств и мето- дов объекта типа Cell. 6.19.1. Свойства Borders Возвращает коллекцию, предназначенную для управления границами. • Зависит от значения свойства HeightRule. Пример 'Разрешить отображение границ для ячейки 2, 3 MyDoc.Tables (1).Cell(2, 3) .Borders.Enable = _ True Height Определяет высоту ячейки в пунктах. Пример MyDoc.Tables(1)-Cell(2, 3).Height = 24
6.19. Ячейка таблицы — объект Cell 427 HaiyhtRula Определяет поведение ячейки при попытках изменить ее высоту. Пример MyDoc.Tables (1).Cell (2, 3).HeightRule = _ wdRowHeightExactly Range Возвращает содержимое ячейки в форме Range-объекта. Пример MyDoc.Tables(1).Cell(2, 3).Range.Font.Size = 14 Shading Возвращает объект, управляющий штриховкой. Пример 'Заштриховать ячейку MyDoc.Tables(1).Cell(2, 3).Shading.Texture = wdTexturelOPercent VcrticalAlignment Задает режим вертикального выравнивания в ячейке.
428 6.19. Ячейка таблицы — объект Cell Пример MyDoc.Tables(1).Cell (2, 3).VerticalAlignment = wdCellAlignVerticalCenter l/idth Определяет ширину ячейки в пунктах. Пример MyDoc.Tables(1).Cell(2, 3).Width = 24 Wordwrap Анализ/установка режима переноса текста в пределах ячейки на следующую строку (для объекта Cell). Пример MyDoc.Tables(1).Cell(2, 3)-Wordwrap = True 6.19.2. Методы AutoSum Комментарий Вставляет в таблицу поле автосуммирования, которое бу- дет отображать сумму значений в ячейках выше или левее поля.
6.19. Ячейка таблицы — объект Cell 429 Пример MyDoc.Tables(1).Cell(2, 3).AutoSum Ои1€*е(ЭидСдеига) Параметр Назначение ВидСдвига Константа, определяющая вид сдвига оставшихся ячеек Комментарий Удаляет ячейку и сдвигает оставшиеся заданным образом. Пример 'Удалить ячейку и сдвинуть оставшиеся влево MyDoc.Tables(1).Cell(2, 3).Delete _ wdDeleteCellsShiftLeft Select Комментарий Выделяет ячейку. Пример MyDoc.Tables(1).Cell(2, 3).Select
(gOlPfeWliW 430 6.20. Форматирование таблицы (пример) 5>>Н1(Строки, Столбцы) Параметр Назначение Строки Число новых строк Столбцы Число новых столбцов Комментарий Разбивает ячейку на заданное число строк и столбцов. Пример 'Разбить ячейку на 4 ячейки MyDoc.Tables(1).Cell (2, 3).Split 2, 2 6.20. Форматирование таблицы (пример) Процедура, исходный текст которой приведен ниже, вставля- ет таблицу в текущей позиции курсора, вводит в нее данные и выполняет форматирование. Результат должен соответство- вать рисунку. II Товар Кол-во Цена Сумма • Карандаши 20 1.75 р.5 35.00 р. i Ластики 3 0.80р 2.40 р. 1 Точилки 2 3 95 р. i 7.90 р. 1 45.30 р. 'Маленькая таблица в позиции курсора Sub MyLittleTable() Const TNum = 3
6.20. Форматирование таблицы (пример) 431 'Массивы для исходных данных Dim TProd(l То TNum) As String Dim TStk(l To TNum) As Integer Dim TPrice(l To TNum) As Single 'Рабочие переменные Dim TheTab As Table Dim TheCell As Cell Dim TheRow As Row Dim I, J As Integer 'Ввести исходные данные TProd(l) = "Карандаши" TStk(l) = 20 TPrice(l) = 1.75 TProd(2) = "Ластики" TStk(2) = 3 TPrice(2) = 0.8 TProd(3) = "Точилки" TStk(3) = 2 TPrice(3) =3.95 'Создать таблицу в позиции курсора Set TheTab = ActiveDocument.Tables.Add (Selection.Range, 2, 4) 'Заполнить и отформатировать таблицу With TheTab 'Сформировать заголовок .Cell(l, 1).Range = "Товар" .Celljl, 2).Range = "Кол-во" .Cell(l, 3)-Range = "Цена" .Cell(l, 4).Range = "Сумма" 'Заполнить строки данными For I = 1 То TNum Set TheRow = .Rows-Add(.Rows.Last) With TheRow .Cells(1).Range = TProd(I) .Cells(2).Range = TStk(I) .Cells(3).Range = Format(TPrice(I), "0.00 p.") .Cells(4).Range = Format(TStk(I) *
432 6.20. Форматирование таблицы (пример) TPrice(I), "0.00 р.") End With Next 'В последнюю ячейку поместить сумму .Cell(.Rows.Count, .Columns.Count).Formula " = Sum(Above)", "# ##0,00p.;(# ##0,00p.)" 'Применить автоформат .AutoFormat Format: = wdTableFormatGrid8, AutoFit: = True 'Задать выравнивание For I = 1 To .Rows.Count For J = 2 To .Columns.Count .Cell(I, J).Range.ParagraphFormat _ .Alignment = wdAlignParagraphRight Next Next End With End Sub
JpF Объект Excel Как и модель Word, объектная модель Excel не отличается про- стотой. Однако пакет Excel в свое время оказался первым Win- dows-приложением, где был реализован VBA и, как легко дога- даться, именно в этой среде VBA «чувствует себя» наиболее уютно, а объектная модель Excel с точки зрения VBA-приложе- ний выглядит зрелой и логически законченной. Несмотря на многочисленные изменения, в Office ХР сохранена практически полная совместимость с файлами Excel прежних версий — ста- рые макросы (процедуры VBA) можно использовать без проб- лем. Кроме того, в распоряжении разработчика появился це- лый спектр новых возможностей. При всей сложности объект- ной модели Excel для повседневной работы знать требуется немного. Основными объектами являются рабочие книги, лис- ты, диапазоны ячеек и диаграммы. Обзор. Структура объекта Excel
434 7.1. Обзор объектной модели Excel 7.1. Обзор объектной модели Excel 7.1.1. Приложение Application | Application Workbooks (Workbook) I —j Addins (Addin) Worksheets (Worksheet) Charts (Chart) DocumentProperlies ( Docum entProperty) - j VBProject ~ ] — | CustomViews (CustomView) | — j CommandBars (CommandBar) | — | HTMLProject | — | AnswerWizard — | AutoCorrect — | Assistant — | COMAddlns (COMAddln) — j Dialogs (Dialog) — j PivotCaches (PivotCache) — | Styles (Style) —J Borders (Border) —| Font Interior —| Windows (Window) CommandBars (CommandBar) Languagesettings Names (Name) Windows (Window) Ц Panes(Pane) —I WorksheetFunction —| RecentFiles (RecentFile) Panes(Pane) —| Names (Name)" —| RoutingSlip —| ODBCErrors (ODBCError) —| OLEDBErrors (OLEDBError) —| DefaultWebOptions —| PublishObjects —| WebOptions
7.1. Обзор объектной модели Excel 435 Объект Назначение Application Собственно приложение, корневой объект иерархии Workbook Рабочая книга, т. е. файл, содержащий листы, диаграммы и модули Addin Надстройка Addin AnswerWizard Мастер AnswerWizard AutoCorrect Автозамена (элемент списка автозамены) Assistant Помощник Office Chart Диаграмма COMAddln СОМ-надстройка в приложении Dialog Лист диалога (поддерживает совместимость с предыдущими версиями) CommandBar Панель инструментов или панель меню Language- Settings Информация об установке языка в приложении Name Имя, заголовок диапазона Window Окно приложения или книги Worksheet - Function Функция листа (функция Excel, доступная для VBA-программы) RecentFile Файл из списка недавно открытых файлов ODBCError Описание ошибки доступа к ODBC. DefaultWeb- Options Глобальные атрибуты открытия/сохранения Web-страницы
436 7.1. Обзор объектной модели Excel Windows Windows (Window) Panes(Pane) Объект Назначение Window Окно документа Pane Разделительная панель 7.1.2. Книга Workbooks
7.1. Обзор объектной модели Excel 437 Объект Назначение Workbook Рабочая книга, т. е. файл, содержащий листы, диаграммы и модули Sheet Лист книги Chart Диаграмма (внедренная в лист с помощью кон- тейнера Chartobject или отдельный лист с диа- граммой) CustomView Представление (определенные пользователем па- раметры просмотра книги, см. диалог Вид / , Представления) PivotCache Объект, резервирующий память для объекта Pi - votTable PublishOb- jects Объект для Web-страницы SmartTag- Options Параметры смарт-тегов Style Стиль (встроенный или определенный пользова- телем) WebOptions Параметры сохранения/сохранения Web-страни - цы в Excel Window Окно книги Name Имя диапазона ячеек RoutingSlip Маршрут для отправки сообщения электронной почты
438 7.1. Обзор объектной модели Excel Worksheets
7.1. Обзор объектной модели Excel 439 Объект Назначение Worksheet Лист книги AutoFilter Автофильтр Name Имя диапазона ячеек Range Ячейка, столбец, строка, диапазон или 30-диапазон Comment Примечание CustomPro- perty Дополнительная информация (например, метадан- ные для XML) HPageBreak Горизонтальный разрыв страницы VPageBreak Вертикальный разрыв страницы Hyperlink Г иперссылка Scenario Сценарий OLEObject OLE-объект или ActiveX-элемент Outline Структура PageSetup Объект, обеспечивающий доступ к параметрам страницы Protection Параметры защиты QueryTable Запрос к базе данных PivotTable Сводная таблица Chartobject Контейнер (рамка) для внедрения в лист диаграм- мы Shape Фигура (автофигура, рисунок, OLE-объект и др.) SmartTag Смарт-тег Tab Ярлычок листа
440 7.1. Обзор объектной модели Excel Range
(gOlPfeWliW 7.1. Обзор объектной модели Excel 441 Объект Назначение Range Ячейка, столбец, строка, диапазон или 30-диапазон Areas Коллекция диапазонов (Range-объектов), представляющих непрерывные последователь- ности смежных ячеек внутри выделенной об - ласти Border Рамка, граница Font Представляет свойства шрифта Interior Представляет параметры «внутреннего» фор- матирования объекта (ячейки, диапазона и др) Characters Строка символов, содержащихся в объекте Errors Ошибки в диапазоне Formatcondition Условный формат Hyperlink Г иперссылка Phonetic Фонетическая текстовая строка диапазона PivotCell Ячейка сводной таблицы PivotField Поле сводной таблицы Pivotitem Элемент сводной таблицы PivotTable Сводная таблица QueryTable Таблица, построенная по результатам запроса SmartTag Смарт-тег Validation «Условие на значение», объект, служащий для проверки вводимых значений на соответствие некоторым условиям Worksheet Таблица Comment Примечание
Ж.Й1ЖМ11Й 442 7.1. Обзор объектной модели Excel Styles Styles (Style) Borders (Border) Font Interior Объект Назначение Style Стиль (встроенный или определенный пользовате- лем) Border Рамка, граница Font Представляет свойства шрифта Interior Представляет параметры «внутреннего» форматирова- ния объекта (ячейки, диапазона и др.) QueryTable Parameter
7.1. Обзор объектной модели Excel 443 PivotTables PivotTables (PivotTable) CalculatedFields — CalculatedMembers CubeFields PivotCashe PivotFormulas (PivotFormula) PivotFields (PivotField) Range Объект Назначение PivotTable Сводная таблица Calculated Field Вычисляемое поле сводной таблицы Calculated - Member Вычисляемое поле или вычисляемый элемент сводной таблицы CubeField Поле куба сводной таблицы PivotCache Резервирует память для объекта PivotTable PivotFormula Представляет формулу для вычисления значений в сводной таблице PivotField Вычисляемое поле сводной таблицы Range Диапазон сводной таблицы
444 7.1. Обзор объектной модели Excel ChartObjects Chartobjects (Chartobject) Border Chart Interior PivotLayout Объект Назначение Chartobject Контейнер (рамка) для внедрения в лист диаграммы Border Рамка (граница) диаграммы Chart Диаграмма (внедренная в лист с помощью контейне- ра Chartobject или отдельный лист с диаграммой) Interior Фон диаграммы PivotLayout Расположение полей сводной таблицы
7.1. Обзор объектной модели Excel 445 Shapes
(gOlPfeWliW 446 7.1. Обзор объектной модели Excel Объект Назначение Shape Фигура (автофигура, рисунок, OLE-объект и др.) Diagram Организационная диаграмма DiagramNode Узел организационной диаграммы GroupShapes Группа фигур LinkFormat Представляйет свойства связанного OLE-объекта OLEFormat Представляет свойства внедренного OLE-объекта Hyperlink Гиперссылка Fill Format Определяет параметры заливки Control Format Обеспечивает доступ к свойствам элементов управления ConnectorFormat Служит для доступа к параметрам объекта Connector TextFrame Текстовое поле Adjustments Коллекция маркеров изменения размера LineFormat Обеспечивает доступ к свойствам линий PictureFormat Обеспечивает доступ к свойствам рисунков и । OLE-объектов Range Диапазон ячеек ShadowFormat Содержит цветовые и яркостные параметры фигуры ShapeNode Узел кривой ShapeRange Диапазон фигур TextEffectFormat Обеспечивает доступ к шрифтовым парамет- рам объектов WordArt ThreeDFormat Трехмерный формат фигуры
7.1. Обзор объектной модели Excel 447 7.1.3. Диаграммы Charts
448 7.1. Обзор объектной модели Excel Объект Назначение Chart Диаграмма ChartArea Область диаграммы PlotArea Область построения диаграммы Floor Основание (для объемных диаграмм) Walls Стенки (для объемных диаграмм) Corners Объект, представляющий углы (для объемных диа - грамм) PageSetup Параметры страницы ChartTitle Заголовок диаграммы Series Ряд данных, отображаемый диаграммой Axis Ось (одна из осей) диаграммы Chartobject Встроенная диаграмма DataTable Таблица данных на диаграмме Hyperlink Г иперссылка OLEObject Встроенный OLE-объект или ActiveX Legend Легенда диаграммы Shape Фигура (автофигура, рисунок, OLE-объект и др.) ChartGroup Группа рядов данных одного типа - используется в смешанных диаграммах Tab Ярлычок листа диаграммы
Ж1Й1ЖМ11Й 7.1. Обзор объектной модели Excel 449 Axes Axes (Axis) — AxisTitle — Border — DisplayUnitLabel — Gridlines — TickLabels Объект Назначение Axis Ось (одна из осей) диаграммы AxisTitle Заголовок оси DisplayUnitLabel Цена деления на оси GridLines Сетка на диаграмме, переходящая в деления оси TickLables Подпись делений на оси диаграммы DataTables DataTable Border Объект Назначение DataTable Таблица данных на диаграмме Border Граница (рамка) 15 1Я55
450 7.1. Обзор объектной модели Excel ChartGroups ChartGroups (ChartGroup) — Down Bars DropLines — UpBars TickLabels — HiLoLines Seriescollection (Series) — SeriesLines Объект Назначение ChartGroup Группа рядов данных одного типа — используется в смешанных диаграммах DownBars Полоса понижения (отображает отрицательную разницу между точками данных первого и послед- него ряда данных) UpBars Полоса повышения (отображает положительную разницу между точками данных первого и послед- него ряда данных) HiLoLines Коридор колебания (изменения) отображается ли- ниями, идущими от максимального до минималь- ного значения в каждой категории SeriesLines Линии рядов соединяют точки данных одного ряда DropLines Линии проекции (линии, идущие от точек данных к осям категорий) TickLables Подпись делений на оси диаграммы Series Ряды данных
7.1. Обзор объектной модели Excel 451 SeriesCoilection
452 7.2. Уровень приложения — объект Application Legend Legend Font Border Interior LegendEntries (LegendEntry) LegendKey Объект Назначение Legend Легенда диаграммы (подпись, определяющая за- краску точек данных) Font Шрифт подписей легенды Border Граница легенды Interior Заливка легенды LegendEntry Один из элементов легенды LegendKey Один из ключей легенды 7.2. Уровень приложения — объект Application Корневой объект в иерархии объектной модели Excel — объ- ект Application. Его многочисленные свойства, методы и со- бытия предназначены для решения самых общих задач, свя- занных с функционированием приложения Excel.
7.2. Уровень приложения — объект Application 453 7.2.1. События Событие Описание NewWorkBook Создана новая книга SheetActivate Один из листов стал активным SheetBeforeDoubleClick Происходит после двойного щелчка мышью, но до запуска обработчика данного события SheetBeforeRightClick Происходит после щелчка правой кноп - кой мыши, но до запуска обработчика данного события SheetCalculate Выполнен пересчет листа Sheetchange Содержимое одной из ячеек или ди а - грамм изменилось SheetDeactivate Лист перестал быть активным Sheet FollowHyperlink Щелчок на любой гиперссылке в Excel Sheet PivotTableUpdate Обновлена сводная таблица SheetSelectionChange Изменилась выделенная область на ли- сте (кроме листов диаграмм) WindowActivate Окно стало активным WindowDectivate Окно перестало быть активным WindowResize Размеры окна изменились WorkbookActivate Книга стала активной WorkbookAddinlnstall Книга загружена на правах надстройки WorkbookAddinUninstall Книга, загруженная ранее на правах надстройки, выгружена WorkbookBeforeClose Происходит перед закрытием книги WorkbookBeforePrint Происходит перед выводом на печать
454 7.2. Уровень приложения — объект Application Событие Описание WorkbookBeforeSave Происходит перед сохранением книги WorkbookDeactivate Книга перестала быть активной WorkbookNewSheet В книгу добавлен новый лист WorkbookOpen Книга открыта WorkbookPivotTableClo- seConnection Завершено подключение сводной таб- лицы WorkbookPivotTableO - penConnection Выполнено подключение сводной таб- лицы 7.2.2. Свойства AlertBeforeOverwriting Определяет (True), что Excel должен выдавать предупреж- дение перед перезаписью ячеек при выполнении действий «перетащить и оставить» (Drag&Drop). Пример 'Не выдавать предупреждение Application.AlertBeforeOverwriting = False ActiveCeh Возвращает текущую ячейку в форме Range-объекта. Пример 'Получить значение из текущей ячейки MyVal = ActiveCell.Value
7.2. Уровень приложения — объект Application 455 'Переместиться на три ячейки вправо ActiveCell.Offset(0, 3).Select ActivaChart Возвращает активную диаграмму в форме Chart-объекта. Пример With ActiveChart .HasTitle = True .ChartTitle.Text = "Обзор за 1999 год" End With ActivaPrintar Возвращает имя текущего принтера. Пример MsgBox "Имя принтера: " & ActivePrinter ActlveSheet Возвращает текущий лист книги в форме объекта типа Work- Sheet. Пример 'Изменить имя текущего листа ActiveSheet.Name = "Январь"
456 7.2. Уровень приложения — объект Application Active Window Возвращает активное окно в форме объекта типа Window. Пример 'Увеличить на 50% ActiveWindow.Zoom = 150 ActiveW&rkbook Возвращает текущую книгу в форме объекта типа Workbook. Пример 'Сохранить копию в файле ActiveWorkbook.SaveCopyAs "MyBakUp" AskTa Updu Links Определяет (True), что Excel должен запрашивать об об- новлении автоматических связей при открытии файла. В случае значения False связи будут обновляться без преду- преждения. Пример Application.AskToUpdateLinks = False
7.2. Уровень приложения — объект Application 457 AltStartupPath Задает альтернативный стартовый каталог. Пример Application.AltStartupPath = "C:\MyData" Build i Возвращает полный номер версии Excel. Пример MsgBox Application.Build Cells Обеспечивает доступ к ячейкам текущего листа. Пример 'Присвоить значение ячейке "ВЗ" Cells(3, 2) = 12 Charts Содержит коллекцию всех листов диаграмм, принадлежа- щих активной книге.
458 7.2. Уровень приложения — объект Application Пример 'Присвоить имя первому листу диаграммы Application.Charts(1).Name = "Диаграмма 1" Columns Содержит коллекцию всех столбцов текущего листа. Пример 'Удалить второй столбец Columns(2).Delete Caiition Определяет текст титульной строки окна приложения. Пример Application.Caption = "Обзор цен за 1999 год" Cursor Позволяет задать вид указателя с помощью константы.
7.2. Уровень приложения — объект Application 459 Пример 'Указатель — песочные часы Cursor = xlWait 'Стандартный указатель Cursor = xlDefault DefaultFil('°ath Задает каталог по умолчанию для сохранения файлов. Пример Application.DefaultFilePath = "C:\MyData" Uir4>layF<jrmulaBar Разрешает (True) или запрещает (False) отображение стро- ки формул. Пример Application.DisplayFormulaBar = False DisplayFullScreen Разрешает (True) или запрещает (False) работу приложе- ния в полноэкранном режиме.
460 7.2. Уровень приложения — объект Application Пример Application.DisplayFullScreen = True DisplayScroHBars Разрешает (True) или запрещает (False) отображение по- лос прокрутки. Пример Application.DisplayScrollBars = False OisplnySt.itusB^r Разрешает (True) или запрещает (False) отображение стро- ки состояния. Пример Application.DisplayStatusBar = False EnableEvents Разрешает (True) или запрещает (False) генерацию собы- тий для приложения. Пример 'Отключить обработку событий Application.EnableEvents = False
7.2. Уровень приложения — объект Application 461 EnablaSuund Разрешает звуковое сопровождение. Пример 'Звуковое сопровождение событий Application.EnableSound = True FixedDecimal Включает (True) режим «фиксированный десятичный фор- мат при вводе». Пример Application.FixedDecimal = True Application.FixedDecimalPlaces = 2 FixedDecimalPlaces Определяет число десятичных разрядов для режима «фик- сированный десятичный формат при вводе». Пример Application.FixedDecimal = True Application.FixedDecimalPlaces = 2 IgnoreRemoteReqw-.ts Включает (True) режим «игнорировать DDE-запросы от других приложений».
(gOlPfeWliW 462 7.2. Уровень приложения — объект Application Пример 'Игнорировать DDE-запросы Application.IgnoreRemoteRequests = True MU veA ftarfte turn Включает (True) режим «переход к другой ячейке после ввода». Пример Application.MoveAfterReturn = True Move A fterRetumDirecthxn Определяет направление для режима «переход к другой ячейке после ввода». Пример Application.MoveAfterReturnDirection = xlToRight OperatingSystem Возвращает имя и номер версии операционной системы. Пример MsgBox Application.OperatingSystem
7.2. Уровень приложения — объект Application 463 QcganizationNttme Возвращает название организации, заданное при регист- рации. Пример MsgBox "Программа зарегистрирована: " & Application.OrganizationName Hoi*» Возвращает коллекцию строк активного листа. Пример 'Удалить вторую строку Rows(2).Delete ScreenUpdating Разрешает (True) или запрещает (False) обновление экра- на при выполнении процедуры VBA (макроса). Пример 'Не обновлять экран Application.Screenupdating = False Sniectioi Обеспечивает доступ к выделенной области.
464 7.2. Уровень приложения — объект Application Пример 'Скопировать выделенную область в буфер обмена Selection.Сору Sheets '• Коллекция всех листов активной книги. Пример 'Создать 12 листов, соответствующих 12 месяцам Sheets.Add Count:=12 For N = 1 To 12 Sheets(N).Name = Format(DateSerial(1, N, 1) , "mmmm") Next Shu wWintJuwsin Taskbar Определяет режим вывода для каждой рабочей книги от- дельной кнопки на панели задач. Пример Application.ShowWindowsInTaskbar = True StatusBar Определяет текст в строке состояния (только для записи).
7.2. Уровень приложения — объект Application 465 Пример Application.StatusBar = _ "Производится открытие файла, ждите..." ThisWurktj&ok Объект, представляющий эту рабочую книгу, т. е. книгу, в которой размещен выполняющийся в данный момент мак- рос (процедура VBA). • Для надстройки Addin это единственный способ обрати- ться к книге-носителю надстройки. Пример 'Сохранить книгу ThisWorkbook.Save Version Возвращает номер версии Excel. Пример MsgBox Application.Version windowsutb Определяет состояние окна Excel.
466 7.2. Уровень приложения — объект Application Пример 'Максимизировать текущее окно Application.Windowstate = xlMaximized Workbooks Коллекция всех открытых книг. Пример 'Если открыты другие книги, то закрыть эту If Workbooks.Count > 1 Then Workbooks.Close End If I Wvrksh&vttunctfan Возвращает объект WorksheetFunction, предоставляющий VBA-процедуре доступ к функциям рабочего листа Excel. Пример 'Вычислить среднее для диапазона А1:А50 MyVal = WorksheetFunction.Average _ (Range("Al:А50"))
7.2. Уровень приложения — объект Application 467 7.2.3. Методы Ас^а1еМ1Сгиьс>НАрр(Прил^женне) Параметр Назначение Приложение Константа, определяющая приложение Microsoft Комментарий Делает активным выполняющееся приложение Microsoft, определенное константой-параметром. Если приложение не выполняется, оно будет запущено. Пример 'Вызвать PowerPoint Application.ActivateMicrosoftАрр xlMicrosoftPowerPoint OalculateFuh Комментарий Выполняет полный пересчет всех листов всех открытых книг. Пример Application.CalculateFull
468 7.2. Уровень приложения — объект Application Се(<)р^пПеЫат&(ФильгрыИме'Н. ФильтрПоУмалчанниа, Зягалавок, НадписьНзКнопке. ГрулпэвоеВкд&леюю) Параметр Назначение ФильтрыИмен Строка, содержащая названия типов файлов и маски имен, им соответствующие ФилырПо- Умолчанию Порядковый номер фильтра по умолчанию Заголовок Заглавная строка окна диалога Надпись На Кнопке (Только для Macintosh) - надпись на кнопке Открыть Групповое- Выделение Разрешает (True) выделение группы файлов Комментарий Выводит на экран диалог Открытие документа и возвра- щает имя выбранного пользователем файла или файлов. • Фактического открытия файла при этом не происходит. Пример 'Открыть файл, запросив его имя у пользователя FNStr = "Все файлы (*.*), *.*," & "Файлы импорта (*.imp), *.imp" FilName = Application.GetOpenFileName(FNStr, 2) If FilName <> False Then Workbooks.Open FilName End If
7.2. Уровень приложения — объект Application 469 Gat&iveAsFileNama(3ar<?'n3tiK^MMVnti, ФильтрыИмен, ФильтрПоУмалчакию, Злголоааес, Надпиа НаКнопкэ) Параметр Назначение ЗаготовкаИмени Заготовка имени файла, присутствую- щая в окне диалога в момент его от- крытия ФильтрыИмен Строка, содержащая названия типов файлов и маски имен, им соответствую- щие ФильтрПоУмолчанию Порядковый номер фильтра по умолча- нию Заголовок Заглавная строка окна диалога НадписьНаКнопке (Только для Macintosh) - надпись на кнопке Закрыть Комментарий Выводит на экран диалог Сохранение документа и возвра- щает выбранное или введенное пользователем имя файла. • Метод не сохраняет файл, однако может изменить теку- щие каталог и дисковое устройство. Пример 'Сохранить файл, запросив его имя 'у пользователя FilName = _ Application.GetSaveAsFileName("MyFilel") If FilName <> False Then Workbooks(1).SaveAs FilName End If
470 7.2. Уровень приложения — объект Application Не1р(ФайлСправки, КонтексгСпрэвки) Параметр Назначение Файл Справки Имя файла справки КонтекстСправки Идентификатор контекста справки Комментарий Выводит на экран справку. Пример Application.Help "Analyse.hip", 8001 ОпТ1те(ВремяЗапуска, ИмяПроцедуры, НеПозднее, ВключтъВРэсписание) Параметр Назначение ВремяЗапуска Время, начиная с которого может быть пред- принята попытка запуска процедуры ИмяПроцедуры Имя процедуры, подлежащей запуску НеПозднее Время, по достижении которого запуск проце- дуры запрещен ВключитьВ- Расписание Разрешает (True) включить данный пункт в расписание вместе с предыдущими. Значение False отменяет предыдущие вызовы метода Комментарий Служит для запуска процедуры в заданное время. • Периодическое выполнение можно организовать, вклю- чив вызов метода в вызываемую им процедуру.
7.3. Книга — объект Workbook 471 Пример Sub StartMyProc() 1 Вызов процедуры через 5 минут Application.OnTime Now + TimeValue ("00 : OS: 00") , "МуРгос" End Sub Sub МуРгос() MsgBox "Прошло 5 минут" Application.OnTime Now + TimeValue ("00 : OS’: 00") , "МуРгос" End Sub Quit Комментарий Завершает выполнение Excel. • Макросы Auto_Close при этом не выполняются. Пример Application.Quit 7.3. Книга — объект Workbook Книги Excel представлены в VBA объектом Workbook. При его участии производятся манипуляции с листами, а также дейст- вия, направленные на книгу в целом.
472 7.3. Книга — объект Workbook 7.3.1. События Событие Описание Activate Книга стала активной Addininstall Книга загружена на правах надстройки AddinUninstall Книга, загруженная ранее на правах надстройки, выгружена BeforeClose Происходит перед закрытием книги BeforePrint Происходит перед выводом книги на пе- чать BeforeSave Происходит перед сохранением книги Deactivate Книга перестала быть активной NewSheet В книгу добавлен новый лист Open Книга открыта PivotTableCloseCon - nection Завершено подключение сводной табли- цы PivotTableOpenCon- nection Выполнено подключение сводной табли- цы SheetActivate Один из листов книги стал активным SheetBef oreDoubleC- lick Происходит после двойного щелчка мы- шью, но до запуска обработчика данно- го события SheetBeforeRightClick Происходит после щелчка правой кноп - кой мыши, но до запуска обработчика данного события SheetCalculate Выполнен пересчет листа книги Sheetchange Содержимое одной из ячеек или диа- грамм изменилось SheetDeactivate Лист книги перестал быть активным SheetFollowHyperlink Щелчок на любой гиперссылке в книге
7.3. Книга — объект Workbook 473 Событие Описание SheetPivotTableUpdate Выполнено обновление сводной таблицы SheetSelectionChange Изменилась выделенная область на лис- те (кроме листов диаграмм) WindowActivate Окно стало активным WindowDeactivate Окно перестало быть активным WindowResize Размеры окна изменились 7.3.2. Свойства Ac Chart Возвращает активную диаграмму в форме Chart-объекта. Пример With ActiveChart .HasTitle = True .ChartTitle.Text = "Обзор за 1999 год" End With ActivcSheet Возвращает активный (текущий) лист книги. Пример ActiveSheet.Name = "Обзор за 1999 год" AiitoUpd&teFrtiquency Определяет число минут в периоде автоматического со- хранения (для общих книг, т. е. книг, разделяемых не- сколькими пользователями).
474 7.3. Книга — объект Workbook Пример ThisWorkbook.AutoUpdateFrequency = 5 Charts Содержит коллекцию всех диаграмм, принадлежащих книге. Пример 'Присвоить имя первой диаграмме ThisWorkbook.Charts(1).Name = "Диаграмма 1" Count Свойство коллекции Workbooks — возвращает число от- крытых книг. Пример If Workbooks.Count > 1 Then MsgBox "Есть другие открытые книги!" End If FultNamc Полное имя файла, в котором содержится книга. Пример MsgBox ThisWorkbook.FullName
(gOlPfeWliW 7.3. Книга — объект Workbook 475 Namv Имя файла без имени устройства и пути. Пример MsgBox ThisWorkbook.Name Names Коллекция, содержащая все определенные в книге имена ячеек и диапазонов (Range-объектов). Пример Dim BeName As Variant Dim MessStr As String For Each BeName In ThisWorkbook.Names MessStr = MessStr & BeName.Name & vbCr Next MsgBox MessStr Path Путь (полное имя каталога), где находится файл книги. Пример MsgBox ThisWorkbook.Path
476 7.3. Книга — объект Workbook Sheets Коллекция, содержащая все листы книги. Пример 'Вставить новый лист в начало книги ThisWorkbook.Sheets.Add Коллекция стилей, присоединенных к книге. Пример 'Создать новый стиль и задать числовой формат ThisWorkbook.Styles.Add "MyStyle" ThisWorkbook.Styles("MyStyle").NumberFormat = "000-00-000" 7.3.3. Методы Activate Комментарий Делает активным окно книги. Пример ThisWorkbook.Activate
7.3. Книга — объект Workbook 477 Add (Шаблон) _________________________**i Параметр Назначение Шаблон Имя шаблона для создаваемой книги 1 Комментарий Создает новую книгу (метод коллекции Workbooks). Пример Workbooks.Add "MyTempl" С1о5е(СахранитьИзменения, ИмяФайла, ПоМзршруту) Комментарий Закрывает книгу. Параметр Назначение СохранитьИзменения Определяет, должны ли (True) быть со- хранены изменения в книге ИмяФайла Имя файла ПоМаршруту Булево значение, разрешающее (True) отправку документа по маршруту Пример ThisWorkbook.Close True, "MyBookl"
478 7.3. Книга — объект Workbook Орвп(ИмяФайла, ОбноалятьСаязм,' ТолькоДляЧтения, Формат, Пароль, ПарольЗаписи. г РекомендацияТолькоДляЧтения, ИаточникТвкста, Разделитель, РежимНадстрейки, ИзаещатьОДоступе, КонаерторФайлои^, ДобавитьВОпиоок) . Параметр Назначение 1 ИмяФайла Имя файла, подлежащего открытию Обновлять Связи Определяет наличие и режим обновления связей ТолькоДляЧтения Открывать файл в режиме «только для чте- ния» (True) Формат Для текстовых файлов: определяет вид раз- делителя (один из стандартных или нестан - дартный) Пароль Пароль для открытия файла ПарольЗаписи Пароль разрешения записи Рекомендация- ТолькоДляЧтения Игнорировать (True) параметр «рекомендо- вать доступ только для чтения», если он установлен в открываемом файле ИсгочникТексга Для текстовых файлов: определяет вид сим- вола конца строки Разделитель Для текстовых файлов: символ-разделитель, если в параметре «Формат» был выбран не- стандартный разделитель Режим- Надстройки Используется только при открытии надстроек Excel 4.0 ИзвещатьО- Доступе Если файл недоступен, то известить (True) при появлении доступа
7.3. Книга — объект Workbook 479 Параметр Назначение Конвертор- Файлов Программа преобразования файлов Добавить ВСписок Включить открытый файл в «список файлов, открытых последними» (True) Комментарий И Открывает файл книги Excel или текстовой файл. Пример Workbooks .Open "C:\MyData\MyFile”, True ОрепТехЦИмяФайлэ, ИсточникТекста, НомсрСтрокы, ТипТекста, ПризнакТекста, ГруппаРа-Зяелйтелей, Табуляция, ТзчкэОЗарятой, Запятая, Пробел, S* ДругойСимвол, Символ, Поля, * РазделительДробнойЧасти, РазделительРазридаа) Параметр Назначение ИмяФайла Имя файла, подлежащего открытию ИсточникТекста Определяет вид символа конца строки НомерСтроки Номер строки, с которой следует начать считывание ТипТекста Константа, определяющая, должно ли рас- познавание полей в тексте производиться по разделительным символам или по по- зициям
480 7.3. Книга — объект Workbook Параметр Назначение ПризнакТекста Константа, определяющая символ, кото- рым в считываемом тексте обозначается текстовое значение Г руппаРазделителей Разрешает (True) рассматривать группу разделительных символов как один разде- литель Табуляция Определяет (True), что разделителем яв- ляется символ табуляции ТочкаСЗапятой Определяет (True), что разделителем яв- ляется точка с запятой Запятая Определяет (True), что разделителем яв- ляется запятая Пробел Определяет (True), что разделителем яв- ляется пробел ДругойСимвол Определяет (True), что в качестве разде- лителя должен использоваться другой символ Символ Символ-разделитель для случая, когда ДругойСимвол = True Поля Массив, содержащий информацию о по- лях и типах данных в тексте Разделитель- ДробнойЧасти Разделитель целой и дробной части (нео- бязательный параметр) Раздел итель- Разрядов Разделитель тысяч (необязательный пара- метр) Комментарий Открывает текстовой файл и преобразует его в книгу Excel.
7.3. Книга — объект Workbook 481 Пример 'Импортировать текстовый файл, 'при этом игнорировать 'столбцы 1-3, а столбцы 4-5 интерпретировать 'как строковые значения Workbooks.OpenText "C:\MyData\Textl.txt", , 1, xlDelimited, xlDoubleQuote, , , True, , , , , Array(Array(1, 9), Array(2, 9), Array(3, 9), Array(4, 2), Array(5, 9), Array(6, 1), _ Array(7, 1)) Print&ut(Orr Да, Числ^>Копий, Предварительный Просмотр, Принтер, ПечатьВФайл, РазобратьПоКолиям, ФайлПечати) Параметр Назначение От Номер начальной страницы До Номер конечной страницы ЧислоКопий Число копий Предварительный - Просмотр Открыть (True) перед печатью диалог Предварительный просмотр Принтер Имя принтера ПечатьВФайл Значение True разрешает печать в файл РазобратьПоКопиям (Для случая печати нескольких копий) Значение True соответствует печати копий целыми документами. False — печати ко- пий постранично ФайлПечати Имя Файла, в который выполняется пе- чать (необязательный параметр) 16 1855
482 7.3. Книга — объект Workbook Комментарий Выводит документ на печать. Пример 'Напечатать страницы 1-5 ThisWorkbook.Printout 1, 5 РгМе^Параль, Структура, Окна) Параметр Назначение Пароль Строка пароля, который потребуется для внесения в документ изменении Структура Защищает (True) от изменений структуру книги Окна Защищает (True) от изменений окна книги Комментарий Защищает книгу от внесения изменений. Пример 'Защитить от изменения структуру книги ThisWorkbook.Protect "Юстас Алексу", True RefrcshAII . Комментарий Обновляет внешние данные и сводные таблицы.
7.3. Книга — объект Workbook 483 Пример ThisWorkbook.RefreshAll Save Комментарий Сохраняет файл. Пример ThisWorkbook.Save SaveAsfUMatpaiuia, ФорматФайла, Пароль,ПарольЗ, ГольксДп°Ч-геиия, РьзерлначКопия. РржидаДр^’ура, Конфликт Доступа, ДобавитьВСписок) — Комментарий Сохраняет файл под заданным именем. Пример ThisWorkbook.SaveAs "MyBookl", , "Юстас Алексу"
484 7.3. Книга — объект Workbook Параметр Назначение ИмяФайла Имя файла, в котором необходимо сохра- нить книгу форматфайла Константа, определяющая формат сохране- ния файла Пароль Пароль для открытия файла ПарольЗ Пароль для сохранения изменений в книге ТолькоДляЧтения Рекомендовать (True) пользователю открыть файл в режиме «только для чтения» РезервнаяКопия Создать (True) резервную копию РежимДоступа Константа, определяющая режим доступа к книге КонфликтДоступа Константа, определяющая реакцию на конф- ликт при доступе к общей книге ДобавитьВСписок Включить сохраняемый файл в «список фай- лов, открытых последними» (True) S.t veСоруАу/ИмяФдилз/ Параметр Назначение ИмяФайла Имя файла, в котором необходимо сохранить книгу
7.3. Книга — объект Workbook 485 Комментарий Сохраняет копию открытого файла под другим (заданным) именем. Пример ThisWorkbook.SaveCopyAs "MyBook2" Unprc>t&at(napQat,) Параметр Назначение Пароль Пароль, ранее установленный на книгу Комментарий Снимает с книги ранее установленную защиту. Пример ThisWorkbook.Unprotect "Юстас Алексу” MfeibPagaPra ww, Комментарий Позволяет выполнить предварительный просмотр книги в таком виде, какой она приобретет, будучи сохранена как Web-документ.
486 7.4. Лист книги — объект Worksheet Пример Workbooks(1).WebPagePreview 7.4. Лист книги — объект Worksheet Объект Worksheet играет важную роль в программировании для среды Excel. Лист рабочей книги — это как раз то место, где собственно все и происходит. 7.4.1. События Событие Описание Activate Лист стал активным BeforeDoubleClick Происходит после двойного щелчка мышью, но до запуска обработчика данного события BeforeRightClick Происходит после щелчка правой кнопкой мыши, но до запуска обработчика данного события Calculate Выполнен пересчет листа Change Содержимое одной из ячеек или диаграмм изменилось Deactivate Лист перестал быть активным FollowHyperlink Щелчок на любой гиперссылке листа Pi /otTablellpdate Выполнено обновление сводной таблицы Selectionchange Изменилась выделенная область на листе (кроме листов диаграмм)
7.4. Лист книги — объект Worksheet 487 7.4.2. Свойства СиНз Возвращает все ячейки текущего листа в форме диапазо- на (Range-объекта). Пример 'Поместить значение в ячейку "ВЗ" ActiveSheet.Cells(3, 3) = 12 Columns . r*! Возвращает указанный столбец или все столбцы текущего листа в форме диапазона (Range-объекта). Пример 'Удалить 3-й столбец ActiveSheet.Columns(3).Delete Count Число листов в книге (свойство коллекции Worksheets). Пример MsgBox "Число листов в книге: " & Worksheets.Count Namr Имя текущего (активного) листа.
488 7.4. Лист книги — объект Worksheet Пример 'Изменить имя 1-го листа Worksheets(1).Name — "Обзор" Коллекция, содержащая все определенные в пределах лис- та имена ячеек и диапазонов (Range-объектов). Пример Dim BeName As Variant Dim MessStr As String For Each BeName In ThisWorkbook.Names MessStr = MessStr & BeName.Name & vbCr Next MsgBox MessStr Возвращает следующий за указанным лист книги. Пример 'Имя листа, следующего за листом "Обзор" MsgBox Worksheets("Обзор").Next.Name PugeSatup И Возвращает объект PageSetup, обеспечивающий доступ к параметрам страницы.
7.4. Лист книги — объект Worksheet 489 Пример ActiveSheet.PageSetup.Orientation = xlLandscape Previous Возвращает предшествующий указанному лист книги. Пример 'Имя листа, предшествующего листу "Обзор" MsgBox Worksheets("Обзор").Previous.Name Ronge И Диапазон — ячейка, столбец или строка, а также совокуп- ность ячеек, состоящая из одной или более непрерывных областей. • Обеспечивает доступ ко всем ячейкам активного листа. Пример ActiveSheet.Range("АЗ") = 15 Raws Возвращает диапазон (Range-объект), содержащий указан- ную строку или все строки листа. Пример 'Удалить строку 3 ActiveSheet.Rows(3).Delete
490 7.4. Лист книги — объект Worksheet UsedRanye Возвращает Range-объект, представляющий использован- ный диапазон ячеек на листе. Пример 'Адрес использованной области MsgBox ActiveSheet.UsedRange.Address Visible Возвращает и позволяет задать булево значение, опреде- ляющее видимость объекта. • Объект, сделанный невидимым в коде VBA-процедуры, можно сделать снова видимым только посредством VBA- кода. Пример 'Сделать лист "Обзор" невидимым Worksheets("Обзор").Visible = False 7.4.3. Методы Activate Комментарий Делает лист активным (текущим). Пример Worksheets("Обзор").Activate
7.4. Лист книги — объект Worksheet 491 АМ(ЛистДс, ЛистПосле, ЧислвЛистоа, Тип) Параметр Назначение ЛисгДо Номер или имя листа, перед которым необ- ходимо выполнить вставку ЛистПосле Номер или имя листа, после которого необ - ходимо выполнить вставку ЧислоЛ истов Количество новых листов Тип Константа, определяющая тип нового листа (листов) Комментарий Создает в книге один или несколько новых листов (приме- няется к коллекции Worksheets). Пример 'Вставить 5 новых листов после листа "Обзор" Worksheets.Add , Worksheets("Обзор"), 5 Calculate Комментарий Выполняет пересчет листа. Пример Worksheets("Обзор").Calculate
492 7.4. Лист книги — объект Worksheet Сиру(ЛисгДя, ЛистПисло) Параметр Назначение ЛистДо Номер или имя листа, перед которым необходимо выполнить вставку копии ЛистПосле Номер или имя листа, после которого необходимо выполнить вставку копии Комментарий Копирует текущий лист и выполняет вставку листа-копии в указанную позицию. Пример 'Скопировать лист-образец в позицию 'после листа "Обзор" Worksheets("Образец").Сору , Worksheets("Обзор") ChartObjacts Комментарий Коллекция объектов, представляющих контейнеры (рамки) диаграмм листа. Пример 'Изменить стиль рамки для второй диаграммы Worksheets("Обзор").Chartobjects(2).Border. LineStyle = xlDot
7.4. Лист книги — объект Worksheet 493 Delete Комментарий Удаляет лист. Пример Worksheets("Обзор").Delete FillAcrossSh jets (Диапазон, Тип) * Параметр Назначение Диапазон Диапазон (Range-объект), подлежащий копированию Тип Константа, определяющая тип копирования (все, то- лько формулы и т. д.) Комментарий Копирует указанный диапазон листа в ту же самую пози- цию всех остальных листов коллекции. Пример 'Скопировать диапазон А1:В5 во все листы Worksheets.FillAcrossSheets Range("Al:B5"), xlFillWithAll
494 7.4. Лист книги — объект Worksheet Моу&(ЛистДо, ЛистПосле) Параметр Назначение ЛистДо Номер или имя листа, перед которым необходи- мо поместить перемещаемый лист ЛистПосле Номер или имя листа, после которого необходи - мо поместить перемещаемый лист Комментарий Перемещает текущий лист в указанную позицию. Пример 'Переместить лист "Обзор" в конец книги Worksheets("Обзор").Move , Worksheets(Worksheets.Count) РазНДДиап^зон, Связать) Параметр Назначение Диапазон Диапазон, указывающий позицию на листе Связать Разрешает (True) связать вставленные данные с источником Комментарий Выполняет вставку содержимого буфера в указанную по- зицию на листе (или по умолчанию в позицию текущей ячейки). • Если указан параметр Связать, то параметр Диапазон должен быть опущен.
7.4. Лист книги — объект Worksheet 495 Пример 'Выполнить вставку из буфера и связать Worksheets("Обзор").Paste , True РгМеаЦПароль, Фигуры, Содержимое, Сценарии, ТолькоИнтерфейс) Параметр Назначение Пароль Строка пароля, который потребуется для внесе- ния в документ изменений Фигуры Распространяет (True) защиту на фигуры, содер- жащиеся в листе Содержимое Распространяет (True) защиту на содержимое (ячейки) листа Сценарии Распространяет (True) защиту на сценарии листа Только- Интерфейс Определяет (True), что защита распространяется на пользовательский интерфейс, но не на макро- сы листа Комментарий Устанавливает на лист защиту от внесения изменений. Пример 'Защитить лист от изменений Worksheets("Обзор").Protect "Май", False, True, False, True
496 7.4. Лист книги — объект Worksheet За^аАз^ляфаИм, ФормагФамла, Пароль. ПаршьЗ, ТольюДРяЧп-ния. РезервнаяКмжя. ДрбааИгьВОпиосж) Параметр Назначение ИмяФайла Имя файла, в котором необходимо сохра- нить лист ФорматФайла Константа, определяющая формат сохране- ния файла Пароль Пароль для открытия файла ПарольЗ Пароль для сохранения изменений в листе ТолькоДляЧтения Рекомендовать (True) пользователю открыть файл в режиме «только для чтения» РезервнаяКопия Создать (True) резервную копию ДобавитьВСписок Включить сохраняемый файл в «список фай - лов, открытых последними» (True) Комментарий Сохраняет лист в отдельном файле. Пример Worksheets ("Обзор") .SaveAs "MyBrowse" Select(ВмчстоИлиВм&ста) Параметр Назначение ВместоИлиВместе Булево значение, указывающее, должен ли лист быть выделен вместо (True) ранее вы- деленных или вместе (False) с ними
7.5. Доступ к ячейкам — объект Range 497 Комментарий Выделяет лист. Пример Worksheets("Обзор").Select SetBtickyrciunctPicture(HM^muij) Параметр Назначение ИмяФайла Имя графического файла Комментарий Помещает рисунок на задний план листа. Пример Worksheets("Обзор").SetBackgroundPicture "С:\Logo.bmp" 7.5. Доступ к ячейкам — объект Range Объекты типа Range (диапазоны, Range-объекты) позволяют обратиться как к отдельной ячейке листа, так и к одной или не- скольким непрерывным областям ячеек. Поскольку одиночная ячейка не представлена собственным объектом, единствен- ный способ доступа к ней заключается в использовании Ran- ge-объекта.
498 7.5. Доступ к ячейкам — объект Range Обзор. Доступ к ячейкам посредством Range-объекта Прямая адресация: Rangel "А1:АЗ") Доступ по имени диапазона: Rangef "Заголовок") Доступ по номерам строк и столбцов: Range("A1")(2,3) Доступ посредством стандартного Range-объекта: Active- Cell или Selection. 7.5.1. Свойства Areas Возвращает одноименную коллекцию, объекты которой пред- ставляют в форме диапазонов все выделенные области (для случая множественного выделения несмежных областей). Пример Dim TmpRange As Range For Each TmpRange In Selection.Areas Next Cells Возвращает все ячейки листа. • Доступ к отдельной ячейке возможен по номеру строки и столбца. Пример 'Поместить значение в ячейку D14 Cells(14, 4) = 150
7.5. Доступ к ячейкам — объект Range 499 Column Возвращает номер первого столбца из относящихся к диа- пазону. • Столбцу "А" соответствует номер 1. Пример 'Получить номер первого столбца диапазона '"Заголовок" ColNum = Range("Заголовок").Column Columns Представляет все столбцы диапазона. Пример 'Форматировать 2-й столбец в диапазоне Range("Данные").Columns(2).Style = "Простой" Cmrnt И Возвращает число ячеек в диапазоне. Пример MsgBox "Диапазон содержит " & Range ("Данные").Count & " ячеек." CurrentArray И Если указанная ячейка принадлежит массиву, то возвра- щает весь массив.
500 7.5. Доступ к ячейкам — объект Range Пример Dim TmpRange As Range 'Если выделена часть массива, то выделить 'весь массив If Selection.HasArray Then Set TmpRange = Selection.CurrentArray End If CurrentRegion Возвращает в форме Range-объекта область, состоящую из указанного диапазона и прилегающих к нему пустых строк и столбцов. Пример Dim Bkompl As Range 'Определить область вокруг ячейки АЗ 'как диапазон Set Bkompl = Range("АЗ").CurrentRegion 'Просканировать ячейка за ячейкой 1-й столбец For Each TheCell In Range("АЗ"). CurrentRegion.Columns(1) Next 'Выделить жирным первую строку Range("АЗ").CurrentRegion.Rows(1). Font.Bold = True EntireCofumn Возвращает Range-объект, представляющий столбец, к которому принадлежит указанный диапазон.
7.5. Доступ к ячейкам — объект Range 501 Пример 'Удалить весь столбец Range("А5").EntireColumn.Delete Entire Raw Возвращает Range-объект, представляющий строку, к ко- торой принадлежит указанный диапазон. Пример 'Удалить всю строку Range("D5").EntireRow.Delete ОЛьеГ(СмещеииеЛоСтрокам. СмещвныеПьСкэлбцамУ * Возвращает Range-объект, полученный смещением ис- ходного диапазона на заданное число строк и столбцов. Пример 'Доступ к ячейке F5 через смещение от ячейки D5 Range("D5").Offset(0, 2).Value = 15 'Доступ к ячейке D9 через смещение от ячейки D5 Range("D5").Offset(4, 0).Value = 15 'Доступ к ячейке F9 через смещение от ячейки D5 Range("D5").Offset(4, 2).Value = 15 fles/ze Возвращает диапазон, полученный изменением размеров исходного диапазона до заданного числа строк и столбцов.
502 7.5. Доступ к ячейкам — объект Range Пример 'Обратиться к диапазону, свернув его 1 до 1 ячейки Range ("Итог") .Resized, 1) .Сору 'Выделить диапазон, свернув его 'до 2 столбцов при неизменном числе строк Range("Итог").Resize(, 2).Select Row Возвращает номер строки для первой ячейки диапазона. Пример RowNum = Range("Итог").Row Rows Представляет все строки диапазона. Пример 'Выделить жирным 1-ю строку в диапазоне Range("Данные").Rows(l).Font.Bold = True 7.5.2. Методы Activate Комментарий Делает текущей заданную ячейку. • Ячейка должна находиться внутри выделенной области.
7.5. Доступ к ячейкам — объект Range 503 • Вызов метода не влияет на положение выделенной об- ласти. Пример 'Выделить область Range("АЗ:D6").Select 'Сделать текущей ячейку D5 Range("D5").Activate Ое/е{е(Нэпраял4.‘ниеСдаига> Параметр Назначение Направлен иеСдвига Константа, определяющая направление сдвига оставшихся ячеек после удаления диапазона Комментарий Удаляет диапазон. Пример 'Удалить диапазон со сдвигом 'оставшихся ячеек влево Range("АЗ:D6").Delete xlShiftloLeft 1азег1(НэпраалсннеСдзигз) Параметр Назначение НаправлениеСдвига Константа, определяющая направление сдвига ячеек при вставке диапазона
504 7.5. Доступ к ячейкам — объект Range Комментарий Выполняет вставку диапазона. Пример 'Вставить диапазон со сдвигом ячеек вправо Range("АЗ:D6").Insert xlShiftToRight Select Комментарий Выделяет диапазон. Пример Range("А2:D5").Select 51>ес1а1Се11э(ТипЯчейки, ТипЗнэчення)* Параметр Назначение ТипЯчейки Константа, определяющая тип ячейки ТипЗначения Константа, определяющая тип значения, содер- жащегося в ячейке Комментарий Возвращает Range-объект, представляющий все ячейки листа, удовлетворяющие заданным условиям.
7.5. Доступ к ячейкам — объект Range 505 Пример 'Выделить ячейки, содержащие константы Range("Исходные данные")_ .Specialcells(xlCellTypeConstants).Select 7.5.3. Доступ к ячейкам — пример В этом примере свойства и методы объекта Range будут ис- пользованы для того, чтобы отформатировать список данных. ...Г .. . .- А . V 'I Номер счета Цата Обе )рот 2457698765 01 9е 98: 3900 Й 2457846765 02 05.98 620п г 2457898765 03 05.98 8700 :5. 2457898765 0Г 05 96 4500 .6 2457898765 08.05.98 1200 7. 2457898765 10.05.98 1300 2457898765 11.05.98 4900 После форматирования список будет выглядеть следующим образом: , i* . 1 'И: 0 .= 1. Номер счета 2457898765 2 1 3, Дат Оборот] jf 1. Май 1998 3 900.00 5l 2. Май 1998 6 200,00 6. 3. Май 1998 8 700,00 7 6 Май 1998 4 500,00 .8: 8. Май 1998 1 200,00 9. 10. Май 1998 1 300,00 10 11 Май 1998 4 900,00 11
506 7.5. Доступ к ячейкам — объект Range Sub FormatListOfCounts() Dim BKompl As Range Dim BData As Range Dim NumRows As Integer 'Вставить две строки Rows("1:2").Insert 'Форматировать номер счета Range("Bl") = "Номер счета" Range("Cl") = Range("A4") With Range("Bl:Cl") .Font.Bold = True .Font.Size = 14 End With Columns("A").Delete 'Форматировать заголовок With Range("АЗ:B3") .HorizontalAlignment = xlRight •Font.Bold = True .BorderAround Weight:=xlMedium, Colorlndex:= xlAutomatic .Interior.Colorindex = 15 End With 'Сформировать область и определить ячейки Set BKompl = Range("АЗ").CurrentRegion NumRows = BKompl.Rows.Count 'Область для данных — без заголовка Set BData = BKompl.Offset(1, 0) .Resize(NumRows) 'Форматировать столбцы BData.Columns(1).NumberFormat = "d. mmmm yyyy" BData.Columns(2).Style = "Финансовый" 'Изменить ширину столбцов Columns("А:В").Autofit End Sub
7.6. Доступ к содержимому ячеек — объект Range 507 7.6. Доступ к содержимому ячеек — объект Range После того как хитроумные способы адресации ячеек сделали свое дело и программа получает Range-объект, представляю- щий требуемое подмножество ячеек листа, наступает пора сделать что-нибудь с содержимым этих ячеек. И тут снова пригодятся свойства и методы объекта Range. 7.6.1. Свойства Characters Возвращает массив символов, представляющих содержа- щийся в ячейке текст. • В качестве необязательных параметров могут быть за- даны номер первого символа и число символов. • Символы доступны только для форматирования. • Изменить значение символьной строки невозможно. Пример 'Выделить жирным 3-й и 4-й символы Range("АЗ").Characters(3, 2).Font.Bold = True Formula Возвращает содержащуюся в ячейке константу или фор- мулу в виде строки. • Формат строки формулы аналогичен отображаемому в строке формул.
508 7.6. Доступ к содержимому ячеек — объект Range Пример 1 Вывести текст формулы MsgBox Range("АЗ")•Formula 'Скопировать формулу в другую ячейку Range("А4").Formula = Range("АЗ").Formula FamiulaHidden • ?; Если лист защищен, то при FormulaHidden = True формула будет скрыта. Пример Range("АЗ").FormulaHidden = True FurmulaLiacal Возвращает и позволяет задать формулу в формате "А1" на языке пользователя. Пример MsgBox Range("АЗ").FormulaLocal FarmukiR 1С1 Возвращает и позволяет задать формулу в виде строки формата "R1C1". Пример MsgBox Range("АЗ").FormulaRlCl
7.6. Доступ к содержимому ячеек — объект Range 509 Formulae 1С1 Local Возвращает и позволяет задать формулу в виде строки формата "R1C1” на языке пользователя. Пример MsgBox Range("АЗ").FormulaRlCl HaaArray • Возвращает булево значение True, если ячейка является частью массива. Пример Dim TmpRange As Range 'Если ячейка относится к массиву, 'то выделить весь массив If Range("АЗ").HasArray Then Set TmpRange = Selection.CurrentArray End If Свойство по умолчанию, возвращает содержимое ячейки. • Если в ячейку помещена формула, то свойство вернет результат вычисления. Пример Dim MyPrice As Double MyPrice = Range("A3").Value
510 7.6. Доступ к содержимому ячеек — объект Range 7.6.2. Методы А^СьттепЦТ&кстПримь.'ч<1ни<1) Параметр Назначение ТекстПримечания Строковое значение - текст примечания Комментарий Снабжает ячейку примечанием. • Повторный вызов метода влечет ошибку выполнения. Пример Range("А5").AddComment "Примечание к ячейке А5" Аи1с*Я11(Диапаз&нЗап<:.лнения, ТипЗаполнения) Параметр Назначение ДиапазонЗаполнения Диапазон (Range-объект), подлежащий заполнению (должен включать в себя диапазон-источник) ТипЗаполнения Константа, определяющая тип заполне- ния диапазона Комментарий Выполняет автоматическое заполнение диапазона ячеек Пример 'Заполнить диапазон названиями месяцев Range("А8") = "Январь"
7.6. Доступ к содержимому ячеек — объект Range 511 Range("А8").AutoFill Range("А8:А19"), xlFillMonths 1 Заполнить арифметической прогрессией с шагом 5 Range("В8") = ”10" Range("В9") = "15" Range("В8:В9").AutoFill Range(”В8:В40"), xlFillValues Clear Комментарий Удаляет содержимое, форматирование и примечания яче- ек диапазона. Пример 'Очистить диапазон Range("А5:А10").Clear ClearGomments Комментарий Удаляет примечания к ячейкам. • Не влияет на содержимое и форматирование ячеек. Пример 'Удалить примечания Range("А5:А10").ClearComments
512 7.6. Доступ к содержимому ячеек — объект Range QtezirContents Комментарий Удаляет содержимое ячеек диапазона. • Не влияет на примечания и форматирование. Пример 'Удалить содержимое Range("А5").ClearContents 7.6.3. Доступ к содержимому ячеек — пример В данном примере автозаполнение используется для созда- ния таблицы, отражающей ежемесячные начисления в тече- ние двух лет. Два столбца таблицы содержат соответственно даты и суммы, при этом все строки таблицы, кроме первой, формируются благодаря автозаполнению. Sub MonCount() Dim BDate As Range 'Столбец дат Dim CValue As Range 'Ячейка с начальным значением Dim BSaldo As Range 'Остальные ячейки 'Определить диапазон Set BDate = Selection.Resize(24, 1) Set CValue = Selection.Cells(1, 2) Set BSaldo = Selection.Offset(1, 1).Resize(23, 1) 'Заполнить столбец дат BDate(1).AutoFill BDate, xlFillMonths 'Заполнить остальные ячейки BSaldo.FormulaRlCl = "=R[-1]C+" & CValue End Sub
7.7. Форматирование ячеек — объект Range 513 7.7. Форматирование ячеек — объект Range Наконец, нужные ячейки заполнены соответствующими зна- чениями. Осталось придать им требуемый вид, т. е. отформа- тировать. И здесь снова на помощь придут свойства и методы объекта Range. 7.7.1. Свойства Borders Содержит коллекцию, представляющую границы ячеек. Пример 'Снабдить ячейки диапазона линиями Range("АЗ:С9").Borders.LineStyle = xlContinuous И Определяет ширину столбцов в диапазоне. • Единицей измерения служит ширина символов стиля «Normal» (если речь идет о пропорциональных шрифтах, то имеется в виду ширина символа «О»). Таким образом последовательность «0123456789» идеально поместит- ся в ячейку шириной 10. • Возвращает ширину ячеек диапазона или Null, если в диапазоне есть ячейки с разной шириной. Пример Range("АЗ:С9").Columnwidth = 10 17 1855
514 7.7. Форматирование ячеек — объект Range Font < Возвращает объект, служащий для доступа к параметрам шрифта. Пример 'Форматировать шрифт в ячейках диапазона With Range("АЗ:D9").Font .Shadow = True .Name = "Arial" .Size = 16 End With Определяет высоту строк в диапазоне. Пример 'Третья строка — 24 пункта высотой Range("АЗ").RowHeight = 24 Hidden а... Делает строку или столбец скрытым (True) или открывает его (False). • Range-объект должен содержать при этом целый стол- бец или строку. Пример 'Скрыть строки 3-5 Range("АЗ:А5").EntireRow.Hidden = True
(gOlPfeWliW 7.7. Форматирование ячеек — объект Range 515 HorizontalAlignm<*at Определяет режим горизонтального выравнивания содер- жимого ячеек диапазона. Пример 'Задать выравнивание по центру Range("АЗ:С9").HorizontalAlignment = xlHAlignCenter Interior Возвращает объект типа Interior. • Определяет свойства ячейки «изнутри». Пример With Range("АЗ:D7").Interior .Color = RGB(192, 164, 12) .Pattern = xlPatternLightDown End With t-ockea Разрешает (False) или запрещает (True) модификацию со- держимого ячеек в ситуации, когда лист в целом защищен от внесения изменений. • Возвращает соответствующее булево значение или Null, если ячейки диапазона имеют разные значения этого свойства. Пример 'Разрешить модификацию ячеек Range("АЗ:С9").Locked = False
516 7.7. Форматирование ячеек — объект Range Style Определяет стиль, заданный для ячеек диапазона. Пример Range("АЗ").Style = "Процентный" UseStairdaictHeight Я Разрешает (Тrue) строкам диапазона принять стандартную для данного листа высоту. Пример Range("АЗ:С9").UseStandardHeight = True d^St^ndarOWititti j И Разрешает (True) столбцам диапазона принять стандарт- ную для данного листа ширину. Пример Range("АЗ:С9").UseStandardWidth = True VerticatAh'jnnVint Определяет режим вертикального выравнивания в ячейках диапазона. Пример Range("АЗ:С9").VerticalAlignment = _ xlVAlignCenter
7.7. Форматирование ячеек — объект Range 517 Wrap Тех t Разрешает (True) перенос непомещающихся строк. Пример Range("АЗ").WrapText = True 1П.1.. Методы C/earFurmafs Комментарий Удаляет форматирование ячеек диапазона. • Не влияет на содержимое ячеек и примечания к ним. Пример 'Удалить форматирование Range("А5").ClearFormats AutitFit Комментарий Изменяет ширину столбцов так, чтобы их содержимое было видно полностью. • Может применяться только в отношении столбцов. Пример Range("А5:Al0").EntireColumn.AutoFit
(gOlPOMW 518 7.8. Операции co списками — объект Range 7.8. Операции со списками — объект Range Списки Excel позволяют решать многие сложные задачи, как, например, фильтрация и сортировка данных. Для работы со списками в VBA используется все тот же вездесущий объект— Range. 7.8.1. Свойства AutoFlItcrMocte Возвращает булево значение True, если ячейка отобража- ет поле автофильтра, и False в противном случае (для объ- екта Worksheet). • Позволяет задать значение False, чтобы запретить ото- бражение поля автофильтра. • Не позволяет задать значение True. Вместо этого следу- ет воспользоваться методом AutoFilter. Пример If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False End If 7.8.2. Методы AutoFilter (Пале, Критерии!, Оператор, Критерий2) Комментарий В варианте без параметров включает и выключает отобра- жение поля автофильтра в ячейке. При наличии параметров выполняет фильтрацию списка в соответствии с заданными критериями.
7.8. Операции co списками — объект Range 519 Параметр Назначение Поле Относительный номер поля в списке (счет с 1, на- чиная с крайнего левого) Критерий! Строка, задающая критерий фильтрации Оператор Константа, определяющая фильтрацию в случае ис- пользования двух критериев Критерий? Строка, задающая второй критерий фильтрации Пример 'Включить поле автофильтра и выбрать записи, 'где второе поле содержит значение, большее 2 Range("А7:С9").AutoFilter 3, ">2" RemoveSubtotal Комментарий Удаляет промежуточные итоги из списка. Пример Range("А7:С9").Removesubtotal ShawAIIData Комментарий Делает видимыми все строки списка, в поле автофильтра при этом автоматически выбирается пункт Все (для объ- екта Worksheet).
520 7.8. Операции co списками — объект Range Пример ActiveSheet.ShowAllData Sh{»w!3ataFi>im : • Комментарий Включает режим просмотра и модификации данных с по- мощью формы (для объекта Worksheet). • Текущая ячейка листа должна при этом находиться в пре- делах списка. Пример ActiveSheet.ShowDataForm Sort(Ключ 1. НапрзвлениеСартиравкм1, Ключ2, . < ТипЭлсллгнгча, НаправлениеСортироаки2, КлючЗ, Напраол&нн&СарпцкшкиЗ, Заголовок, ПорядсжСор-пгроок», НеИгн1^иршапРипкт))г СтрокмСтолбцы, МетйдСортмровки) Комментарий Выполняет сортировку в заданном диапазоне. • Применим не только к спискам.
7.8. Операции co списками — объект Range 521 Параметр Назначение Ключ1 Поле, по которому сортировка производится в первую очередь Направление- Сортировки! Константа, определяющая направление сорти- ровки по первому ключу Ключ2 Поле, по которому сортировка производится во вторую очередь ТипЭлементов (Только для сводных таблиц) константа, опре- деляющая тип элементов, подлежащих сорти- ровке Направление- Сортировки2 Константа, определяющая направление сорти- ровки по второму ключу КлючЗ Поле, по которому сортировка производится в последнюю очередь Направление- СортировкиЗ Константа, определяющая направление сорти- ровки по третьему ключу Заголовок Константа, определяющая, должна ли первая строка рассматриваться в качестве заголовка Порядок- Сортировки Определяет порядок сортировки Не- Игнорировать- Регистр Определяет, должно ли (True) при сортировке делаться различие между верхним и нижним регистрами Строки- Столбцы Константа, определяющая направление сорти- ровки (по строкам или по столбцам) Метод- Сортировки Константа, определяющая метод сортировки (фонетический или по кодовой странице)
522 7.8. Операции co списками — объект Range Пример 'Сортировать данные в диапазоне по возрастанию 'значения в столбце с заголовком "Имя" Range("Al:CIO").Sort "Имя", xlAscending, , , , , , xlYes ЗиЬТоТаЦГруппироаатъПо, Функция, Спис&кЛолей, За маня, РазрыаыС траниц, Над ПоДгруппай) Параметр Назначение ГруппироватьПо Номер поля, по которому должна произво- диться группировка Функция Константа, определяющая вид функции, вы- числяющей промежуточные итоги СписокПолей Массив, содержащий список номеров полей, которые подлежат обработке Замена Разрешает (True) замену существующих про- межуточных итогов РазрывыСтраниц Разрешает (True) вставлять разрывы страниц между группами НадПоДгруппой Константа, определяющая положение проме- жуточного итога (над или под группой) Комментарий Вычисляет промежуточные результаты для списка. • Список должен быть предварительно отсортирован.
7.9. Внедренные диаграммы — объект Chartobject 523 Пример 'Сортировать данные в диапазоне по возрастанию 'значения в столбце с заголовком "Имя" Range("Al:CIO").Sort "Имя", xlAscending, , , , , , xlYes 'Построить промежуточный итог (Сумму) для 'столбца 3, и сгруппировать по 1-му столбцу Range ("Al: СЮ"). Subtotal 1, xlSum, 3 'Построить промежуточный итог (Среднее) для 'столбцов 3 и 6, и сгруппировать по 1-му столбцу Range("Al:CIO").Subtotal 1, xlAverage, Array(3, 6) 7.9. Внедренные диаграммы — объект Chartobject Объект Chartobject представляет собой контейнер, предназ- наченный для внедрения диаграмм (т.е. объектов Chart) на обычный лист книги Excel. Визуально—это просто рамка, раз- меры и положение которой на листе можно произвольно ме- нять. 7.9.1. Свойства Chart Возвращает объект Chart, т. е. собственно диаграмму. Пример 'Разрешить отображение заголовка ActiveSheet.Chartobjects(1) .Chart.HasTitle = True
(gOlPfeWliW 524 7.9. Внедренные диаграммы — объект Chartobject Count Возвращает число внедренных диаграмм на листе (для коллекции Chartobjects). Пример MsgBox ActiveSheet.ChartObjects.Count & " диаграмм" Name Имя диаграммы. Пример Dim MyChO As Chartobject 'Создать контейнер для диаграммы 'и задать ему имя Set MyCho = ActiveSheet.Chartobjects .AdddOO, 200, 300, 400) MyCho.Name = "Диаграмма 1" RoundedCorners Задает (True) для рамки признак «скругленные углы». Пример ActiveSheet.ChartObj ects(1) .RoundedCorners = True ShuJuw Задает (True) для рамки признак «с тенью».
7.9. Внедренные диаграммы — объект Chartobject 525 Пример ActiveSheet.Chartobjects(1).Shadow = True 7.9.2. Методы A0'r;/3te Комментарий И Делает контейнер (рамку) активным. Пример ActiveSheet.Chartobjects(1).Activate А&1(Слеаа. Снерху, Ширина. Высота). Параметр Назначение Слева Отступ слева от края листа Сверху Отступ сверху от края листа Ширина Ширина рамки Высота ... Высота рамки Комментарий Создает новый объект Chartobject и помещает его на лист (для коллекции Chartobjects). • Все параметры обязательны.
(gOlPfeWliW 526 7.9. Внедренные диаграммы — объект Chartobject Пример Dim MyCho As Chartobject Set MyCho = ActiveSheet.Chartobjects _ .Add(100, 200, 300, 400) "Ofj Комментарий Копирует диаграмму в буфер обмена. Пример ActiveSheet.Chartobjects(1).Copy Cut Комментарий Вырезает диаграмму в буфер обмена. Пример ActiveSheet.Chartobjects(1).Cut Delete Комментарий Удаляет диаграмму вместе с контейнером.
7.10. Диаграммы — объект Chart 527 Пример ActiveSheet.Chartobjects(1).Delete 7.10. Диаграммы — объект Chart Объект Chart — это и есть собственно диаграмма. При этом Chart-объект может быть диаграммой, внедренной на обыч- ный лист книги Excel (при этом он заключен в контейнер Chart- Object и доступен через коллекцию Chartobjects этого листа). С другой стороны, объект Chart может быть элементом кол- лекции Charts, принадлежащей книге, и в этом случае он вхо- дит в книгу на правах листа (тогда говорят о листе диаграммы). 7.10.1. События Событие Описание Activate Диаграмма стала активной BeforeDoubleClick Происходит после двойного щелчка мышью, но до запуска обработчика данного события BeforeRightclick Происходит после щелчка правой кнопкой мыши, но до запуска обработчика данного события Calculate Диаграмма отобразила новые или изменен- i ные данные Deactivate Диаграмма перестала быть активной DragOver Происходит при перетаскивании диапазона ячеек через область диаграммы DragPlot Диапазон ячеек, подвергавшийся перетаски- ванию, оставлен в области диаграммы
528 7.10. Диаграммы — объект Chart Событие Описание Mouse Down Нажата одна из кнопок мыши (указатель на - ходится над областью диаграммы) MouseMove Указатель переместился (над областью диа- граммы) MouseUp Отпущена ранее нажатая кнопка мыши (ука- затель находится над областью диаграммы) Resize Размеры диаграммы изменились | Select Выделен один из элементов диаграммы Serieschange Изменилось содержимое ряда данных, свя- занного с диаграммой 7.10.2. Свойства Определяет вид объемного элемента гистограммы. Пример 'Объемная гистограмма состоит из цилиндров Charts (1) .BarShape = xlCylinder QhartArea Содержит объект, представляющий область диаграммы. Пример Charts(1).ChartArea.Interior.Colorindex = 12
7.10. Диаграммы — объект Chart 529 ChartTUt^ Определяет заголовок диаграммы. Пример 'Разрешить отображение заголовка 'и задать его текст Charts(1).HasTitle = True Charts(1).ChartTitle.Text = _ "Динамика цен за 1999 год" Chart Определяет тип диаграммы. Пример 'Тип диаграммы — "Пирамидальная" Charts (1) .ChartType = xlPyramidColStacked Count Возвращает число листов диаграмм в книге (число эле- ментов коллекции Charts). Пример MsgBox "В книге " & Charts.Count & " листов диаграмм." itepthperc&nt Определяет глубину трехмерной диаграммы в процентах от ее ширины (от 20 до 2000).
Ж|й1Ж»[11й 530 7.10. Диаграммы — объект Chart Пример 'Глубина диаграммы — 250% Charts (1).DepthPercent = 250 Si&vatfoa Угловое значение в градусах, определяющее высоту рас- положения точки зрения на объемную диаграмму. Пример Charts(1).Elevation = 20 HeightPerc&nt Определяет высоту объемной диаграммы в процентах от ее ширины (от 5 до 5000). Пример Charts(1)-HeightPercent =75 Ligetuj Определяет свойства легенды. Пример 'Задать шрифт легенды Charts(1).Legend.Font-Name = "Arial" Nume Имя листа диаграммы.
7.10. Диаграммы — объект Chart 531 Пример 'Изменить имя листа диаграммы Charts(1).Name = "Обзор цен" PageSetup Обеспечивает доступ к параметрам страницы. Пример 'Согласовать размер диаграммы 'с размером страницы Charts(1).PageSetup.Chartsize = xlFitToPage РЫАгеа Возвращает объект, представляющий область построения диаграммы. Пример Charts(1).PlotArea.Interior.Colorindex = 14 notation Для объемных диаграмм определяет угол поворота облас- ти построения вокруг оси Z в градусах. Пример Charts(1).Rotation = 45
532 7.10. Диаграммы — объект Chart 7.10.3. Методы Activate Комментарий Делает диаграмму активной. Пример Charts(1).Activate А(М(Лм<згДа, ЛисгП&але, ЧислаЛкстаи} Параметр Назначение ЛистДо Номер или имя листа, перед которым требуется вставить лист диаграммы ЛистПосле Номер или имя листа, после которого требуется вставить лист диаграммы ЧислоЛистов Число листов диаграмм, подлежащих вставке Комментарий Вставляет один или несколько листов диаграмм в задан- ную позицию в книге (для коллекции Charts). Пример Charts.Add
7.10. Диаграммы — объект Chart 533 ApplyCustomType(Tnn, ИмяТипз) Параметр Назначение Тип Константа, определяющая тип диаграммы ИмяТипа Имя пользовательского (нестандартного) типа Комментарий Применяет заданный тип диаграммы. Пример 'Применить стандартный тип "Поверхность" Charts(1).ApplyCustomType xlBuiltln, "Поверхность" Ахес(Тип, Группа) Параметр Назначение Тип Константа, определяющая тип оси Группа Константа, определяющая группу Комментарий Возвращает коллекцию осей (вариант без параметров) или определенную параметрами ось. Пример 'Задать для оси значений пределы шкалы Charts (1) -Axes(xlValue) .MinimumScale = 1
534 7.10. Диаграммы — объект Chart Charts(1).Axes(xlValue).Maximumscale = 5 СОРУ Комментарий Копирует диаграмму в буфер обмена. Пример Charts(1).Сору De/ete Комментарий Удаляет диаграмму. Пример Charts(1).Delete Paste . Комментарий Выполняет вставку данных для диаграммы из буфера. Пример Charts(1).Paste
7.10. Диаграммы — объект Chart 535 PrintOutfOr, Ди, ЧислиКипнй, Пр&дварттельныйПросмотр, Принтер, ПечатьВФейл, РэзибратъПоКипиим, ФзйлПечэти) Параметр Назначение От Номер начальной страницы До Номер конечной страницы ЧислоКопий Число копий Предварительный - Просмотр Открыть (True) перед печатью диалог Предварительный просмотр Принтер Имя принтера ПечатьВФайл Значение True разрешает печать в файл РазобратьПоКопиям (Для случая печати нескольких копий) Значение True соответствует печати копий целыми диаграммами. False - печати ко- пий постранично ФайлПечати Имя файла, в который выполняется пе- чать (необязательный параметр) Комментарий Выводит диаграмму на печать. Пример Charts(1).Printout
536 7.10. Диаграммы — объект Chart S&tBackqrcwndf4cture(MM*i&tMna) Параметр Назначение ИмяФайла Имя графического файла Комментарий Загружает подложку (фоновый рисунок). Пример Charts (1) .SetBackgroundPicture _ "С:\Data\Logo.bmp" 5е13еигсеОа1а(Диапазон, Ориентация) Параметр Назначение Диапазон Диапазон (Range-объект), содержащий данные Ориентация Константа, определяющая ориентацию для считы - вания данных (по столбцам или по строкам) Комментарий Задает диапазон, служащий источником данных для по- строения диаграммы. Пример 'Отобразить данные (считывать построчно) Charts(1).SetSourceData Range("Al:F7"), xlRows
7.10. Диаграммы — объект Chart 537 7.10.4. Пример В данном примере диаграмма будет построена по данным таблицы, описывающей динамику оборотов за три месяца по четырем округам. ЦДинамика оборотов Север Восток Юг Запад За квартал j Й Яшарь 370 ОООр 350 000р. 340 000р. 340 000р. 1 400 ОООи. Ц Февоаль |330 000о. 290 000о. [300 000и. 290 000р. 1 210 000о. Щв^Маот |2В0 000о. Ж0 0П(]р 260 000о. ЩОПИр. 2610000j. Чтобы отобразить такую таблицу, потребуется объемная гис- тограмма, надлежащим образом отформатированная.
538 7.10. Диаграммы — объект Chart 'Построить объемную гистограмму Sub Dia3D() Dim МуСО As Chartobject Dim MyC As Chart 'Создать и инициализировать объекты Set МуСО = ActiveSheet.Chartobjects .Add(5, 190, 475, 285) Set MyC = MyCO.Chart 'Вначале свойства рамки-контейнера With МуСО .Name = "Dia3D" .RoundedCorners = True .Shadow = True End With 'Строим собственно диаграмму With MyC 'Источник данных и тип .SetSourceData Range("А4:Е7"), xlColumns .ChartType = x!3dColumn .HasLegend = False 'Определить углы .Elevation = 15 .Rotation = 115 .Perspective = 30 'Определить подложку .ChartArea.Fill.PresetTextured _ msoTextureRecycledPaper 'Заголовок диаграммы .HasTitle = True With .ChartTitle .Characters.Text = Range("Al") .Font.Size = 14 End With
7.10. Диаграммы — объект Chart 539 'Форматировать оси With .Axes(xlCategory) .HasMajorGridLines = True .TickLabels.Font.Size = 8 End With With .Axes(xlSeries) .HasMajorGridLines = True .TickLabels.Font.Size = 8 End With With .Axes(xlValue) .TickLabels.Font.Size = 8 .MinorUnit = 50000 .MajorUnit = 100000 End With End With End Sub
(gOlPfeWliW Объект PowerPoint В рамках программы работы с презентациями Microsoft Po- werPoint 2002 программисту на языке VBA 6.3 доступны сред- ства управления презентациями, как таковыми, и их элемен- тами — слайдами, таблицами, надписями. Возможности оперирования таблицами и их элементами в этой версии PowerPoint существенно расширены по сравне- нию с предыдущей. Обзор. Структура объекта PowerPoint
8.1. Обзор объектной модели PowerPoint 541 8.1. Обзор объектной модели PowerPoint 8.1.1. Приложение Application
542 8.1. Обзор объектной модели PowerPoint Объект Назначение Application Приложение, корневой объект иерархии Addin Надстройка Addin, элемент коллекции Ad- dins - в PowerPoint она представляет все надстройки, включая незагруженные Answerwizard Мастер Answerwizard Assistant Помощник Office AutoCorrect Средства автокоррекции COMAddln СОМ-надстройка в приложении CommandBar Панель инструментов или панель меню DefaultWeb- Options Глобальные атрибуты открытия/сохранения Web-страницы Documentwindow Окно открытого файла (документа) FileDialog Диалог выбора файла FileSearch Диалог Открытие документа Languagesettings Установка языка в приложении NewFile Список файлов на панели Создание пре- зентации в области задач Options Параметры приложения Power Point Presentation Презентация SlideShowWindow Окно демонстрации слайдов VBE Редактор Visual Basic
8.1. Обзор объектной модели PowerPoint 543 Documentwindows
544 8.1. Обзор объектной модели PowerPoint Объект Назначение Document- Window Окно открытого файла (документа) Pane Область окна документа Presentation Представляет презентацию в целом Selection Выделенная область ShapeRange Представляет одну или несколько автофигур Table Таблица Column Колонка таблицы CeliRange Область ячеек в таблице Borders Границы ячейки (области ячеек) в таблице Shape Автофигура Row Строка в таблице SlideRange Представляет один или несколько слайдов TextRange Представляет непрерывный фрагмент текста (текст выделенной области, текст, связанный с автофигурой и т. д.) View Режим просмотра (режим окна)
8.1. Обзор объектной модели PowerPoint 545 SlideShowWindows SlideShowWindows (SlideShowWindow) Presentation SlideShowView Объект Назначение SlideShow- Window Окно показа слайдов Presentation Представляет презентацию в целом SlideShowView Определяет параметры показа слайдов 8.1.2. Презентация Presentations (Presentation) — ColorSchemes (ColorScheme) — CommandBars Documentproperties (Documentproperty) Documentwindows (Documentwindow) ExtraColors Fonts (Font) HTMLProject — Master — PageSetup — Printoptions — PublishObjects — Slides (Slide) — SlideShowSettings — Tags — WebOptions 18 1855
546 8.1. Обзор объектной модели PowerPoint Объект Назначение Presentation Презентация ColorScheme Цветовая схема CommandBar Панель команд (инструментов, меню) Documentproperty Представляет общие свойства документа (автор, название и т. д.) Documentwindow Окно документа ExtraColors Дополнительные, не включенные в цветовую схему цвета Font Представляет параметры шрифта HTMLProject HTML-проект Master Образец слайда (заголовка, заметки, выдачи) PageSetup Обеспечивает доступ к параметрам страницы PrintOptions Содержит параметры вывода на печать PublishObjects Презентация, которую можно сохранить в HTML-формате Slide Слайд SlideShowSettings Обеспечивает доступ к параметрам показа слайдов Tags Содержит имя и значение определенного пользователем свойства WebOptions Параметры сохранения/открытия веб-страниц
8.1. Обзор объектной модели PowerPoint 547 ColorScheme ColorScheme RGBColor Объект Назначение ColorScheme Цветовая схема. RGBColor Значение цвета в цветовой схеме. PrintOptions Printoptions PrintRanges (PrintRange) Объект Назначение PrintOptions Опции печати. PrintRange Область печати. SlideShowSettings
548 8.1. Обзор объектной модели PowerPoint Объект Назначение SlideShowSettings Обеспечивает доступ к параметрам показа | слайдов ColorFormat Цвет объекта NamedSlideShow Представляет определенное пользователем подмножество слайдов презентации SlideShowWindow Окно показа слайдов 8.1.3. Слайды Slides
8.1. Обзор объектной модели PowerPoint 549 Объект Назначение Slide Слайд Application Приложение PowerPoint ColorScheme Цветовая схема HeadersFooters Верхние и нижние колонтитулы Hyperlink Г иперссылка Master Образец, принадлежащий слайду Scripts Коллекция HTML-скриптов Shape Объект на рабочей поверхности слайда - местозаполнитель, текст, автофигура, рису- нок или OLE-объект ShapeRange Диапазон объектов слайда SlideShow- Transition Представляет параметры «перехода слайда» в процессе презентации (эффект) Tags Содержит имя и значение определенного по- льзователем свойства HeadersFooters HeadersFooters ।— HeaderFooter Объект Назначение HeadersFooters Коллекция объектов HeaderFooter. HeaderFooter Представляет верхние и нижние колонтитулы (слайда, страницы, выдачи и т. д.)
550 8.1. Обзор объектной модели PowerPoint SlideShowTransition SlideShowT ransition '— SoundEffect Объект Назначение SlideShowTransition Представляет параметры «перехода слай - да» в процессе презентации (эффект) SoundEffect Определяет звуковой эффект, сопровожда- ющий переход слайда 8.1.4. Образцы Master
8.1. Обзор объектной модели PowerPoint 551 Объект Назначение Master Образец слайда (заголовка, заметки, выдачи) ColorScheme Цветовая схема Design Дизайн (шаблон) слайда HeaderFooter Представляет верхние и нижние колонтитулы об- разца HyperLink Гиперссылка Shape Объект на рабочей поверхности образца слайда - местозаполнитель, текст, автофигура, рисунок или OLE-объект ShapeRange Диапазон объектов слайда SlideShow- Transition Представляет параметры «перехода слайда» в процессе презентации (эффект) Textstyle Стиль (шаблон формата) текстового объекта TimeLine Анимационные параметры HeadersFooters HeadersFooters HeaderFooter Объект Назначение HeadersFooters Коллекция объектов HeaderFooter HeaderFooter Представляет верхние и нижние колонтитулы (слайда, страницы, выдачи и т. д.)
(gOlPOMW 552 8.1. Обзор объектной модели PowerPoint Textstyles Textstyles (Textstyle) Ruler TextFrame TextStyleLevels Объект Назначение Textstyle Шаблон стиля для текстового объекта Ruler Представляет линейку (содержит сведения о пози- циях табуляции и втяжках) TextFrame Область текста в автофигуре TextStyle- Level Формат уровня в текстовой структуре слайда Ruler Ruler RulerLevels (RulerLevel) TabStops (TabStop) Объект Назначение Ruler Представляет линейку (содержит сведения о пози - циях табуляции и втяжках) RulerLevel Линейка для отдельного уровня в текстовой структу- ре слайда TabStop Позиция табуляции
8.1. Обзор объектной модели PowerPoint 553 TextFrame TextFrame Ruler TextRange Actionsettings Font ParagraphFormat Объект Назначение TextFrame Область текста в автофигуре Ruler Представляет линейку (содержит сведения о пози - циях табуляции и втяжках) TextRange Представляет непрерывный фрагмент текста (текст выделенной области, текст, связанный с автофигу- рой и т.д.) Action- Setting Определяет реакцию автофигур и фрагментов текста на действия пользователя в процессе выполнения презентации Font Определяет параметры шрифта Paragraph - Format Определяет параметры форматирования абзаца
554 8.1. Обзор объектной модели PowerPoint TextStyleLevels TextStyleLevels Font ParagraphFormat I—| BulletFormat I—| Font Объект Назначение TextStyle- Level Формат отдельного уровня в текстовой структуре слайда Font Определяет параметры шрифта Paragraph- Format Определяет параметры форматирования абзаца BulletFormat Определяет параметры маркера абзаца Font Определяет параметры шрифта
8.1. Обзор объектной модели PowerPoint 555 Shapes Shapes (Shape) ActionSettings OLEFormat Adjustment Pictu reFormat — Animationsettings PlaceholdersFormat CalloutFormat ShadowFormat ConnectorFormat ShapeNodes (ShapeNode) — Diagram ShapeRange — DiagramNode Table FillFormat Tags GroupShapes T extEff ectFormat LineFormat TextFrame LinkFormat ThreeDFormat Объект Назначение Shape Объект на рабочей поверхности слайда, пред- ставляющим текстовый элемент, автофигуру, рисунок или OLE-объект ActionSetting Определяет реакцию объекта Shape на дейст- вия пользователя в процессе выполнения пре- зентации Adjustments Представляет маркеры изменения размеров Animationsettings Содержит параметры анимации
556 8.1. Обзор объектной модели PowerPoint Объект Назначение CalloutFormat Определяет формат выноски Connector Format Определяет формат соединительной линии Diagram Диаграмма DiagramNode Узел диаграммы FillFormat Определяет формат заливки GroupShape Группа объектов слайда LineFormat Определяет формат линий и рамок LinkFormat Служит для форматирования связанного объекта OLEFormat Служит для форматирования связанного или внедренного объекта PictureFormat Служит для форматирования рисунка или OLE-объекта Placeholder Format Параметры местозаполнителя ShadowFormat Определяет параметры тени объекта ShapeNode Содержит геометрические свойства рисован - ных фигур ShapeRange Диапазон объектов слайда Table Таблица на слайде Tags Содержит имя и значение определенного по- льзователем свойства TextEffect Format Содержит свойства и методы объекта WordArt TextFrame Область текста ThreeDFormat Содержит параметры эффектов объемности
8.1. Обзор объектной модели PowerPoint 557 ActionSettings ActionSettings Hyperlink SoundEffect Объект Назначение ActionSetting Определяет реакцию объекта Shape на действия пользователя в процессе выполнения презентации Hyperlink Гиперссылка SoundEffect Определяет звуковой эффект Animationsettings Animationsettings ColorFormat PlaySettings — SoundEffect Объект Назначение Animationsetting Определяет эффекты анимации, сопровожда - ющие объект в ходе презентации ColorFormat Определяет цветовое оформление объекта PlaySettings Определяет параметры воспроизведения клипа SoundEffect Определяет звуковой эффект
558 8.1. Обзор объектной модели PowerPoint OLEFormat OLEFormat ObjectVerbs Объект Назначение OLEFormat Представляет свойства и методы, служащие для до- ступа к внедренному OLE-объекту ObjectVerbs Список действий, возможных в отношении OLE-объекта TextFrame TextFrame Ruler TextRange Actionsettings Font ParagraphFormat Объект Назначение TextFrame Область текста. Ruler Представляет линейку (содержит сведения о по- зициях табуляции и втяжках) TextRange Представляет непрерывный фрагмент текста ActionSetting Определяет реакцию Shape-объекта на действия пользователя в процессе выполнения презентации Font Определяет параметры шрифта Paragraph- Format Определяет параметры форматирования абзаца
8.2. Уровень приложения — объект Application 559 8.2. Уровень приложения — объект Application Корневой объект в иерархии объектной модели PowerPoint — объект Application. Его многочисленные свойства, методы и события предназначены для решения самых общих задач, связанных с функционированием приложения PowerPoint. 8.2.1. События Событие Описание ColorSchemeChanged Изменена цветовая схема NewPresentation Создана новая книга Presentation BeforeSave Перед выполнением сохранения пре- зентации Presentationclose Закрытие презентации PresentationNewSlide Создан новый слайд PresentationOpen Открытие презентации PresentationPrint Распечатка презентации (перед вы- полнением распечатки) PresentationSave Сохранение презентации (перед вы- полнением сохранения) SlideShowBegin Начало показа слайдов SlideShowEnd Конец показа слайдов SlideShowNextBuild Появление анимируемого объекта (по щелчку мыши или по таймеру) SlideShowNextSlide Переход к новому слайду при показе (перед переходом) WindowActivate Окно стало активным
560 8.2. Уровень приложения — объект Application Событие Описание WindowBeforeDoubleClick Двойной щелчок на объекте в окне WindowBeforeRightClick Щелчок правой кнопкой мыши на объекте в окне WindowDeactivate Окно перестало быть активным WindowSelectionChange Смена выбранного объекта в окне 8.2.2. Свойства ActivePres&ntatian Возвращает активную презентацию. Пример 'Закрыть текущую презентацию ActivePresentation.Close ActivePrintur Возвращает имя текущего принтера. Пример 'Сообщить имя текущего принтера MsgBox Application.ActivePrinter Ас tiveWinduw Возвращает объект Documentwindow, представляющий ак- тивное окно документа.
8.2. Уровень приложения — объект Application 561 Пример 'Развернуть текущее окно на весь экран ActiveWindow.Windowstate = ppWindowMaximized Build Возвращает полный номер версии приложения. Пример MsgBox Application.Build Сьрнап Определяет текст титульной строки окна приложения. Пример 'Изменить титульную строку окна PowerPoint Application.Caption = _ "Новые горизонты кролиководства" Name « . '-л :- • Содержит имя программы. Пример 1 Сообщить имя приложения MsgBox Application.Name
562 8.2. Уровень приложения — объект Application Opara ting Sys tam Возвращает имя и номер версии операционной системы. Пример MsgBox Application.OperatingSystem Р'в' ^ntatiois Возвращает коллекцию,, элементами которой являются все открытые презентации. Пример 'Добавить новый слайд в 1-ю презентацию Presentations(1).Slides.Add 2, ppLayoutChart SlidaSha wWind aWS Возвращает коллекцию,, элементами которой являются все открытые окна показа слайдов. Пример If SlideShowWindows.Count = 0 Then MsgBox "В данный момент показ слайдов" & "не выполняется . " End If
(gOlPfeWliW 8.2. Уровень приложения — объект Application 563 Version Возвращает номер версии программы. Пример 'Сообщить номер версии MsgBox Application.Version WinduwStutv - Определяет состояние окна приложения. Пример 1 Развернуть окно PowerPoint на весь экран Application.Windowstate = ppWindowMaximized 8.2.3. Методы Activate Комментарий Делает окно приложения активным. Пример 'Сделать окно PowerPoint активным Application.Activate
564 8.3. Основной объект — Presentation Не1р(ФайлСпрааки, КонтексгСпрааки) Параметр Назначение ФайлСправки Контекст- Справки Имя файла справки Идентификатор контекста справки Комментарий Выводит на экран справку. Пример Application.Help "Analyse.hip", 12001 Ourt Комментарий Закрывает окно PowerPoint, при необходимости предло- жив пользователю сохранить измененные файлы. Пример Application.Quit 8.3. Основной объект — Presentation Данные PowerPoint хранятся в файлах презентаций. Каждая презентация представлена объектом типа Presentation. Пре- зентация включает в себя слайды, диалоги а также макросы (процедуры VBA). Все открытые презентации представлены коллекцией Presentations.
8.3. Основной объект — Presentation 565 8.3.1. Свойства CiilorSchenws Содержит коллекцию цветовых схем презентации. Пример 'Задать цвет фона для цветовой схемы 1 ActivePresentation.ColorSchemes(1) .Colors(ppBackGround) .RGB = RGB(204, 236, 255) 'Применить ко 2-му слайду 1-ю цветовую схему With ActivePresentation .Slides(2).ColorScheme = .ColorSchemes(1) End With Count Возвращает число открытых в данный момент презента- ций (для коллекции Presentations). Пример 'Сообщить число открытых презентаций MsgBox "Открыто презентаций: " _ & Presentations.Count Defaultshape Возвращает объект типа Shape, представляющий автофи- гуру по умолчанию (виртуальную автофигуру, которая со- держит параметры форматирования для всех вновь созда- ваемых автофигур). • Изменения, вносимые в объекты по умолчанию, прояв- ляются только при создании новых объектов.
566 8.3. Основной объект — Presentation Пример 'Задать цвет переднего плана для вновь 'создаваемых автофигур Presentations(1).Defaultshape.Fill .ForeColor.RGB = RGB(64, 128, Г92) ExtraCalurs ' Возвращает объект ExtraColors, представляющий допол- нительные цвета презентации (цвета, не входящие в цве- товые схемы). • Всего объект ExtraColors может содержать до 8 RGB- значений. Пример 'Добавить дополнительный цвет Presentations (1).ExtraColors.Add RGB(64, 128, 164) 'Задать для переднего плана 1-й автофигуры '1-го слайда 1-й дополнительный цвет With Presentations(1) .Slides(1).Shapes(1).Fill.ForeColor.RGB _ = .ExtraColors(1) End With FullName Содержит полное имя файла презентации.
8.3. Основной объект — Presentation 567 Пример MsgBox "Файл презентации: " & ActivePresentation.FuTlName HdntJuirtMuStijr J Возвращает объект типа Master, представляющий обра- зец выдачи. • Заданные для этого объекта значения свойств будут ав- томатически повторяться во всех вновь создаваемых выдачах. Пример 'Задать дату и время для колонтитула 'образца выдачи Presentations(1).HandoutMaster _ .HeadersFooters.DateAndTime.Visible = True HasTitieMa^tvr Возвращает булево True, если презентация обладает об- разцом заголовков. Пример With ActivePresentation If .HasTitleMaster Then .TitleMaster.Textstyles(ppTitleStyle) .Levels(1).Font.Bold = True End If End With
568 8.3. Основной объект — Presentation Narue Имя файла презентации. Пример MsgBox "Имя файла презентации :" & ActivePresentation.Name NutesMaster Возвращает объект типа Master, представляющий обра- зец заметок. • Заданные для этого объекта значения свойств будут ав- томатически повторяться во всех вновь создаваемых за- метках. Пример 'Задать дату и время для колонтитула образца заметок Presentations(1).NotesMaster .HeadersFooters.DateAndTime-Visible = True P.yyrSetup Возвращает объект, служащий для задания параметров страницы. Пример 'Задать ориентацию "Альбомная" 'при выводе на печать Presentations(1).PageSetup.SlideOrientation = msoOrientationHorizontal
8.3. Основной объект — Presentation 569 Path Возвращает полное имя каталога (путь), в котором нахо- дится файл презентации. Пример MsgBox "Каталог: " & ActivePresentation.Path РппЮ^Иапз Содержит в себе параметры вывода на печать. Пример 'Все слайды печатать в 4-х экземплярах Presentations(1).PrintOptions.NumberOfCopies = 4 Stid&Mnr.ter ' .... Гу. Возвращает объект типа Master, представляющий обра- зец слайдов. • Заданные для этого объекта значения свойств будут ав- томатически повторяться во всех вновь создаваемых слайдах. Пример 'Отображать в колонтитулах слайдов дату и время Presentations(1).SlideMaster .HeadersFooters.DateAndTirne.Visible = True Slides Содержит одноименную коллекцию, представляющую все слайды презентации.
570 8.3. Основной объект — Presentation Пример Dim MySlide As Slide Dim MyShape As Shape 'Доступ к первому слайду презентации Set MySlide = ActivePresentation.Slides(1) 'Задать имя MySlide.Name = "Стартовый слайд" 'Поместить на слайд текстовый объект Set MyShape = MySlide.Shapes.AddTextbox (msoTextOrientationHorizontal, 200, 170, 330, 40) Slisl&ShawS&ttings Определяет параметры показа слайдов. Пример 'Начать презентацию ActivePresentation.SlideShowSettings.Run Titl&Masier Возвращает образец заголовков. Пример With ActivePresentation If .HasTitleMaster Then .TitleMaster.Textstyles(ppTitleStyle) .Levels(1).Font.Bold = True End If End With
8.3. Основной объект — Presentation 571 Win daws Возвращает коллекцию Documentwindows, представляю- щую все окна документов. • Окна показа слайдов в коллекцию не входят. Пример 'Закрыть все окна документов, 'открытые раньше текущего For I = 1 То ActivePresentation.Windows.Count - 1 ActivePresentation.Windows(I).Close Next 8.3.2. Методы Add(BmtHMatrQKHa) ' Параметр Назначение ВидимоеОкно Булево значение, разрешающее (True) создать презентацию вместе с новым (видимым) окном. Комментарий Создает новую презентацию (для коллекции Presentations). Пример Dim MyPres As Presentation 'Создать презентацию вместе с видимым окном Set MyPres = Presentations-Add(True) 'Создать невидимую презентацию Set MyPres = Presentations.Add(False)
572 8.3. Основной объект — Presentation AJdTitleMaster Комментарий Создает образец заголовков и включает его в состав пре- зентации. • Если презентация уже обладает образцом заголовков, произойдет ошибка выполнения. Пример 'Если образца заголовков нет, то создать If Not MyPres.HasTitleMaster Then MyPres.AddTitleMaster End If А1>^1уТетрк^е(ИмяФайла) Параметр Назначение ИмяФайла Имя файла, в котором содержится шаблон Комментарий Применяет к презентации указанное оформление (шаблон дизайна). Пример 'Применить оформление "блокнот" ActivePresentation.ApplyTemplate _ "Template\Designs\Notebook.pot"
8.3. Основной объект — Presentation 573 Close Комментарий Молча закрывает презентацию. Изменения не сохраняют- ся, запрос пользователю на сохранение изменений не вы- дается! Пример изменений Закрыть все открытые презентации без сохранения For Each MyPres MyPres.Close Next In Presentations ЕхроН(ИмыКаталога, Иглофильтра, ПоШирине, Повысите') Параметр Назначение ИмяКаталога Имя каталога, куда требуется поместить файл ИмяФильтра Имя экспортного фильтра или расширение, определяющее формат графического файла ПоШирине Коэффициент масштабирования по ширине ПоВысоте Коэффициент масштабирования по высоте Комментарий Экспортирует все слайды презентации в графические фай- лы заданного формата.
574 8.3. Основной объект — Presentation Пример 'Сохранить слайды в WMF-файлах ActivePresentation.Export "С:\", "WMF" Ореп(ИмяФайла, ТолькаДляЧтенин, безИмени, ВидимеаОкни)_______________________ Параметр Назначение ИмяФайла Имя подлежащего открытию файла презентации ТолькоДля- Чтения Определяет (True), что файл должен быть открыт в режиме «только для чтения» БезИмени Определяет (True), что презентация должна быть открыта на правах вновь созданного файла (имя открываемого файла ей не присваивается) Видимое- Окно Булево значение, разрешающее (True) создать презентацию вместе с новым (видимым) окном Комментарий Открывает файл презентации (для коллекции Presentati- ons). Пример 'Открыть существующую презентацию Presentations.Open "С:\Data\MyPresl.ppt"
8.3. Основной объект — Presentation 575 PrintOut(Or, До, ПечатьВФайл,ЧислоКолий, РазобратьПоКогшям) Параметр Назначение От Номер начального слайда До Номер конечного слайда Печать- ВФайл Значение True разрешает печать в файл ЧиспоКопий Число копий Разобрать- ПоКопиям (Для случая печати нескольких копий) Значение True соответствует печати копий целыми документа- ми, False соответствуете печати копий постранично Комментарий Выводит документ на печать. Пример 'Напечатать слайды 1-5 ActivePresentation.Printout 1, 5 Save Комментарий Сохраняет презентацию в файле с ранее заданным име- нем. Пример ActivePresentation.Save
576 8.3. Основной объект — Presentation 5ауеА$(ИмяФайла, Формзт^ВнедритьШ^ифгы) Параметр Назначение ИмяФайла Имя сохраняемого файла Формат Константа, определяющая формат файла Внедрить- Шрифты Разрешает (True) внедрить шрифты TrueType в сохраняемую презентацию Комментарий Сохраняет презентацию в файле заданного формата с за- данным именем. Пример 'Сохранить презентацию в файле '"MyPresl" с внедренными шрифтами ActivePresentation.SaveAs "MyPresl.ppt", , True WebPaggPr&Wgw * Комментарий Позволяет выполнить предварительный просмотр презен- тации в активном обозревателе в таком виде, какой она приобретет, будучи сохранена как Web-документ. Пример Presentation(1).WebPagePreview
8.4. Образцы — объект Master 577 8.3.3. Пример VBA-процедура, текст которой приведен ниже, создает новую презентацию на основе существующего оформления (шабло- на дизайна). 'Создать презентацию Sub NewPresO 'Определить каталог, где находятся 'шаблоны дизайна Const TemplPath = _ "С:\Office\Template\Designs\" Dim ThePr As Presentation 'Создать презентацию Set ThePr = Presentations.Add With ThePr 'Применить оформление "Notebook" .ApplyTemplate TemplPath & "Notebook.pot" 'Сохранить и закрыть -SaveAs "C:\Data\Presl" End With End Sub 8.4. Образцы — объект Master Образцы (объекты типа Master) могут быть созданы в презен- тации для слайдов, заголовков, выдач или заметок докладчика. Образец может содержать информацию о форматировании объекта, а также разного рода заготовки — неизменяемый текст, логотип фирмы и т. п. Образцы разных видов представ- лены объектами типа Master, которые доступны через разно- именные свойства презентации: SlideMaster для образца слайдов, TitleMaster для образца заголовков, HandoutMaster для образца выдач и NotesMaster для образца заметок до- кладчика. 19 1855
578 8.4. Образцы — объект Master 8.4.1. Свойства Background Возвращает объект типа ShapeRange, представляющий задний план слайда. Пример Dim MyMaster As Master Set MyMaster = ActivePresentation.TitleMaster MyMaster.Background.Fill.ForeColor _ .RGB = RGB(128, 32, 64) Представляет цветовую схему. Пример Dim MyMaster As Master 'Задать цветовую схему 1 для заднего плана образца Set MyMaster = ActivePresentation.SlideMaster MyMaster.ColorScheme.Colors(ppBackground) .RGB = RGB(204, 236, 255) Head^rbFooti-rr Обеспечивает доступ к колонтитулам. Пример Dim MyMaster As Master 'Отображать дату и время в колонтитулах
8.4. Образцы — объект Master 579 Set MyMaster = ActivePresentation.SlideMaster MyMaster.HeadersFooters.DateAndTime _ .Visible = True Shape* Содержит коллекцию Shape-объектов. Пример Dim MyMaster As Master Dim MyShape As Shape 'Поместить в левый верхний угол 'образца логотип фирмы Set MyMaster = ActivePresentation.SlideMaster Set MyShape = MyMaster.Shapes.AddPicture ("C:\Data\Logo.bmp", False, True, 10, 10, 75, 75) T&xtStyles Содержит коллекцию Textstyles, представляющую шабло- ны стиля для текстовых объектов. Пример Dim MyMaster As Master 'Задать параметры шрифта для основного 'текста слайда Set MyMaster = ActivePresentation.SlideMaster With MyMaster.Textstyles(ppBodyStyle) .Levels(1).Font .Name = "Arial" -Size = 36 .Bold = True End With
580 8.4. Образцы — объект Master 8.4.2. Пример В данном примере создается презентация, а затем образец слайдов для этой презентации. Образцы выдач, заголовков или заметок можно создать аналогичным образом. Sub CreateSlideMaster() 'Объявить рабочую переменную Dim ThePr As Presentation 'Создать экземпляр презентации Set ThePr = Presentations.Add 'Определить образец слайдов With ThePr.SlideMaster 'Определить фон .Background.Fill.ForeColor.RGB _ = RGB(200, 155, 100) 'Определить колонтитулы With .HeadersFooters .DateAndTime.UseFormat = True . DateAndTime.Format = ppDateTimedMMMyy .Footer.Text = "Realsoft" .SlideNumber.Visible = True End With 'Формат основного текста With .Textstyles(ppBodyStyle) 'Одинаковый шрифт для всех уровней .TextFrame.TextRange.Font.Name = "Arial" 'Отдельно форматировать уровень 1 With .Levels(1).Font .Bold = True .Shadow = True .Size = 42 End With
8.5. Слайды — объект Slide 581 End With End With End Sub 8.5. Слайды — объект Slide Презентация состоит из слайдов, каждый из которых пред- ставлен объектом типа Slide, а все вместе они доступны че- рез коллекцию Slides. Слайды могут обладать именами, бла- годаря чему упрощается их идентификация внутри коллекции (имена слайдов имеют смысл только в рамках VBA). 8.5.1. Свойства Background Возвращает объект типа ShapeRange, представляющий задний план слайда. Пример Dim MySlide As Slide 'Определить цвет фона слайда, 'отличный от образца Set MySlide = ActivePresentation.Slides(1) MySlide.FollowMasterBackground = False MySlide.Background.Fill.ForeColor.RGB = RGB(128, 32, 64) Count Число слайдов в презентации (для коллекции Slides)
582 8.5. Слайды — объект Slide Пример MsgBox "Число слайдов: " & ActivePresentation.Slides.Count OisplayMasterShapas Разрешает (True) или запрещает (False) отображение на заднем плане объектов образца. Пример ActivePresentation.Slides(1). DisplayMasterShapes = False FallowMasterBackgrourKi ____________• . \ Определяет (True), что свойства заднего плана слайда должны соответствовать образцу. Пример 'Цвет фона слайда, отличный от образца ActivePresentation.Slides(1). FollowMasterBackground = False Lay.mt__________________________' Содержит константу, значение которой задает вариант ав- торазметки слайда.
8.5. Слайды — объект Slide 583 Пример 'Авторазметка: "Диаграмма и текст" ActivePresentation.Slides(1) .Layout = ppLayoutChartAndText Name Имя, присвоенное слайду для его идентификации в преде- лах коллекции Slides. Пример 'Вначале присвоим слайду имя... ActivePresentation.Slides(1).Name = "Январь" 'Затем обратимся к нему по имени Set MySlide = ActivePresentation _ .Slides("Январь") Shapes Коллекция Shape-объектов, принадлежащих слайду. Пример Dim MyShape As Shape 'Изменить цвет объекта Set MyShape = ActivePresentation.Slides(1)_ .Shapes (1) MyShape.Fill.ForeColor.RGB = RGB(128, 192, 64)
584 8.5. Слайды — объект Slide SlideShowTransition Представляет параметры появления слайда в процессе презентации (эффект перехода слайда). Пример Dim MySlide As Slide 'Задать эффект Set MySlide = ActivePresentation.Slides (1) MySlide.SlideShowTransition.EntryEffeet = _ ppEffectCoverRight 8.5.2. Методы Аии(Н^мврСлайда, Аиторазматка) Параметр Назначение НомерСпайда Порядковый номер создаваемого слайда в кол - лекции Авторазметка Константа, определяющая вид авторазметки со- здаваемого слайда Комментарий Создает новый слайд и включает его в состав коллекции слайдов. Пример 'Включить в позицию 5 новый слайд 'с разметкой "Диаграмма" ActivePresentation.Slides.Add 5, ppLayoutChart
8.5. Слайды — объект Slide 585 Сиру Комментарий Копирует слайд в буфер обмена. Пример ActivePresentation.Slides(1).Copy Cut Комментарий Вырезает слайд в буфер обмена. Пример ActivePresentation.Slides(1)-Cut Delete Комментарий Удаляет слайд (исключает из состава презентации). Пример ActivePresentation.Slides(2).Delete
586 8.5. Слайды — объект Slide Duplicate Комментарий Создает копию слайда и вставляет его в коллекцию непо- средственно после слайда-оригинала. Пример ActivePresentation.Slides(1).Duplicate Pasta(HoMw'pCnait^a) Параметр Назначение НомерСлайда Порядковый номер вставляемого слайда в кол- лекции Комментарий Выполняет вставку слайда из буфера обмена в указанную позицию в рамках коллекции Slides. Пример ActivePresentation.Slides.Paste 3 8.5.3. Пример Вначале здесь создается образец слайдов, затем на его осно- ве будут созданы два слайда, которые подвергнутся дальней- шему редактированию.
8.5. Слайды — объект Slide 587 Sub TwoSlidesO 'Каталог с графическими файлами Const Scrbeans = "OFFICE\BITMAPS\DBWIZ\" 'Объявить рабочие переменные Dim ThePr As Presentation Dim SlideTitle As Slide 'Создать новую презентацию Set ThePr = Presentations.Add 'Определить образец слайдов With ThePr.SlideMaster .Background.Fill.ForeColor.RGB _ = RGB(200, 155, 100) End With 'Создать слайд с разметкой "Титульный слайд" Set SlideTitle = ThePr.Slides.Add(1, ppLayoutTitle) With SlideTitle 'Задать эффект: "Прямоугольник наружу" .SlideShowTransition.EntryEffect _ = ppEffectBoxOut 'Тексты заголовка и подзаголовка .Shapes(1).TextFrame.TextRange.Text _ = "Цифры" & " и факты" .Shapes (2) .TextFrame.TextRange.Text = _ "Статистика за неделю" End With 'Создать второй слайд с разметкой '"Только заголовок" ThePr.Slides.Add 2, ppLayoutTitleOnly With ThePr.Slides(2) 'Задать эффект: "Прямоугольник внутрь" .SlideShowTransition.EntryEffeet _ = ppEffectBoxin 'Текст заголовка и рисунок
588 8.6. Объекты слайда - коллекция Shapes .Shapes(1).TextFrame.TextRange.Text _ = "Тенденция" .Shapes.AddPicture Scrbeans & _ "Contacts.gif" , msoFalse, msoTrue, 217, 150, 286, 310 End With End Sub 8.6. Объекты слайда - коллекция Shapes Все элементы на поверхности слайда — будь то пустой местоза- полнитель, текст или автофигура, рисунок или OLE-объект — представлены коллекцией Shapes. Собственно, в визуальном отношении слайд состоит из набора Shape-объектов и фона (заднего плана). Свойства и методы коллекции Shapes исполь- зуются для манипуляций с Shape-объектами, принадлежащими данному слайду. 8.6.1. Свойства Ctunt Число Shape-объектов в коллекции и соответственно на слайде. Пример Dim MyShapes As Shapes Set MyShapes = ActivePresentation .Slides(1).Shapes MsgBox "Слайд состоит из " _ & MyShapes.Count & " элементов." HasTitla И Возвращает булево значение True, если коллекция содер- жит заголовок.
8.6. Объекты слайда - коллекция Shapes 589 Пример Dim MyShapes As Shapes 'Если заголовка нет, то добавить Set MyShapes = ActivePresentation .Slides(1).Shapes If Not MyShapes.HasTitle Then MyShapes.AddTitle End If Title Содержит Shape-объект, представляющий заголовок слайда. Пример Dim MyShapes As Shapes 'Если есть заголовок, то задать текст Set MyShapes = ActivePresentation _ .Slides(1).Shapes If MyShapes.HasTitle Then MyShapes.Title.TextFrame.TextRange _ -Text = "Январь 1999" End If 8.6.2. Методы AdtfCaltoutfTHnBbiHocKn, ОгступСлева, ОтступСверху, Ширина, Высота) h. л: ' . 'ъЛ "tT " Включает в состав коллекции и помещает на слайд новую выноску с заданными параметрами.
590 8.6. Объекты слайда - коллекция Shapes Параметр Назначение ТипВыноски Константа, определяющая тип выноски ОтступСлева, ОтступСверху Координаты (в пунктах) левого верхнего угла выноски Ширина, Высота Размеры выноски в пунктах Пример Dim MyShape As Shape Set MyShape = ActivePresentation.Slides(1).Shapes .AddCallout(msoCalloutThree, 200, 150, 100, 100) ДйУСатгпйскеишгупСлекя, OrcrynCH&fixy, Ширина, Высота) Параметр Назначение ОтступСлева, ОтступСверху Координаты (в пунктах) левого верхнего угла примечания Ширина, Высота Размеры примечания в пунктах Комментарий Включает в состав коллекции Shapes и помещает на слайд примечание. Пример Dim MyShape As Shape Set MyShape = ActivePresentation.Slides(1) .Shapes.AddComment(250, 100, 100, 100)
8.6. Объекты слайда - коллекция Shapes 591 AddCarai&Gtor(TnifJlHHUn, Нэч&лоХ, НачалоУ, КонсцХ, КанецУ) Параметр Назначение ТипЛинии Константа, определяющая тип соедините- льной линии НачалоХ, НачалоУ Координаты начала линии КонецХ, КонецУ Координаты конца линии Комментарий Включает в состав коллекции Shapes и помещает на слайд соединительную линию. • Непосредственно после создания линия ни к чему не присоединена (для этого необходимо воспользоваться методами BeginConnect и EndConnect). Пример Dim MyShape As Shape Set MyShape = ActivePresentation.Slides(1) .Shapes.AddConnector(msoConnectorCurve, 300, 200, 150, 150) AddLabtfl(Opntenrannn, ОгступСл^аа, ОтцгулСаерху, « Ширина, га) _____________ , s Комментарий Включает в состав коллекции Shapes и помещает на слайд надпись.
592 8.6. Объекты слайда - коллекция Shapes Параметр Назначение Ориентация Константа, определяющая ориентацию текста надписи ОтступСлева, ОтступСверху Координаты (в пунктах) левого верхнего угла надписи Ширина, Высота Размеры надписи в пунктах Пример Dim MyS As Shape 'Поместить на слайд вертикальную надпись Set MyS = ActivePresentation.Slides(1).Shapes .AddLabel(msoTextOrientationVerticalFarEast , 300, 200, 150, 150) AddUnefHavaaoX, Начало*, КанецХ.Конец*) Параметр Назначение НачалоХ, НачалоУ Координаты начала линии | КонецХ, КонецУ Координаты конца линии Комментарий Включает в состав коллекции Shapes и помещает на слайд линию. Пример Dim MyShape As Shape Set MyShape = ActivePresentation.Slides(1) .Shapes-AddLine(150, 200, 250, 100)
8.6. Объекты слайда - коллекция Shapes 593 A МММе&ифЬ^сЦИмяФайла, Orc гупСлеаа, ОтступСвврху, Ширина, Высота) Параметр 1 Назначение ИмяФайла Имя мультимедийного файла ОтступСлева, ОтступСверху Координаты (в пунктах) левого верхнего угла объекта Ширина, Высота Размеры объекта в пунктах Комментарий Создает объект мультимедиа, помещает его на слайд и включает в состав коллекции Shapes. Пример Dim MyShape As Shape Set MyShape = ActivePresentation.Slides(1) .Shapes.AddMediaObject("C:\Date\Logo.avi", 150, 200, 250, 100) яМО1.Е(Мес1(У1ыяФайла, ОтступСлева, ОтступСверху Мирин? Выест?, ИмяКласса, Имя'райг , Значок, ФлйлЗничкэ, НомерЗначка Ьадпгсь, Связал.} Комментарий Создает или загружает из файла OLE-объект, помещает его на слайд и включает в состав коллекции Shapes.
594 8.6. Объекты слайда - коллекция Shapes Параметр Назначение ОтступСлева, ОтступСверху Координаты (в пунктах) левого верхнего угла объекта Ширина, Высота Размеры объекта в пунктах ИмяКласса Имя класса, к которому относится объект ИмяФайла Имя файла, где находится объект Значок Разрешает (True) отображать объект в виде значка ФайлЗначка Имя файла, где находится значок НомерЗначка Порядковый номер значка в файле Надпись Определяет текст надписи под значком Связать Разрешает (True) связать объект Пример Dim MyShape As Shape 'Поместить на слайд таблицу Excel Set MyShape = ActivePresentation.Slides(1) .Shapes.AddOLEObject(150, 200, 250, 100, , "C:\Date\tabl.xls") Аи&РкЛиге(Им*Файлэ, Связать, СохрзнятьСДокуменгом, iОтступСлева,’ОтступСверху, Ширина, Высота)- Комментарий Загружает из файла рисунок, помещает его на слайд и включает в состав коллекции Shapes.
8.6. Объекты слайда - коллекция Shapes 595 Параметр Назначение ИмяФайла Имя графического файла Связать Определяет, должен ли (True) рисунок быть связанным с файлом-первоисточником или же (False) являться независимой копией Сохранять- СДокументом Разрешает (True, обязательно в случае Связать = False) сохранять рисунок вместе с докумен- том ОтсгупСлева, ОтступСверху Координаты (в пунктах) левого верхнего угла рисунка Ширина, Высота Размеры рисунка в пунктах Пример Dim MyShape As Shape Set MyShape = ActivePresentation.Slides(1) .Shapes.AddPicture("C:\Date\logo.bmp", False, True, 150, 200, 250, 100) АдйЗЬавефийФигурь,> О гступС„евв Orc, iCBeo^y. Ширина,Высота) - - -w • Параметр Назначение ТипФигуры Константа, определяющая тип автофигуры ОтсгупСлева, ОтступСверху Координаты (в пунктах) левого верхнего угла объекта Ширина, Высота Размеры объекта в пунктах
596 8.6. Объекты слайда - коллекция Shapes Комментарий Создает автофигуру, помещает ее на слайд и включает в состав коллекции Shapes. Пример Dim MyShape As Shape Set MyShape = ActivePresentation.Slides(1) .Shapes.AddShape _ (msoShapeActionButtonlnformation, 150, 200, 250, 100) АШТаЫ^ЧислоСтрок, ЧислоСтолбцоа, ОтступСл&за, ОтступСеарху, Ширина, Высота) Параметр Назначение ЧислоСтрок Число строк в таблице ЧислоСтолбцов Число столбцов в таблице । ОтступСлева, ОтступСверху Координаты (в пунктах) левого верхнего угла объекта Ширина, Высота Размеры объекта в пунктах Комментарий Создает таблицу указанного размера, помещает ее на слайд и включает в состав коллекции Shapes. Пример Dim MyShape As Shape
8.6. Объекты слайда - коллекция Shapes 597 Set MyShape = ActivePresentation _ .Slides(1).Shapes _ ,AddTable(3, 4, 150, 200, 250, 100) А44ТехМ>ох(Ориентация, ОтступСлеею, ОтступСверху, Ширина, Высота) Параметр Назначение Ориентация Константа, определяющая ориентацию текста Отступ Слева, ОтступСверху Координаты (в пунктах) левого верхнего угла текста Ширина, Высота Размеры автофигуры с текстом в пунктах Комментарий Создает, включает в состав коллекции Shapes и помещает на слайд автофигуру с текстом. Пример Dim MyShape As Shape Set MyShape = ActivePresentation.Slides(1) .Shapes.Addlextbox(msoTextOrientationHorizontal , 300, 200, 150, 150) Past* Комментарий Выполняет вставку Shape-объекта из буфера обмена.
598 8.7. Объект Shape Пример Set MyShape = ActivePresentation.Slides(1) .Shapes.Paste SetectAil Комментарий Выделяет все Shape-объекты на слайде. Пример ActivePresentation.Slides(1).Shapes.SelectAll 8.7. Объект Shape Каждый Shape-объект, вне зависимости от того, какого типа элемент слайда он представляет, обладает стандартным на- бором свойств и методов. Поскольку все видимые элементы слайда представлены Shape-объектами, понятно, какую роль объект типа Shape играет в программировании для среды Po- werPoint. 8.7.1. Свойства ActionSettings Возвращает объект ActionSetting, определяющий реакцию Shape-объекта на действия пользователя.
8.7. Объект Shape 599 Пример 'При щелчке на объекте завершить презентацию MyShape-ActionSettings(ppMouseClick) .Action = ppActionEndShow AnimatiunSa ttings И Определяет анимационные эффекты, сопровождающие объект в ходе презентации. Пример 'Задать анимационный эффект MyShape.AnimationSettings.EntryEffeet = ppEffectBlindsVertical AutaShapeType Определяет тип автофигуры. Пример 'Автофигура: 32-конечная звезда MyShape.AutoShapeType = msoShape32pointStar Callout Определяет параметры выноски. Пример MyShape.Callout.Angle = msoCalloutAngle45
600 8.7. Объект Shape Fill Определяет параметры заливки. Пример MyShape.Fill.ForeColor.RGB = RGB(64, 52, 192) HasTaLle- Возвращает булево значение True, если объект представ- ляет собой таблицу. Пример With ActiveWindow.Selection.ShapeRange If .HasTable = True Then -Table.Columns(1).Width = 35 End If End With lasTextFrame Возвращает булево значение True, если объект распола- гает областью текста. Пример If MyShape.HasTextFrame Then MyShape.TextFrame.TextRange.Text = "Лучший показатель года" End If Height Определяет высоту объекта в пунктах.
8.7. Объект Shape 601 Пример MyShape.Height = 200 Left Определяет отступ по горизонтали от левого верхнего угла слайда в пунктах. Пример MyShape.Left = 150 Name Имя объекта, идентифицирующее его среди элементов коллекции Shapes. Пример 'Вначале присвоим объекту имя... MyShape.Name = "Logo" 'Затем обратимся к нему по имени ActivePresentation.Slides(1).Shapes("Logo") .Top = 20 PictureFormat • Содержит одноименный объект, чьи свойства и методы предназначены для форматирования рисунков и OLE-объ- ектов. Пример MyShape.PictureFormat.Brightness = 0.6
602 8.7. Объект Shape Rotation Определяет угол вращения объектов в градусах. Пример MyShape.Rotation = 45 Shadow '• < Содержит объект ShadowFormat, который позволяет управ- лять эффектами, связанными с тенью объекта. Пример 'Включить тень и задать для нее 'смещение относительно объекта With MyShape.Shadow .Visible = True .OffsetX = 5 •OffsetY = 10 End With Tattle Содержит объект Table, входящий в данную автофигуру или объединение автофигур. Пример ActivePresentation.Slides(3).Shapes(7) .TableColumns(1).Width = 25
8.7. Объект Shape 603 TextFrame Определяет свойства области текста. Пример If MyShape.HasTextFrame Then MyShape.TextFrame.TextRange.Text = "Лучший показатель года" End If Thr^eD Служит для управления эффектом объемности. Пример 'Включить эффект объемности MyShape.ThreeD.Visible = True TOP • f Определяет отступ по вертикали от левого верхнего угла слайда в пунктах. Пример MyShape.Тор = 250 Width Определяет ширину объекта в пунктах.
604 8.7. Объект Shape Пример MyShape.Width = 150 8.7.2. Методы Дрр/у Комментарий Служит для форматирования Shape-объекта в соответст- вии с форматом, скопированным ранее с помощью метода PickUp. Пример 'Отформатировать 2-й объект по образцу 1-го ActivePresentation.Slides(1).Shapes(1).PickUp ActivePresentation.Slides(1).Shapes(2).Apply Qupy_________________________< Комментарий Копирует объект в буфер обмена. Пример MyShape.Сору
8.7. Объект Shape 605 Cut Комментарий Вырезает объект в буфер обмена. Пример MyShape.Cut Oe/efe Комментарий Удаляет Shape-объект. Пример MyShape.Delete Duplicate Комментарий Создает дубликат Shape-объекта и включает его в коллек- цию Shapes непосредственно за объектом-оригиналом. Пример MyShape.Duplicate
606 8.7. Объект Shape РИ^(ОсьОгражинич) Параметр Назначение ОсьОтражения Константа, определяющая ось отражения объ- екта (слева направо или сверху вниз) Комментарий Выполняет зеркальное отражение объекта. Пример MyShape.Flip msoFlipHorizontal Параметр Назначение Шаг Количество пунктов, на которые необходимо пере- местить объект. Положительные значения соответ- ствуют движению вправо, отрицательные - влево Комментарий Перемещает объект по горизонтали на заданное число пунктов. Пример 'Переместить объект на 40 пунктов вправо MyShape.IncrementLeft 40 'Переместить объект на 40 пунктов влево MyShape.IncrementLeft -40
8.7. Объект Shape 607 Iпесете n tRota t ion (Угол) Параметр Назначение Угол Угол (в градусах), на который требуется повернуть объект Комментарий Поворачивает объект на заданный угол вокруг оси Z. Пример 'Повернуть объект на 45 градусов MyShape.IncrementRotation 45 IncrementTw(UJar) Параметр Назначение Шаг Количество пунктов, на которые необходимо пере- местить объект. Положительные значения соответ - ствуют движению вниз, отрицательные - вверх Комментарий Перемещает объект по вертикали на заданное число пунктов. Пример 'Переместить объект на 40 пунктов вниз MyShape.IncrementTop 40 'Переместить объект на 40 пунктов вверх MyShape.IncrementTop -40
608 8.7. Объект Shape PickUp Комментарий Копирует параметры форматирования объекта так, что позднее они могут быть применены к другому объекту с помощью метода Apply. Пример 'Отформатировать 2-й объект по образцу 1-го ActivePresentation.Slides(1).Shapes(1).PickUp ActivePresentation.Slides(1).Shapes(2).Apply ScaltfHifight(Ko3ip<pnuincHT, ОтносительноОригинала, - 7\эчка Фиксации)__________________ " ’ " '". Параметр Назначение Коэффициент Коэффициент масштабирования Относительно- Оригинала Определяет, должен ли объект масштабирова - ться относительно своих первоначальных раз- меров (True) или относительно текущих (False) ТочкаФиксации Константа, определяющая точку объекта, кото- рая должна остаться неподвижной при масш - табировании Комментарий Масштабирует объект по высоте в соответствии с задан- ными параметрами. • Метод применим только к рисункам и OLE-объектам.
8.7. Объект Shape 609 Пример 1 Увеличить объект по высоте 'в два раза против оригинала MyShape.ScaleHeight 2, True, msoScaleFromMiddle 'Увеличить объект по высоте 'в два раза против текущей высоты MyShape.ScaleHeight 2, False, _ msoScaleFromMiddle &сл1в№1МЬ(Канффициент, ОтнсюлттлыюОрмгмнала, _____Точки Фиксации) _________________: - Параметр Назначение Коэффициент Коэффициент масштабирования Относительно- Ори пинала Определяет, что объект должен масштабирова - ться относительно своих первоначальных раз - меров (True) или относительно текущих (False) ТочкаФиксации Константа, определяющая точку объекта, кото- рая должна остаться неподвижной при масш- табировании Комментарий Масштабирует объект по ширине в соответствии с задан- ными параметрами. • Метод применим только к рисункам и OLE-объектам. Пример 'Увеличить объект по ширине 'в два раза против оригинала MyShape.ScaleWidth 2, True, msoScaleFromMiddle 20 1855
610 8.7. Объект Shape 'Увеличить объект по ширине 'в два раза против текущей MyShape.Scalewidth 2, False, msoScaleFromMiddle 5е1асЦЗместоИлиВместе) Параметр Назначение Вместо- ИлиВместе Булево значение, указывающее, должен ли объект быть выделен вместо (True) ранее выделенных или вместе (False) с ними Пример MyShape.Select SttShapesDufaultPruperties Комментарий Применяет форматирование текущего объекта к объекту по умолчанию. Пример MyShape.SetShapesDeafaultProperties | ZQrii? г (Позиция) Параметр Назначение Позиция Константа, определяющая новую позицию объекта или ее изменение
8.7. Объект Shape 611 Комментарий Изменяет положение объекта относительно других объек- тов «в глубину». Пример 'Вывести объект на передний план MyShape.ZOrder msoBringToFront 8.7.3. Пример С использованием свойств и методов объекта Shape в этом примере будет построен набор диаграмм. Sub DemoShapes() 'Каталог с графикой Const PicPath = "Clipart\Popular\" 'Значения для Юга, Севера, Востока и Запада Dim UW(1 То 4) As Double Dim Region (1 To 4) As String Dim Total As Double 'Рабочие переменные Dim TheSlide As Slide Dim TheShape As Shape Dim I As Integer 'Подготовить данные Region(1) = "Север" Region(2) = "Восток" Region(3) = "Юг" Region(4) = "Запад" UW(1) = 100 UW(2) = 200 UW(3) = 150 UW(4) = 300
612 8.8. Обработка событий — объект ActionSetting 'Вычислить сумму For I = 1 То 4 Total = Total + UW(I) Next 'Создать новый слайд в новой презентации Set TheSlide = Presentations.Add.Slides.Add(1, _ ppLayoutTitleOnly) With TheSlide -Shapes(1).TextFrame.TextRange.Text = "1999 год" For I = 1 To 4 'Создать автофигуру с текстом Set TheShape = .Shapes.AddTextbox _ (msoTextOrientationHorizontal, 1*125, 400, 80, 30) 'Задать и отформатировать текст With TheShape.TextFrame .HorizontalAnchor = msoAnchorCenter .TextRange.Text = Region(I) .TextRange.Font.Name = "Arial" End With 'Добавить рисунок Set TheShape = .Shapes.AddPicture(PicPath & _ "COINS.WMF", msoFalse, msoTrue, I * 125, -50, 80, 420) 'Отмасштабировать рисунок TheShape.ScaleHeight UW(I)/Total, False, _ msoScaleFromBottomRight Next End With End Sub 8.8. Обработка событий — объект ActionSetting Для обработки событий, связанных с действиями пользовате- ля, и соответственно для управления ходом презентации в Po- werPoint используется объект ActionSetting, который доступен посредством свойства ActionSettings объектов типа Shape.
8.8. Обработка событий — объект ActionSetting 613 8.8.1. Свойства Actiun Определяет вид действия, которое должно быть предпри- нято в случае выбора пользователем данного Shape-объ- екта. Пример 'При щелчке на объекте — переход 'к первому слайду MyShape.ActionSettings(ppMouseClick).Action = ppActionFirstSlide AnimataAction Определяет (True), что объект инвертирует свой цвет при наступлении заданного события мыши. Пример MyShape.ActionSettings(ppMouseClick) .AnimateAction = True Run Определяет имя процедуры (макроса), подлежащей вы- полнению при наступлении указанного события. Пример 'При щелчке запустить процедуру GetData MyShape.ActionSettings(ppMouseClick).Action = ppActionRunMacro MyShape-ActionSettings(ppMouseClick) .Run = "GetData"
614 8.9. Параметры анимации — объект Animationsettings 8.9. Параметры анимации — объект Animationsettings Объект Animationsettings (доступен через одноименное свой- ство Shape-объектов) служит для задания параметров анима- ционных эффектов, которые должны сопровождать Shape-объ- ект в ходе презентации. 8.9.1. Свойства A Jv.vncc Моь'е Задает режим запуска анимации — по щелчку на объекте или автоматически через заданный интервал времени. Пример 'Анимация через 5 секунд With MyShape.Animationsettings .AdvanceMode = ppAdvanceOnTime .AdvanceTime = 5 End With AilvanceTima Задает интервал времени в секундах для режима автома- тической анимации. Пример 'Анимация через 5 секунд With MyShape.Animationsettings .AdvanceMode = ppAdvanceOnTime .AdvanceTime = 5 End With
8.9. Параметры анимации — объект Animationsettings 615 Aftereffect » Определяет вид объекта после завершения анимации. Пример 'Скрыть объект после завершения анимации MyShape.Animationsettings.AfterEffect _ = ppAfterEffectHide Animate ' > Разрешает (True) или запрещает (False) анимацию объекта. Пример MyShape.Animationsettings.Animate = True ChartUnitEftect Определяет вид анимации для диаграмм. Пример 'Анимация диаграммы по ряду данных MyShape.Animationsettings.ChartUnitEffect = ppAnimateBySeries EntrySffect Определяет вид специального эффекта, сопровождающе- го анимацию.
616 8.9. Параметры анимации — объект Animationsettings Пример 'Спецэффект: "Жалюзи горизонтальные" MyShape.Animationsettings.EntryEffect = ppEffectBlindsHorizontal 8.9.2. Пример Пример иллюстрирует некоторые возможности анимации, до- ступные в среде PowerPoint. Sub SetAnimation() 'Рабочие переменные Dim TheSlide As Slide Dim TheShape As Shape 'Создать новый слайд в новой презентации Set TheSlide = Presentations.Add.Slides.Add(1, ppLayoutBlank) 'Добавить автофигуру Set TheShape = TheSlide.Shapes.AddShape _ (msoShapeRightArrow, 80, 170, 100, 40) 'Задать параметры анимации With TheShape.Animationsettings .AdvanceMode = ppAdvanceOnTime .AdvanceTime = 1 .EntryEffeet = ppEffectFlyFromLeft End With 'Добавить текст Set TheShape = TheSlide.Shapes.AddTextbox (msoTextOrientationHorizontal, 200, 170, 350, 40) 'Сам текст и анимация для него With TheShape .TextFrame.TextRange.Text = "Анимация текста" With .Animationsettings .AdvanceMode = ppAdvanceOnTime .AdvanceTime = 0
8.10. Параметры заливки — объект FillFormat 617 .EntryEffect = ppEffectStretchLeft End With End With End Sub 8.10. Параметры заливки — объект FillFormat Параметры заливки Shape-объекта определяются их свойст- вом FillFormat, в котором содержится одноименный объект. Заливка может быть сплошной или текстурной, ее роль может играть узор или рисунок. 8.10.1. Свойства BackColor Определяет цвет фона (заднего плана). Пример 'В качестве цвета фона использовать цвет фона, 'Заданный цветовой схемой MyShape.Fill.BackColor.SchemeColor _ = ppBackground 'В качестве цвета фона использовать 'дополнительный цвет MyShape.Fill.BackColor.RGB = RGB(128, 64, 192) ForeColor Определяет цвет переднего плана заливки (узора, рисунка). Пример 'В качестве цвета переднего плана использовать 'Цвет переднего плана, заданный цветовой схемой
618 8.10. Параметры заливки — объект FillFormat MyShape.Fill.ForeColor.SchemeColor _ = ppForeground 'В качестве цвета переднего плана использовать 'дополнительный цвет MyShape.Fill.ForeColor.RGB = RGB(128, 64, 192) Tranuparuncy Определяет прозрачность цвета (только для сплошного фона и линий, значения от 0 до 1). Пример 'Полупрозрачная заливка MyShape.Fill.Transparency = 0.5 8.10.2. Методы ОпаСа1игСга<Л^п1(ТипШтрихаеки, Вариант, Градиент} Параметр Назначение ТипШтриховки Константа, определяющая тип штриховки Вариант Константа, определяющая вариант для вы- бранного типа штриховки Г радиент Значение градиента (от 0 до 1) Комментарий Задает одноцветную градиентную заливку с указанными параметрами.
8.10. Параметры заливки — объект FillFormat 619 Пример 'Одноцветный градиент типа "диагональная 2" MyShape.Fill.OneColorGradient msoGradientDiagonalDown, Г, 0.2 PatternedfYaop) Параметр Назначение Узор Константа, определяющая вид узора Комментарий Задает заливку-узор с указанными параметрами. Пример 'Заливка: узор типа "горизонтальные кирпичи" MyShape.Fill.Patterned _ msoPatternHorizontalBrick ЯгевсАЗг.^гцп^ТилШгрихияки, Вариант, ТипГрадыента) Параметр Назначение ТипШтриховки Константа, определяющая тип штриховки Вариант Константа, определяющая вариант для выбран- ного типа штриховки ТипГ радиента Константа, определяющая тип градиента
620 8.10. Параметры заливки — объект FillFormat Комментарий Задает заливку с одним из предопределенных типов гра- диента («горизонт», «рассвет», «пустыня» и т.д.). Пример 'Градиентная заливка: штриховка — "диагональная 1" 'Тип градиента — "Туман" MyShape.Fill.PresetGradient msoGradientDiagonalUp, Г, msoGradientFog PresetTextured(TeKcrypa) Параметр Назначение Текстура Константа, определяющая тип текстуры Комментарий Задает текстурную заливку с текстурой указанного типа. Пример 'Текстурная заливка: "коричневый мрамор" MyShape.Fill.PresetTextured _ msoTextureBrownMarble Solid Комментарий Задает сплошную заливку.
8.10. Параметры заливки — объект FillFormat 621 Пример MyShape.Fill.Solid Т\лгоСок->гСгяс/<сп((ТипШтрижааки, Вариант) Параметр Назначение ТипШтриховки Константа, определяющая тип штриховки Вариант Константа, определяющая вариант для выбран- ного типа штриховки Комментарий Задает двухцветную градиентную заливку. Пример 'Двухцветный градиент типа "диагональная 1" MyShape.Fill.TwoColorGradient msoGradientDiagonalDown, Г изигРМиге(ИмяФэйла) Параметр Назначение ИмяФайла Имя графического файла, содержащего рисунок Комментарий Использует в качестве заливки рисунок, загруженный из графического файла. • Рисунок, содержащийся в файле масштабируется так, чтобы заполнить весь объект.
622 8.11. Форматирование линии — объект LineFormat Пример MyShape.Fill.UserPicture "С:\Date\Logo.bmp" UserTextured(HM8&a&fla) Параметр Назначение ИмяФайла Имя графического файла, содержащего образец текстуры Комментарий Задает текстуру, определенную пользовательским графи- ческим файлом. • Рисунок, содержащийся в файле повторяется до запол- нения объекта. Пример MyShape.Fill.UserTextured "С:\Date\Logo.bmp" 8.11. Форматирование линий — объект LineFormat Объект LineFormat служит для форматирования линий, как та- ковых, а также для форматирования линий, из которых состоят автофигуры. Этот объект содержится в свойстве Line объектов типа Shape.
8.11. Форматирование линий — объект LineFormat 623 8.11.1. Свойства BjckCal&r Определяет цвет заднего плана линии. • Свойство применимо только в отношении линий узоров. Пример MyShape.Line.BackColor.RGB = RGB(192, 64, 192) BeginArrowheeicfLength Определяет длину стрелки в начале линии. Пример MyShape.Line.BeginArrowheadLength = msoArrowheadLengthMedium BaginArrttWheadStyle Определяет стиль стрелки в начале линии. Пример MyShape.Line.BeginArrowheadStyle = msoArrowheadOval BeginAmwhesdWidth__________________v ..°-- Определяет толщину стрелки в начале линии.
624 8.11. Форматирование линий — объект LineFormat Пример MyShape.Line.BeginArrowheadWidth = msoArrowheadWidthMedium 3i t.rStyl.* Определяет шаблон линии (стиль пунктира). Пример MyShape.Line.DashStyle = msoLineDashDot EndArruwheadLength ' « s-** » Определяет длину стрелки в конце линии. Пример MyShape.Line.EndArrowheadLength = msoArrowheadLengthMedium EndArrowheadStyte Определяет стиль стрелки в конце линии. Пример MyShape.Line.EndArrowheadStyle = msoArrowheadOval EndArrowhaadWidth Определяет толщину стрелки в конце линии.
(gOlPfeWliW 8.11. Форматирование линий — объект LineFormat 625 Пример MyShape.Line.EndArrowheadWidth = msoArrowheadWidthMedium FcHvColor Определяет цвет линии. Пример MyShape.Line.ForeColor.RGB = RGB(192, 64, 192) Puttcrn Задает узор линии. Пример MyShape.Line.Pattern = msoPattern30Percent StyK Определяет стиль линии. Пример MyShape.Line.Style = msoLineThinThick Transparency Определяет степень «прозрачности» линии (значения от О до 1).
626 8.12. Управление тенью — объект ShadowFormat Пример MyShape.Line.Transparency = 0.5 Visible True, если линия должна быть видимой, и False в против- ном случае. Пример MyShape.Line.Visible = True Weight Определяет толщину линии в пунктах. Пример MyShape.Line.Weight = 5 8.12. Управление тенью — объект ShadowFormat Объект ShadowFormat содержится в свойстве Shadow объ- ектов типа Shape и служит для управления тенью. 8.12.1. Свойства ForeColsr Определяет цвет тени.
8.12. Управление тенью — объект ShadowFormat 627 Пример MyShape.Shadow.ForeColor.RGB = RGB(192, 64, 32) Obscured Разрешает (False) незалитому объекту заслонять свою тень. Пример MyShape.Shadow.Obscured = True Offset* Определяет смещение тени относительно объекта по го- ризонтали (в пунктах). Пример MyShape.Shadow.OffsetX = 5 Определяет смещение тени относительно объекта по вер- тикали (в пунктах). Пример MyShape.Shadow.OffsetY = 7
628 8.12. Управление тенью — объект ShadowFormat Transparency Определяет степень «прозрачности» тени (значения от О до 1). Пример MyShape.Shadow.Transparency = 0.5 «Уре Определяет тип тени. Пример MyShape.Shadow.Туре = msoShadowll Л £ True, если тень должна быть видимой, и False в противном случае. Пример MyShape.Shadow.Visible = True 8.12.2. Методы IncrementQffsetX(UJar) Параметр Назначение Шаг Число пунктов, на которые необходимо изменить смещение
8.12. Управление тенью — объект ShadowFormat 629 Комментарий Изменяет смещение тени относительно объекта по гори- зонтали на заданное число пунктов. • Положительные числа соответствуют смещению вправо, отрицательные — влево. Пример MyShape.Shadow.IncrementOffsetX 15 fncremeiitOffsei I'ttJJai J Параметр Назначение Шаг Число пунктов, на которые необходимо изменить смещение Комментарий Изменяет смещение тени относительно объекта по верти- кали на заданное число пунктов. • Положительные числа соответствуют смещению вниз, отрицательные — верх. Пример MyShape.Shadow.IncrementOffsetY -5
630 8.13. Эффекты объемности — объект ThreeDFormat 8.13. Эффекты объемности — объект ThreeDFormat Объект ThreeDFormat содержится в свойстве ThreeD объек- тов типа Shape и служит для управления эффектами объем- ности. 8.13.1. Свойства Depth Определяет глубину проекции (значение от -600 до 9600). Пример MyShape.ThreeD.Depth = 100 ExtrusionColot Определяй т цвет линий проекции. Пример MyShape.ThreeD.ExtrusionColor.RGB = RGB(192, 64, 32) Extrusi Со/orType Определяет, должен ли цвет линий проекции зависеть от заливки объекта или быть независимым от нее. Пример MyShape.ThreeD.ExtrusionColorType = msoExtrusionColorAutomatic
8.13. Эффекты объемности — объект ThreeDFormat 631 Perspective Определяет направление проекции: True соответствует направлению «в перспективе», False — «параллельно». Пример MyShape.ThreeD.Perspective = True PreseHJgMingSoftness я , *4» Определяет яркость освещения. Пример MyShape.ThreeD.PresetLightingSoftness = msoLightingBright PresfttMaterial Определяет отражающие свойства поверхности («матери- ал» поверхности). Пример MyShape.ThreeD.PresetMaterial = msoMaterialMetal RutatianX Задает вращение вокруг оси X в градусах (значения от -90 до 90).
Ж1Й1РОМ11Й 632 8.13. Эффекты объемности — объект ThreeDFormat Пример MyShape.ThreeD.RotationX = 45 HuttttktnY Задает вращение вокруг оси Y в градусах (значения от -90 до 90). Пример MyShape.ThreeD.RotationY = 45 Visible Разрешает (True) отображение объемных эффектов для Shape-объекта. Пример MyShape.ThreeD.Visible = True 8.13.2. Методы IncrementRotutionXfyniA) Параметр Назначение Угол Угол поворота в градусах Комментарий Поворачивает объект вокруг оси X на заданный угол.
8.13. Эффекты объемности — объект ThreeDFormat 633 Пример MyShape.ThreeD.IncrementRotationX 15 | Incrwfientitot&ti&n У(Уг^л) Параметр Назначение Угол Угол поворота в градусах Комментарий Поворачивает объект вокруг оси Y на заданный угол. Пример MyShape.ThreeD.IncrementRotationY 15 R&setRotatian Комментарий Возвращает значения углов поворота объекта вокруг осей X и Y к исходным величинам. Пример MyShape.ThreeD.ResetRotation
634 8.13. Эффекты объемности — объект ThreeDFormat SetS^trusiunOirectiunfHinpjaAeHHe) Параметр Назначение Направление Константа, определяющая направление проекции Комментарий Задает направление линий проекции. Пример MyShape.ThreeD.SetExtrusionDirection msoExtrusionTopLeft SatThi u^OFjjrmat(0opiwaiJ ‘ ‘ -4- •* *M ~ Параметр Назначение Формат Константа, определяющая формат объемной проекции Комментарий Задает формат объемной проекции. Пример MyShape.ThreeD.SetThreeDFormat msoThreeDlO
8.14. Форматирование текста — объект Textstyle 635 8.14. Форматирование текста — объект Textstyle Коллекция Textstyles содержится в одноименном свойстве объектов типа Master и включает в себя все TextStyle-объек- ты для данного образца. Каждый объект Textstyle отвечает за параметры форматирования либо заголовка, либо основного текста, либо текста по умолчанию. Доступ к конкретному Text- Style-объекту возможен благодаря коллекции Textstyles и ин- дексу, указывающему конкретный объект: ppBodyStyle — для основного текста, ppDefaultStyle — для текста по умолчанию и ppTitleStyle — для заголовков. 8.14.1. Свойства revels Служит для доступа к уровням в текстовой структуре слайда. Пример 'Форматировать 1-й и 2-й уровни 'основного текста With ActivePresentation.TitleMaster _ .Textstyles(ppBodyStyle) .Levels(1).Font.Name = "Arial" .Levels(1).Font.Size = 36 .Levels(2).Font.Name = "Times New Roman" .Levels(2).Font.Size = 24 End With Ruler Представляет линейку, содержащую сведения о втяжках и позициях табуляции.
636 8.15. Область текста — объект TextFrame Пример 'Позиция табуляции в 50-ти пунктах от начала строки With ActivePresentation.TitleMaster _ .Textstyles(ppBodyStyle) .Ruler.Tabstops-Add ppTabStopRight, 50 End With TextFrame Представляет собственно область текста. Пример 'Отступ левой границы текста — 50 пунктов With ActivePresentation.TitleMaster _ .Textstyles(ppBodyStyle) .TextFrame.MarginLeft = 50 End With 8.15. Область текста — объект TextFrame Объект TextFrame представляет прямоугольник на рабочей поверхности слайда, где размещается текст. Текст и его об- ласть можно рассматривать как составную часть Shape-объ- екта (см. 8.7), доступ к параметрам форматирования текста возможен посредством объекта TextStyle (см. 8.14). 8.15.1. Свойства MasTexi Возвращает булево значение True, если объект содержит текст (и False в противном случае).
8.15. Область текста — объект TextFrame 637 Пример 'Если объект содержит текст, то... With MyShape.TextFrame If .HasText Then .Orientation = _ msoTextOrientationVerticalFarEast .TextRange.Font.Italic = True End If End With HorUontalAnsh&r •- > •-.%* * < . w Задает неподвижную по горизонтали точку для формати- рования текста внутри Shape-объекта. Пример With MyShape.TextFrame .HorizontalAnchor = msoAnchorCenter End With MarginDottnm Определяет расстояние (в пунктах) между нижней грани- цей области текста и нижней границей Shape-объекта, в состав которого входит данный текст. Пример With MyShape.TextFrame .MarginBottom = 50 End With
638 8.15. Область текста — объект TextFrame MarginLaft Определяет расстояние (в пунктах) между левой границей области текста и левой границей Shape-объекта, в состав которого входит данный текст. Пример With MyShape.TextFrame .MarginLeft = 80 End With MarginRigM Определяет расстояние (в пунктах) между правой грани- цей области текста и правой границей Shape-объекта, в состав которого входит данный текст. Пример With MyShape.TextFrame .MarginRight = 40 End With Ma.ginTop Определяет расстояние (в пунктах) между верхней грани- цей области текста и верхней границей Shape-объекта, в состав которого входит данный текст. Пример With MyShape.TextFrame .MarginTop = 80 End With
8.15. Область текста — объект TextFrame 639 Orientation Определяет ориентацию текста внутри области Пример With MyShape.TextFrame .Orientation = _ msoTextOrientationVerticalFarEast End With Ruler Служит для доступа к параметрам линейки. Пример With MyShape.TextFrame .Ruler.TabStops.Add ppTabstopCenter, 85 End With TextRange Представляет непрерывный фрагмент текста. Пример With MyShape.TextFrame .TextRange.Font.Italic = True End With VerticalAnchor Задает неподвижную по вертикали точку для форматиро- вания текста внутри Shape-объекта.
640 8.16. Объект TextRange Пример With MyShape.TextFrame .VerticalAnchor = msoAnchorMiddle End With Wordwrap Разрешает (True) автоматический перенос текста по сло- вам внутри области. Пример With MyShape.TextFrame .Wordwrap = True End With 8.16. Объект TextRange Объект TextRange представляет непрерывный фрагмент текс- та, который позволяет обращаться к себе как к неделимому целому. Свойства и методы объекта TextRange относятся ко всем символам заключенного в нем текста. 8.16.1. Свойства Actionsettings Содержит объект ActionSetting, определяющий реакцию на действия пользователя. Пример With MyShape.TextFrame.TextRange
8.16. Объект TextRange 641 .Actionsettings(ppMouseClick).Action = ppActionNextSlide End With BoundHeigM Возвращает высоту наименьшего прямоугольника, в кото- рый можно было бы заключить текст. Пример With MyShape.TextFrame.TextRange MsgBox .BoundHeight End With BoundLeft Возвращает расстояние (в пунктах) от левого края слайда до левой границы наименьшего прямоугольника, в кото- рый можно было бы заключить текст. Пример With MyShape.TextFrame.TextRange MsgBox .BoundLeft End With BoundTop Возвращает расстояние (в пунктах) от верхнего края слай- да до верхней границы наименьшего прямоугольника, в который можно было бы заключить текст. 21 1855
642 8.16. Объект TextRange Пример With MyShape.TextFrame.TextRange MsgBox .BoundTop End With BoundWldth Возвращает ширину наименьшего прямоугольника, в ко- торый можно было бы заключить текст. Пример With MyShape.TextFrame.TextRange MsgBox .Boundwidth End With FOnt Обеспечивает доступ к параметрами шрифта. Пример With MyShape.TextFrame.TextRange .Font.Name = "Arial" End With IndentLevel ** ms - .<« Определяет уровень втяжки текста (значения от 1 до 5).
8.16. Объект TextRange 643 Пример With MyShape.TextFrame.TextRange .IndentLevel = 2 End With ParagraphFormat Обеспечивает доступ к параметрам форматирования аб- заца. Пример With MyShape.TextFrame.TextRange .ParagraphFormat.SpaceBefore = 12 End With Text Содержит собственно текст фрагмента. Пример With MyShape.TextFrame.TextRange .Text - "Собственно текст" End With
644 8.16. Объект TextRange 8.16.2. Методы AddPeriods Комментарий Добавляет точку в конце каждого абзаца, входящего во фрагмент текста. Пример MyShape.TextFrame.TextRange.AddPeriods ChangeCase(Tun) Параметр Назначение Тип Константа, определяющая вид преобразования символов Комментарий Изменяет регистр символов текста. Пример 'Изменить регистр всех символов 'на противоположный With MyShape.TextFrame.TextRange .ChangeCase ppCaseToggle End With
8.16. Объект TextRange 645 Copy Комментарий Копирует фрагмент в буфер обмена. Пример MyShape.TextFrame.TextRange.Copy Cut Комментарий Вырезает текст в буфер обмена. Пример MyShape.TextFrame.TextRange.Cut Oe/ute Комментарий Удаляет фрагмент текста. Пример MyShape.TextFrame.TextRange.Delete
646 8.16. Объект TextRange InsertA fter(Hoabi&Tt.-KC r) Параметр Назначение НовыйТекст Строка, содержащая вставляемый текст Комментарий Вставляет новый текст в конец фрагмента. Пример With MyShape.TextFrame.TextRange .InsertAfter "Новый текст" End With •nsertBeforefHoBb.nTexcT) Параметр Назначение НовыйТекст Строка, содержащая вставляемый текст Комментарий Вставляет новый текст в начало фрагмента. Пример With MyShape.TextFrame.TextRange .InsertBefore "Новый текст" End With
8.16. Объект TextRange 647 1пзег1Оа1еТнЛ&(Фирм4тД.ат1.1Врем>зны, КякПэле) Параметр Назначение ФорматДаты- Времени Константа, определяющая формат значения да - ты-времени КакПоле Разрешает (True) вставку значения даты-време- ни в форме поля, обновляемого при открытии презентации Комментарий Выполняет вставку в текст значения даты-времени. Пример With MyShape.TextFrame.TextRange .InsertDateTime ppDateTimeMMMMdyyyy, True End With InsartSliduNumber Комментарий Выполняет вставку в текст номера слайда. Пример MyShape.TextFrame.TextRange.InsertSlideNumber
648 8.16. Объект TextRange 1пзсг15ут1»аЦИмнШрифта, КидСимиила, UniCwJ?) Параметр Назначение Имя Шрифта Имя шрифта КодСимвола Номер символа в кодах ASCII или UniCode UniCode Разрешает (True) интерпретировать символ, как символ кода UniCode Комментарий Вставляет в текст символ. Пример With MyShape.TextFrame.TextRange .Insertsymbol "Arial", 74 End With LinesfnepeaaCrpoKa, ЧислоСтрок) Параметр Назначение ПерваяСтрока Номер первой строки выделяемого подмножест- ва текста ЧислоСтрок Число строк в выделяемом подмножестве текста Комментарий Возвращает TextRange-объект, заключающий в себе за- данное подмножество строк того TextRange-объекта, ме- тод которого вызван.
8.16. Объект TextRange 649 Пример With MyShape.TextFrame.TextRange .Lines(l, 3).Font.Bold = True End With Paragiiaph >П<.реыяАйзац ЧислоАбзяцев) Параметр Назначение ПервыйАбзац Номер первого абзаца выделяемого подмноже - ства текста ЧислоАбзацев Число абзацев в выделяемом подмножестве текста Комментарий Возвращает TextRange-объект, заключающий в себе за- данное подмножество абзацев того TextRange-объекта, метод которого вызван. Пример With MyShape.TextFrame.TextRange .Paragraphs(1, 3).Font.Bold = True End With Paste Комментарий Выполняет вставку фрагмента текста из буфера обмена.
650 8.16. Объект TextRange Пример MyShape.TextFrame.TextRange.Paste RemovePer:jds Комментарий Удаляет точки в концах абзацев. Пример MyShape.TextFrame.TextRange.RemovePeriods Select Комментарий Выделяет текст. Пример MyShape.TextFrame.TextRange.Select Santences(nepaoeПредложение, ЧислаПредлажений) Параметр Назначение ПервоеПредложение Номер первого предложения в выделяе- мом подмножестве текста ЧислоПредложений Число предложений в выделяемом под- множестве текста
8.16. Объект TextRange 651 Комментарий Возвращает TextRange-объект, заключающий в себе за- данное подмножество предложений того TextRange-объ- екта, метод которого вызван. Пример With MyShape.TextFrame.TextRange .Sentences (1, 3).Font.Bold = True End With 1<Уогс/з<ПераоеСлизо, ЧислоСлоа) Параметр Назначение ПервоеСпово Номер первого слова в выделяемом подмноже- стве текста ЧислоСпов Число слов в выделяемом подмножестве текста Комментарий Возвращает TextRange-объект, заключающий в себе задан- ное подмножество слов того TextRange-объекта, метод ко- торого вызван. Пример With MyShape.TextFrame.TextRange .Words(1, 3).Font.Bold = True End With
652 8.17. Форматирование абзаца — объект ParagraphFormat 8.17. Форматирование абзаца — объект ParagraphFormat Объект ParagraphFormat позволяет форматировать абзацы текста. 8 .17.1. Свойства Alignment Определяет режим горизонтального выравнивания текста в абзаце. Пример With MyShape.TextFrame.TextRange .ParagraphFormat .Alignment = ppAlignRight End With B-jseLineAlignment Определяет позицию базовой строки абзаца. Пример With MyShape.TextFrame.TextRange _ .ParagraphFormat .BaseLineAlignment = ppBaselineAlignTop End With Bullet Обеспечивает доступ к маркеру абзаца.
8.17. Форматирование абзаца — объект ParagraphFormat 653 Пример With MyShape.TextFrame.TextRange .ParagraphFormat .Bullet.Font.Name - "Arial" End With uineRuteA+ter True, если интервал после абзаца исчисляется в строках, и False, если в пунктах. Пример With MyShape.TextFrame.TextRange .ParagraphFormat .LineRuleAfter = True End With LineRult'Befure True, если интервал перед абзацем исчисляется в строках, и False, если в пунктах. Пример With MyShape.TextFrame.TextRange .ParagraphFormat .LineRuleBefore = True End With
654 8.17. Форматирование абзаца — объект ParagraphFormat LineRule wthln True, если интервалы внутри абзаца исчисляются в стро- ках, и False, если в пунктах. Пример With MyShape.TextFrame.TextRange .ParagraphFormat .LineRuleWithin = True End With SpaceAftet Определяет интервал после абзаца (в строках или пунктах). Пример With MyShape.TextFrame.TextRange .ParagraphFormat .SpaceAfter = 2 End With SptaceBefore Определяет интервал перед абзацем (в строках или пунктах). Пример With MyShape.TextFrame.TextRange .ParagraphFormat .SpaceBefore = 2 End With
8.18. Форматирование символов — объект Font 655 Spaca Within Определяет интервал внутри абзаца (в строках или пунктах). Пример With MyShape.TextFrame.TextRange .ParagraphFormat .SpaceWithin = 2 End With WvrdWrap Разрешает (True) автоматический перенос. Пример With MyShape.TextFrame.TextRange _ .ParagraphFormat .Wordwrap = True End With 8.18. Форматирование символов — объект Font Свойства объекта Font отвечают за параметры шрифта во фрагменте текста, определенном объектом TextRange. 8.18.1. Свойства Bvid Задает для шрифта начертание «жирный».
656 8.18. Форматирование символов — объект Font Пример MyShape.TextFrame.TextRange.Font.Bold = True Cn»or Определяет цвет шрифта. Пример MyShape.TextFrame.TextRange.Font.Color _ .SchemeColor = ppAccentl Erofoess Задает эффект «рельеф» для символов. Пример MyShape.TextFrame.TextRange.Font.Emboss = True italic Задает для шрифта начертание «курсив». Пример MyShape.TextFrame.TextRange.Font.Italic = True | Name Имя шрифта.
(gOlPfeWliW 8.18. Форматирование символов — объект Font 657 Пример MyShape.TextFrame.TextRange.Font.Name = "Arial" Shadow Разрешает отображение тени символов. Пример MyShape.TextFrame.TextRange.Font.Shadow = True Sfca Размер символа в пунктах. Пример MyShape.TextFrame.TextRange.Font.Size = 24 Subscript Задает эффект «нижний индекс» для символов. Пример MyShape.TextFrame.TextRange.Font.Subscript = True
658 8.19. Таблица — объект Table Superscript Пример MyShape.TextFrame.TextRange.Font.Superscript = True Задает эффект «верхний индекс» для символов. Underline Задает эффект «подчеркивание» для символов. Пример MyShape.TextFrame.TextRange.Font.Underline = True 8.19. Таблица — объект Table Объект Table представляет собой таблицу на слайде, создан- ную средствами самой программы PowerPoint, т.е. командой Вставка / Таблица. Объект Table является элементом коллек- ции Shapes и включает коллекции строк Columns и столбцов Rows. Чтобы определить является ли данный элемент коллек- ции Shapes таблицей, необходимо обратиться к свойству Has- Table элемента коллекции 8Ьарев(индекс). 8.19.1. Свойства Columns Возвращает коллекцию Columns всех столбцов таблицы.
8.19. Таблица — объект Table 659 Пример With ActiveWindow.Selection.ShapeRange If .HasTable = True Then .Table.Columns(1).Width = 72 End If End With Rows Возвращает коллекцию Rows всех строк таблицы. Пример With ActiveWindow.Selection.ShapeRange If .HasTable = True Then .Table.Rows(3).Delete End If End With 8.19.2. Методы СеЩСтрока, Столбец) Параметр Назначение Строка Номер строки таблицы (строки нумеруются с 1) Столбец Номер столбца таблицы (солбцы нумеруются с 1) Комментарий Возвращает объект типа Cell, представляющий ячейку таб- лицы.
660 8.20. Столбец — объект Column Пример 'Записать в 1-ую ячейку текст "Ячейка 1" With Presentations.Add With .Slides.Add(1, ppLayoutBlank) .Shapes.AddTable(3, 3).Select .Shapes(1).Table.Cell (1, 1).Shape .TextFrame.TextRange.Text = "Ячейка I11 End With End With 8.20. Столбец — объект Column Объект Column представляет собой столбец таблицы на слай- де. Объект Column является элементом коллеции Columns, включающей все столбцы таблицы. 8.20.1. Свойства Ceils Возвращает коллекцию CellRange всех ячеек столбца таб- лицы. Пример 'Занесение в ячейки их номеров в виде 1"столбец№ строкам" Dim i As Integer Dim j As Integer With Presentations.Add .Slides.Add(1, ppLayoutBlank).Shapes _ .AddTable(3, 3).Select Set myTable = .Slides(1).Shapes(1).Table For i = 1 To myTable.Columns.Count For j = 1 To myTable _ .Columns(i).Cells.Count
8.20. Столбец — объект Column 661 MyTable.Columns (i) .Cells (j) .Shape.TextFrame _ .TextRange.Text = "столбец " & i & " строка " & j Next j Next i End With 'Mdtt' Ширина колонки в пунктах. Пример ActivePresentation.Slides(2).Shapes(5) .Table.Columns(1).Width = 80 8.20.2. Методы Delete Комментарий Удаление столбца. Пример ActivePresentation.Slides(2).Shapes(5) .Table.Columns(1).Delete Select Комментарий Выбор столбца.
662 8.21. Строка — объект Row Пример ActivePresentation.Slides(2).Shapes(5) .Table.Columns(1).Select 8.21. Строка — объект Row Объект Row представляет собой строку таблицы на слайде и является элементом коллеции Rows, включающей все строки таблицы. 8.21.1. Свойства Cells Возвращает коллекцию CellRange всех ячеек строки таб- лицы. Пример 'Занесение в ячейки их номеров в виде '"строкам столбецМ" Dim i As Integer Dim j As Integer With Presentations.Add .Slides-Add(1, ppLayoutBlank).Shapes _ .AddTable(3, 3).Select Set myTable = .Slides(1).Shapes(1).Table For i = 1 To myTable.Rows.Count For j = 1 To myTable.Rows(i).Cells _ .Count myTable.Rows(i) .Cells (j) .Shape.TextFrame.TextRange.Text _ = "строка " & i & " столбец " & j Next j Next i End With
8.21. Строка — объект Row 663 Height Высота строки в пунктах. Пример ActivePresentation.Slides(2).Shapes(5) .Table.Rows(1).Height = 50 8.21.2. Методы Delete Комментарий Удаление строки. Пример ActivePresentation.Slides(2).Shapes(5) .Table.Rows(1).Delete Se/ect Комментарий Выбор строки. Пример ActivePresentation.Slides(2).Shapes(5) .Table.Rows(1).Select
664 8.22. Ячейка — объект Cell 8.22. Ячейка — объект Cell Объект Cell представляет собой ячейку таблицы на слайде и является элементом коллекции CellRange, которая включает все ячейки заданной строки или столбца. Для обращения к коллекции CellRange используется ключевое слово Cells. Для обращения к ячейке в таблице используют конструкцию Cell (строка, столбец), а для обращения к ячейке в строке или столбце — конструкцию Cells(HOMep). 8.22.1. Свойства Borders Возвращает коллекцию Borders всех границ и диагональ- ных линий ячейки. Пример 'Задание толщины левой границы первой ячейки ' второй строки таблицы ActiveWindow.Selection.ShapeRange.Table.Rows(2) .Cells(1).Borders.Item(ppBorderLeft) .Weight = 3 Shjpe Возвращает объект, расположенный в ячейке таблицы. Пример 'Создание таблицы размером 3*3 и занесение ' в первую ее ячейке четырехугольной звезды With Presentations.Add With .Slides.Add(1, ppLayoutBlank)
8.22. Ячейка — объект Cell 665 .Shapes.AddTable(3, 3).Select .Shapes(1).Table.Cell (1, 1).Shape _ .AutoShapeType = msoShape4pointStar End With End With 8.22.2. Методы Merye (Спить С) Параметр Назначение СлитьС Координаты ячейки, с которой спивается текущая Комментарий Сливает текущую ячейку таблицы с указанной. Пример 'Слить первую ячейку таблицы с соседней справа With ActivePresentation.Slides(2) .Shapes(5).Table .Cell(l, 1).Merge MergeTo:=.Cell(1, 2) End With Select Комментарий Выбор ячейки.
666 8.22. Ячейка — объект Cell Пример ActivePresentation.Slides(2).Shapes(5) .Table.Cell(1,2).Select >ptit ЧислоСтрок, ЧислаСтолбцов Параметр Назначение ЧислоСтрок Число строк, на которые разбивается текущая ячейка ЧислоСтолбцов Число столбцов, на которые разбивается теку- щая ячейка Комментарий Разбивает текущую ячейку таблицы на указанное число ячеек. Пример 'Разбить первую ячейку на две, 'расположив их в столбец ActivePresentation.Slides(2).Shapes(5) .Table.Cell(l, 1).Split 2, 1
Объект Access 9.1. Обзор VBA интегрирован в среду Access на несколько иных правах и с использованием несколько других подходов, чем в отношении остальных компонентов Office. Эти отличия касаются как среды разработки, так и принципов, на которых построена объектная модель Access. Собственно объектная модель Access достаточно проста. Она включает в себя ряд объектов, обеспечивающих доступ: к элементам базы/проекта данных: • таблицам • формам • запросам • отчетам • страницам • макросам • модулям VBA к элементам пользовательского интерфейса к среде разработки. Доступ же непосредственно к данным Access осуществляется посредством так называемых DAO-объектов (Data Access Ob- jects — объекты доступа к данным), которые будут рассмотре- ны в следующей главе (см. гл. 10).
668 9.1. Обзор Обзор. Структура объекта Access Application ► — —— — — — Forms (Form) Controls L Properties (Control) Module Properties (Form) Reports (Report) - Controls L Properties (Control) - Module ” Properties (Form) Modules (Module) References (Reference) DataAccessPages (DataAccessPage) - WebOptions Printers (Printer) - Screen - DoCmd - VBE - DefaultWebOptions - Assistant - CommandBars — DBEngine - FileSearch - COMAddlns — AnswerWizard — LanguageSettings — FileDialog
9.2. Уровень приложения — объект Application 669
670 9.2. Уровень приложения — объект Application
9.9. Проект — объект Currentproject 671 Объект Назначение Application Приложение, корневой объект иерархии Forms Экранные формы Reports Отчеты Controls Элементы управления Modules Программные модули References Доступ к объектам других приложений DataAccessPages Страницы доступа к данным Screen Специальный объект, всегда указывающий на форму, элемент управления или отчет, облада- ющий в данный момент фокусом клавиатуры. DoCmd Объект, методы которого эквивалентны мак- рокомандам Access VBE Редактор Visual Basic DefaultWeb- Options Глобальные атрибуты открытия/сохранения Web-страницы Assistant Помощник Office CommandBars Панели инструментов DBEngine DAO-объекты FileSearch Диалог Открытие документа COMAddlns COM-надстройки в приложении AnswerWizard Мастер AnswerWizard Languagesettings Установка языка в приложении CurrentProject Активный проект CurrendData Объекты активной базы данных
672 9.2. Уровень приложения — объект Application 9.2. Уровень приложения — объект Application Свойства и методы объекта Application служат для решения самых общих задач, имеющих отношение к функционирова- нию приложения в целом. Кроме того, некоторые задачи уровня приложения решаются с помощью методов объекта DoCmd (см. 9.3). 9.2.1. Свойства CurrentData Использууется для доступа к активной в данный момент (текущей) базе CurrentData. Пример ' Печать имени активной базы Debug.Print Application.CurrentData.FullName CurrentQbfeatName Имя активного в данный момент (текущего) объекта. Пример 'Если форма активна, то сообщить ее имя If CurrentObjectType = acForm Then MsgBox "Форма " & CurrentObjectName _ & " активна" End If
9.2. Уровень приложения — объект Application 673 Curr&ntObfOCtTyp& Возвращает тип активного в данный момент объекта. • Возвращаемое свойством значение следует сравнивать с константами acTable, acMacro, acModule и acReport. Пример 'Если форма активна, то сообщить ее имя If CurrentObjectType = acForm Then MsgBox "Форма " & CurrentObjectName _ & " активна" End If Curr&ntProject Использууется для доступа к активному в данный момент (текущему) проекту CurrentProject. Пример ' Печать имени и типа проекта Debug.Print Application.CurrentProject. FullName Debug.Print Application.CurrentProject. ProjectType OataAccassPagas Используется для обращения к страницам доступа к данным. Пример Sub AllOpenDataAccessPages() Dim dap As DataAccessPage 22 1855
674 9.2. Уровень приложения — объект Application Set dbs = Application.Currentproject ' Поиск всех открытых страниц доступа 'к данным. For Each dap In dbs.AllDataAccessPages If dap.IsLoaded = TRUE then ' Печать имен открытых страниц. Debug.Print dap.Name End If Next dap End Sub DBEngine______________ ___________________- ' Корневой объект в иерархии DAO обеспечивает доступ к базам данных (см. 10.3). Пример 'Сообщить номер версии DAO MsgBox DBEngine.Version DoCmti Содержит одноименный объект, чьи методы эквивалентны макрокомандам среды Access. Пример 'Открыть форму с именем "MyForml" DoCmd.OpenForm "MyForml" Forms Содержит все открытые формы (см. 9.4).
9.2. Уровень приложения — объект Application 675 Пример Dim MyFrm As Form 'Скрыть все открытые формы For Each MyFrm In Forms MyFrm.Visible = False Next Re* m 3 Содержит все открытые отчеты (см. 9.6). Пример Dim MyRep As Report 'Скрыть все открытые отчеты For Each MyRep In Reports MyRep.Visible = False Next Sateen Служит для доступа к активной области экрана. Пример 'Изменить вид указателя мыши на "песочные часы" Screen.MousePointer = 11 'Изменить вид указателя мыши на стандартный Screen.MousePointer = О
676 9.2. Уровень приложения — объект Application 9.2.2. Методы BuiltJCriteriafnune, ТипПоля. Выражение) -> Параметр Назначение Поле Строка, определяющая поле данных ТипПоля Константа, задающая тип поля Выражение Строка, задающая условие отбора Комментарий Возвращает строку условий отбора в виде, какой она име- ла бы в фильтре для формы или бланке запроса. Пример 'Открыть форму с именем "MyForml" DoCmd.OpenForm "MyForml" 'Установить фильтр на записи: 'строка в поле "Namel" начинается с символа "G" With Forms!MyForml .Filter = BuildCriteria("Namel", dbText, "G*") .FilterOn = True End With CloseCurrentDatabase Комментарий Закрывает текущую базу данных. Пример CloseCurrentDatabase
9.2. Уровень приложения — объект Application 677 CreateAccassPrvj‘i<.:t(l/lMHnp<>eKTa, СтракаГкщключнния) Параметр Назначение ИмяПроекта Имя файла создаваемого проекта Строка- Подключения Строка параметров подключения проекта к внешней базе данных (необязательный пара- метр) Комментарий Создает новый проект. • Служит для создания проекта Access из другого прило- жения с помощью механизма программирования объек- тов (ранее называемого механизмом управления объек- тами OLE). Пример 'Создать проект HGT CreateAccessProject("С:\HGT.adp") CurrentDB Комментарий Возвращает ссылку на активную (текущую) базу данных в форме объекта типа DataBase (см. 10.5). Пример Dim db As Database 'Получить ссылку на текущую базу данных Set db = CurrentDB
678 9.2. Уровень приложения — объект Application 'Сообщить имя базы MsgBox CurrentDB.Name Currentuser Комментарий Возвращает имя текущего пользователя. Пример 'Сообщить имя пользователя MsgBox Currentuser £спо(0оно& чение Сосбщение,‘ Параметр Назначение Обновление True (по умолчанию) указывает на то, что теку- щий экран обновлен; False — текущий экран не обновлен Сообщение Строковое выражение, определяющее текст, вы - водимый в строке состояния при включении и выключении обновления Комментарий Задает режим обновления экрана Microsoft Access. Пример 'Не обновлять экран, пока выполняется запрос Echo False, "Выполняется запрос..." 'Снова обновлять экран Echo True, "Запрос выполнен"
9.2. Уровень приложения — объект Application 679 NewAccessProfect(HM»npoeKra, СтрокаПодключэнии) Параметр Назначение ИмяПроекта Строка- Имя файла создаваемого проекта Строка параметров подключения проекта к внеш- Подключения ней базе данных (необязательный параметр) Комментарий Создает и открывает новый проект. • Служит для создания и открытия проекта Access из дру- гого приложения с помощью механизма программиро- вания объектов (ранее называемого механизмом управ- ления объектами OLE). Пример 'Создать и открыть проект HGT NewAccessProject("С:\HGT.adp") NewCurrentDataBase(HMaSa:ibi) Параметр Назначение 1 ИмяБазы Имя файла создаваемой базы данных Комментарий Создает новую базу данных. • Служит для создания баз данных Access из другого при- ложения с помощью механизма программирования объ- ектов (ранее называемого механизмом управления объ- ектами OLE).
680 9.2. Уровень приложения — объект Application Пример 'Создать базу данных Tdb NewCurrentDataBase("С:\Tdb.mdb") 0рапСиггапЮаЫ1>ага(ИмиБазь1, Монопольный, Пароль) Параметр Назначение ИмяБазы Имя файла открываемой базы данных Монопольный Указывает(Тгие), что база должна быть откры- та в монопольном режиме Пароль Пароль открытия базы данных Комментарий Открывает существующую базу данных. • Служит для открытия баз данных Access из другого при- ложения. Пример 'Открыть базу данных Tdb OpenCurrentDatabase("С:\Tdb.mdb") ОрепАссея&Рго)еа(ИмаПрс^кта, Монопольно) Параметр Назначение ИмяПроекта Имя файла создаваемого проекта Монопольный Указы вает(Тгие), что проект должен быть от- крыт в монопольном режиме
9.3. Управление приложением — объект DoCmd 681 Комментарий Открывает существующий проект. • Служит для открытия проекта Access из другого прило- жения с помощью механизма программирования объек- тов (ранее называемого механизмом управления объек- тами OLE). Пример 'Открыть проект HGT OpenAccessProject("С:\HGT.adp") RefreshDt tabaseWindow Комментарий Обновляет окно базы данных после создания, удаления или переименования таблицы, запроса, формы, отчета, мак- роса или модуля. Пример RefreshDatabaseWindow 9.3. Управление приложением — объект DoCmd Объект DoCmd служит для выполнения действий, которые в среде Access осуществляются с использованием команд меню, его методы эквивалентны макрокомандам среды Ac- cess. Имена методов объекта DoCmd совпадают с именами параметров инструкции DoCmd, использовавшейся в языке Access Basic, который существовал в старых версиях пакета Microsoft Access.
682 9.3. Управление приложением — объект DoCmd 9.3.1. Методы Арр1уРН(ег(ИмяФнльгра, УслоьиеМЬэге) Параметр Назначение ИмяФильтра Имя запроса (фильтра) в текущей базе данных УсловиеМЬеге Допустимое предложение SQL WHERE без клю- чевого слова WHERE Комментарий Устанавливает заданный фильтр на записи текущей базы данных. Пример 'Открыть таблицу и отобразить записи, 'где в поле "ЬапсГ'содержится значение "Испания" DoCmd.OpenTable "MyTablel" DoCmd.ApplyFilter , "Land='Испания'" Beep Комментарий Служит для издания звука. Пример DoCmd.Веер
9.3. Управление приложением — объект DoCmd 683 С1озе(ТипООъакта, ИмяОбъакта, Сохранение) Параметр Назначение ТипОбъекта Константа, определяющая тип объекта ИмяОбъекта Строковое выражение, представляющее допус- тимое имя объекта, тип которого указан в па - ра метре ТипОбъекта Сохранение Константа, определяющая тип сохранения Комментарий Закрывает объект и сохраняет изменения в нем. Пример 'Закрыть все открытые формы For Each MyFrm In Forms DoCmd.Close acForm, MyForm.Name, acSavePrompt Next СоруОЬ]ес((БДПолучатело, Новое Имя, ТипИсточника ИмяИст'™ти'&) Параметр Назначение БДПолучатель Имя файла базы данных, в которую копируется объект НовоеИмя Новое имя копируемого объекта ТипИсточника Константа, определяющая тип объекта-источника ИмяИсточника Имя копируемого объекта
684 9.3. Управление приложением — объект DoCmd Комментарий Копирует объект. Пример 'Копировать форму MyForml с новым именем 'MyForm2 DoCmd.CopyObject CurrentDb.Name, "MyForm2", acForm, "MyForml" DeleteuDject(TnnO6TbeKTa, ИмяОбъекта) Параметр Назначение ТипОбъекта Константа, определяющая тип объекта ИмяОбъекта Имя подлежащего удалению объекта Комментарий Удаляет из базы данных указанный объект. Пример 'Удалить форму MyForm2 DoCmd.DeleteObject acForm, "MyForm2" <1оТоСоЩго1{ИмяЭлеменга) Параметр Назначение ИмяЭлемента Имя элемента управления, которому требуется передать фокус
9.3. Управление приложением — объект DoCmd 685 Комментарий Переносит фокус клавиатуры на указанный элемент управ- ления. Пример 'Открыть форму MyForml и поместить курсор 'в поле Price DoCmd.OpenForm "MyForml" DoCmd.GoToControl "Price" GoToRecord(rnnO6betaa, ИмяОбъекта,Запись, Смещение} Параметр Назначение ТипОбъекта Константа, определяющая тип объекта ИмяОбъекта Имя объекта, где расположена запись Запись Константа, определяющая разновидность пере- хода к записи Смещение Число записей, на которые искомая запись от- стоит от текущей Комментарий Делает текущей указанную запись. Пример 'Открыть форму MyForml и перейти к записи 5 DoCmd.OpenForm "MyForml" DoCmd.GoToRecord acDataForm, "MyForml", acGoTo, 5
686 9.3. Управление приложением — объект DoCmd Maximize Комментарий Разворачивает текущее окно до размеров экрана. Пример 'Открыть форму MyForml и развернуть ее на весь экран DoCmd.OpenForm "MyForml" DoCmd.Maximize Minimize Комментарий Сворачивает текущее окно в значок. Пример 'Открыть форму MyForml и свернуть ее в значок DoCmd.OpenForm "MyForml" DoCmd.Minimize Миу»81гв(ОтЛевогоКрая, ОтВерхнегоКрая, Ширина, Высота) Параметр Назначение ОтЛевогоКрая Новая координата верхнего левого угла окна по горизонтали ОтВерхнегоКрая Новая координата верхнего левого угла окна ло вертикали Ширина Новая ширина окна Высота Новая высота окна
9.3. Управление приложением — объект DoCmd 687 Комментарий Изменяет положение и размеры текущего окна. Все рас- стояния задаются в твипах (1/20 пункта). Пример 'Открыть форму MyForml, переместить 'и изменить размеры окна DoCmd.OpenForm "MyForml" DoCmd.MoveSize 1000, 1000, 9000, 4000 QpenU taAccessPaч v (ИмиСтр^ницы, Режим) Параметр Назначение ИмяСтраницы Имя страницы доступа к данным Режим Константа, определяющая режим открытия страницы Комментарий Открывает страницу доступа к данным. Пример 'Открыть страницу доступа к данным 'MyPage1 в режиме конструктора DoCmd.DataAccessPage "MyPagel", acDataPageDesign
688 9.3. Управление приложением — объект DoCmd ОрепР<згт(ИмяФормы, Режим, ИмиФильтра, ' Условие IWiere, РежимДэнных, РвжммОкяа, ДргуменгмОгкрыгия) Параметр Назначение ИмяФормы Имя формы Режим Константа, определяющая режим открытия формы ИмяФильтра Имя файла запроса (фильтра) YcnoBneWhere Допустимое предложение SQL WHERE без ключевого слова WHERE РежимДанных Константа, определяющая режим доступа к данным РежимОкна Константа, определяющая режим окна формы Аргументы - Открытия Строка, определяющая значение свойства формы OpenArg Комментарий Открывает форму. Пример 'Открыть форму MyForml с условием Price 10 DoCmd.OpenForm "MyForml", acNormal, , "Price > 10"
9.3. Управление приложением — объект DoCmd 689 Оречвиег] 'ИмяЗапрочс Режим- РежимДанчь^) Параметр Назначение ИмяЗапроса Имя открываемого запроса Режим Константа, определяющая режим открытия за- проса РежимДанных Константа, определяющая режим доступа к данным Комментарий Открывает запрос. Пример 'Открыть запрос "MyCalcl" в режиме '"только для чтения" DoCmd.OpenQuery "MyCalcl", acViewNormal, acReadOnly e f АерчгЦНмяОтч*. та, Режим, Имяфиль ipa, ycaoBMeWhere} ________________________ Параметр Назначение ИмяОтчета Имя открываемого отчета Режим Константа, определяющая режим открытия отчета ИмяФильтра Имя файла запроса (фильтра) Условие\Л/Неге Допустимое предложение SQL WHERE без клю- чевого слова WHERE
690 9.3. Управление приложением — объект DoCmd Комментарий Открывает отчет. Пример 'Открыть отчет DoCmd.OpenReport "Сводные итоги за год" Ореп31оге«1Ртсес1иге(ИмиПроцедурь^ Режим, РежимДанных) * . ________ Параметр Назначение ИмяПроцедуры Имя открываемой сохраненной процедуры Режим Константа, определяющая режим открытия процедуры РежимДанных Константа, определяющая режим доступа к данным Комментарий Открывает сохраненную процедуру. Пример 'Открыть процедуру "MySPl" в режиме '"только для чтения" DoCmd.OpenStoredProcedure "MySPl", acViewNormal, acReadOnly
9.3. Управление приложением — объект DoCmd 691 ОрепТаЫе/ИмяТаблицы, Режим, РежимДанных) Параметр Назначение ИмяТаблицы Имя открываемой таблицы Режим Константа, определяющая режим открытия таб- лицы РежимДанных Константа, определяющая режим доступа к данным Комментарий Открывает таблицу. Пример 'Открыть таблицу DoCmd.OpenTable "MyTablel" ОрепМек(ИмяПр-адстзаления, Режим, РежимДанных) Параметр Назначение । ИмяПредставления Имя открываемого представления Режим Константа, определяющая режим открытия представления РежимДанных Константа, определяющая режим доступа к данным Комментарий Открывает представление (виртуальную таблицу).
692 9.3. Управление приложением — объект DoCmd Пример 'Открыть представление "MyViewl" 'в режиме "только для чтения" DoCmd.OpenView "MyViewl", acViewNormal, acReadOnly СШриГГо(ТилОбъекта, ИйяОбъекта, Форматвывода, ИмяФайла, Автозагрузка, ФайлШаблона) Параметр Назначение ТипОбъекта Константа, определяющая тип объекта, содер- жащего данные ИмяОбъекта Имя объекта, содержащего данные, которые подлежат выводу ФорматВывода Константа, определяющая формат вывода дан- ных ИмяФайла Имя файла, в который выводятся данные Автозагрузка Разрешает (True) автоматический запуск соот- ветствующего приложения с загрузкой файла, в который выведены данные Файл Шаблона Имя файла шаблона Комментарий Выводит данные в файл заданного формата. • Возможные форматы вывода определяются константа- ми: acFormatActiveXServer, acFormatHTML, acFormatllS, acFormatRTF, acFormatTXT и acFormatXLS.
9.3. Управление приложением — объект DoCmd 693 Пример 'Вывести таблицу "MyTablel" в файл формата HTML DoCmd.OutputTo acOutputTable, "MyTablel", acFormatHTML, "C:\MyTablel.htm" PrintOutfPacneyaTatb, От, Да, Разрешение, ЧислоКопии РазабратьПоКапням) Параметр Назначение Распечатать Константа, задающая диапазон печати От Номер начальной страницы До Номер конечной страницы Разрешение Константа, определяющая разрешение (качество печати) ЧислоКопий Число копий РазобратьПоКопиям (Для случая печати нескольких копий) Значение True соответствует печати копий целыми документами. False соответствует печати копии постранично Комментарий Выводит на печать активный объект. Пример 'Открыть таблицу "MyTablel" и напечатать 'страницы 1-5 DoCmd.OpenTable "MyTablel" DoCmd.Printout acPages, 1, 5
694 9.3. Управление приложением — объект DoCmd Quit (Сохранение) » «Ма: г:-л Параметр Назначение Сохранение Константа, определяющая поведение приложения в отношении несохраненных изменении Комментарий Завершает выполнение программы и закрывает окно при- ложения. Пример 'Завершить с запросом на сохранение DoCmd.Quit acQuitPrompt Непате(НсааоИмя, ТипОбъекга, СтароеИмя) Параметр Назначение НовоеИмя Имя, которое требуется присвоить объекту ТипОбъекта Константа, определяющая тип объекта СтароеИмя Имя объекта Комментарий Переименовывает объект. Пример 'Переименовать таблицу MyTablel в NewTable DoCmd.Rename "NewTable", acTable, "MyTablel"
9.3. Управление приложением — объект DoCmd 695 Яециегу(ИмяЭлемен та) Параметр Назначение ИмяЭлемента Имя элемента управления Комментарий Обновляет данные, отображаемые указанным элементом управления. Пример 'Открыть форму MyForml DoCmd.OpenForm "MyForml" 'Обновить поле "Price" DoCmd.Requery "Price" Restore Комментарий Восстанавливает исходные размеры окна объекта. Пример 'Открыть форму MyForml DoCmd.OpenForm "MyForml" 'Развернуть окно формы на весь экран DoCmd.Maximi ze 'Восстановить исходные размеры окна DoCmd.Restore
696 9.4. Экранная форма — объект Form Save (Тип Объекта, ИмяОбъекта) Параметр Назначение ТипОбъекта Константа, определяющая тип сохраняемого объекта ИмяОбъекта Имя объекта, подлежащего сохранению Комментарий Сохраняет указанный объект в базе данных. Пример 'Сохранить измененную форму DoCmd.Save acForm, "MyForml" ShowAIIRecords Комментарий Отменяет действие всех ранее установленных фильтров. Пример 'Показывать все записи DoCmd.ShowAIIRecords 9.4. Экранная форма — объект Form Экранные формы представлены в VBA объектами типа Form. Для объекта Form автоматически генерируется целый ряд со- бытий.
9.4. Экранная форма — объект Form 697 9.4.1. События Событие Описание Activate Объект стал активным AfterBegin- Transaction Происходит после того, как началась транзакция AfterCommit- Transaction Происходит после того, как завершились измене- ния в результате транзакции AfterDel- Confirm Происходит после того, как пользователь под- твердил в диалоге удаление объекта AfterFinal- Render Происходит после того, как завершилось отобра - жение сводной таблицы AfterInsert Происходит после вставки записей AfterLayout Происходит после того, как все элементы свод- ной таблицы расположены, но еще не выведены AfterRender Происходит после того, как выведена диаграмма AfterUpdate Происходит после обновления измененных записей ApplyFilter Происходит после включения или выключения фильтра BeforeBegin- Transaction Происходит перед тем, как начинается транзакция BeforeCom- mitTransacti- on Происходит перед тем, как завершились измене- ния в результате транзакции BeforeDei- Confirm Происходит перед появлением диалога, запраши- вающего у пользователя подтверждение на уда - ление объекта Beforeinsert Происходит при вводе пользователем первого символа новой записи, но до фактического со - здания и вставки записи
698 9.4. Экранная форма — объект Form Событие Описание BeforeQuery Происходит при запросе сводной таблицей ис- точника данных BeforeRender Происходит перед отображением объекта в свод- ной таблице BeforeScreen - Tip Происходит перед отображением подсказки для элемента сводной таблицы BeforUpdate Происходит перед обновлением измененных за- писей BeginBatch- Edit Происходит при первом изменении данных в форме, поддерживающей пакетные обновления Click На объекте выполнен щелчок Close Происходит при закрытии формы Comma nd Be- foreExecute Происходит перед выполнением команды Command - Checked Происходит, когда команда проверена Command- Enabled Происходит, когда команда разрешена Command- Execute Происходит, когда команда выполнена Current Запись получила фокус и стала текущей DataChange Происходит, когда изменяются свойства или вы- полняются методы сводной таблицы DataSet- Change Происходит, когда изменяется набор данных сводной таблицы DbICIick На объекте выполнен двойной щелчок Deactivate Объект перестал быть активным Delete При удалении объекта - после нажатия клавиши [Del], но до фактического удаления
9.4. Экранная форма — объект Form 699 Событие Описание Dirty Содержимое формы изменено Error Произошла ошибка выполнения Access (не отно- сится к ошибкам выполнения VBA) Filter Открыто одно из окон, связанных с фильтрацией Got Focus Объект получил фокус KeyDown Нажата произвольная клавиша KeyPress Нажата и отпущена одна из ASCII-клавиш Key Up Отпущена ранее нажатая произвольная клавиша Load Происходит при загрузке формы LostFocus Объект потерял фокус MouseDown Нажата одна из кнопок мыши (указатель нахо- дится над объектом) MouseMove Указатель мыши переместился над объектом MouseUp Отпущена ранее нажатая кнопка мыши (указатель находится над объектом) MouseWheel Прокручено колесико (манипулятор прокрутки) мыши OnConnect Сводная таблица подключилась к источнику данных OnDisconnect Сводная таблица отключилась от источника данных Open Происходит после открытия формы (но до выво - да на экран первой записи) PivotTable- Change Сводная таблица изменилась Query Сводная таблица нуждается в обновлении Record Exit Происходит перед тем, как пользователь покида- ет текущую запись
(gOlPfeWliW 700 9.4. Экранная форма — объект Form Событие Описание Resize Размеры объекта изменились Rollback- Transaction Происходит перед отменой пакетной транзакции Selection- Change Пользователь выделил другой объект в сводной таблице Timer Происходит регулярно через интервал времени, заданный значением свойства формы Timerinter- val Undo Отмена изменений в комбинированном поле, форме или текстовом поле Undo Batch - Edit Отмена изменений с помощью команды Undo АП Records | Unload Происходит при выгрузке формы из памяти ViewChange Перерисовка сводной таблицы 9.4.2. Свойства ActiveQontrol Возвращает объект, обладающий в данный момент фоку- сом клавиатуры. Пример Dim MyFrm As Form Dim MyCtrl As Control DoCmd.OpenForm "MyForml" Set MyFrm = Forms!MyForml Set MyCtrl = MyFrm.ActiveControl
9.4. Экранная форма — объект Form 701 AlluwA JititfMis Разрешает (True) или запрещает (False) добавление запи- сей пользователем. Пример DoCmd.OpenForm "MyForml" Set MyFrm = Forms!MyForml MyFrm.AllowAdditions = True Alla wOe-ltf tiuns Разрешает (True) или запрещает (False) удаление записей пользователем. Пример DoCmd.OpenForm "MyForml" Set MyFrm = Forms!MyForml MyFrm.AllowDeletions = False AllowEiiits Разрешает (True) модификацию записей пользователем. Пример DoCmd.OpenForm "MyForml" Set MyFrm = FormsIMyForml MyFrm.AllowEdits = True
702 9.4. Экранная форма — объект Form AlloufFiltet^ Разрешает (True) применение фильтров. Пример DoCmd.OpenForm "MyForml" Set MyFrm = Forms!MyForml MyFrm.AllowFilters = False Captiun Определяет текст титульной строки формы. Пример DoCmd.OpenForm "MyForml", acDesign Set MyFrm = Forms!MyForml MyFrm.Caption = "Все записи" HoseButton Определяет наличие кнопки закрытия окна формы. Пример DoCmd.OpenForm "MyForml", acDesign Set MyFrm = Forms!MyForml MyFrm.CloseButton = False
9.4. Экранная форма — объект Form 703 ControlBox Определяет наличие кнопки оконного меню в титульной строке окна формы. Пример DoCmd.OpenForm "MyForml", acDesign Set MyFrm = Forms!MyForml MyFrm.ControlBox = False Controls ' Возвращает одноименную коллекцию, представляющую все элементы управления, размещенные на форме. Пример DoCmd.OpenForm "MyForml", acNormal Set MyFrm = Forms!MyForml 'Загрузить значение в поле Price MyFrm.Controls("Price").Value = 19 CurrentBeaard .ч. • Возвращает номер текущей записи. Пример DoCmd.OpenForm "MyForml", acNormal Set MyFrm = Forms!MyForml MsgBox "Текущая запись: " & MyFrm.CurrentRecord
704 9.4. Экранная форма — объект Form Cyclo Определяет поведение фокуса при нажатии клавиши [Tab] в ситуации, когда фокус находится на последнем поле по- следней записи. Пример DoCmd.OpenForm "MyForml", acNormal Set MyFrm = Forms!MyForml 'После последнего поля — на первое поле 'той же записи MyFrm.Cycle = 1 Dirty Сигнализирует о том, что запись содержит (True) несохра- ненные изменения. Пример DoCmd.OpenForm "MyForml", acNormal Set MyFrm - Forms!MyForml If MyFrm.Dirty Then MsgBox "Запись изменена. Сохранить?", vbYesNo End If I Htc r Ограничивает (фильтрует) подмножество доступных запи- сей с помощью SQL-предложения WHERE без ключевого слова WHERE.
9.4. Экранная форма — объект Form 705 Пример DoCmd.OpenForm "MyForml", acNormal Set MyFrm = Forms!MyForml MyFrm.Filter = "Price > 50" MyFrm.FilterOn = True Filt&rO,! Включает (True) или выключает (False) фильтр, установлен- ный значением свойства Filter. Пример DoCmd.OpenForm "MyForml", acNormal Set MyFrm = Forms!MyForml MyFrm.Filter = "Price > 50" MyFrm.FilterOn = True HelpCeiitextU} Определяет контекстный идентификатор раздела справки. Пример DoCmd.OpenForm "MyForml", acNormal Set MyFrm = Forms!MyForml MyFrm.HelpContextID = 5002 MyFrm.HelpFile = "MyHelpl.hip" 23 1855
706 9.4. Экранная форма — объект Form HelpFile Определяет имя файла справки. Пример DoCmd.OpenForm "MyForml”, acNormal Set MyFrm = Forms!MyForml MyFrm.HelpContextID = 5002 MyFrm.HelpFile = "MyHelpl.hip" MaxRecButton Определяет наличие в окне формы кнопки последней за- писи. Пример DoCmd.OpenForm "MyForml", acDesign Set MyFrm = Forms!MyForml MyFrm.MaxRecButton = False MinMaxButtons Определяет наличие в окне формы кнопок свертывания и развертывания окна. Пример DoCmd.OpenForm "MyForml", acDesign Set MyFrm = Forms!MyForml MyFrm.MinMaxButtons = False
9.4. Экранная форма — объект Form 707 Mijdal True, если форма должна быть открыта в режиме модаль- ного окна. Пример DoCmd.OpenForm "MyForml", acNormal Set MyFrm = Forms!MyForml MyFrm.Modal = True Name Имя формы. Пример DoCmd.OpenForm "MyForml", acNormal Set MyFrm = Forms!MyForml MsgBox "Имя текущей формы: " & MyFrm.Name NavigationButtons Определяет наличие в окне формы кнопок перехода и поля номера записи. Пример DoCmd.OpenForm "MyForml", acDesign Set MyFrm = Forms!MyForml MyFrm.NavigationButtons = False
708 9.4. Экранная форма — объект Form OrderBy Имя поля, по значению которого должны сортироваться записи. Пример DoCmd.OpenForm "MyForml", acNormal Set MyFrm = Forms!MyForml MyFrm.OrderBy = "Price" MyFrm.OrderByOn = True OrderByOn Разрешает (True) или запрещает (False) сортировку запи- сей. Пример DoCmd.OpenForm "MyForml", acNormal Set MyFrm = Forms!MyForml MyFrm.OrderBy = "Price" MyFrm.OrderByOn = True RecwdLecks Определяет способ блокировки записей для многопользо- вательского режима. Пример DoCmd.OpenForm "MyForml", acNormal Set MyFrm = Forms!MyForml
9.4. Экранная форма — объект Form 709 ’При внесении изменений в запись 'блокировать страницу MyFrm.RecordLocks = 2 RecordSe,: Определяет ADO- или DAO-набор записей для формы (таб- лица, SQL-выражение, запрос). Пример Sub CheckRSType() Dim rs as Object Set rs=Forms(0).Recordset If TypeOf rs Is DAO.Recordset Then MsgBox "DAO набор записей" Elself TypeOf rs is ADODB.Recordset Then MsgBox "ADO набор записей" End If End Sub RecordSource Определяет источник записей для формы (таблица, SQL- выражение, запрос). Пример DoCmd.OpenForm "MyForml", acNormal Set MyFrm = Forms!MyForml MyFrm.RecordSource = "MyForml"
710 9.4. Экранная форма — объект Form ScrvurFilter Определяет подмножество отфильтрованных записей для серверного фильтра по форме. Пример 'Отфильтровать записи на сервере в форме 'по значению 'Россия' поля Country Forms(0).ServerFilter = "Country = 'Россия'" ServarFitturByF'jrm Определяет открытие формы в виде окна серверного фильт- ра по форме. Пример 'Разрешить применение серверного фильтра Forms(0).ServerFilterByForm = True Tlmerlntsrvai Определяет интервал (в миллисекундах) между автомати- чески генерируемыми для формы событиями Timer. Пример DoCmd.OpenForm "MyForml", acNormal Set MyFrm = Forms!MyForml MyFrm.TimerInterval = 100
9.4. Экранная форма — объект Form 711 Visible Делает форму видимой (True) или скрытой (False). Пример DoCmd.OpenForm "MyForml", acNormal Set MyFrm = Forms!MyForml 'Скрыть форму MyFrm.Visible = False 9.4.3. Методы Kienle Комментарий Обновляет все вычисляемые поля формы. Пример MyFrm.Recalc Refresh Комментарий Обновляет данные в источнике записей, связанном с фор- мой в соответствии с текущим состоянием формы. Пример MyFrm.Refresh
712 9.4. Экранная форма — объект Form Repaint Комментарий Завершает все отложенные операции по обновлению эк- рана для формы. Пример MyFrm.Repaint Requery Комментарий Обновляет данные формы посредством повторного за- проса к источнику данных. Пример MyFrm.Requery Undti Комментарий Восстанавливает состояние формы, которое она имела до внесения последних изменений. Пример MyFrm.Undo
9.5. Элемент управления — Control 713 9.5. Элемент управления — Control Элементы управления (как стандартные, так и ActiveX-эле- менты) представлены объектом Control. 9.5.1. Свойства Column Используется для ссылки на столбец в списке или поле со списком. Пример Dim MyCtrl As Control Set MyCtrl = MyFrm.Controls("PriceList") 'Сообщить цену и невидимый номер MsgBox MyCtrl-Column(0) & ", " & MyCtrl. Column(1) 4emDat~ Возвращает значение, содержащееся в присоединенном столбце указанной строки списка или поля со списком. Пример 'Показать весь список значений 'в присоединенном столбце For I = 0 То MyCtrl.ListCount - 1 NrStr = NrStr & MyCtrl.ItemData(I) S vbCr Next MsgBox NrStr
714 9.5. Элемент управления — Control Ol'JV.ltua Определяет исходное (неизменное) значение присоеди- ненного элемента управления. Пример MsgBox MyCtrl.OldValue 9.5.2. Методы DropDpwn Комментарий Раскрывает список в указанном поле со списком. • Использование метода допустимо только в отношении поля со списком, обладающим фокусом. Пример 'Раскрыть список With MyCtrl .SetFocus .DropDown End With fle-juery Комментарий Обновляет содержимое элемента управления с помощью повторного запроса к источнику данных.
9.6. Отчеты — объект Report 715 Пример MyCtrl.Requery SetFacus Комментарий Передает элементу фокус клавиатуры. Пример MyCtrl.SetFocus Undo Комментарий Восстанавливает состояние элемента, которое он имел до внесения последних изменений. Пример MyCtrl.Undo 9.6. Отчеты — объект Report Отчеты Microsoft Access представляются объектами типа Re- port.
716 9.6. Отчеты — объект Report 9.6.1. События Событие Описание Activate Отчет стал активным Close Закрытие отчета Deactivate Отчет перестал быть активным Error Произошла ошибка выполнения Access (не отно- сится к ошибкам выполнения VBA) NoData Возникает после форматирования отчета для пе- чати в случае, когда отчет не содержит данных Open Происходит перед открытием отчета Page Происходит после форматирования страницы от- чета для вывода на печать, но до самого вывода 9.6.2. Свойства CurrcntHrramt Содержит номер текущей записи. Пример DoCmd.OpenReport "Итоги за год", acViewPreview Set MyRpt = Reports("Итоги за год") MsgBox "Номер текущей записи: " & MyRpt. CurrentRecord Fitter Ограничивает (фильтрует) подмножество доступных запи- сей с помощью SQL-предложения WHERE без ключевого слова WHERE.
(gOlPfeWliW 9.6. Отчеты — объект Report 717 Пример DoCmd.OpenReport "Итоги за год", acViewPreview Set MyRpt = Reports("Итоги за год") MyRpt.Filter = "Price > 10000" MyRpt.FilterOn = True FilterOn Включает (True) или выключает (False) фильтр, установ- ленный значением свойства Filter. Пример DoCmd.OpenReport "Итоги за год", acViewPreview Set MyRpt = Reports("Итоги за год") MyRpt.Filter = "Price 10000” MyRpt.FilterOn = True HasOate Возвращает -1, если отчет содержит данные (его источник данных не пуст); 0, если отчет не содержит данных (его ис- точник данных пуст, и 1, если отчет не связан с источником данных. Пример DoCmd.OpenReport "Итоги за год", acViewPreview Set MyRpt = Reports("Итоги за год") If MyRpt.HasData = 0 Then MsgBox "Отчет не содержит данных!" End If
718 9.6. Отчеты — объект Report HelpContextID Определяет контекстн ый идентификатор раздела справки. Пример DoCmd.OpenReport "Итоги за год", acViewPreview Set MyRpt = Reports("Итоги за год") MyRpt.HelpContextID = 8512 MyRpt.HelpFile = "MyHelpl.hip" Имя файла справки. Пример DoCmd.OpenReport "Итоги за год", acViewPreview Set MyRpt = Reports("Итоги за год") MyRpt.HelpContextID = 8512 MyRpt.HelpFile = "MyHelpl.hip" Name Имя отчета. Пример MsgBox MyRpt.Name OrderBy И Имя поля, по значению которого должны быть отсортиро- ваны записи.
9.6. Отчеты — объект Report 719 Пример DoCmd.OpenReport "Итоги за год", acViewPreview Set MyRpt = Reports("Итоги за год") MyRpt.OrderBy = "Price" MyRpt.OrderByOn = True OrderByOn Включает (True) или выключает (False) сортировку запи- сей. Пример DoCmd.OpenReport "Итоги за год", acViewPreview Set MyRpt = Reports("Итоги за год") MyRpt.OrderBy = "Price" MyRpt.OrderByOn = True PageFootcr Определяет режим печати нижнего колонтитула для стра- ниц отчета. Пример DoCmd.OpenReport "Итоги за год", acViewPreview Set MyRpt = Reports("Итоги за год") 'Печатать нижний колонтитул на всех 'страницах отчета MyRpt.PageFooter = О
720 9.7. Экран — объект Screen Pag^Header Определяет режим печати верхнего колонтитула для стра- ниц отчета. Пример DoCmd.OpenReport "Итоги за год", acViewPreview Set MyRpt = Reports("Итоги за год") 'Печатать верхний колонтитул 'на всех страницах кроме страницы с заголовком MyRpt.PageHeader = 1 Rec&rdLi'cks Определяет, блокируются ли записи в базовой таблице или запросе при печати или просмотре отчета. Пример DoCmd.OpenReport "Итоги за год", acViewPreview Set MyRpt = Reports("Итоги за год") MyRpt.RecordLocks = 1 9.7. Экран — объект Screen 9.7.1. Свойства ActiveDataAccessPaga Значением свойства является активная страница доступа к данным, имеющая фокус во время выполнения.
9.7. Экран — объект Screen 721 Пример Dim pgCurrentPage As DataAccessPage Set pgCurrentPage = Screen.ActiveDataAccessPage MsgBox "Текущая страница доступа к данным " _ & pgCurrentPage.Name ActiveDatnsti&at - a-..,.,. .. ?v-" Значением свойства является активный объект в режиме таблицы, имеющий фокус во время выполнения. Пример 'Открыть таблицу DoCmd.OpenTable "MyTablel" 'Сообщить имя активной таблицы MsgBox Screen.ActiveDatasheet-Name ActiveForm_______1 ' t;- ' Возвращает текущую форму (форму, обладающую фоку- сом). Пример 'Открыть форму DoCmd.OpenForm "MyForml" 'Сообщить имя активной формы MsgBox Screen.ActiveForm.Name 24 1855
722 9.8. База данных — объект CurrentData ActiveReport Возвращает текущий отчет. Пример 'Открыть отчет DoCmd.OpenReport "MyRepl" 'Сообщить имя активного отчета MsgBox Screen.ActiveReport.Name MausePaintar Определяет вид указателя мыши. Пример 'Изменить вид указателя на "песочные 'часы", затем вернуть стандартный вид Screen.MousePointer = 11 Screen.MousePointer = О 9.8. База данных — объект CurrentData Объект CurrentData включает коллекции всех таблиц, запро- сов, представлений, сохраненных процедур и схем данных ак- тивной базы данных. 9.8.1. Свойства AttDaiattaseniagrams Значением свойства является коллекция схем данных ак- тивной базы данных.
(gOlPfeWliW 9.8. База данных — объект CurrentData 723 Пример Sub AllDatabaseDiagrams() Dim obj As Accessobject, dbs As Object Set dbs = Application.CurrentData ' Поиски открытого объекта ' в коллекции схем данных. For Each obj In dbs.AllDatabaseDiagrams If obj.IsLoaded = TRUE then ' Печать имени схемы. Debug.Print obj.Name End If Next obj End Sub AHQbkrt&s Значением свойства является коллекция запросов актив- ной базы данных. Пример Sub AllQueries() Dim obj As Accessobject, dbs As Object Set dbs = Application.CurrentData ' Поиски открытого объекта ' в коллекции запросов. For Each obj In dbs.AllQueries If obj.IsLoaded = TRUE then ' Печать имени запроса. Debug.Print obj.Name End If Next obj End Sub
724 9.8. База данных — объект CurrentData Aii8toi&dPr0ceclures Значением свойства является коллекция сохраненных про- цедур активной базы данных. Пример Sub AllStoredProcedures() Dim obj As Accessobject, dbs As Object Set dbs = Application.CurrentData ' Поиски открытого объекта ' в коллекции сохраненных процедур. For Each obj In dbs.AllStoredProcedures If obj.IsLoaded = TRUE then ' Печать имени сохраненной ' процедуры. Debug.Print obj.Name End If Next obj End Sub AliTables Значением свойства является коллекция таблиц активной базы данных. Пример Sub AllTables() Dim obj As Accessobject, dbs As Object Set dbs = Application.CurrentData ' Поиски открытого объекта ' в коллекции таблиц. For Each obj In dbs.AllTables If obj.IsLoaded = TRUE then
9.9. Проект — объект Currentproject 725 ' Печать имени таблицы. Debug.Print obj.Name End If Next obj End Sub AlfVh.ws Значением свойства является коллекция представлений активной базы данных. Пример Sub AllViews() Dim obj As Accessobject, dbs As Object Set dbs = Application.CurrentData ' Поиски открытого объекта ' в коллекции представлений. For Each obj In dbs.AllViews If obj.IsLoaded = TRUE then ' Печать имени представления. Debug.Print obj.Name End If Next obj End Sub 9.9. Проект — объект Currentproject Объект CurrentProject включает коллекции всех форм, отче- тов, макросов, модулей и страниц доступа к данным активной базы данных.
(gOlPfeWliW 726 9.9. Проект — объект CurrentProject 9.9.1. Свойства AIIDataAccessPages Значением свойства является коллекция страниц доступа к данным активной базы данных. Пример Sub AllDataAccessPagesО Dim obj As Accessobject, dbs As Object Set dbs - Application.CurrentData ' Поиски открытого объекта 1 в коллекции страниц доступа к данным. For Each obj In dbs.AllDataAccessPages If obj.IsLoaded = TRUE then ' Печать имени страницы доступа ' к данным. Debug.Print obj.Name End If Next obj End Sub AIIFonns Значением свойства является коллекция форм активной базы данных. Пример Sub AllForms() Dim obj As Accessobject, dbs As Object Set dbs = Application.CurrentData
9.9. Проект — объект Currentproject 727 ' Поиски открытого объекта ' в коллекции форм. For Each obj In dbs.AllForms If obj.IsLoaded = TRUE then ' Печать имени формы. Debug.Print obj.Name End If Next obj End Sub AttMacras Значением свойства является коллекция макросов актив- ной базы данных. Пример Sub AllMacros() Dim obj As Accessobject, dbs As Object Set dbs = Application.CurrentData ' Поиски открытого объекта ' в коллекции макросов. For Each obj In dbs.AllMacros If obj.IsLoaded = TRUE then ' Печать имени макроса. Debug.Print obj.Name End If Next obj End Sub AIIMadules Значением свойства является коллекция модулей актив- ной базы данных.
728 9.9. Проект — объект Currentproject Пример Sub AllModules() Dim obj As Accessobject, dbs As Object Set dbs = Application.CurrentData ' Поиски открытого объекта ' в коллекции модулей. For Each obj In dbs.AllModules If obj.IsLoaded = TRUE then ' Печать имени модуля. Debug.Print obj.Name End If Next obj End Sub MIR Значением свойства является коллекция отчетов активной базы данных. Пример Sub AllReports() Dim obj As Accessobject, dbs As Object Set dbs = Application.CurrentData ' Поиски открытого объекта ' в коллекции отчетов. For Each obj In dbs.AllReports If obj.IsLoaded = TRUE then ' Печать имени отчета. Debug.Print obj.Name End If Next obj End Sub
9.9. Проект — объект CurrentProject 729 9.9.2. Методы Closeconnection Комментарий Разрывает соединение с существующим проектом или ба- зой данных Access. Пример Dim objCurrent As Object Set objCurrent = Application.CurrentProject obj Current.CloseConnection Оиг:пСипп^1Иоп(СтрокаПопключеги1 Идентификатор. . Пароль)_____ Параметр Назначение Строка- Подключения Строка параметров подключения проекта к внешней базе данных. Идентификатор Имя файла проекта. Пароль Имя файла проекта. Комментарий Устанавливает соединение с существующим проектом или базой данных Access. Пример Dim objCurrent As Object Set objCurrent = Application.CurrentProject objCurrent.OpenConnection _ (,"C:\MyProj.adp","UserPsw")
W Объекты доступа к данным (DAO) 10.1. DAO: что это такое? DAO (Data Access Objects) — объекты доступа к данным игра- ют роль соединительного звена между VBA и базами данных. Посредством свойств и методов этих объектов Visual Basic- программа способна манипулировать базами данных практи- чески любым мыслимым образом.
10.2. Обзор DAO 731 Механизм DAO-объектов поддерживает две среды работы с базами данных, называемые также «рабочими областями»: Рабочая область Microsoft Jet (Jet Engine) обеспечивает доступ к данным в базах данных Microsoft Jet, базах дан- ных ODBC, подключенных к ядру Microsoft Jet, а также ис- точникам данных устанавливаемых драйверов ISAM других форматов, таких как DBase, Paradox или Lotus 1 -2-3. Рабочая область ODBCDirect обеспечивает доступ к сер- верам баз данных по протоколу ODBC без необходимости загрузки ядра базы данных Microsoft Jet. 10.2. Обзор DAO Рабочую область Microsoft Jet (Jet Engine) используют при от- крытии базы данных Microsoft Jet (файла .mdb) или других баз данных ISAM, выполняющихся на настольных системах, а так- же в ситуациях, когда требуются уникальные характеристики Microsoft Jet, такие как возможность объединения данных из баз данных разных форматов. Рабочая область ODBCDirect обеспечивает альтернативные возможности работы в ситуациях, когда требуется выполнять запросы или сохраненные процедуры на сервере, таком как Microsoft SQLServer, или если приложению-клиенту требуют- ся специфические возможности ODBC, как, например, пакет- ное обновление или выполнение асинхронных запросов.
732 10.2. Обзор DAO Обзор. Объектная модель рабочей области Jet Engine | DBEngine^ —| Workspaces (Workspase) Databases (Database) -j Groups (Group) —j Containers (Container) Users (User) Documents (Document) —| QueryPefs (QueryDef) —| Fields (Field) —| Parameters (Parameter) —| RecordSets (RecordSet) ] I UsefS (User) i—| Groups (GroupT Fields (Field) Relations (Relation) I—I Fields (Field) -[ TableDefs (TableDef) —| Fields (Field) —i *n<^ex I—I Fields (Field)
10.2. Обзор DAO 733 Объект Назначение DBEngine Ядро базы данных Microsoft Jet Error Сохраняет информацию об ошибках, связанных с объектом Workspace Сеанс ядра базы данных Microsoft Jet Database Открытая база данных Container Содержит информацию о встроенном типе объек - тов Document Содержит информацию о сохраненном встроенном объекте QueryDef Сохраненное описание запроса Field Поле (столбец) в таблице запросе или наборе за- писей Parameter Параметр для запроса с параметрами Recordset Набор записей из основной таблицы или запроса Relation Связь, определенная между полями таблиц или за- просов TableDef Сохраненное определение таблицы Index Определяет порядок сортировки и уникальность за - писей в таблице , Group Группа учетных записей пользователей User Учетная запись пользователя
734 10.2. Обзор DAO Обзор. Объектная модель рабочей области ODBCDirect DBEngine Errors (Error) *— Workspaces (Workspase) Connections (Connection) QueryDefs (QueryDef) Parameters (Parameter) RecordSets (Recordset) Fields (Field) — Databases (Database) RecordSets (Recordset) Fields (Field) Объект Назначение DBEngine Ядро базы данных Error Сохраняет информацию об ошибках, связанных с объектом Workspace Сеанс ядра базы данных Connection Сведения о подключении к источнику данных ODBC QueryDef Временное определение запроса
10.3. Начало начал — объект DBEngine 735 Объект Назначение Parameter Параметр для запроса с параметрами Recordset Набор записей из основной таблицы или запроса Field Поле в таблице, запросе или наборе записей Database Открытая база данных 10.3. Начало начал — объект DBEngine Объект DBEngine («машина данных») содержит и управляет всеми другими объектами в иерархии объектов доступа к дан- ным (DAO). Создание дополнительных объектов DBEngine не- возможно, а сам объект DBEngine не является компонентом ни одной коллекции. Его свойства и методы решают самые общие задачи, связанные с доступом к данным. 10.3.1. Свойства £rrois Обеспечивает доступ к информации об ошибках доступа к данным. Пример Dim DB As Database 'Установить метку перехода по ошибке On Error GoTo MyErrorHandlerl 'И вот она, ошибка... Set DB = OpenDatabase( _ "ИмяНесуществующей БазыДанных") MyErrorHandlerl: With Errors
736 10.3. Начало начал — объект DBEngine MsgBox .Number & " - " & .Description End With LoginTtmeout Определяет временной интервал ожидания (в секундах), по истечении которого возникает ошибка при попытке под- ключения к базе данных ODBC. Пример 'Интервал ожидания — 10 секунд DBEngine.LoginTimeout =10 Svstem'JB Полное имя каталога, где содержится файл системной базы данных. Пример 'Сообщить имя каталога системной базы данных MsgBox DBEngine.SystemDB Version Возвращает номер версии DAO. Пример 'Сообщить номер версии DAO MsgBox "Номер версии DAO: " & DBEngine-Version
10.3. Начало начал — объект DBEngine 737 10.3.2. Методы BeginTrans . Комментарий Открывает новую транзакцию. • Транзакции необходимо использовать в случаях, когда ряд операций должен быть гарантированно выполнен до конца или не выполнен совсем (например, чтобы вне- запное отключение станции не привело к нарушению ло- гической целостности данных на сервере). • Транзакция открывается вызовом метода BeginTrans, по- сле чего можно начать выполнение требуемых операций. Все изменения, которые предполагается внести при этом в базу данных, автоматически записываются в журнал транзакций. • Если весь ряд операций успешно доведен до конца, тран- закция закрывается вызовом метода CommitTrans, при этом состояние базы реально меняется. • Если транзакция по тем или иным причинам не заверше- на, то ее отменяют вызовом метода RollBack (при этом очищается журнал транзакций и состояние базы стано- вится таким, каким оно было до открытия транзакции). Пример DBEngine.BeginTrans 'Выполняются операции с данными, 'не допускающие прерывания DBEngine.CommitTrans 'Обработка ошибок ErrorLabel2:
738 10.3. Начало начал — объект DBEngine MsgBox "Последняя транзакция не завершена " & "и будет отменена." DBEngine.RollBack C&mmrtTra пи( dbMushQS C<che> Writes) Параметр Назначение dbFlashOS- CacheWrites Константа, задающая режим немедленной и бе- зусловной записи на диск всех кэшированных изменений в базе данных Комментарий Закрывает транзакцию. • После вызова этого метода откат (отмена транзакции) становится невозможным. Пример DBEngine.BeginTrans 'Выполняются операции с данными, 'не допускающие прерывания DBEngine.CommitTrans 'Обработка ошибок ErrorLabel2: MsgBox "Последняя транзакция не завершена " & "и будет отменена." DBEngine.RollBack
10.3. Начало начал — объект DBEngine 739 CraateOatat>ase(UMv, Порядок, Параметры} Параметр Назначение Имя Имя файла создаваемой базы данных Порядок Константа, определяющая порядок символов, ко- торый будет использоваться в операциях сравне - ния и сортировки в создаваемой базе данных Параметры Константа или сумма констант, которая определяет один или несколько параметров Комментарий Создает новую базу данных. Пример 'Создать базу данных DBEngine.CreateDatabase "С:\TempDB", dbLangGeneral CreateWorkspacefMMH, Пользователь, Пароль, Тип) Комментарий Создает новый объект Workspace. • Созданием объекта Workspace открывается сеанс ра- бочей области. Каждый из объектов Workspace обеспе- чивает только один из двух видов доступа (при этом од- новременно могут существовать несколько объектов Workspace с разными видами доступа). • Вид рабочей области определяется константой, задан- ной параметром Тип: значение dbUseJet соответствует рабочей области ядра Microsoft Jet, значение dbllse- ODBC — рабочей области ODBCDirect.
740 10.3. Начало начал — объект DBEngine Параметр 1 Назначение Имя Имя нового объекта Workspace Пароль Пароль для нового объекта Workspace Пользователь Определяет владельца нового объекта Workspace Тип Константа, определяющая тип рабочей области Пример Dim WrkSpc As Workspace 'Создать рабочую область Jet Set WrkSpc = _ DBEngine.CreateWorkspace("JWrk", "Admin", "Genl", dbUseJet) 'Создать рабочую область ODBC Set WrkSpc = _ DBEngine.CreateWorkspace("OWrk", "Admin", "Gen2", dbUseODBC) OpenCvnn^ction(HMa, Параметры^ ТрлькоДляЧтеняя? . Стрика)_________. '-Л . Параметр Назначение Имя Имя подключения Параметры Задает параметры подключения , ТолькоДляЧтения Задает (True) режим «только для чтения» Строка Строка подключения ODBC
10.3. Начало начал — объект DBEngine 741 Комментарий Открывает объект Connection (подключение) для источ- ника данных ODBC. • База данных, имя пользователя и пароль могут быть за- даны посредством диалога. • Параметр Строка должен содержать информацию о под- ключении: "ODBC;DATABASE=database;UID=user; PWD=password;DSN=datasourcename" Пример 'Создать рабочую область ODBC Set WrkSpc = _ DBEngine.CreateWorkspace("WSO", "Admin", dbUseODBC) 'Создать подключение для источника данных ODBCStr = "ODBC;DATABASE=Publicbase;UID=sa;" & "PWD=;DSN=Publ" Set Con = WrkSpc.OpenConnection("Coni", dbDriverNoPrompt, , ODBCStr) OpenDatabasefHMuBfl, Параметры, ТолькоДляЧтения, Подключение) Параметр Назначение ИмяБД Имя существующего файла базы данных с ядром Microsoft Jet или имя источника дан - ных ODBC Параметры Определяет режим доступа или вид пригла- шения пользователю ТолькоДляЧтения Задает (True) режим «только для чтения» | Подключение Строка, содержащая сведения о подключении
742 10.3. Начало начал — объект DBEngine Комментарий Открывает указанную базу данных в объекте Workspace и возвращает ссылку на объект Database, представляющий эту базу данных. Пример Dim DB As Database 'Открыть базу данных Set DB = OpenDatabase("С:\Data\Nordwind.mdb") HepairDatabasz 1м*БД Параметр Назначение ИмяБД Имя файла базы данных Комментарий Делает попытку восстановить поврежденную базу данных Microsoft Jet (только для баз данных Microsoft Jet). • Бызов метода допустим только в отношении закрытой базы данных. Пример 'Восстановить базу данных RepairDatabase "C:\Data\Nordwind.mdb"
(gOlPfeWliW 10.3. Начало начал — объект DBEngine 743 Rollback Комментарий Выполняет откат по журналу транзакций (отмену транзак- ции), см. BeginTrans. Пример DBEngine.BeginTrans 'Выполняются операции с данными, 'не допускающие прерывания DBEngine.CommitTrans 'Обработка ошибок ErrorLabel2: MsgBox "Последняя транзакция не завершена " & "и будет отменена." DBEngine.RollBack 10.3.3. Пример В данном примере демонстрируется применение механизма транзакций. Принцип двойной бухгалтерской проводки подразу- мевает, что одна и та же сумма должна отразиться в дебетовом обороте одного счета и кредитовом обороте другого счета — в этом случае баланс никогда не будет нарушен. Но что, если вы- полнив оборот по одному счету, программа не найдет второй? Что, если до завершения оборота по второму счету компью- тер будет по тем или иным причинам выключен? Баланс будет нарушен, а бухгалтерская база данных станет непригодной к использованию. Чтобы защитить данные от подобных угроз, в примере использована транзакция — поиск обоих счетов и обороты по ним благодаря этому становятся одной целой и неделимой операцией.
744 10.3. Начало начал — объект DBEngine 'Двойная проводка Sub DoubleАс() Const DBName = "C:\Data\Exmpll.mdb" Dim DB As Database Dim Counts As Recordset Dim Booking As Recordset Dim LsDeb As Long Dim LsCred As Long Dim Sum As Currency 'Открыть базу данных Set DB = OpenDatabase(DBName) 'Открыть таблицу счетов Set Counts = DB.OpenRecordset("CountsSaldo") 'Открыть таблицу проводок Set Booking = DB.OpenRecordset _ ("CountsBooking") 'Индекс по первичному ключу (поле COUNT) Counts.Index = "PrimaryKey" 'Начало цикла — проход по таблице проводок Do Until Booking.EOF 'Если проводка не выполнена, то выполнить If Not Booking!Done Then 'Прочитать данные проводки With Booking LsDeb = JCountDeb LsCred = [Countered Sum = !Sum End With 'Открыть транзакцию With Counts BeginTrans 'Найти первый счет и выполнить оборот .Seek LsDeb If Not .NoMatch Then .Edit
10.4. Подключение к базе данных ODBC 745 !Saldo = !Saldo - Sum .Update 'Найти второй счет и выполнить оборот .Seek LsCred If Not .NoMatch Then .Edit 1Saldo = !Saldo + Sum .Update 'Пометить проводку как выполненную Booking.Edit Booking!Done = vbYes Booking.Update CommitTrans 'Закрыть транзакцию Else 'Если счет не найден, то 'отменить транзакцию RollBack End If Else CommitTrans 'Закрыть транзакцию End If End With End If 'Перейти на следующую запись 'в таблице проводок Booking.MoveNext Loop DB.Close 'Закрыть базу данных End Sub 10.4. Подключение к базе данных ODBC Объект Connection представляет подключение к базе данных ODBC в рабочей области ODBCDirect, т. е. в рамках объекта Workspace, созданного с параметром dbUseODBC. Прежде чем подключение станет возможным, должно быть определе-
746 10.4. Подключение к базе данных ODBC но имя источника данных—DSN (Data Source Name), что мож- но сделать с помощью системных средств или специального инструментария ODBC. 10.4.1. Свойства Namtt Имя подключения. Пример Dim Con As Connection MsgBox "Подключение " & Con.Name & " активно." duGryTimeaut Определяет интервал ожидания (в секундах), после кото- рого возникает ошибка превышения времени ожидания при выполнении запроса к источнику данных ODBC. Пример Con.QueryTimeout = 10 SiillExecu; Возвращает булево True, если асинхронный запрос еще выполняется, и False, если выполнение запроса завершено. Пример 'Создать подключение к базе данных ODBCStr = "ODBC;DATABASE=Publicbase;UID=sa;" & "PWD=;DSN=Publ"
10.4. Подключение к базе данных ODBC 747 Set Con = WrkSpc.OpenConnection("Coni", dbDriverNoPrompt, , ODBCStr) If Con.StillExecuting Then MsgBox "Запрос выполняется..." End If ’’’ra-.sac 'Ions Возвращает булево True, если подключение поддержива- ет транзакции, и False в противном случае. Пример 'Создать подключение к базе данных ODBCStr = "ODBC;DATABASE=Publicbase;UID=sa;" & "PWD=;DSN=Publ" Set Con = WrkSpc.OpenConnection("Coni", dbDriverNoPrompt, , ODBCStr) If Con.Transactions Then MsgBox "Транзакции поддерживаются." End If 10.4.2. Методы CIO».! Комментарий Закрывает подключение. Пример 'Создать подключение к базе данных ODBCStr = "ODBC;DATABASE=Publicbase; UID=sa;" & "PWD=;DSN=Publ"
748 10.4. Подключение к базе данных ODBC Set Con = WrkSpc.OpenConnection("Coni", dbDriverNoPrompt, , ODBCStr) 'Закрыть подключение Con.Close CreateQueiyOef{HMa, Ст; *.« iOi. Параметр Назначение Имя Имя создаваемого запроса CrpoKaSQL Строка (SQL-выражение), определяющая запрос Комментарий Создает новое временное определение запроса (объект QueryDef). Пример Dim Con As Connection Dim QDTitle As QueryDef 'Создать подключение к базе данных ODBCStr = "ODBC;DATABASE=Publicbase;UID=sa;" & "PWD=;DSN=Publ" Set Con = WrkSpc.OpenConnection("Coni", dbDriverNoPrompt, , ODBCStr) 'Запустить определение запроса Set QDTitle = Con.CreateQueryDef ("QD1", "SELECT Title FROM TitLe")
10.4. Подключение к базе данных ODBC 749 Execute Источник, Параметре! Параметр Назначение Источник SQL-выражение, определяющее запрос Параметры Константа или сумма констант, определяющая ха- рактеристики целостности данных Комментарий Выполняет запрос на изменение или инструкцию SQL для указанного объекта Connection. Пример SQLDelStr = "DELETE * FROM Books WHERE Books.Quant 10” Con.Execute SQLDelStr, dbRunAsync OpenRecordabtfИсточник, Тип, Парометры, Блокировки) Комментарий Создает новый объект Recordset. Параметр Назначение Источник Имя таблицы, запроса или инструкция SQL, кото- рая возвращает записи Тип Константа, указывающая тип открываемого объекта Recordset Параметры Произвольная комбинация констант, задающих ха - рактеристики нового объекта Recordset Блокировки Константа, определяющая тип блокировки объекта Recordset
750 10.4. Подключение к базе данных ODBC Пример Dim QDTitle As QueryDef Dim RSJobs As Recordset 'Запустить определение запроса Set QDTitle = Con.CreateQueryDef ("QD1", "SELECT Title FROM TitLe") Set RSJobs = QDTitle.OpenRecordset() 10.4.3. Пример В данном примере реализовано подключение к SQL-серверу, результатом которого является доступ к набору записей, по- лученному посредством запроса к таблице. Sub ODBCConnection() Dim WrkSpc As Workspace Dim Con As Connection Dim RSJobs As Recordset Dim QDTitle As QueryDef Dim Message As String 'Создать рабочую область Set WrkSpc = CreateWorkspace("WSO", "admin", "", dbUseODBC) 'Создать подключение к базе данных Set Con = WrkSpc.OpenConnection("Coni", dbDriverNoPrompt, , "ODBC;DATABASE=Pubi c s;UID= s a;PWD=;DSN=Publ") 1 Создать набор записей Set RSJobs = Con.Openrecordset("Job") 'Прочитать и отобразить все значения
10.5. База данных — объект Database 751 'поля JobPlace Message = "" Do Until RSJobs.EOF Message = Message & RSJobs!JobPlace & vbCr RSJobs.MoveNext Loop MsgBox Message 'Запустить временное определение запроса... Set QDTitle - Con.CreateQueryDef _ ("QD1”, "SELECT Title FROM Title") Set RSJobs = QDTitle.OpenRecordset() '... и прочитать полученное 'подмножество записей Message = "" Do Until RSJobs.EOF Message = Message & RSJobs!Title S vbCr RSJobs.MoveNext Loop MsgBox Message 'Закрыть подключение Con.Close End Sub 10.5. База данных — объект Database Объект Database представляет базу данных в формате Micro- soft Access, доступ к которой осуществляется посредством драйвера ядра базы данных Microsoft Jet. 10.5.1. Свойства &№itingOr<ier w; .-.atr; a M Возвращает значение, указывающее порядок символов, ис- пользуемый при сравнении текстовых строк или при опреде- лении порядка сортировки.
(gOlPfeWliW 752 10.5. База данных — объект Database Пример Dim DB As Database 'Открыть базу данных Set DB = OpenDatabase("С:\Data\Exmpll.mdb") MsgBox "Порядок сортировки: " _ & DB.CollatingOrder Wa.nc Полное имя файла базы данных. Пример Dim DB As Database 'Открыть базу данных Set DB = OpenDatabase("С:\Data\Exmpll.mdb") MsgBox DB.Name Updatable Возвращает булево True, если модификации базы данных разрешены. Пример Dim DB As Database 'Открыть базу данных Set DB - OpenDatabase("С:\Data\Exmpll.mdb") If Not DB.Updatable Then MsgBox "Модификации в базе данных запрещены" End If
(gOlPfeWliW 10.5. База данных — объект Database 753 Version Возвращает версию ядра базы данных Microsoft Jet, в ко- торой был создан файл .mdb. Пример Dim DB As Database 'Открыть базу данных Set DB = OpenDatabase("С:\Data\Exmpll.mdb") MsgBox "База данных была создана с помощью: " & DB.Version 10.5.2. Методы Close « Комментарий Закрывает базу данных. Пример DB.Close CreatoQuoryLleffllMH, CrpuK.iSQL) - Параметр Назначение Имя Имя создаваемого запроса CrpoKaSQL Строка (SQL-выражение), определяющая запрос 25 1855
754 10.5. База данных — объект Database Комментарий Создает новое сохраненное определение запроса (объект QueryDef). • Если параметр Имя не указан, запрос не будет сохранен. Пример Dim QD As QueryDef Dim DB As Database 'Открыть базу данных Set DB = OpenDatabase("C:\Data\Exmpll.mdb") 'Запустить определение запроса SQLStr = _ "SELECT [Art - Num], [ArtName] FROM Art" Set QD = DB.CreateQueryDef("QD1", SQLStr) CreateTabtaDef'HMK. Атрибуты, Чсточник, Подключен^ Параметр Назначение Имя Имя нового объекта TableDef Атрибуты Константа или сумма констант, задающая одну или несколько характеристик нового объекта TableDef Источник Задает имя таблицы внешней базы данных, яв- ляющейся источником данных Подключение Содержит информацию об источнике данных от- крытой базы данных, о базе данных, используе- мой в запросе к серверу, или о присоединенной таблице
10.5. База данных — объект Database 755 Комментарий Создает новый объект TableDef. • После создания новой таблицы ее необходимо включить в коллекцию TableDefs с помощью метода Append. Пример Dim TDef As TableDef Dim DB As Database 'Открыть базу данных Set DB = OpenDatabase("C:\Data\Exmpll.mdb") 'Создать новую таблицу Set TDef = DB.CreateTableDef("NewTablel") 'Создать в новой таблице два поля With TDef .Fields.Append .CreateField("LsDeb", dbLong) .Fields.Append .CreateField("Sum", dbCurrency) End With 'Включить новую таблицу в базу данных DB.TableDefs.Append TDef OpenFtecordse Источник, Turn, Параметры, блокировки) Параметр Назначение Источник Имя таблицы, запроса или инструкция SQL, кото- рая возвращает записи Тип Константа, указывающая тип открываемого объек- та Recordset Параметры Произвольная комбинация констант, задающих характеристики нового объекта Recordset Блокировки Константа, определяющая тип блокировки объек- та Recordset
756 10.5. База данных — объект Database Комментарий Создает новый объект Recordset. Пример Dim RecSet As Recordset Dim DB As Database 1 Открыть базу данных Set DB = OpenDatabase("C:\Data\Exmpll.mdb") 'Открыть как таблицу и сообщить число записей Set RecSet = DB.OpenRecordset("Art", dbOpenTable) MsgBox RecSet.Recordcount 10.5.3. Пример Процедура, код которой приведен ниже, создает таблицу из двух полей и включает ее в состав существующей базы дан- ных. Затем из таблицы проводок удаляется часть записей, а содержимое оставшихся выводится на экран. Sub JetConnection() Const DBName = "C:\data\Exmpll.mdb" Dim DB As Database Dim Booking As Recordset Dim NewTab As TableDef Dim SQLKill As String Dim Message As String 'Открыть базу данных Set DB = OpenDatabase(DBName)
10.5. База данных — объект Database 757 'Создать таблицу Set NewTab = DB.CreateTableDef ("State") 'Создать в новой таблице два поля With NewTab .Fields.Append .CreateField("LsDeb", dbLong) .Fields.Append .CreateField("Sum", dbCurrency) End With 'Включить новую таблицу в базу данных DB.TableDefs-Append NewTab 'Удалить все выполненные проводки SQLKill = "DELETE * FROM CountsBooking " & "WHERE CountsBooking!Done=True" DB.Execute SQLKill, dbSeeChanges _ + dbFailOnError 'Доступ к оставшимся записям, как к таблице Set Booking = DB.OpenRecordset _ ("CountsBooking") 'Прочитать и отобразить оставшиеся записи With Booking .MoveFirst Message = "Дебет" & vbTab & "Кредит" _ & vbTab & "Сумма" & vbCr Do Until .EOF Message = Message & !LsDeb & vbTab _ & !LsCred & vbTab & !Sum & vbCr .MoveNext Loop End With MsgBox Message 'Закрыть базу данных DB.Close End Sub
758 10.6. Запросы — объект QueryDef 10.6. Запросы — объект QueryDef Объект QueryDef представляет запрос к базе данных — это может быть Сохраненное определение запроса (для баз дан- ных Microsoft Jet) или временное определение запроса (для рабочей области ODBCDirect). 1 0.6.1. Свойства DateCraated Возвращает дату создания запроса. Пример Dim QD As QueryDef Dim DB As Database 'Открыть базу данных и запрос Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set QD = DB.QueryDefs("QD1") MsgBox QD.DateCreated L&stUpdatati ' Возвращает значение даты-времени последней модифи- кации запроса. Пример Dim QD As QueryDef Dim DB As Database 'Открыть базу данных и запрос Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set QD = DB.QueryDefs("QD1") MsgBox QD.LastUpdated
10.6. Запросы — объект QueryDef 759 SOL Содержит SQL-выражение, которое определяет запрос. Пример Dim QD As QueryDef Dim DB As Database 'Открыть базу данных и запрос Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set QD = DB.QueryDefs("QD1") MsgBox QD.Sql Updatable -‘‘i Разрешает (True) или запрещает (False) модификацию за- проса. Пример Dim QD As QueryDef Dim DB As Database 'Открыть базу данных и запрос Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set QD = DB.QueryDefs("QD1") If QD.Updatable Then MsgBox "Запрос доступен для модификации" End If
760 10.6. Запросы — объект QueryDef 10.6.2. Методы OpanftecurcfsfctfMcruMHMK, Тил, Лараматры, Блокировки) Параметр Назначение Источник Имя таблицы, запроса или инструкция SQL, кото- рая возвращает записи Тип Константа, указывающая тип открываемого объек- та Recordset Параметры Произвольная комбинация констант, задающих характеристики нового объекта Recordset Блокировки Константа, определяющая тип блокировки объек- та Recordset Комментарий Возвращает новый набор записей как результат выполне- ния запроса к базе данных. Пример Dim Con As Connection Dim QDTitle As QueryDef Dim RSJobs As Recordset 'Запустить определение запроса Set QDTitle = Con.CreateQueryDef ("QD1", "SELECT Title FROM Titre") Set RSJobs = QDTitle.OpenRecordset()
10.7. Набор записей — объект Recordset 761 10.7. Набор записей — объект Recordset Объект Recordset представляет набор записей в основной таблице или набор записей, который получается в результате выполнения запроса. Каждый объект Recordset состоит из записей (строк) и полей (столбцов). Существуют объекты Re- cordset пяти типов: Тип набора Описание Table Программное представление основной (физиче - ской) таблицы - только в рабочей области Mic- rosoft Jet Dynaset Динамический набор записей - набор обновля - емых записей, полученный в результате выпол - нения запроса. В объекте Recordset этого типа могут содержаться поля из одной или несколь - ких таблиц базы данных Snapshot Статический набор записей — статическая копия набора записей, используемая для поиска дан - ных или создания отчетов. Не допускает обнов- ления полей Forward Статический набор записей с последовательным доступом - аналогичен статическому набору за - писей с тем лишь исключением, что в нем отсут- ствует указатель. Пользователь имеет возмож ность перемещаться по набору только вперед Dynamic Результирующий набор записей запроса по од- ной или нескольким основным таблицам, в ко- тором допускается добавление, изменение или удаление записей. В таком объекте Recordset отображаются записи, добавляемые, удаляемые или изменяемые в основных таблицах другими пользователями
762 10.7. Набор записей — объект Recordset 10.7.1. Свойства AbsolutePositlon Возвращает абсолютный номер текущей записи. Пример 'Открыть базу данных и набор записей Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set RecSet = DB.OpenRecordset("Title", _ dbOpenSnapshot) MsgBox RecSet.AbsolutePosition aoF Возвращает булево True в ситуации, когда указатель теку- щей записи оказывается в позиции перед первой записью набора Recordset. Пример 'Открыть базу данных и набор записей Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set RecSet = DB.OpenRecordset("Title", dbOpenSnapshot) 'Установить указатель перед первой записью If Not RecSet.BOF Then RecSet-MoveFirst RecSet.MovePrevious End If
(gOlPfeWliW 10.7. Набор записей — объект Recordset 763 EOF Возвращает булево True в ситуации, когда указатель теку- щей записи оказывается в позиции после последней запи- си набора Recordset. Пример 'Открыть базу данных и набор записей Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set RecSet = DB.OpenRecordset("Title", _ dbOpenSnapshot) 'Просмотреть все записи и сообщить 'значения поля Name RecSet.MoveFirst Do While Not RecSet.EOF ArtName = ArtName & RecSet.Fields _ ("Name").Value & vbCr RecSet.MoveNext Loop MsgBox ArtName LockEdits Задает или возвращает значение, определяющее режим блокировки, который будет действовать при изменении записей. Пример 'Открыть базу данных и набор записей Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set RecSet = DB.OpenRecordset("Title", dbOpenTable)
764 10.7. Набор записей — объект Recordset 'Режим нежесткой блокировки. 'Содержащая запись страница 'размером 2К не будет заблокирована до вызова 'метода Update. RecSet.LockEdits = False °ercentPosition Задает или возвращает значение, указывающее пример- ное положение текущей записи в объекте Recordset, из- меряемое в процентах от общего числа записей набора. Пример 'Открыть базу данных и набор записей Set DB = OpenDatabase("C:\Data\Exmpll.mdb") Set RecSet = DB.OpenRecordset("Title", dbOpenTable) 'Поместить указатель в середину набора RecSet.PercentPosition = 50 Rr CordCount Возвращает число записей в наборе. Пример 'Открыть базу данных и набор записей Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set RecSet = DB.OpenRecordset("Title", dbOpenTable) 'Сообщить число записей в наборе MsgBox RecSet.Recordcount
10.7. Набор записей — объект Recordset 765 Sort Определяет порядок сортировки записей — строковое вы- ражение, задающее порядок сортировки по правилам SQL- инструкции ORDER BY без ключевых слов ORDER BY. Пример 'Открыть базу данных и набор записей Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set RecSet = DB.OpenRecordset("Title", _ dbOpenSnapshot) 'Сортировать по имени и фамилии RecSet.Sort = "Имя, Фамилия" Transactions Возвращает булево True, если набор поддерживает тран- закции, и False в противном случае. Пример 'Открыть базу данных и набор записей Set DB - OpenDatabase("С:\Data\Exmpll.mdb") Set RecSet = DB.OpenRecordset("Title", dbOpenTable) If Not RecSet.Transactions Then MsgBox "Набор не поддерживает транзакции." End If UpdataMu__________________ Возвращает булево True, если набор допускает модифи- кацию записей, и False в противном случае.
766 10.7. Набор записей — объект Recordset Пример 1 Открыть базу данных и набор записей Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set RecSet = DB.OpenRecordset("Title", dbOpenTable) If Not RecSet.Updatable Then MsgBox "Данные недоступны для модификации" End If 10.7.2. Методы ACdNevt Комментарий Создает новую запись в обновляемом объекте Recordset. Пример 'Открыть базу данных и набор записей Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set RecSet = DB.OpenRecordset("Title", dbOpenTable) 'Создать новую запись и заполнить ее With RecSet .AddNew !Name = "Красный перец" .Update End With
10.7. Набор записей — объект Recordset 767 Close Комментарий Закрывает набор записей. Пример RecSet.Close delete. Комментарий Удаляет текущую запись набора. Пример 'Открыть базу данных и набор записей Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set RecSet = DB.OpenRecordset("Title", dbOpenTable) 'Удалить запись 77 With RecSet .Move 77 .Delete End With edit Комментарий Копирует текущую запись из обновляемого объекта Recor- dset в буфер копирования для последующего изменения. • После вызова метода Edit все изменения, внесенные в поля текущей записи, помещаются в буфер копирова-
768 10.7. Набор записей — объект Recordset ния. После того как все необходимые изменения будут внесены, следует вызвать метод Update для сохранения изменений. Пример 'Открыть базу данных и набор записей Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set RecSet ~ DB.OpenRecordset("Title", dbOpenTable) 'Изменить запись 6 With RecSet .Move 6 .Edit !RecState = 0 !DoneRec = True .Update End With FindFirst Условие Параметр Назначение Условие Строка, определяющая условие поиска (аналогич - на SQL-выражению WHERE без ключевого слова WHERE) Комментарий Находит в объекте Recordset типа динамических и стати- ческих наборов записей первую, удовлетворяющую задан- ным условиям, и делает эту запись текущей.
10.7. Набор записей — объект Recordset 769 Пример 'Открыть базу данных и набор записей Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set RecSet = DB.OpenRecordset("Title", dbOpenSnapshot) With RecSet .FindFirst "GoodsAtStocks > 100" MsgBox IName & " " & !GoodsAtStocks End With Find Last Услочие Параметр Назначение Условие Строка, определяющая условие поиска (аналогична SQL-выражению WHERE без ключевого слова WHERE) Комментарий Находит в объекте Recordset типа динамических и стати- ческих наборов записей последнюю, удовлетворяющую заданным условиям, и делает эту запись текущей. Пример 'Открыть базу данных и набор записей Set DB - OpenDatabase("С:\Data\Exmpll.mdb") Set RecSet = DB.OpenRecordset("Title", dbOpenSnapshot)
770 10.7. Набор записей — объект Recordset With RecSet . FindLast "GoodsAtStocks > 100" MsgBox IName & " " & !GoodsAtStocks End With FindNext Условие Параметр Назначение Условие Строка, определяющая условие поиска (аналогич - на SQL-выражению WHERE без ключевого слова WHERE) Комментарий Находит в объекте Recordset типа динамических и стати- ческих наборов записей следующую, удовлетворяющую заданным условиям, и делает эту запись текущей. Пример 'Открыть базу данных и набор записей Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set RecSet = DB.OpenRecordset("Title", dbOpenSnapshot) 'Показать названия всех товаров, имеющихся 'на складе в количестве, превышающем 100 штук With RecSet .FindFirst "GoodsAtStocks > 100" Do Until .NoMatch FStr = FStr & IName & " " & !GoodsAtStocks & vbCr .FindNext "GoodsAtStocks > 100" Loop End With MsgBox Fstr
10.7. Набор записей — объект Recordset 771 FindPrevkius Услиние Параметр Назначение Условие Строка, определяющая условие поиска (аналогична SQL-выражению WHERE без ключевого слова WHE- RE) Комментарий Находит в объекте Recordset типа динамических и стати- ческих наборов записей предыдущую, удовлетворяющую заданным условиям, и делает эту запись текущей. Пример 'Открыть базу данных и набор записей Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set RecSet = DB.OpenRecordset("Title", dbOpenSnapshot) 'Показать названия всех товаров, имеющихся 'на складе в количестве, превышающем 100 штук With RecSet .FindLast "GoodsAtStocks > 100" Do Until .NoMatch FStr = FStr S !Name & " " & '.GoodsAtStocks & vbCr .FindPrevious "GoodsAtStocks > 100" Loop End With MsgBox Fstr
(gOlPfeWliW 772 10.7. Набор записей — объект Recordset иеГЯаиоГЧислоСомж) Параметр Назначение ЧислоСтрок Число строк из объекта Recordset, подлежащих за- грузке в массив Комментарий В Возвращает двумерный массив, состоящий из заданного числа строк (записей) объекта Recordset. • Возвращаемое методом значение должно присваивать- ся переменной типа Variant. • Первый индекс возвращаемого массива определяет стол- бец (поле), а второй — номер строки (записи). Пример Dim DBRows As Variant 'Открыть базу данных и набор записей Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set RecSet = DB.OpenRecordset("Title", dbOpenSnapshot) 'Скопировать в массив первые 100 записей DBRows = RecSet.GetRows(100) 'Поместить данные в текущий лист рабочей книги For I = 0 То Ubound(DBRows, 2) For J = 0 То Ubound(DBRows, 1) ActiveSheet.Cells (I + 1, J + 1) = DBRows(J, I) Next Next
(gOlPfeWliW 10.7. Набор записей — объект Recordset 773 Move Строки, Начало Параметр Назначение Строки Число строк, на которые требуется переместить указатель Начало Определяет закладку, указывающую на запись, на- чиная с которой следует отсчитывать число запи - сей, на которые требуется переместить указатель (отсчет по умолчанию — с текущей записи) Комментарий Перемещает указатель текущей записи на заданное число записей. Пример 'Открыть базу данных и набор записей Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set RecSet = DB.OpenRecordset("Title", dbOpenSnapshot) 'Переместить указатель на 5 записей вперед RecSet.Move 5 MoveFIrst Комментарий Помещает указатель на первую запись набора. Пример 'Открыть базу данных и набор записей Set DB = OpenDatabase("С:\Data\Exmpll.mdb")
774 10.7. Набор записей — объект Recordset Set RecSet = DB.OpenRecordset("Title", dbOpenSnapshot) 'Просмотреть все записи и сообщить 'значения поля Name RecSet.MoveFirst Do While Not RecSet.EOF ArtName = ArtName & RecSet.Fields("Name") .Value & vbCr RecSet-MoveNext Loop MsgBox ArtName MoveLast Комментарий Помещает указатель на последнюю запись набора. Пример 'Открыть базу данных и набор записей Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set RecSet = DB.OpenRecordset("Title", dbOpenSnapshot) 'Просмотреть все записи и сообщить 'значения поля Name RecSet.MoveLast Do While Not RecSet.BOF ArtName = ArtName & RecSet.Fields ("Name"). Value & vbCr RecSet.MovePrevious Loop MsgBox ArtName
10.7. Набор записей — объект Recordset 775 MoveNext Комментарий Перемещает указатель на следующую запись набора. Пример 'Открыть базу данных и набор записей Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set RecSet = DB.OpenRecordset("Title", dbOpenSnapshot) 'Просмотреть все записи и сообщить 'значения поля Name RecSet-MoveFirst Do While Not RecSet.EOF ArtName = ArtName & RecSet.Fields("Name") .Value & vbCr RecSet.MoveNext Loop MsgBox ArtName McvePrevious Комментарий Перемещает указатель на предыдущую запись набора. Пример 'Открыть базу данных и набор записей Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set RecSet = DB.OpenRecordset("Title", _ dbOpenSnapshot) 'Просмотреть все записи и сообщить значения поля Name
776 10.7. Набор записей — объект Recordset RecSet.MoveLast Do While Not RecSet.BOF ArtName = ArtName & RecSet.Fields("Name") .Value & vbCr RecSet.MovePrevious Loop MsgBox ArtName UpdatefTun, Режим) Комментарий Сохраняет содержимое буфера копирования в обновляе- мом объекте Recordset. Параметр Назначение Тип Константа, задающая тип обновления (только в ра - бочей области ODBCDirect) Режим Значение типа Boolean, указывающее, следует ли принудительно обновлять базу данных, вне зависи - мости от изменения другим пользователем данных в базовых источниках после вызова методов Ad - dNew, Delete или Edit Пример 'Открыть базу данных и набор записей Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set RecSet = DB.OpenRecordset("Title", dbOpenTable) 'Создать новую запись и заполнить ее With RecSet .AddNew IName = "Красный перец" .Update End With
(gOlPfeWliW 10.8. Таблицы — объект TableDef 777 10.8. Таблицы — объект TableDef Объект TableDef (таблица) представляет сохраненное опре- деление основной таблицы или присоединенной таблицы (то- лько в рабочей области Microsoft Jet). 10.8.1. Свойства UattfCrcateif Возвращает дату создания сохраненного определения таб- лицы. Пример Dim TDef As TableDef Dim DB As Database 1 Открыть базу данных и определение таблицы Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set TDef = DB.TableDefs("Title") MsgBox TDef.DateCreated HejjrdCaunt Возвращает число записей, содержащихся в таблице. Пример Dim TDef As TableDef Dim DB As Database 'Открыть базу данных и определение таблицы Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set TDef = DB.TableDefs("Title") MsgBox TDef.RecordCount
778 10.8. Таблицы — объект TableDef 10.8.2. Методы CreateFieldfHM^Tnp, Размер) Комментарий Создает новое поле (объект Field). • В качестве констант, определяющих тип поля, могут быть использованы константы dbBiglnt, dbBinary, dbBoolean, dbByte, dbChar, dbCurrency, dbDate, dbDecimal, dbDouble, dbGUID, dblnteger, dbLong, dbLongBinary, dbMemo, dbSin- gle, dbText и dbTime. Параметр Назначение Имя Имя нового поля (объекта Field) Тип Константа, определяющая тип данных нового объ - екта Field Размер Выражение, определяющее в байтах максимальный размер объекта Field, содержащего текстовые зна- чения Пример Dim TDef As TableDef Dim DB As Database 'Открыть базу данных и определение таблицы Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set TDef = DB.TableDefs("Title") 'Создать текстовое поле длиной 25 символов TBDef.Fields.Append TDef.CreateField("Dscr" , dbText, 25)
10.8. Таблицы — объект TableDef 779 СгезМпОех(Ими) Параметр Назначение Имя Имя создаваемого индекса Комментарий Создает новый индекс (объект Index). Пример Dim TDef As TableDef Dim DB As Database Dim Newldx As Index 'Открыть базу данных и определение таблицы Set DB = OpenDatabase("С:\Data\Exmpll.mdb") Set TDef = DB.TableDefs("Title") 'Создать индекс по полю Dscr Set Newldx = TDef.Createlndex("Dscrldx") With Newldx .Fields.Append .CreateField("Dscr") End With TDef.Indexes-Append Newldx 10.8.3. Пример Sub CreateNewTable() Const DBName = "C:\Data\Exmpll.mdb" Dim DB As Database Dim NewTab As TableDef 'Открыть базу данных Set DB = OpenDatabase(DBName) 'Создать таблицу Persons Set NewTab = DB.CreateTableDef("Persons")
(gOlPOMW 780 10.9. Поле данных — объект Field ’Создать поля With NewTab .Fields.Append .CreateField("Name", dbText, 30) .Fields.Append .CreateField("Surname" , dbText, 30) .Fields-Append .CreateField("Street", dbText, 30) .Fields.Append .CreateField("ZIP", dbLong) .Fields.Append .CreateField("City", dbText, 50) .Fields.Append .CreateField("BirtDay", dbDate) End With 'Включить новую таблицу в состав базы данных DB.TableDefs.Append NewTab 'Закрыть базу данных DB.Close End Sub 10.9. Поле данных — объект Field Объект Field (поле) представляет столбец данных одного типа, обладающий общим набором свойств. Полями обладают объ- екты TableDef, Recordset и QueryDef. 10.9.1. Свойства AII'iwZvroL ^ngth Для полей с типом данных Text или Мето разрешает (True) или запрещает (False) полю содержать пустую строку. Пример Dim Fid As Field Set Fid = TDef.Fields("Dscr") Fld.AllowZeroLength = True
10.9. Поле данных — объект Field 781 CtefaultVatee Определяет значение по умолчанию. Пример Dim Fid As Field Set Fid = TDef.Fields("PhNum") Fid.Defaultvalue = "000-00-00" Имя поля. Пример Dim Fid As Field Set Fid = TDef.Fields("Dscr") Fid.Name = "Description" Required Определяет, что поле должно (True) содержать непустое (не Null) значение. Пример Dim Fid As Field Set Fid = TDef.Fields("Dscr") Fid.Required = True
Приложение Указатель терминов Visual Basic Термин Термин в оригинале Варианты термина «перетащить и оста- вить» (метод) Drag&Drop «тащи и бросай» (тех- нология) выключатель ToggleButton кнопка-выключатель графический образ Image рисунок, точечный ри- сунок группа Frame рамка дата _ в _число- вом_формате Date код дата-время закрепление окон Docking парковка окон инструкция Statement оператор исходный текст Code программа, програм- мный код кнопка CommandButton командная кнопка кнопка-выключатель ToggleButton выключатель код дата-время Date дата_В-Число- вом_формате код Code программа, програм- мный код, исходный текст
Указатель терминов Visual Basic 783 Термин Термин в оригинале Варианты термина коллекция Collection семейство командная кнопка CommandButton кнопка комбинированное поле ComboBox поле со списком набор вкладок MultiPage набор страниц набор страниц MultiPage набор вкладок надпись Label этикетка оператор Statement инструкция панель инструментов Tool Bar линейка инструментов панель состояния StatusBar строка состояния, па- нель статуса панель элементов Tool Box коллекция инструмен- тов парковка окон Docking закрепление окон переключатель OptionButton позиция переключате- ля позиция переключателя OptionButton переключатель поле TextBox текстовое поле ввода поле со списком ComboBox комбинированное поле поле списка ListBox список поле флажка CheckBox флажок программа Code код, программный код, исходный текст рамка Frame группа
784 Указатель терминов Visual Basic Термин Термин в оригинале Варианты термина рисунок Image графический образ, точечный рисунок семейство Collection коллекция список ListBox поле списка текстовое поле ввода TextBox поле управляющий элемент Control элемент управления, объект управления флажок CheckBox поле флажка форма Form экранная форма, фор- муляр экранная форма Form форма, формуляр элемент управления ActiveX ActiveX ActiveX-элемент, осно- ванный на технологии ActiveX управляющий элемент элемент управления Control управляющий эле- мент, объект управле- ния этикетка Label надпись
Windows ХР Office ХР Word 2002 Excel 2002 Access 2002 AutoCAD 2002 MS Internet Explorer 6.0 Visual Basic 7.0 Visual C ++ 7.0 c / c ++ / c VBA 6.3