2 каким образом vba позволяет управлять приложением
Любая система программирования, помимо основной части — транслятора (то есть компилятора или интерпретатора) языка программирования, должна включать среду программирования, обеспечивающую автоматизированную разработку и выполнение программ на данном языке, и подготовку соответствующей документации. Как правило, все современные системы программирования имеют хороший инструментарий для корректного напи сания программы, ее форматирования, редактирования и отладки, встроенный в удобный и интуитивно понятный интерфейс, способствующий всесторонней поддержке программирования.
В этом разделе мы рассмотрим редактор VBA, работу со справочной системой и, наконец, расскажем о ведении проекта, его свойствах и интеграции с другими проектами.
Итак, вся разработка и отладка программ ведется с помощью Редактора Visual Basic (Visual Basic Editor, VBE). Запуск редактора для приложений Microsoft Office осуществляется следующим образом > Сервис > макрос > Редактор visaul Basic (<Alt>+<F11>) (см. раздел 21.1 "Общие положения").
Обычно в окне редактора используются три панели (три отдельных окна). На самом деле окон может быть и больше и меньше, и скоро вы узнаете обо всех, но это — основные окна, открывающиеся по умолчанию (рис. 20.2):
- Project (Окно проекта);
- Properties (Окно свойств);
- Code (Окно кода).
Итак, первое окно, которое мы рассмотрим, — окно проекта, обычно располагающееся в верхнем левом углу редактора (рис. 20.3). Если оно не активно, выберите команду > view > Project Explorer либо нажмите комбинацию клавиш <Ctrl>+<R>.
В окне проекта отображается иерархическое дерево проектов приложения и модулей этих проектов с их элементами. О проектах VBA будет более подробно рассказано чуть ниже, сейчас же мы рассмотрим лишь возможности редактора.
В нашем случае в окне проекта открыт только один проект — Проект 1.
Каждый проект содержит пять папок с модулями:
- Microsoft Outlook Objects — папка с объектом приложения ThisOutlookSession;
- Forms — папка содержит пользовательские модули форм (userForm. — см. главу 22 "Разработка приложения")',
- Modules — папка содержит стандартные модули пользователя;
- Class Modules — папка содержит пользовательские модули классов;
- References — папка содержит ссылки на объекты из внешних библиотек и список модулей этих библиотек.
Если окно кода не активно, выберите команду > View > Code или нажмите клавишу <F7>.
Рис. 20.2. Редактор Visual Basic for Application
О добавлении, удалении и переименовании модулей в проекте будет рассказано ниже.
Помимо области, где отображаются документы, на панели проекта располагаются три кнопки.
- View Code. После нажатия на данную кнопку указатель перемещается в окно кода, где отображается код выделенного объекта.
- View Object. При нажатии этой кнопки показывается реализация выделенного объекта. Например, если выделен Лист2, то при нажатии кнопки View Object вы увидите второй лист рабочей книги Excel.
- Toggle Folders. При нажатой кнопке отображаются элементы проекта в соответствующих кнопках, при отжатой — элементы проекта располагаются просто в алфавитном порядке.
Перейдем теперь к рассмотрению окна свойств, обычно располагающегося под окном проектов. Данное окно позволяет просматривать и изменять свойства различных объектов, входящих в проект. Для отображения свойств объекта его необходимо выделить. Объект можно выделить на панели проектов, на пользовательской форме. Кроме того, можно выделять объекты, подчиненные выделенным объектам. Так, например, для модуля доступно только свойство Name. Более эффективен этот прием при работе с многочисленными объектами, подчиненными пользовательским формам.
Чтобы изменить значение свойства объекта, необходимо: Выделить имя свойства в левой колонке.
Изменить значение этого свойства в правой колонке либо введя его с клавиатуры, либо выбрав из раскрывающегося списка.
Безусловно, окно свойств — очень полезный инструмент, поскольку сразу видны почти все свойства объекта и их допустимые значения. Но изменение свойств объекта посредством панели статично и не обладает программной динамикой. Подобная панель удобна для задания начальных или постоянных значений свойств объекта, таких как имя листа или цвет пользовательской формы. Мы изменили имя первого модуля Moduiei на Test (рис. 20.3).
Рис. 20.2. Окно проекта
Рис. 20.3. Окно свойств
Кстати, свойства можно отображать как в алфавитном порядке, так и по категориям, посредством выбора соответствующих вкладок Alphabetic или Categorized. Следующая рассматриваемая нами панель — панель кода. Это окно занимает большую часть экрана. Данная панель — это не просто "чистый лист", предназначенный для ввода кода, а специализированный высокоинтеллектуальный текстовый редактор, существенно облегчающий введение, форматирование и редактирование кода VBA. Окно кода напрямую связано с модулем проекта и открывается при двойном щелчке мышью по необходимому модулю в окне проекта.
Вообще говоря, окно кода является "многодокументным", т. е. можно открыть одновременно несколько окон данного типа для разных модулей. На рис. 20.10 каскадно отображены три окна трех модулей соответственно. Для изменения отображения окон можно воспользоваться командами меню Window.
Здесь мы опишем главные возможности редактора кода VBA:
- Автоматическое завершение ввода стандартных лексем языка. Например, после ввода ключевого слова sub имяПроцедуры и нажатия клавиши <Enter> VBA автоматически добавляет скобки и строку End Sub.
- Автоматическое выравнивание и отступ. К примеру, после ввода оператора присваивания р=р+1 и нажатия клавиши <Enter> редактор вставит пробелы: р = р + 1.
- Автоматическое выделение цветом лексических и синтаксических конструкций. Ключевые слова VBA выделяются синим цветом, ошибочные конструкции — красным, а комментарии — зеленым.
- Автоматическая проверка правильности семантики и синтаксиса конструкций. Если вы введете inputBox () и забудете присвоить значение этой функции переменной (потеря семантики), автоматически появится предупреждение об ошибке.
- Автоматический вывод списка компонентов. .Позволяет избежать ошибок при вводе наименований свойств объектов, встроенных констант, типов переменных. Особенно полезна эта функция при установке свойств объекта, т. к. дает возможность не только вспомнить правильное имя свойства, но и увидеть, какие свойства объекта доступны в данный момент.
- Автоматический вывод кратких сведений. Показывает в виде подсказки синтаксис встроенных процедур и функций. По мере ввода очередной параметр выделяется жирным шрифтом.
Если вы тестировали примеры предыдущего раздела, то не раз должны были встречаться со всеми свойствами редактора. Неправда ли, он умен? Но это только внутренняя часть окна кода, рассмотрим теперь его интерфейс.
В левом верхнем углу окна кода размещается раскрывающийся список Object (Объект), содержащий объекты выделенного модуля. Понятно, что для стандартного модуля этот список отсутствует, но, скажем, для модуля Этакнига данный список содержит объект workbook, для которого можно написать процедуры реакции на событие. Но и тут "умное" окно кода приходит на помощь. В правом верхнем углу в раскрывающемся списке Procedure (Процедура) содержатся все стандартные процедуры реакции на события для этого объекта. В случае со стандартным модулем этот список содержит все процедуры модуля, а также общий раздел объявлений Declarations (Объявления), в котором описываются переменные уровня модуля. При этом, выбрав одну из процедур в этом списке, вы автоматически попадете на ее начало.
С помощью кнопок в левом нижнем углу окна можно выбрать один из двух видов представления кода в окне:
- представление процедуры, когда в окне отображается только выбранная процедура;
- представление полного модуля, когда в окне отображается сразу несколько процедур, которые отделены друг от друга тонкой линией (см. рис. 20.4).
Рис. 20.4. Окно кода
Для более детальной настройки интерфейса всегда можно воспользоваться диалоговым окном Options (Опции) меню Tools (Инструменты). В нем вам предоставляется возможность изменить такие установки, как автоматическая проверка и помощь при вводе кода, разделение процедур тонкой чертой, изменение параметров шрифта кода, размещение окон редактора и т. д. Настройка редактора достаточно проста, и мы не будем подробно ее описывать. Если же у вас возникнут вопросы по назначению того или иного параметра, вы всегда можете обратиться к справочной системе VBA, о работе с которой и пойдет сейчас речь.
Современные системы программирования отличаются от систем программирования прежних лет:
- очень богатым набором готовых программных компонент, которые можно использовать в программах (об этом пойдет речь в главе 21 "Объектная модель Outlook 2002");
- очень развитой системой получения информации о среде программирования непосредственно из самого редактора (об этом рассказывается в настоящем разделе).
Нельзя объять необъятное, а точнее, невозможно (да и не нужно) в рамках этой книги описать весь VBA. Наша цель, как было сказано, краткое изложение полного вводного курса в VBA. Однако всего не опишешь. Поэтому мы советуем вам за ответом на тот или иной появившейся вопрос обращаться к встроенной справочной системе VBA. Умение пользоваться ею — это необходимое условие работы программиста и, мы думаем, не стоит уделять внимание обсуждению вопроса, насколько необходимо это условие, ибо без навыков работы со справочной системой невозможно быстрое и полноценное программирование.
Help > Справка по Microsoft Visual Basic
Давайте рассмотрим работу со справочной системой на примере поиска информации об объекте Application. Поиск требуемой информации мы начали с вывода объектной модели Microsoft Outlook. Ее диаграмма, содержащая объект Application и подчиненные объекты, дает общее представление о составе и структуре объектной модели приложения и позволяет получить справку о каждом объекте (рис. 20.5). На этой диаграмме представлены объекты и семейства объектов в виде прямоугольников разного цвета (голубого и желтого, соответственно). Для семейства, кроме имени в скобках, указано имя объекта — элемента семейства. Иногда справа от прямоугольников отображается значок красной стрелки. Щелчок по ней позволяет спуститься на более низкие уровни иерархии объектов; щелчок по любому из прямоугольников — получить справку по этому объекту.
Пример 20.3. Получение справки
Выберите действие := Outlook Objects Найти
Выберите раздел := Microsoft Outlook Objects
Рис. 20.5. Окно справки с объектной моделью Microsoft Outlook
Мы рассмотрели вариант получения информации об объектной модели и ее элементах с помощью справочной системы, но помимо этого существует специальный помощник — гид в мире объектов приложений — Object Browser (Окно просмотра объектов). Окно просмотра объектов представляет собой специальное средство редактора Visual Basic, позволяющее просматривать содержимое библиотек объектов и производить поиск справочной информации о предоставляемых ими объектах.
Пример 20.4. Запуск Object Browser
View > Object Browser
Окно просмотра объекта состоит из нескольких частей:
- Поле со списком Project/Library (Проект/Библиотека), расположенное в верхнем левом углу окна. Этот список предназначен для выбора одной из библиотек открытого проекта приложения. В нем отображаются только те библиотеки, на которые были установлены ссылки в приложении.
Рис. 20.6. Окно просмотра объектов
- Поле со списком Search Text (Образец поиска), расположенное под списком Project/Library. Позволяет ввести текст для поиска компонентов в доступных библиотеках. После ввода образца поиска необходимо нажать кнопку Search (Поиск). Так, например, на рис. 20.6 отображен результат поиска по слову Application для всех доступных библиотек приложения Outlook.
- Окно Search Result (Результат поиска). В этом окне отображается результат поиска в трех списках: Library (Библиотека), Class (Класс) и Member (Компонент). Каждый элемент списка соответствует найденному компоненту — классу или элементу класса, и содержит (справа налево) название найденного компонента, название класса, которому принадлежит этот компонент, и название библиотеки, которой принадлежит этот класс. Поиск по образцу происходит без учета регистра. Для обозначения типа компонента объектной модели в Microsoft Office введена специальная система значков, представленная на рис. 20.7.
Рис. 20.7. Значки типов компонентов объектной модели
Закончим рассказ об Object Browser получением справки о методе persInit нашего класса Person. Конечно, вы сможете получить эту информацию только, если документ с определением класса активен. Заметьте, что классы и методы пользователя выделяются жирным шрифтом.
Пример 20.5. Поиск в Object Browser
Project/Library All Libraries
Search Text := persinit
После этого в окне Details появится описание нашего метода.
Справочная система — очень сильное оружие, но в некоторых руках оно может быть неэффективным если пользователь не знает, где и что искать. Мы.советуем вам посвятить несколько часов своеобразной тренировке по поиску той или иной информации. Это поможет попять работу справки — куда она ссылается, какой род информации выдает и т. д. Умение правильно ставить вопрос и отсекать ненужные ссылки — очень большой плюс при работе со справкой.
Перейдем к следующему объекту рассмотрения, регламентированному в начале раздела, — проекту. Как уже упоминалось, проект — это набор программных модулей, связанных с основным документом приложения (см. "Разработка приложения"). Сейчас мы рассмотрим работу с проектами. Расскажем о свойствах проекта, о том, как манипулировать структурой проекта и как управлять проектами в многодокументных приложениях.
В начале этого раздела мы говорили, что проект состоит из модулей разных типов, но не говорили о том, как добавить модуль, удалить его или переименовать.
Добавление модуля в проект осуществляется следующим образом:
Пример 20.6. Добавление модуля
Для удаления какого-либо модуля из проекта необходимо его сначала выделить. При удалении модуля появится диалоговое окно, предлагающее перед удалением экспортировать модуль. Об экспорте и импорте модулей будет рассказано ниже.
Пример 20.7. Удаление модуля
> File > Remove Module Нет
Помимо вышеприведенных способов добавления и удаления модулей существует еще один, и на наш взгляд, более естественный способ. Для добавления (удаления) модуля необходимо в окне проекта выполнить следующую последовательность действий:
> (Forms | Module | Class Module>
При создании нового модуля ему присваивается имя модульы, где N — порядковый номер этого модуля. Аналогичная ситуация происходит при автоматической записи макросов, где модулю, содержащему макрос, присваивается имя NewMacros. Подобное наименование не несет никакой информативной нагрузки о содержании модуля, поэтому мы советуем всегда переименовывать стандартные имена модулей.
Пример 20.8. Переименование модуля
Name := <Новое имя модуля>
После того как мы освоили создание и удаление модулей, давайте рассмотрим, для чего же они предназначены.
- Модуль объекта приложения. Модули этого типа всегда связаны с объектами, реагирующими на события. Главное назначение подобных модулей состоит в том, что они содержат заготовки процедур реакций на события. Так, например, в Excel модуль ЭтаКнига содержит объект workBook, с которым связаны события ОТ Activate ДО WindowResize.
- Стандартный модуль. В модулях этого типа следует размещать обычные процедуры и функции. Как правило, это наиболее часто используемый тип модуля. При наличии большого количества процедур разумно иметь не один большой модуль, а несколько маленьких, содержащих процедуры и функции одной тематической направленности.
- Модуль класса. Это специальный тип модуля, в котором следует размещать код пользовательских классов.
- Модуль пользовательской формы. В этих модулях содержатся пользовательские формы вместе с процедурами реакции на события объектов этих форм.
И наконец, говоря о ведении проекта, нельзя не упомянуть о его сохранении. Безусловно, сохраняя весь документ приложения, вы сохраняете и проект, к нему присоединенный. Но, вообще говоря, можно сохранить проект и все изменения его кода прямо в редакторе.
Пример 20.9. Сохранение проекта
> File > Save имяПроекта
Ведение современных проектов целой командой разработчиков (или даже одним человеком) зачастую требует использования кода разных модулей, лежащих в разных проектах. В таких случаях можно воспользоваться вспомогательным инструментом VBA — экспортом и импортом модулей.
Если при работе над новым проектом А вам потребовались только одна функция или один класс, описанные в проекте в, то совсем необязательно на них ссылаться. Можно экспортировать модули из одного проекта в другой. Давайте на примере класса Person рассмотрим процедуру экспорта из проекта ciassPerson в новый проект.
Сначала мы выделяем экспортируемый модуль и сохраняем его на жестком диске в виде отдельного файла с именем, после чего импортируем этот файл в новый проект. В принципе произошло простое копирование кода из проекта в проект, но более цивилизованным методом. Кстати, следующему проекту, которому будет необходим класс Person, достаточно только импортирования уже созданного файла.
Пример 20.10. Экспорт и импорт классов
Имя файла := Person
Тип файла Class Files (*.cls)
(В окне нового проекта>
Имя файла := Person
Аналогичным способом можно экспортировать и импортировать любые модули проекта (пользовательские модули, модули форм).
Вспомните, что когда мы удаляем модуль из проекта, выводится диалоговое окно, предлагающее экспортировать модуль. Если модуль может оказаться вам полезен в будущем, но не нужен в данном проекте, сохраните его, нажав кнопку Да. В противном случае нажмите кнопку Нет.
Управление несколькими различными приложениями MS Office из одного макроса
Всем доброго времени суток! Заранее извиняюсь за нубский вопрос. В VB/VBS/VBA новичок. Подскажите.
Копирование Таблицы в pp посредством VBA
Добрый день! В презентации из двух слайдов, необходимо скопировать таблицу из первого слайда и.
Пересылка входящих писем Outlook посредством VBA
Добрый день! Подскажите,пожалуйста: 1.Необходимо чтобы всех входящие письма Outlook отправлялись.
Суммирование чисел в клетках Excel посредством VBA
Доброго времени суток. Столкнулся с проблемой: нужно просуммировать числа в клетках документа Excel.
ИМХО. Для этой задачи больше подходит "язык" AutoIT с отдельными макрорекордерами (например AU3ScriptWriter).
Нажимаете нужные кнопки, водите мышью, а он записывает готовый код, который можно сразу скомпилировать в .exe
конечно, только не надо ходить вокруг да около, а ставить конкретный вопрос
Добавлено через 2 минуты
Допустим, нужно с VBA запустить калькулятор и мышкой кликнуть число 3.
Заранее спасибо.
то же самое, только с пояснениями:
Все это хорошо. А если необходимо, в том же калькуляторе, набрать число в десятичном виде (это выполняется при помощи sendkey), а потом перевести его в шестнадцатеричный вид при помощи курсора мыши. То есть, поставить галочку на hex ( используя курсор мыши ). Как написать код API для данного случая?
Добавлено через 14 минут
p.s. В данном случаем интересен не сам результат, а именно программный код API для перемещения и центрирования курсора мыши.
t.ildar, а что непонятного в коде по ссылке, что я дал выше.
Вот я его скопировал в Excel. Координаты там отсчитываются от левого верхнего угла экрана с привязкой к разрешению.
В примере переход к координатам 105, 105 и нажатие левой кнопки мыши.
Вам всего лишь нужно подобрать нужные координаты.
Другой вопрос, как это сделать относительно открытого окна. В этом коде такое видимо тоже предусмотрено.
Спасибо, Diskretor. Теперь понятно, как использовать данные функции. Относительно раскрытого окна - посмотрим. Не в этом главное. Хочется отметить, что метод Sendkey, действительно, "немного" проще. Для блокнота можно задать открываемый файл прямо в команде ShellСкажу Вам что начинал писать несложную компиляцию данных из сторонней программы в Word посредством SendKey (еще на "языке" AutoIT).
Вообщем, решение на раз, полностью неуниверсальное, но зато быстрое и окупаемое, если нужно повторять какие то операции N-е кол-во раз.
Представьте выходит новая версия программы и там расположение меню совсем другое и т.п.
По моему опыту, скажу для реализации Вы больше всего времени потратите на корректировку пауз между нажатиями клавиш, а также последовательности переключений активности окна.
В VBA для всего этого Вам поможет:
1) Програмно открываем и закрываем Acrobat Reader по его appID.
4) Команда DoEvents, записанная после SendKey - для высвобождения ресурсов системы на выполнение указанной операции. Програмно открываем и закрываем Acrobat Reader по его appID. почему по его appID, когда вы просто запустили программу Acrobat, указав путь к Acrobat и имя запускаемой программы?
А закрывается программа не по appID, а по task ID - номеру задачи в операционной системе. Вы не подскажете, Diskretor, в вашем примере процедур и функций центрирования мыши:
какое значение аргумента hwnd (h_windows?) нужно задать в функции CenterMouseOn?
Да, но это не означает, что я все знаю.
hwnd - это, по-моему, не h_windows
hwnd - это Windows Handle (дескриптор окна).
Например Вы хотите центрировать мышь на окно блокнота (notepad.exe).
Вам нужно открыть блокнот, получить его hwnd и передать функции CenterMouseOn.
В Excel для этого можете поискать использование Application.Hwnd
Для Access - Application.hWndAccessApp
Для Word можете воспользоваться функцией FindWindow(user32.dll) вот
' Описываем необходимые процедуры API:
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName as String, _
ByVal lpWindowName As Long) As Long
Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long _
ByVal wParam as Long _
ByVal lParam As Long) As Long
Sub GetExcel()
Dim MyXL As Object ' Переменная для сохранения
' ссылки на Microsoft Excel.
Dim ExcelWasNotRunning As Boolean ' Флаг для выхода из приложения.
' Проверка, выполняется ли Microsoft Excel.
On Error Resume Next ' Отложенный перехват ошибок.
' Функция GetObject, вызванная без указания первого аргумента,
' возвращает ссылку на экземпляр приложения. Если это приложение
' не запущено, возвращается ошибка. Обратите внимание на запятую,
' стоящую на месте отсутствующего первого аргумента.
Set MyXL = Getobject(, "Excel.Application")
If Err.Number <> 0 Then ExcelWasNotRunning = True
Err.Clear ' Очищаем объект Err на случай ошибки.
' Проверка Excel. Если Excel выполняется,
' он вводится в таблицу выполняемых объектов (Running Object table).
DetectExcel
Задаем в объектной переменной ссылку на открываемый файл.
Set MyXL = Getobject("c:\vb4\MYTEST.XLS")
' Делаем видимым Excel с помощью свойства Application. Затем делаем
' видимым окно, содержащее файл, с помощью семейства Windows объекта,
' определяемого ссылкой MyXL.
MyXL.Application.Visible = True
MyXL.Parent.Windows(1).Visible = True
' Здесь помещаем инструкции
' по обработке вызванного файла.
' .
' Если приложение Microsoft Excel не выполнялось при запуске данной
' программы, закрываем его с помощью метода Quit свойства Application.
' Отметим, что при попытке выхода из Microsoft Excel строка заголовка
' мигает и выводится приглашение сохранить все загруженные файлы.
If ExcelWasNotRunning = True Then
MyXL.Application.Quit
End IF
Set MyXL = Nothing ' Освобождаем ссылку на
' приложение и электронную таблицу.
End Sub
Sub DetectExcel()
' Процедура находит выполняемый Excel и регистрирует его.
Const WM_USER = 1024
Dim hWnd As Long
' Если Excel выполняется, этот вызов API возвращает его дескриптор.
hWnd = FindWindow("XLMAIN", 0)
If hWnd = 0 Then ' 0 означает, что Excel не выполняется.
Exit Sub
Else
' Excel выполняется. Используйте функцию API SendMessage, чтобы ввести его в таблицу выполняемых объектов (Running Object Table).
SendMessage hWnd, WM_USER + 18, 0, 0
End If
End Sub
А вот описание того, как работает функция GetWindowRect (из под функции CenterMouseOn):
Добавлено через 21 минуту
Для некоторых API функций, например форматирование диска:
Visual Basic for Applications (VBA) – развитая система визуального программирования для создания прикладных программ в среде Microsoft Office.
Технология визуального программирования, реализованная в языке VBA, позволяет пользователям создавать приложения и самостоятельно решать многие задачи, не обращаясь к услугам профессиональных программистов.
Единая интегрированная среда VBA выглядит одинаково во всех приложениях Microsoft Office, то есть в Access, Excel, Word, PowerPoint.
С помощью VBA можно создавать объекты управления графического интерфейса пользователя, задавать и изменять свойства объектов, подключать к ним соответствующий программный код.
Методика программирования с использованием средств VBA сводится к следующему:
- создание объектов управления и контроля (диалоговые окна, пиктограммы, меню);
- разработка процедур, используемых при вызове объектов.
Автоматизировать обработку данных можно двумя способами: посредством макросов и путем программирования на языке Visual Basic for Applications (VBA).
Макрос – это последовательность макрокоманд, объединенных в одну для автоматизации работы. Макросы обеспечивают автоматическую запись действий пользователя в виде операторов VBA.
Объекты, методы, свойства и события
VBA относится к языкам объектно-ориентированного программирования.
Объект - основной элемент VBA. В VBA Excel объектами являются рабочая книга, рабочий лист и его составляющие, например:
- Sheet - лист Excel;
- Cell - ячейка;
- Range - диапазон ячеек;
- Application - приложение;
- UserForm - пользовательская форма;
- CommandButton -кнопка,
Работа с объектами возможна через его методы и свойства.
Над объектами можно совершать различные действия. Методы - это действия, совершаемые над объектами.
Например, ячейку или диапазон ячеек можно очистить (Clear), можно выбрать (Select), приложение закрыть (Quit), пользовательскую форму показать (Show) или скрыть (Hide).
Название метода отделяется от названия объекта точкой:
название объект . название метода
Range("B2:E2").Select - выбрать диапазон ячеек B2:E2;
Range("C1:C5").Clear - очистить диапазон ячеек C1:C5;
UserForm2.Hide - скрыть форму под номером 2;
UserForm5.Show - показать форму под номером 5;
Application.Quit - выйти из приложения.
Свойства служат для описания, задания характеристик объектов. Например, размера и цвета шрифта, положения формы на экране или состояние объекта (доступность, видимость), задания значений. Чтобы задать или изменить характеристику объекта, надо изменить значение его свойства, т.е. присвоить ему определенные значения.
Синтаксис задания значения свойства следующий:
Объект.Свойство = Значение Свойства
Объект - обозначает имя объекта;
Свойство - имя свойства, которому присваивается значение, имя объекта отделяется от имени свойства точкой.
Cell(1,2).Value = 2011 - поместить в ячейку В1 значение 2011.
Range("A1:A12").Text = "Программа" - поместить в диапазон ячеек А1:А12 текст Программа.
Range("C2").Font.Size = 18 - в ячейке С2 установить размер шрифта 18.
- Value ( позволяет задать значение),
- Text (ввод текста),
- Font.Size (задание размера шрифта).
В VBA для каждого объекта определен набор стандартных событий.
Например, стандартное событие для объекта CommandButton (кнопка) - Click (щелчок мышью).
Если пользователь нажимает на кнопку, то это событие. На это событие должен быть отклик, т.е. выполнение какой-либо процедуры (программы). Такая процедура называется процедурой обработки события и имеет стандартное имя. Если такой отклик не создан, т.е. не написана соответствующая процедура, то система не будет реагировать на это событие. Для каждого события можно написать процедуру, которая будет срабатывать именно тогда, когда это событие произойдет. На каждое событие пишется своя процедура, которая это событие обрабатывает, т. е. выполняет определенные действия, которые должны быть выполнены, когда это событие происходит. Особое значение понятие события имеет при написании процедур реакций пользовательской формы на изменения ее элементов.
Модули. Процедуры
Для хранения кода VBA применяются модули – самостоятельные объекты, каждый из которых содержит одну или несколько процедур.
На языке VBA процедура — это самостоятельная замкнутая программная единица, включающая операторы описания локальных данных процедуры и операторы, которые выполняются в ней.
Процедура выполняется автоматически в ответ на событие. События возникают в результате действий пользователя или выполнения программы; их может генерировать система.
Типы процедур.
Sub
<тело процедуры >
End Sub
Процедура-подпрограмма Sub выполняет действия, может иметь не один ответ (результат), содержать вызовы других процедур и вызываться на выполнение из других процедур;
Function
<операторы>
End Function
Процедура-функция возвращает единственное значение (полученное в результате расчета, возврат текущей даты и др.). После того как она определена (создана), к ней можно обращаться как к встроенной функции.
Процедуры обоих типов могут иметь аргументы – переменные, значения которых определяют работу процедуры при конкретном вызове.
Область действия процедур:
– общая (Public) – процедура доступна для всех процедур во всех модулях;
– личная (Private) – процедура доступна для других процедур только в том модуле, в котором она объявлена.
Если процедуры не используются вне данного модуля, их следует декларировать как личные процедуры. При объявлении личной процедуры в первой строке перед ключевым словом Function или Sub вставляется префикс Private:
Private Function Имя ()
Private Sub Имя () .
Синтаксис процедур в VBA.
Рассмотрим синтаксис на примере процедуры-подпрограммы.
Процедуры начинаются ключевым словом Sub.
Ключевое слово — это слово или символ, которые распознаются как элемент языка VBА.
[Private | Public][Static] Sub имя ([список_аргументов])
[Dim AS < тип данных>]
<тело_процедуры >
[Exit Sub]
<тело_процедуры >
End Sub
Пояснения:
[] указывают на то, что заключенный в них параметр является необязательным;
Sub - основное ключевое слово (глагол) процедуры; означает, что идущие за ним строки есть тело процедуры (подпрограммы);
[Private] - процедура, доступная для других процедур только того модуля, в котором она написана;
[Public] - объявление процедуры общедоступной, т. е. объявленную процедуру могут вызывать из окон других процедур во всех модулях;
[Static] - локальные (объявленные в теле процедуры) переменные сохраняются в промежутках времени между вызовами этой процедуры;
«имя» - имя процедуры;
[список_аргументов] - перечисленные через запятую переменные, которыми задаются передаваемые процедуре параметры при ее вызове;
<тело_процедуры > - операторы программы выполнения процедуры;
EndSub — конец описания процедуры.
Ключевое слово Sub определяет начало процедуры, a End Sub - конец процедуры.
При записи нескольких операторов в одной строке надо отделять их двоеточием (:).
Создание процедуры:
- Открыть редактор VBA.
- Создать модуль Insert–Modul.
- Insert–Procedur–Sub (или Function) (Вставка–Процедура– Подпрограмма (или Функция)).
- Набрать текст процедуры.
- По команде Debug–Compile VBAproject (Отладка–Компилировать) выполнить отладку процедуры.
- Командой Файл–Сохранить сохранить созданную процедуру.
Если в существующем модуле нужно добавить процедуру, следует выполнять пп. 3–6.
Переменные. Типы данных
В программировании базовыми понятиями являются «переменная» и «значение переменной».
Переменная (variable) - это величина (объект), значение которой меняется в ходе выполнения программы. Переменная в компьютере представляется по присвоенному ей имени (идентификатору), и ее значение определяется оператором присваивания.
Для каждого идентификатора переменной выделяется место в памяти, где хранится ее значение.
Для каждого встречаемого в программе нового имени переменной VBA автоматически определяет ее (выделяет для нее место в памяти). Это место остается пустым до присвоения переменной какого-либо значения. Переменные сравнивают с контейнерами для хранения данных любых типов.
В данном разделе мы рассмотрим что такое VBA, посколько именно на нем и пишутся макросы.
Что такое VBA?
VBA - язык (расшифровывается как Visual Basic for Application) был разработан компанией Microsoft. Данный язык не является самостоятельным, а предназначен для автоматизации процессов в пакете MS Office. VBA широко используется в Excel, а также в Access, Word и других программах пакета.
Чтобы работать с VBA кодом, нам нужен редактор, который уже установлен по умолчанию. Вы можете открыть его, нажав комбинацию клавиш " ALT + F11 ".
Объекты (Objects)
Давайте разберем, что же такое объект. Объект - это элемент, структурная частица Excel, а именно: книга, лист, диапазон, ячейка. Данные объекты имеют иерархию, т.е. подчиняются друг другу. Схематично структуру иерархии Excel можно изобразить следующим образом:
Главный объект это Application, что соответствует самой программе Excel. Далее следует Workbooks (книга), Worksheets (лист), Range (диапазон, или отдельная ячейка). Например, чтобы обратиться к ячейке "A1" на листе нам нужно будет прописать следующий путь с учетом иерархии:
Application.Workbooks("Архив").Worksheets("Аркуш1").Range("A1").
Таким образом, мы научились обращаться до наименьшего объекта в Excel - ячейки.
Коллекции (Collections)
- ChartObjects (элемент коллекции объекта ChartObject)
- Range
- PageSetup
- PivotTables (элемент коллекции объекта PivotTable).
Свойства (Properties)
Каждый объект имеет свойства . Например, объект Range имеет свойство Value или Formula.
Worksheets(“Sheet1”).Range(“A1”).Value або Worksheets(“Sheet1”).Range(“A1”).Formula
В данном примере, свойство отображает значение, которое введено в ячейку или введенную формулу.
Также, через свойство Formula можно не только получить формулу, но и записать ее:
Range(“B12”).Formula = “=2+6*100” - вписываем формулу =2+6*100 в ячейку B12.
Методи (Methods)
Теперь давайте рассмотрим, каким образом мы можем управлять содержимым диапазона или ячейки. Для этого в VBA существуют, так-называемые методы (команды "что сделать"). При написании кода методы отделяются от объекта точкой, например:
Range("A1").Select или Cells(1, 1).Select
Данный метод указывает выбрать (Select) ячейку "A1".
Далее, давайте, удалим значение в данной ячейке. Для этого напишем следующий код:
Selection.ClearContents
Здесь программа "берет" то, что мы выделили (Selection) и удаляет его содержимое (ClearContents ).
Читайте также: