Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
EPP_VBA_Gornostay_171214.docx
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
546 Кб
Скачать
☆

Работа с управляющими конструкциями в vba

Цель работы: научиться использовать в программах VBA управляющие конструкции для программирования разветвлений и повторяющихся вычислений.

Задание 1 Использование оператора If… Then... Else

  1. Откройте приложение Excel и создайте новую книгу. Сохраните ее с именем If_For.xlsm.

  1. Войдите в редактор VBA и вставьте новую форму.

  2. Разместите на форме элементы управления Label, TextBox и CommandButton с окна ToolBox и отредактируйте их свойства, как показано на рис. 5.1.

  3. Введите имена формы и элементов управления TextBox и CommandButton в соответствии с таблицей 5.1.

  4. Двойным щелчком на кнопке Выполнить откройте окно кода и введите следующий код:

Private Sub cmd_OK1_Click()

Dim a As Single, b As Single, c As Single, res As Single

a = Val(txt_a)

b = Val(txt_b)

c = Val(txt_c)

If a > b And b > c Then

MsgBox ("Введены значения a > b и b > c")

res = a + b + c

txt_Res = Str(Res)

ElseIf (a < b Or b < c) Then

MsgBox ("Введены a < b и b < c")

res = a + b - с

txt_Res = Str(res)

Else

MsgBox "Условия не выполнены"

res = 0

txt_Res = Str(res)

End If

End Sub

Рис. 5.1 Вид формы в режиме конструктора

Таблица 5.1 Имена элементов на форме Операторы ветвления

Элемент

Наименование

Имя

Форма

Операторы ветвления

frm_If

Текстовое поле

Введите a

txt_a

Текстовое поле

Введите b

txt_b

Текстовое поле

Введите c

txt _c

Текстовое поле

Результат

txt_Res

Кнопка

OK

cmd_OK1

Кнопка

Очистить

cmd_Clear1

Кнопка

Выход

cmd_Exit1

  1. По аналогии с п. 5 для кнопки Очистить введите следующий код для очистки текстовых полей формы:

Private Sub cmd_Clear1_Click()

txt_a=” ” : txt_b=” ”: txt_c=” ”: txt_Res=” ”

End Sub

  1. Аналогично для кнопки Выход введите код:

Private Sub_cmd_Clear1_Click()

frm_If.Hide

End Sub

  1. Протестируйте разработанную программу, выполняя ее при разных вариантах исходных данных.

  2. Запустите программу в режиме отладки и используя окно Locals, просмотрите текущие значения переменных a, b, c и res и последовательность выполнения операторов в программе в зависимости от значений исходных данных.

  3. Cохраните разработанную форму.

Задание2 Использование OptionButton

  1. Вставьте в проект новую форму и оформите ее, как показано на рис. 5.2. Имена элементов управления TextBox и CommandButton введите по аналогии с заданием 1, имена OptionButton оставьте по умолчанию.

Рис. 5.2 Вид формы в режиме конструктора

  1. Для кнопки Выполнить введите следующий код:

Private Sub cmd_OK1_Click()

Dim a As Single, b As Single, c As Single, res As Single

a = Val(txt_a): b = Val(txt_b): c = Val(txt_c)

If OptionButton1 = True Then

MsgBox ("Операция a+b+c")

res = a + b + c

txt_res = Str(res)

ElseIf OptionButton2 = True Then

MsgBox ("Операция a-b-c")

res = a - b - c

txt_res = Str(res)

ElseIf OptionButton3 = True Then

MsgBox " Операция a*b*c"

res = a * b * c

txt_res = Str(res)

Else

MsgBox ("Операция не выбрана")

End If

Sub End

  1. Введите код отклика на нажатие кнопок Очистить и Выход по аналогии с п. п 6 - 7 задания 1.

  2. Протестируйте созданную программу и сохраните разработанную форму с именем Form_OB.frm.

Задание 3 Использование операторов цикла For…Next

  1. В книге If_For.xlsm вставьте новый модуль и создайте в нем процедуру с именем For_max и опцией Private.

  2. Вставьте между строками заголовка и окончания процедуры For_max следующий код:

Dim i As Integer

Dim n As Integer

Dim x As Single, max As Single

max = 0

n = InputBox ( "Введите количество чисел")

For i = 1 To n

x = InputBox ("Введите" & Str(i) & "-е число")

If x > max Or i = 1 Then max = x

Next i

