
- •Visual Basic for Applications (vba) - встроенный язык программирования приложений Microsoft Office, в частности, электронных таблиц Excel.
- •Vba является современным языком программирования, полностью оснащенным всеми необходимыми структурными операторами и типами данных.
- •1.3 Типы данных и переменные
- •1.4 Организация ввода-вывода
- •2.3 Оператор цикла с параметром (For…Next)
- •2.4 Циклы с предусловием и постусловием
- •3 Массивы
- •3) Динамический массив:
- •4 Процедуры и функции
- •5 Обработка строк
- •6 Форма и элементы управления
1.4 Организация ввода-вывода
Ввод и вывод данных в VBA может выполняться несколькими способами: с листа Excel, с помощью диалоговых окон, с помощью пользовательской формы.
Для ввода данных с листа или вывода на лист используется объект Worksheets и его методы Range или Cells.
Метод Range использует в качестве аргументов одну или две ссылки на ячейки и возвращают объект Range. Ссылки на ячейки должны быть оформлены в стиле А1 (колонка-буква-строка-число). Ссылка на единичную ячейку, использованная в качестве аргумента, возвращает объект Range для единичной ячейки. Две ссылки на единичные ячейки возвращают объект Range для прямоугольной области, заключенной между этими двумя ячейками:
X = Worksheets(“Лист1”).Range(“B1”).Value |
Присваиваем переменной Х значение ячейки B1 листа Лист1. |
Worksheets(“Лист1”).Range(“B1”).Value = Х |
Выводим в ячейку B1 листа Лист1 значение переменной Х |
Worksheets(“Лист1”).Range(“C1”,”D6”).Value = 2 |
Выводим в ячейки C1 и D6 листа Лист1 число 2 |
Worksheets(“Лист1”).Range(“В7:С9”).Value = 3 |
Выводим в диапазон ячеек “В7:С9” листа Лист1 число 3 |
Метод Cells, получая в качестве аргументов два целых числа, возвращают объект, содержащий единичную ячейку. Аргументы определяют номера строки и столбца выбранной ячейки.
A=Worksheets(1).Cells(1,2).Value |
Переменной А присвоено значение из ячейки первой строки и второго столбца первого листа. |
Worksheets(1).Cells(2,2).Value= Х |
В ячейку второй строки и второго столбца заносится значение переменной Х |
Для ввода данных с клавиатуры используется окно ввода InputBox (таблица 9), а для вывода информации на экран – окно сообщений MsgBox(таблица 10).
Таблица 9
Функция InputBox |
Выводит на экран диалоговое окно, содержащее сообщение, поле ввода и две кнопки OK и Cancel. Устанавливает режим ожидания ввода текста пользователем или нажатия кнопки, а затем возвращает значение типа string по нажатию кнопки OK, содержащее текст, введенный в поле. При нажатии кнопки Cancel возвращает пустую строку. Синтаксис: InputBox(prompt[, title] [, default])
|
Пример.
Имя =InputBox(“Введите Ваше имя”, “Пример окна ввода”)
На экране появится окно.
Рисунок 2 – Пример окна ввода
Переменной Имя будет присвоено значение типа String, введенное пользователем.
Следует учесть, что, поскольку введенные пользователем данные считаются текстом, при вводе числовых значений необходимо преобразовать их к одному из числовых типов данных с помощью функции преобразования типа, например val или CDbl.
X=CDbl(InputBox(“Введите значение Х”, “Пример окна ввода”, “1,678”))
В результате выполнения этой операции на экране появится окно ввода.
Рисунок 3 – Пример окна ввода
Введенное пользователем значение будет преобразовано к типу Double и присвоено переменной Х. Если пользователь не будет вводить значение, а просто нажмет кнопку OK, переменной Х будет присвоено значение по умолчанию – 1.678.
Таблица 10
Процедура MsgBox |
Выводит на экран диалоговое окно, содержащее сообщение, устанавливает режим ожидания нажатия кнопки пользователем, а затем возвращает значение типа integer, указывающее, какая кнопка была нажата. Синтаксис: MsgBox(prompt[, buttons] [, title]) Аргументы: prompt — строковое выражение, отображаемое как сообщение в диалоговом окне; buttons — числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых кнопок, тип используемого значка, основную кнопку и модальность окна сообщения. Значение по умолчанию этого аргумента равняется 0. Значения констант, определяющих число и тип кнопок используемого значка, приведены в таблицах 11—12; title — строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, в строку заголовка помещается имя приложения |
Значения параметра Buttons процедуры MsgBox, определяющие отображаемые в диалоговом окне кнопки, приведены в таблице 11:
Таблица 11
Константа |
Значение |
Отображаются кнопки |
vbOKOnly |
0 |
OK |
VbOKCancel |
1 |
OK, Отмена |
VbAbortRetryIgnore |
2 |
Стоп, Повтор, Пропустить |
VbYesNoCancel |
3 |
Да, Нет, Отмена |
VbYesNo |
4 |
Да, Нет |
VbRetryCancel |
5 |
Повтор, Отмена |
При написании программ с откликом, когда нужно знать, какая кнопка диалогового окна была нажата (таблица 12), вместо возвращаемых значений удобнее использовать следующие константы VBA, которые делают код программы более читаемым и, к тому же, их легко запомнить.
Таблица 12
Константа |
Значение |
Нажатая кнопка |
vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo |
1 2 3 4 5 6 7 |
ОК Отмена (Cancel) Прервать (Abort) Повторить (Retry) Пропустить (Ignore) Да (Yes) Нет (No) |
Пример.
N = MsgBox (“Значение переменной Х=” & X & Chr(10) & “Продолжить вычисления?”, VbYesNo, “Пример окна MsgBox”)
Если к моменту выполнения данного оператора переменная Х равнялась числу 2,14587895, то на экране появится следующее окно
Рисунок 4 – Пример окна сообщений
Пользователь может нажать одну из кнопок – Да или Нет. Если будет нажата кнопка Да, переменной N будет присвоено значение 6 , если будет нажата кнопка Нет – 7. Проанализировав в дальнейшем это значение, можно выбрать одну из ветвей выполнения программы.
Часто процедура MsgBox используется в «минимальном» варианте - только для вывода сообщения, с одной кнопкой – OK. В этом случае аргументы не берутся в скобки. Например:
MsgBox “Значение переменной Х=” & X
Рисунок 5 – Пример окна сообщений
2 Операторы
2.1 Оператор присваивания (=)
Оператор присваивания позволяет задать (присвоить) переменной значение другой переменной, выражения или объекта.
Синтаксис: <переменная> <выражение>
Порядок выполнения: вычисляется значение <выражения> и присваивается полученное значение <переменной> (вычисляется значение выражения, стоящего справа от знака присваивания, и присваивается переменной, стоящей слева от знака присваивания).
Изображение в блок – схеме:
П
ример.
Вычислить значение функции
f(x,y)=|x|+sin2(y+5).
Public Sub prog1()
Dim x As Double, y As Double Dim f As Double x=CDbl(InputBox("Введите х")) y=CDbl(InputBox("Введите y"))
f = Abs(x) + Sin(y + 5) ^ 2
MsgBox "Результат = " & f
End Sub |
Заголовок процедуры prog1 (начало программы) Описание переменных: переменные x,y,f вещественного типа (Double) Ввод значений х и у. Функция InputBox выводит на экран окно с полем ввода и сообщением «Введите х» и возвращает значение типа строка (String). Для преобразования вводимого значения к вещественному типу – Double- используется функция CDbl. Вычисление значения переменной f: функция Abs(аргумент) возвращает модуль аргумента, Sin(аргумент) – синус аргумента, ^ - степень числа. Процедура MsgBox выводит на экран окно сообщений с текстом «Результат = 12» (если f=12). Конец программы. |
Р
исунок
6 - Блок-схема программы prog1
2.2 Условный оператор (If…Then…Else…End If)
Условный оператор позволяет выбирать и выполнять действия в зависимости от истинности некоторого условия.
Синтаксис: условный оператор имеет два варианта синтаксиса:
a) однострочная форма записи условного оператора:
If <условие> Then [<операторы 1>] [Else [<операторы 2>]];
б) блочная форма записи условного оператора:
If <условие 1> Then
[<операторы 1>]
. . .
[ElseIf <условие n> Then
[<операторы n> ]…
[Else]
[<ИначеОператоры>]]
End If.
П
орядок
выполнения: вычисляется значение
<условие>. Оно может принимать
значения TRUE (Истина)
или FALSE (Ложь).
Если <условие> принимает значение
TRUE, то выполняются
[<операторы 1>] (операторы ветки
Then), в противном случае
- [<операторы 2>] (операторы ветки
Else).
Изображение в блок – схеме:
Пример. Определить вид введенного числа – положительное, отрицательное или ноль.
Public Sub prog2() Dim x As Double Dim s As String x=Worksheets(1).Range("A1")
If x > 0 Then s = "положительное" Else If x = 0 Then s = "ноль" Else s = "отрицательное" End If
Worksheets(1).Range("C2")=s End Sub |
Описание переменной строкового типа Ввод значения переменной х. Значение располагается на Листе1 (Worksheets(1)) в ячейке А1 (Range ("A1")). Условный оператор. Если условие принимает значение True (Истина), то выполняется оператор присваивания ветки Then (s=”положительное”) и завершается условный оператор, в противном случае проверяется второе условие: x=0. Если условие True, то s присваивается значение “нуль”, иначе – “отрицательное”.
Вывод результата–s–на лист1 в ячейку С2. |
Р
исунок
7 - Блок-схема программы prog2