
Информатика_1 / Информатика / VBA Excel 2007
.pdfIf Текущая.Value = 1 Then Текущая.EntireRow.Delete
End If
Set Текущая = Следующая
Loop
End Sub
2.6 Организация программы на языке VBA
Программа на языке VBA состоит из одного или нескольких модулей. Обычно текст программы в модуле начинается с опций, которые управляют описанием переменных, способом сравнения строк и т.д. Затем идет объявление переменных и констант, которые можно использовать во всех процедурах либо модуля, либо проекта. Далее располагается код процедур Sub и Function, составляющих саму программу.
Пример организации модуля
„Опция VBA
Option Base 1
„Постоянные уровня модуля
Const Pi = 3,14159265358979
„Переменные уровня модуля
Dim Out(2) As Double
Function ДлинаОкружности(Радиус)
ДлинаОкружности = 2* Pi * Радиус
End Function
Function ПлощадьКруга(Радиус)
ПлощадьКруга = Pi * Радиус^2
End Function
Sub Результат(Радиус)
Out(1) = ДлинаОкружности(Радиус) Out(2) = ПлощадьКруга(Радиус)
End Sub
31
„
Sub Вывод() Результат 1
MsgBox Cstr(Out(1)) & vbCr & CStr(Out(2))
End Function
2.7. Вызов процедуры
Вызов процедуры Sub из другой процедуры можно произвести следующими способами:
ИмяПроцедуры СписокФактическихПараметров
СписокФактическихПараметров – список параметров, передаваемых процедуре. Он должен соответствовать по количеству и типу списку параметров заданных при определении процедуры.
Если требуется использовать несколько процедур с одинаковыми названиями, при их вызове нужно указывать имя модуля, в котором они расположены.
ИмяМодуля.ИмяПроцедуры СписокФактическихПараметров
Call ИмяПроцедуры (СписокФактическихПарамет-
ров)
Используя имена параметров, VBA позволяет вводить фактические параметры в любом порядке и опускать необязательные (Optional). При этом после имени параметра ставятся двоеточие и знак равенства, после которого помещается значение параметра (фактический параметр).
Примеры основных способов передачи параметров для процедуры Результат.
Результат 1
Результат Радиус:=1
R = 1
Результат R
Call Результат(1)
32
2.8. Передача параметров по ссылке и значению
При вызове процедуры в нее передаются некоторые параметры. Внутри процедуры им могут быть присвоены ка- кие-то значения, сохраняющиеся после выхода из процедуры. Таким образом, по умолчанию при передаче переменных в качестве параметров в процедуру передаются физические адреса переменных. Поэтому внутри нее может быть модифицировано их содержание. Для явного указания передачи параметров по ссылке в процедуру используется ключевое сло-
во ByRef.
Другой способ передачи – передача по значению, задается ключевым словом ByVal. При этом в процедуру попадает не сама переменная, а ее значение.
Пример.
Sub Пример(ByVal a, b, ByRef c)
„а передается по значению
„по умолчанию b передается по ссылке
„c передается по ссылке
a = a + 1 b = b + 1 c = c + a
End Sub
„
Sub Проверка()
a = 1: b = 10: c = 100
Пример a, b, c
MsgBox a
„Отобразится 1
MsgBox b
„Отобразится 12
MsgBox c
„Отобразится 102
End Sub
33
3. Организация взаимодействия с пользователем
Во время выполнения макроса или процедуры часто возникает необходимость поддерживать связь с пользователем. Может понадобиться вывести некоторую информацию или сообщение пользователю, сделать запрос пользователю для какого-то выбора или ответа на вопрос. В простых сообщениях и вопросах процедура MsgBox и функция InputBox являются инструментом для общения с пользователем.
3.1. Вывод сообщений с помощью окон сообщений.
Окно сообщений отображает информацию в простом диалоговом окне. Пользователю предоставляются одна или несколько кнопок, чтобы закрыть окно сообщений и ответить на сообщение, которое может иметь форму вопроса. Окна сообщений создаются в VBA с помощью процедуры MsgBox.
Параметры процедуры:
Текст_сообщения – текст, который отображается в сообщении;
Опции_кнопок – числовое значение, указывающее кнопку, которая должна появляться в окне сообщения.
Текст_заголовка – необязательный аргумент для размещения заголовка вверху окна сообщения;
Файл_справки и содержание – позволяет указать имя файла справки Windows, в котором пользователь может получить дополнительную информацию. Содержание – числовое выражение определенного местоположения в файле справки;
Результат – числовое значение, возвращаемое функцией, когда окно сообщения исчезает после щелчка по кнопке, позволяет узнать, по какой кнопке щелкнул пользователь.
Пример 1.
Создание окна сообщения «Добрый день». Текст макроса изображен рядом.
34

