Основы программирования на VBA для Microsoft Excel. Учебное пособие
.pdfС помощью свойства Caption можно создать надпись, которая будет расположена рядом с объектом CheckBox.
В программном проекте значение свойства Value объекта CheckBox влияет на результат выполнения тех или иных действий. Пример:
If CheckBox1.Value = True Then
TextBox1 = "Истина"
Else
TextBox1 = "Ложь" End If
Элемент управления OptionButton (Переключатель)
Эти элементы объединяются в группы, содержащие не менее двух элементов, и используются для выбора одного варианта из нескольких. При выборе одного из элементов все остальные элементы в группе автоматически становятся неактивными.
Для объединения элементов в группу применяется элемент управления Frame (Рамка) или свойство переключателя GroupName (Имя группы). Все элементы одной группы должны иметь одно и то же имя группы. Вставка элементов OptionButton в рамку приводит к их автоматическому группированию.
Если создается несколько групп, то каждый из наборов должен иметь собственное значение свойства GroupName. При использовании свойства GroupName отпадает необходимость в использовании рамки.
Для подписи элементов управления OptionButton применяется свойство Caption.
Элемент управления ToggleButton (Выключатель)
Этот элемент управления имеет вид кнопки, щелчок по которой изменяет ее состояние. Всего состояний два: состояние нажатой кнопки и состояние отпущенной кнопки. При нажатой кнопке свойство Value этого объекта принимает значение True, а при отжатой – False.
Элемент управления Frame (Рамка)
Этот элемент управления используется для группировки объектов в форме. Значение свойства Caption определяет текст, который появляется в верху рамки.
81
Рамка, как правило, используется из соображений логического группирования однотипных элементов управления. Иногда ее используют для создания более привлекательного вида формы.
Элемент управления CommandButton (Командная кнопка)
Объект CommandButton используется для выполнения каких-либо действий (например, запуска, прерывания или останова процесса). Командную кнопку можно подписать, используя свойство Caption.
Если свойство Autosize имеет значение True, то размеры кнопки будут меняться автоматически в зависимости от объема введенного текста.
Свойство Default, установленное в True, определяет кнопку, применяемую по умолчанию. При этом для всех остальных кнопок формы это свойство примет значение False.
С кнопкой связано событие Click – нажатие на кнопку. В процедуре обработки этого события можно задать выполнение определенных действий.
Элемент управления MultiPage (Набор страниц)
В том случае, когда на форме нужно разместить большое количество элементов, ее делают многостраничной. Для этой цели используют объект MultiPage. Он позволяет создавать на форме несколько вкладок – страниц, между которыми можно осуществлять переходы. На каждой странице могут располагаться свои элементы управления.
Таким образом, элемент управления MultiPage объединяет несколько независимых диалоговых окон. Заголовки этих окон представлены в виде закладок, а переход на требуемую страницу происходит после щелчка по ее закладке. Этот простой переход с одной страницы на другую и делает MultiPage удобным средством для представления разнородных данных, относящихся к одному объекту.
Отдельные страницы напоминают папки и досье, хранимые в офисах компаний. Страница представляет собой объект типа Page. Коллекция Pages представляет все страницы набора. По умолчанию при создании элемента MultiPage в него автоматически помещаются две страницы с именами Page1 и Раgе2.
Создать новую вкладку можно, выбрав в контестном меню существующей вкладки пункт New Page или программно:
MultiPage1.Pages.Add
82
Программно можно и удалить вкладку, используя оператор:
MultiPage1.Pages.Clear
В контекстном меню существующей вкладки для этой же цели можно использовать пункт Delete Page.
На каждую из вкладок есть возможность помещать управляющие элементы. Имя вкладки можно изменить, выбрав в контекстном меню пункт Rename.
Программно управлять доступностью вкладки можно, устанавливая значение свойства Enable в True или False. Пример:
MultiPage1(1).Enabled = False
MultiPage1(2).Enabled = True
Элемент управления TabStrip (Набор вкладок)
Элемент TabStrip подобен элементу MultiPage, но не служит контейнером для других объектов, поэтому для отображения в нем элементов управления необходим объединяющий элемент-контейнер, например Frame.
При использовании TabStrip вкладки не содержат элементов, а используются лишь для переключения между различными элементамиконтейнерами, содержащими объекты, взятые из набора, принадлежащего форме.
Каждый раз на форме должен быть видимым только один элементконтейнер, соответсвующий активной вкладке. Для этой цели рекомендуется скрывать неактивные элементы-контейнеры.
Для переключения используется индекс выбранной вкладки, значение которого позволяет отобразить соответствующий объект-контей- нер. Индексация начинается с нуля.
Пример получения индекса:
i = TabStrip1.SelectedItem.Index
Пример переключения: If i = 0 Then
Frame2.Visible = False
Frame1.Visible = True Else
Frame1.Visible = False
Frame2.Visible = True End If
83
Свойство Style отвечает за внешний вид объекта и имеет три значения: 0, 1 и 2. Первое из них устанавливается по умолчанию и соответствует трехмерному изображению как рамки элемента, так и вкладок. Значение 1 соответствует изображению элемента без рамки с трехмерными вкладками. Значение 2 соответствует элементу без рамки и без вкладок.
TabStrip содержит семейство Tabs объектов Tab, которые, собственно, и являются вкладками. По умолчанию создаются две вкладки с именами Tab1 и Tab2. Есть возможность добавлять вкладки.
Пример добавления вкладки:
TabStrip1.Tabs.Add
Созданную папку можно переименовать, например, так: TabStrip1.SelectedItem.Caption = "Набор1"
Для удаления вкладки используется ее индекс. Индексация начинается с нуля.
Пример удаления вкладки:
TabStrip1.Tabs.Remove (2)
Элемент управления SpinButton (Счетчик)
Визуально этот объект состоит из двух кнопок и может быть расположен горизонтально или вертикально. На кнопках изображены стрелки, имеющие противоположные направления. С кнопками связаны события: Change(), SpinUp (Вверх ) и SpinDown (Вниз).
Объект SpinButton имеет три свойства – Min, Max и Value, которые определяют соответственно минимальное, максимальное и текущее значения этого объекта. Для отображения текущего значения счетчика могут быть использованы элементы TextBox или Label.
Ориентацию объекта на форме можно изменить, используя свойство Orientation. По умолчанию значение этого свойства равно –1 и ориентация определяется автоматически в зависимости от размеров объекта по высоте и ширине.
Два остальных значения этого свойства (0 и 1) отвечают соответственно за вертикальное и горизонтальное расположение этого объекта на форме.
Пример использования объекта SpinButton: Private Sub SpinButton1_Change()
Label1.Caption = SpinButton1.Value End Sub
84
Элемент управления ScrollBar (Полоса прокрутки)
Визуально этот объект состоит из полосы и ползунка и может использоваться по тому же назначению, что и объект SpinButton, но чаще он применяется для прокрутки текста в текстовых полях, когда текст не умещается в размеры поля.
Полоса прокрутки имеет те же три свойства (Min, Max и Value), что и счетчик. С полосой прокрутки связано также и событие Change.
Процедура обработки этого события может иметь вид:
Private Sub ScrollBar1_Change() TextBox1 = ScrollBar1.Value
End Sub
В приведенном примере полоса прокрутки используется как отдельный автономный объект. В этом качестве он может применяться для плавного изменения какого-либо значения (например, звука, яркости и т. п.).
Некоторые объекты, такие как текстовое поле и форма, имеют свойство ScrollBars, которое определяет наличие в составе этих объектов полос прокрутки.
Элемент управления Image (Рисунок)
Назначение этого объекта – отображение рисунков в форматах bmp, cur, gif, ico, jpg, wmf. Можно изменять масштаб рисунка и редактировать его содержимое. Рисунок может использоваться как объект, реагирующий на щелчок. Другое его использование – украшение формы.
Пример обработки события Click объекта Image: Private Sub Image1_Click()
Image1.BackColor = 200 End Sub
Данный пример показывает, как можно изменить цвет области рисунка при наступлении события Click. Подобным образом можно изменять и другие параметры области рисунка (например, размеры, расположение и т. п.).
Для выбора самого изображения, помещаемого в область рисунка, используется свойство Picture. Значение этого свойства можно задать в окне свойств или программно. При этом изображение копируется из указанного файла внутрь документа и в дальнейшем исходный файл не требуется.
85
Коллекция Controls
Доступ к элементам управления формы можно осуществить с использованием коллекции Controls. Эта коллекция включает все элементы управления, расположенные на форме. Каждый элемент в этой коллекции имеет индекс, значение которого может быть числом или строкой. Индексация начинается с нуля. Индексы определяются порядком размещения элементов в коллекции. Имя элемента является строковым значением индекса.
Пример работы с коллекцией Controls:
Private Sub CommandButton1_Click() For Each i In UserForm1.Controls
m = vbYesNo + vbQuestion
A = MsgBox(prompt:="Cкрыть элемент " & i.Name & "?", _ Buttons:=m, Title:="Bonpoc")
If A = vbYes Then 'ответ "Да"
i.Visible = False 'скрыть очередной элемент
End If Next i End Sub
В этом примере по запросу можно скрыть любой элемент формы. Скрыть элемент на форме можно и другим способом, например,
связав этот элемент с событием Click (щелчок). Пример: Private Sub Label1_Click()
m = vbYesNo + vbQuestion
A = MsgBox(prompt:="Cкрыть элемент", Buttons:=m, _ Title:="Вопрос")
If A = vbYes Then Label1.Visible = False
Else
Label1.Visible = True End If
End Sub
86
Вызов функции рабочего листа из программы на VBA
Стандартные функции рабочего листа в программе применяются двумя способами – вставкой функций в ячейки рабочего листа из программы и вызовом функций в самой программе.
Вызов функции рабочего листа в программе VBA выполняется с помощью объекта WorsheetFunction, например:
Application.WorksheetFunction.Min(Worksheets("Лист1").Range("a1:a4"))
Здесь с помощью объекта WorsheetFunction вызывается на выполнение функция рабочего листа Min для нахождения минимального значения в диапазоне a1:a4.
Для вставки функций в ячейки рабочего листа используется свой-
ство Formula объекта Range:
Worksheets("Лист1").Range("b1"). Formula="=Min(a1:a4)"
Создание пользовательских функций рабочего листа
Для создания функции пользователя нужно выполнить следующие действия:
1)открыть существующий модуль. Если модуля нет, создать его командой Insert/ Module;
2)выполнить команду VBA Insert/ Procedure;
3)в открывшемся диалоговом окне выбрать Add Procedure, выбрать Function и в окне Name ввести имя функции. В блоке Scope (Область определения) установить Public или Private. При необходимости установить флажок All Local Variables As Statics и нажать OK;
4)в открывшемся окне кода активной формы появится заготовка функции, куда нужно ввести список параметров с указанием их типов, указать тип возвращаемого функцией значения и между заголовком функции и ее окончанием поместить тело функции;
5)клавишей F2 или командой View/ Object Browser вызвать окно Просмотр объектов;
6)раскрыть список левого верхнего окна (Список проектов) и выбрать из него VBA Project. В окне Classes (Классы) отобразятся элементы текущего проекта;
7)выбрать в этом окне модуль, в котором создана функция, – в окне Members (Компоненты) отобразятся элементы, которые содержатся
вэтом модуле;
87
8)выделить в окне Компоненты элемент с именем созданной функции и включить контекстное меню;
9)выполнить команду контекстного меню Properties (Свойства) – откроется окно Параметры компонента;
10)в поле Description (Описание) этого окна ввести текст краткого описания функции. Если необходимо, то указать файл справки и идентификатор;
11)созданная функция помещается в библиотеку Excel. Она может быть использована для вычислений так же, как и другие встроенные функции рабочего листа Excel. Созданные пользователем функции помещаются в категорию функций, определенных пользователем.
Макросы
Общие сведения о макросах
Макрос представляет собой записанную с помощью VBA процедуру, представляющую собой программно оформленную последовательность действий пользователя, применяемую для их многократного повторения.
Макросы избавляют пользователя от ручного выполнения часто используемых операций, что приводит к экономии времени. Кроме того, отлаженные макросы позволяют избегать ошибок, которые можно допустить при ручном воспроизведении действий.
Написание макроса ручным способом рассматривается как одна из разновидностей программирования на VBA.
Автоматическое создание макроса не является программированием, так как при этом только фиксируются действия пользователя, сам же он не участвует в написании кода.
Тексты автоматически созданных макросов могут быть использованы в качестве образцов для написания собственных программ на
VBA.
Макрос – это процедура, но в отличие от стандартных процедур VBA не содержит входных параметров и может запускаться с рабочего листа книги Excel.
На имена макросов накладываются следующие ограничения:
1)имя может содержать буквы, цифры, символы подчеркивания;
2)имена макросов должны начинаться с буквы;
3)использование пробелов и других символов не допускается.
88
Макросы могут быть созданы двумя способами:
1)автоматически, с применением макрорекордера;
2)вручную, с применением языка VBA.
Автоматическая запись макросов
Для входа в режим автоматической записи макроса необходимо выполнить следующие действия:
1)ввести команду Сервис/ Макрос/ Начать запись или просто нажать кнопку Записать макрос на панели инструментов. В результате появляется окно Запись макроса;
2)ввести в открывшееся окно имя макроса, место его расположения и при необходимости – сочетание клавиш для запуска мароса и его описание. Описание макроса прописывается в самом макросе как комментарий. Макрос можно записать в текущую рабочую книгу (Эта книга), во вновь созданную рабочую книгу (Новая книга) или в личную книгу макросов, при этом макрос будет доступен при каждом за-
пуске Excel;
3)нажать в окне записи макроса кнопку ОК.
После входа в режим записи все действия пользователя отслеживаются специальной программой (макрорекордером) и переводятся в коды макроса.
В режиме записи желательно выполнять заранее продуманные действия, избегать ошибочных или лишних действий. Необходимо также помнить, что явно не выполняемые действия могут быть приняты и прописаны в макросе по принципу умолчания.
После выполнения требуемых действий необходимо выйти из режима записи макроса командой Сервис/ Макрос/ Остановить запись или просто нажать кнопку Остановить запись, расположенную на панели инструментов.
Просмотр, редактирование и выполнение макросов
Для запуска макроса могут использоваться:
1)комбинация клавиш, если она была задана при записи макроса;
2)графические объекты;
3)команда рабочего листа Сервис/ Макрос/ Макросы/Имя макроса/ Выполнить;
4)кнопка Выполнить макрос, расположенная на панели инструментов;
5)сочетание клавиш Alt+F8.
89
Возможности запуска макроса на выполнение, описанные в пунктах 3–5, связаны появлением диалогового окна Макрос. Это окно используется не только для выбора имени запускаемого макроса, но и для просмотра его параметров и редактирования его кода.
Окно Макрос содержит следующие кнопки:
1)Выполнить – для запуска выбранного макроса на выполнение;
2)Отмена – для закрытия окна Макрос;
3)Войти – для отладки выбранного макроса;
4)Изменить – чтобы открыть макрос в редакторе VBA для просмотра и редактирования его кода. При этом также возможно копирование кода макроса и вставка его в собственную программу;
5)Создать – для создания нового макроса;
6)Удалить – для удаления выбранного макроса;
7)Параметры – чтобы задать макросу новую комбинацию клавиш или изменить текст его описания.
5. ОТЛАДКА И ТЕСТИРОВАНИЕ ПРОГРАММНОГО ПРОЕКТА
Виды ошибок
Перед использованием разработанного приложения необходимо устранить все имеющиеся в нем ошибки, т. е. выполнить отладку приложения.
Ошибки могут быть связаны с неправильной записью операторов, неправильными вычислениями или, например, попыткой деления на нуль. Соответственно их можно назвать синтаксическими, логическими или ошибками периода выполнения.
Синтаксические ошибки и ошибки периода выполнения обнаруживаются компилятором и приводят к останову выполнения программы.
Логические ошибки приводят к неправильному результату и, как правило, являются следствием плохо разработанного алгоритма или неучета возможных значений входных данных.
Для обнаружения ошибок необходимо выполнить тестирование приложения. Это один из важных этапов разработки приложения. Рекомендуется тестировать код по мере его создания.
Иногда на тестирование и отладку приложения уходит столько же времени, сколько и на создание первого варианта приложения.
90