MsgBox "max = " & Str(max)

  1. Протестируйте процедуру For_max. Обратите внимание на конструкцию For…Next .

  2. Вставьте по аналогии с п. 1 новую процедуру с именем For_min. Скопируйте в нее код предыдущей процедуры и измените его так, чтобы определялось минимальное число из введенных чисел.

  3. Разработайте форму для выбора одной из двух процедур For_max или For_min с использованием элементов OptionButton.

  4. Протестируйте и сохраните созданную форму с именем max_min.frm.

Задание 4 Работа с конструкциями While…Loop, Until…Loop

  1. Вставьте новую форму и оформите ее, показано на рис. 5.3.

Рис. 5.3 Вид формы в режиме конструктора

  1. Имена элементам TextBos, ListBox и CommandButton присвойте в соответствии с таблицей 5.2.

  2. В разделе объявлений модуля объявите динамический массив и переменую для хранения его размерности при переопределении:

Option Base 1

Dim Massiv() As Single, Size As Integer

Таблица 5.2 Имена элементов на форме Обработка массивов

Элемент

Наименование

Имя

Форма

Обработка массивов

frm_mas

Текстовое поле

Размерность массива

txt_razm

Текстовое поле

Максимальный элемент

txt_max

Кнопка

Ввод массива

cmd_Vvod

Кнопка

Поиск max

cmd_max

Кнопка

Выход

cmd_Exit1

Список

Массив

lst_Massiv

  1. Для кнопки Ввод массива введите следующий код:

Private Sub cmd_Vvod_Click()

Dim i As Integer

Size = Val(txt_razm.Text)

ReDim Massiv(Size)

i = 1

Do While i <= Size

Massiv(i) = Val(InputBox("Массив(" + Str(i) + ")=", "Ввод массива"))

lst_Massiv.AddItem "A(" + Str(i) + ")=" + Str(Massiv(i))

i = i + 1

Loop

End Sub

  1. Для кнопки Поиск max введите следующий код обработчика:

Private Sub cmd_max_Click()

Dim i As Integer

max = Massiv(1)

i = 1

Do Until i > Size

If Massiv(i) > max Then max = Massiv(i)

i = i + 1

Loop

txt_max.Text = Str(max)

End Sub

  1. Для кнопки Выход введите код для закрытия формы:

Private Sub cmd_Exit_Click()

frm_mas.Hide

End Sub

  1. Протестируйте программу. Обратите внимание на конструкции While…Loop, Until…Loop, опцию Option Base 1, на способ заполнения позиций элемента ListBox.

  2. Добавьте на форму кнопку Очистить для очистки текстовых полей формы. Напишите и введите для нее код. Протестируйте работу кнопки Очистить.

  3. Сохраните форму frm_mas и закройте книгу Excel с сохранением изменений. Оформите отчет по лабораторной работе.

Задание для самостоятельной работы

Разработайте проект, включающий форму и необходимые программы для поиска макимального и минимального элемента в двумерном динамическом массиве.

Методические материалы

Операторы ветвления - одни из самых важных и часто используемых конструкций в языках программирования. Общий принцип их работы прост: проверяется соответствие каким-то условиям (истинность или ложность выражений) и в зависимости от этого выполнение программы направляется по одной или другой ветви.

Оператор If…Then... Else применяется:

  • когда нужно проверить на соответствие одному условию и в случае соответствия сделать какое-то действие;

If nTemperature < 10 Then

MsgBox "Одеть куртку"

End If

  • когда нужно сделать то же, что и в предыдущем примере, а в случае несоответствия выполнить другое действие;

If nTemperature < 10 Then

MsgBox "Одеть куртку"

Else

MsgBox "Одеть ветровку"

End If

  • когда нужно проверить на соответствие нескольким условиям;

If (nTemperature < 10) And (bRain = True) Then

MsgBox "Одеть куртку и взять зонтик"

End If

  • в случае, если первая проверка вернула False, нужно проверить на соответствие еще нескольким условиям (в этом случае удобно использовать ElseIf);

If (bIGoInCar = True) Then

MsgBox "Одеться для машины"

ElseIf nTemperature < 10 Then

MsgBox "Одеть куртку"

Else

MsgBox "Можно идти в рубашке"

End If

Оператор Select Case идеально подходит для проверки одного и того же значения, которое нужно много раз сравнить с разными выражениями;

Select Case sDayOfWeek

Case "Понедельник"

MsgBox "Салат из шпината"

Case "Вторник"

MsgBox "Салат из морской капусты"

Case Else

MsgBox "На этот день у нас ничего не предусмотрено"

