Циклы с условием

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 ‘конец программы