Sub Начало() „Макрос Начало
MsgBox "Добрый день", vbOKOnly +_ vbInformation
End Sub
Процедуру MsgBox также можно использовать, чтобы задать вопрос пользователю и получить ответ. Результат, возвращаемый функцией MsgBox, говорит о том, какая из кнопок была нажата перед закрытием окна.
Пример 2. Создание окна сообщения «До свидания» с кнопками «Да» и «Нет». Процедура содержит сообщение с вопросом, действительно ли пользователь желает выйти из Excel. В зависимости от ответа, либо появляется окно с сообщением «Выход не состоится», либо происходит выход из
Excel.
Sub Выход()
Dim txtСообщение As String, txtЗаголовок
As String
Dim Кнопки As Integer, Результат As Integer
txtСообщение = "Вы действительно хотите выйти из Excel?"
txtЗаголовок = "До свидания!"
35
Кнопки = vbYesNo + vbQuestion + vbfaultButton2
Результат = MsgBox(txtСообщение, Кнопки, txtЗаголовок)
If Результат = vbYes Then Application.Quit
Else
MsgBox "Выход не состоится", vbOKOnly, "Снова привет!"
End If
End Sub
3.2. Ввод данных пользователем с помощью окон ввода.
Для процедуры MsgBox есть ограничение – выбор ограничен отображаемыми кнопками. Для запроса информации и получения ответа существует функция InputBox.
Параметры функции:
Приглашение – вопрос или сообщение, представленное пользователю;
Текст_заголовка – название окна ввода; По_умолчанию – значение ответа, которое не вводится
пользователем; его удобно использовать, если задаваемый вопрос обычно имеет один и тот же ответ. У пользователя есть возможность отредактировать или заменить это значение в диалоговом окне;
Х_поз и y_поз- числовые значения координат, задающих положение окна ввожа на экране; если эти аргументы не указывать, то окно будет автоматически размещено по центру экрана.
Файл_справки и содержание – позволяет указать имя файла справки Windows, в котором пользователь может получить дополнительную информацию. Этот раздел также может быть вызван пользователем при нажатии клавиши F1;
РезультатТекст – текст, введенный пользователем в окне ввода.
36

Пример.
Создание окно ввода, изображенного на рисунке 4. Процедура запрашивает имя пользователя, а затем обновляет лист ввода. Лист предварительно переименован (новое название листа - Пример ввода)
Sub Имя()
Dim txtСообщение As String, txtЗаголовок As String
Dim txtРезультат As String, txtПоУмолчанию As String
txtСообщение = "Как ваше имя?" txtЗаголовок = "Пример окна ввода" txtПоУмолчанию = "Неизвестный пользова-
тель"
txtРезультат = InputBox(txtСообщение, txtЗаголовок, txtПоУмолчанию)
Worksheets("Пример ввода").Select
ActiveSheet.Range("A1").Formula = "Этот лист подготовлен: " & txtРезультат
End Sub
3.3.Создание формы и работа со свойствами формы
Втом случае, когда для организации диалога с пользователем не достаточно стандартных окон сообщений используются пользовательские формы (UserForm).
Формы создаются в среде редактора Visual Basic. Для этого выполняют следующие действия:
Вокне проектов выбирают проект для добавления к нему формы.
Выбирают команду Вставка – UserForm. Новая форма
37
будет добавлена к проекту и открыта для редактирования. Также будет открыта панель элементов.
Прежде чем добавить к форме элементы управления, следует установить свойства формы. Для открытия окна свойств выбирают команду Вид – Окно свойств. На этапе проектирования формы желательно установить следующие свойства:
Свойство Name предоставляет имя, которое будет использоваться в коде VBA для ссылки на форму. Формы лучше называть описательными именами для лучшего понимания кода. (Установите, например, свойство Name равным
Polz).
Свойство Caption содержит текст, который отображается в строке заголовка формы.
Свойство BackColor позволяет изменять цвет фона формы.
3.3.1. Использование полей, надписей и кнопок.
Элементы управления – объекты формы, которые используются для отображения и ввода данных или для вызова событий. Наиболее часто используются:
Поле (TextBox). С помощью полей пользователь может вводить и редактировать текст. Их также можно использовать для отображения результатов вычислений или других результатов.
Надпись (Label). Используются для отображения текста. Можно редактировать содержимое или выбрать текст надписью
Кнопка (CommandButton). Представлены кнопками, на которых пользователь может щелкать кнопкой мыши. Используются, чтобы сигнализировать о некотором событии.
38

Окно проекта |
Окно свойств |
Окно формы |
Панель элементов
После размещения элементов управления в форме, следует задать их свойства и изменить внешний вид. Поскольку элементы управления являются объектами, они имеют свойства и методы.
Свойство Name любого элемента управления позволяет обращаться в коде VBA к элементу управления по его имени. Задайте значение свойства Name элемента управления TextBox как ИмяПользователя.
Свойство Caption элемента управления Label содержит текст, который появляется в надписи. Измените значение свойства Caption на Имя:, поскольку надпись будет размещаться возле поля, где пользователь будет вводить свое имя.
Свойство Caption элемента управления CommandButton содержит текст, который появляется на кнопке. Одна кнопка будет иметь свойство Caption равным ОК, а вторая – Отмена.
Установка свойства Default элемента управления CommandButton в True превращает его в кнопку по умолчанию для формы. Это означает, что если пользователь нажимает Enter во время отображения формы, то эта кнопка будет нажата автоматически. Только одна кнопка формы может иметь свойство Default равным True. Установите для кнопки ОК значение свойства Default равным True.
Установка свойства Cancel элемента управления CommandButton в True превращает элемент управления в кнопку отмены для формы. Это означает, что если пользователь нажал Esc во время отображения формы, то эта кнопка будет нажата автоматически. Только одна кнопка формы может иметь свойство Cancel равным True.
На формах, как правило, используются также прокручивающийся (ListBox) и раскрывающийся (ComboBox) списки. Различие между ними заключается в том, что первый содержит встроенное поле редактирования текста, в