End Select

Операторы цикла в VBA используются в ситуациях, когда нужно выполнить какое-либо действие несколько раз. Если известно, сколько раз нужно выполнить действие, используется конструкция For…Next:

For iCounter = 1 to 10

MsgBox "Счетчик: " & iCounter

Next

Чтобы указать, насколько должно прирастать значение счетчика, используется ключевое слово Step:

For iCounter = 1 to 10 Step 2

MsgBox "Счетчик: " & iCounter

Next

Можно и уменьшать исходное значение счетчика:

For iCounter = 10 to 1 Step -2

MsgBox "Счетчик: " & iCounter

Next

Для безусловного выхода из конструкции For…Next используется команда Exit For.

VStop = InputBox (“Введите значение останова”)

VInput = CInt(VStop)

For iCounter = 1 to 10

MsgBox "Счетчик: " & iCounter

If iCounter =VInput Then Exit For

Next

Очень часто в VBA требуется сделать какое-нибудь действие со всеми элементам коллекции или массива - перебрать все открытые документы, все листы Excel, все ячейки в определенном диапазоне и т.п. Для того, чтобы пройти циклом по всем элементам коллекции, используется команда For Each … Next:

For Each oWbk in Workbooks

MsgBox oWbk.Name

Next

При использовании этого приема можно очень просто найти и получить ссылку на нужный нам объект:

For Each oWbk in Workbooks

If oWbk.Name = "Сводка.xls" Then

Set oMyWorkBook = oWbk

Exit For

End If

Next

Когда число повторений зависит от какого-либо условия, используются конструкции Do While…Loop и Do Until…Loop.

Конструкция Do While означает: выполнять какое-либо действие до тех пор, пока условие истинно:

Do While MyVar < 10

MyVar = MyVar + 1 : MsgBox “ MyVar = “ & MyVar

Loop

Второй вариант - Do Until: цикл будет выполняться до тех пор, пока условие ложно.

Do Until MyVar >= 10

MyVar = MyVar + 1

MsgBox “ MyVar = “ & MyVar

Loop

Можно переписать цикл так, чтобы условие проверялось после завершения цикла:

Do

MyVar = MyVar + 1

WScript.Echo “MyVar = “ & MyVar

Loop While MyVar < 10

В этом случае цикл будет выполнен по крайней мере один раз.

Немедленный выход из цикла можно произвести по команде Exit Do.

Массивы используются для хранения в памяти множества значений. Объявление массива производится очень просто:

Dim MyArray (10) As Integer

Параметр 10 - это верхняя граница массива. Количество элементов, которое может хранить массив, от 0 до верхней границы включительно. Если требуется, чтобы нумерация элементов в массиве начиналась с 1, в разделе объявлений модуля используется команда Option Base 1

Массивы могут быть многомерными:

Dim MyArray (4, 9)

В каждой строке многомерного массива удобно хранить данные, относящиеся к одному объекту (например, имя сотрудника, уникальный номер, номер телефона). В VBA в одном массиве может быть до 60 измерений.

В динамических массивах размер можно изменять в ходе выполнения программы. Динамический массив объявляется следующим образом:

Dim MyArray () '- объявляем массив без верхней границы

ReDim MyArray (4) ' - изменяем размер массива

Чтобы старые значения сохранить, используется ключевое слово Preserve:

ReDim Preserve MyArray (7)

Массивы можно создавать и заполнять одновременно при помощи встроенной функции Array():

Dim MyArray

MyArray = Array(100, 200, 300, 400, 500)

Очистить массив можно командой Erase:

Erase MyArray

Массив фиксированной длины просто очищается, динамический массив разинициализируется - его придется инициализировать (определять размер) заново.

В динамических массивах часто неизвестно, сколько элементов находится в массиве. Для определения количества элементов используется функция UBound().

При программировании в VBA вместо массивов в объектных моделях приложений Microsoft Office обычно используются коллекции. Коллекции - это специальные объекты, которые предназначены для хранения наборов одинаковых элементов. Например, в Word предусмотрена коллекция Documents для хранения элементов Document - то есть всех открытых документов, в Excel - коллекции Workbooks (открытые книги) и Worksheets (листы в книге) и т.п. Коллекции обычно удобнее, чем массивы: они изначально безразмерны и в них предусмотрен стандартный набор свойств и методов - метод Add() для добавления нового элемента, свойство Count для получения информации о количестве элементов, метод Item() для получения ссылки на нужный элемент.

Лабораторная работа № 6

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]