Циклы с условием
End If
Else
Количество операторов End If должно совпадать с количеством операторов If.
End If
End If
Else
End If
End Sub
End Sub
Операторы ветвления
В языке VBA имеются два основных типа операторов выбора: операторы условия (линейный и блочный) и переключатели.
1) линейный оператор условия используется для выполнения одного оператора, в зависимости от условия. Формат:
IF<Условие>Then<Оператор1>[Else<Оператор2>]
Конструкция [Else<Оператор2>] может отсутствовать.
Пример1 (альтернативная форма):
Sub Условие()
If Sheets("товар2").Cells(4,1 ) = "монитор" _
Then Cells(4,2).Value = 1500 Else Cells(4,2).Value = 500
‘ если значение ячейки А4 листа Товар2 имеет значение Монитор, то в ячейку В4 поместить число 1500, иначе в ячейку В4 поместить число 500.
Пример2 (безальтернативная форма):
Sub Условие1()
If Sheets("товар2").Cells(4,1 ) = "монитор" Then Cells(4,2).Value = 1500
Запись условных линейных операторов неудобна, если по результатам проверки условий надо переходить к большим группам операторов. В этом случае используют блочный оператор.
2) Блочный операториспользуется, когда в случае истинности условия необходимо выполнить несколько программных операторов.
IF<Условие>Then
<Группа операторов1>
[Else< Группа операторов2>]
Где End If- указывает на окончание блока оператора If.
Операторы If могут быть вложенные друг в друга. Такое вложение операторов необходимо, если нужно проверить какое-либо условие при другом условии, которое является истинным. Синтаксис программы:
IF<Условие1>Then
IF<Условие2> Then
<Оператор1>
<Оператор2>
Например:
Sub программа()
Dim Name, Rang As String
If Name = «Петров» Then
If Rang = «Торговый агент»
Then
Range("A10") = Name & Rang
Else
Range("A10") = "Агента с указанной фамилией в списке нет"
End If
End If
End Sub
Условия можно записывать с помощью логических операторов, например:
Sub месяц1()
If Range("A1") = 6 Or Range("A1") = 7 Or Range("A1") = 8 Then
Range("A2") = "каникулы"
Else
Range("A2") = "учебный год"
End If
End Sub
Языком VBA также предусмотрена конструкция для работы с несколькими операторами If. Она применяется в тех случаях, когда необходимо рассмотреть еще несколько условий в дополнение к исходному. Для этого служит конструкция If……Then……ElseIf. В отличии от вложенных операторов конструкция с несколькими операторами If позволяет проверить дополнительное условие, если исходное условие имеет значение ложь.
Синтаксис программы:
IF<Условие1>Then
<Оператор1>
ElseIF<Условие2> Then
<Оператор2>
<Оператор3>
Пример:
Sub месяц_СПО()
Sheets("месяц").Select
If Range("A1") = 12 Then
Range("A2") = "декабрь"
ElseIf Range("A1") = 1 Then
Range("A2") = "январь"
ElseIf Range("A1").Value = 2 Then
Range("A2") = "февраль"
ElseIf Range("A1") = 3 Then
Range("A2") = "март"
ElseIf Range("A1") = 4 Then
Range("A2") = "апрель"
ElseIf Range("A1") = 5 Then
Range("A2") = "май"
Else
Range("A2") = "лето или осень"
End If
End Sub
Переключатели в VBA реализуются оператором Select Case, который позволяет сделать выбор из нескольких альтернативных вариантов в зависимости от значений условного выражения.
В) Операторы циклов
Цикл – это оператор или группа операторов, которые программа много кратно выполняет до тех пор, пока не получит команду на выполнение других операторов. Существует два основных типа циклов: циклы со счетчиком (используются, когда некоторые действия необходимо повторить заданное количество раз) и циклы с условием (когда некоторые действия должны повторяться до тех пор, пока выполняется определенное условие).
Цикл со счетчиком:
FOR СчетчикЦикла=НачальноеЗначение TO Конечное значение
[STEP Шаг]
NEXT[Счетчик цикла]
Где ключевые слова:
FOR – начало цикла
TO – разделяющее НачальноеЗначение и КонечноеЗначение
STEP – задание шага цикла
NEXT – конец цикла
Пример:
Sub Цикл_пример()
Dim Sum As Integer
Dim I As Integer
Sum = 0
For I = 1 To 4
Sum = Sum + 2
Next I
Range("A5") = Sum
End Sub
Этот цикл эквивалентен
четырем операторам Sum=Sum+2 (Sum=8)
Пример2:
Sub Цикл_пример2()
Dim Sum, I As Integer
Sum = 0
For I = 1 To 4
Sum = Sum + I
Next I
Range("A5") = Sum
End Sub
В данном примере сумма будет равна 10 (0+1+2+3+4)
Пример3:
Sub Цикл_пример2()
Dim Sum, I As Integer
Sum = 0
For I = 1 To 4 Step 2
Sum = Sum + I
Next I
Range("A5") = Sum
End Sub
В данном примере сумма будет равна 16 (0+1+3+5+7)
Главной особенностью данного типа циклов является условие, дающее в результате значение Истина (True) или Ложь (False). Циклы с условием делятся на циклы с предусловием – условие задается в операторе начала цикла и циклы с постусловием – условие задается в операторе в конце цикла.
Цикл с предусловием: Цикл с постусловием
Do While | Until <условие> Do
<Операторы> <Операторы>
[Exit Do] [Exit Do]
Loop Loop While | Until <условие>
Где:
Do, Loop – ключевые слова, определяющие начало и окончание цикла;
While и Until – ключевые слова, определяющие тип цикла;
Цикл Do While выполняется до тех пор, пока, пока условие имеет значение True;
Цикл Do Until выполняется до тех пор, пока, пока условие имеет значение False;
Exit Do – принудительный выход из цикла.
Примеры:
Sub Предусловие()
Sum = 2
Do While Sum < 10
Sum = Sum + J
J = J + 1
Loop
Sheets("Алгоритм").Range("A20").Value = Sum
End Sub
Sub Предусловие() ‘С окнами сообщений
Sum = 2
Do While Sum < 10
Sum = Sum + J
MsgBox ("J=") & J
J = J + 1
MsgBox ("Сумма") & Sum
Loop
Sheets("Алгоритм").Range("A20").Value = Sum
End Sub
Sub Предусловие1()
Dim Sum As Integer
Dim J As Integer
Sum = 2
Do Until Sum > 9
Sum = Sum + J
J = J + 1
Loop
Sheets("Алгоритм").Range("A19").Value = Sum
End Sub
Sub Постусловие1()
Sum = 2
Do
Sum = Sum + J
J = J + 1
Loop While Sum < 10
Sheets("Алгоритм").Range("A21").Value = Sum
End Sub
7. Основы создания интерфейса пользователя
Встроенные диалоговые окна
Встроенные диалоговые окна представляют собой операторы или функции языка. Диалоговые окна бывают двух видов: окна сообщений и окна ввода.
1. Окна сообщений- MsgBox
Окна сообщений отображают информацию и содержит заголовок, текстовую фразу и одну или более кнопок для выбора, также могут содержать пиктограмму. Формат оператора окна сообщений:
MsgBox<выражение>[, <Кнопки>] [, <Заголовок окна>]
В качестве выражения может быть текст, заключенный в кавычки, число, переменная, оператор или конкатенация перечисленных элементов (объединение с помощью символа амперсант).
Например, MsgBox «Пример окна сообщений»
MsgBox "Пример окна сообщений", 0 + 48, "Окно сообщений"
MsgBox "Содержимое ячейки составляет " & Range("B4"), , "Окно сообщений"
Табл.1 Встроенные константы для определения результата
Константа | Значение | Кнопка |
vbOK | ОК | |
VbCancel | Отмена | |
VbAbort | Прервать | |
VbRetry | Повторить | |
VbIgnore | Пропустить | |
VbYes | Да | |
vbNo | Нет |
Табл.2 Встроенные константы для определения параметра кнопки
Константа | Значение | Наборы кнопок в окне диалога |
vbOKOnly | Только кнопка ОК | |
vbOKCancel | Кнопки ОК и Отмена | |
VbAbortRetryIgnore | Прервать, Повторить, Пропустить | |
VbYesNoCancel | Да, Нет, Отмена | |
VbYesNo | Да, Нет | |
VbRetryCancel | Повторить, Отмена |
Табл.3 Пиктограммы диалогового окна
Константа | Значение | Пиктограмма |
VbCritical | ||
VbQuestion | ||
VbExclamation | ||
VbInformation |
Табл.4 Кнопка по умолчанию
Константа | Значение | Номер кнопки |
VbDefaultButton1 | Первая | |
VbDefaultButton2 | Вторая | |
VbDefaultButton3 | Третья |
2. Окно ввода - InputBox
Окно ввода используется, если программе надо передать какую-либо информацию от пользователя или поместить введенное значение в ячейку листа.
Формат функции:
Stroka=InputBox(<сообщение>[, <Заголовок>]),
Где Stroka – переменная, в которую помещается введенная информация,
Сообщение – текст сообщения в кавычках,
Заголовок – заголовок окна в кавычках
Range("A10") = InputBox("Введите данные в ячейку А10", "Пример окна ввода")
Функция InBox() может использоваться в качестве условного выражения в операторах If – Then. Через окно ввода можно заполнять столбцы и строки таблицы.
Пример1 (заполнение столбца А названиями товара):
Sub окно_ввода()
Dim I, NS As Integer
NS = 4
Sheets("товар2").Select
For I = 1 To 6
Cells(NS, 2) = InputBox("Введите название товара")
NS = NS + 1
Next I
End Sub
Sub окно_ввода1()
Dim I As Integer
For I = 1 To 6
Sheets("товар2").Cells(1, 2) = InputBox("Введите название товара")
Next I
End Sub
Пример2
Sub окно_ввода_c_условием() ‘Начало программы
Dim NS% ‘объявляются переменная NS как Целое число
Dim A$ ‘объявление текстовой переменной
NS = 4 ‘присваиваются начальные значения переменным
A = ""
Sheets("товар2").Select ‘Выбор листа Товар2
Do Until A = "Закончить" ‘Начало цикла с предусловием (выполняется пока условие имеет значение False);
A = InputBox("Введите название товара, для завершения наберите Закончить") ‘значение функции InputBox помещается в значение переменной A
If A = "Закончить" Then Exit Do ’Цикл прерывается
Cells(NS, NC) = A ‘в ячейку А4 помещается введенное в окно ввода слово
NS = NS + 1 ‘следующая строка
Loop ‘конец цикла
End Sub ‘конец программы