часть2

Visual Basic for Applications for Applications (VBA). Лабораторные работы. Часть 2

Введение

Процедуры в Visual Basic for Applications могут проверять некие условия и затем, в зависимости от результатов проверки, выполнять разные операции. Обычно условие является простым сравнением, но оно может быть любым выражением с вычисляемым значением. Visual Basic for Applications интерпретирует это значение как True (истина) или False (ложь).

Тема №1: «Условный оператор»

Для записи разветвляющихся алгоритмов используется оператор If.
Он имеет две формы записи.
1. Однострочная запись:
If условие Then [оператор1] [Else оператор2]
Если условие, верно, то выполняется оператор 1, в противном случае выполняется оператор 2.
В условии записывается логическое выражение, которое использует операции сравнения.
Оператор сравнения
Значение
Пример

= (знак равенства)
Равно
A1=B1

> (знак больше)
Больше
A1>B1

< (знак меньше)
Меньше
A1
>= (знак больше и знак равенства)
Больше или равно
A1>=B1

<= (знак меньше и знак равенства)
Меньше или равно
A1<=B1

<> (знак «не равно»)
Не равно
A1<>B1


Пример:
If A<0 then A=10 else A=A-1
Для создания сложных условий используются логические операции and (и) и or (или).
If A>0 and A<2 then A=10 else A=A-1

2. Многострочная запись:
If <условие> Then
[оператор1] Else
[оператор2]
End If

Если при выполнении условия должно быть выполнено несколько операторов, то применяется составной оператор:
If условие Then [оператор 1, оператор 2 и т.д.] [Else оператор1, оператор2 и т.д.] end if
Пример:
If A<0 then
S=S+1
A=10
Else
S=12
A=A+10
End if

Если при выполнении условия 1 должен быть выполнен оператор 1, а в противном случае при выполнении условии 2 должен быть выполнен оператор 2 и т.д., то применяется вложенный условный оператор:
If условие-1 Then [ оператор1]
[ElseIf условие-2 Then [оператор2] ...
[Else [оператор3]]
End If
End If

Пример 1.
Составьте процедуру для решения следующей задачи: Даны действительные числа х и у. Присвоить переменной z значение х - у, если х > у; в противном случае присвоить z значение у-х+ 1.
Для этого:
а) добавьте к проекту форму;
б) разместите на форме 3 элемента "Надпись" (Label3 – для вывода результата), 2 элемента "Поле" (TextBoxl - для ввода х, TextBox2 для ввода у) и 2 элемента "Кнопка";
в) свойство BorderStyle (стиль рамки) элемента "Надпись" с именем Label3 установите в значение 1;
г) измените значения других свойств объектов так, чтобы форма имела следующий вид:














В окне редактирования модуля наберите для события Click первого элемента "Кнопка" код процедуры:
Private Sub CommandButton1_Click()
Dim x As Single, у As Single, z As Single
х = Val(TextBox1.Text)
у = Val(TextBox2.Text)
If х > у Then z = х - у Else z = у - х + 1
Label3.Caption = "Результат z= " & z
End Sub

Изучите код процедуры
Функция Val преобразует вводимое значение из текстового формата в числовой. Свойство Text элемента "Поле" является свойством по умолчанию, т.е. при обращении к этому свойству можно не указывать его после точки. Таким образом, записи х = Val(TextBox1.Text) и х = Val(TextBox1) равноправны
Напишите для события Click второго элемента "Кнопка" код процедуры выхода из программы.
Выполните запуск приложения. Проверьте полученный результат.
Добавьте на форму еще 1 элемент "Надпись" и 1 элемент "Поле".
Составьте процедуру для решения следующей задачи: Даны действительные числа а, b, с. Подсчитать количество и сумму нечетных чисел среди трех чисел а, b, с. Для подсчета количества и суммы используйте следующий алгоритм:
k=0
sum=0
If a mod 2 <> 0 Then k=k+1: sum=sum+a
If b mod 2 <> 0 Then k=k+1: sum=sum+b


ЗАДАНИЕ №1
Даны три действительных числа. Напишите процедуру для решения задачи согласно варианту. Для выполнения процедуры измените созданную вами форму.

Варианты заданий
Количество пар равных между собой чисел.
Количество положительных нечетных чисел.
Произведение и сумму ненулевых чисел.
Сумму положительных чисел, кратных 5.
Количество пар равных по абсолютному значению между собой чисел.
Среднее арифметическое ненулевых чисел.
Сумму отрицательных чисел из диапазона от -10 до -1.
Количество и произведение тех чисел, которые при делении на 7 дают остаток 1.
Количество пар взаимно противоположных чисел.
Среднее арифметические чисел, больших 1, но меньших 10.

Тема №2: «Оператор выбора»

За счёт вкладывания одного условного оператора в другой, конструкция усложняется и становится тяжёлой для восприятия. В подобных случаях хорошей альтернативой оператору If служит оператор выбора Select Case, который позволяет выбрать одно из нескольких возможных продолжений программы. Оператор Select Case удобно использовать, когда в зависимости от значения некоторого выражения, имеющего конечное множество допустимых значений, необходимо выполнить разные действия. Он также относится к условным операторам, но имеет другой вид:
Select Case <Выражение>
Case <3начение 1>
<оператор 1>
[Case <3начение N>
<оператор N>]
[Case Else
<оператор N+1,]
End Select
Вначале вычисляется выражение. Полученное значение последовательно сравнивается со всеми значениями в предложениях Case. Если получено равенство, т.е. Выражение = 3начение, то выполняются действия после соответствующего предложения Case. Если Выражение не совпадает ни с одним значением, то выполняется оператор, стоящий после Case Else.
Тип Значений должен совпадать с типом проверяемого Выражения.
Пример:
Select Case A
Case l
В = "А равно 1"
Case 2
В = "А равно 2"
Case Else
В = "Переменная А не равна 1 или 2"
End Select

В области Значение можно указать не одно, а диапазон значений.
Если в области Значение находится условие, то необходимо использовать ключевое словосочетание Case Is < условие>.
Пример:
Select Case Range("B 1")
Case ""
Range("Bl") = 0
Case Is > 100
Range ("Bl") = 100
Case 8 to 16
Range("Bl") = 0
End Select

Пример 2.
Разработайте приложение для регистрации участников межвузовской конференции. Приложение запрашивает фамилию участника, город (выбирается из списка; если нет в списке, то можно ввести в текстовом окне), должность (выбирается из списка: профессор, доцент, старший преподаватель, преподаватель, ассистент, студент), затем из введенных данных формирует текстовую строку (например, "Иванов В.А., доцент, Хабаровск") и заносит ее в список. В приложении должна быть предусмотрена возможность удаления строки из списка. Для этого:
1) добавьте к проекту форму;
2) разместите на форме 3 элемента "Надпись", 1 элемент "Поле" (для ввода фамилии), 2 элемента "Список" (первый - для выбора должности, второй - для формирования результата - списка участников), 1 элемент "Поле со списком" (комбинированное окно для ввода или выбора города из списка) и 2 элемента "Кнопка" (первый – для занесения строки в список, второй - для удаления отмеченной строки из списка);
3) измените значения свойств элементов так, чтобы форма имела следующий вид:


















4) напишите код процедуры для обработки события Activate формы, которое происходит, когда форма становится активной. Процедура заполняет список ListBox1. Метод Additem добавляет строку в список. Добавьте в список должности.
Private Sub UserForm_Activate()
ListBox1.AddItem "Профессор"
ListBox1.AddItem "Доцент"

5) напишите код процедуры для обработки события Initialize формы, которое происходит, когда форма инициализируется. Процедура заполняет поле со списком ComboBox1. Добавьте в поле со списком 4 города.
Private Sub UserForm_ Initialize ()
ComboBox1.AddItem "Москва"

6) напишите код процедуры для обработки события Click элемента "Кнопка" с именем CommandButtonl. Предусмотрите в макросе обработку следующих ситуаций:
а) если не введена фамилия:
If TextBox1 = "" Then _
MsgBox "Вы не ввели фамилию": Exit Sub
б) если не выбрана в списке должность или не указан город. Свойство ListIndex содержит порядковый номер выбранной в списке строки. Строки в списке нумеруются, начиная с 0. Если не выбрана ни одна строка, свойство ListIndex имеет значение -1.
index = ListBox1.ListIndex
If index = -1 Then _
MsgBox "Вы забыли выбрать должность": Exit Sub
7) для определения того, какое значение было выбрано из списка ListBox1 воспользуйтесь оператором выбора:
Select Case index
Case 0: mes = "Профессор"
Case 1: mes = "Доцент"

End Select
8) занесите введенное в поле TextBox1, выбранное из списка ListBox1 и из поля со списком ComboBox1 значения в список ListBox2 с помощью метода AddItem.
9) для удаления выбранного пункта из списка используется метод RemoveItem Index. Параметр index указывает на порядковый номер удаляемого пункта и является обязательным.
Ind = ListBox2.ListIndex
ListBox2.RemoveItem (Ind)
Предусмотрите ситуацию, когда не отмечена строка в списке при удалении.

ЗАДАНИЕ №2.
Измените форму и напишите процедуры для решения задачи согласно варианту:
Варианты заданий
Составьте процедуру, которая запрашивает по отдельности день, месяц и год, затем из введенных значений формирует текстовую строку (например, "Сегодня 1 Мая 2002 года") и выводит ее. Разместите на форме: 1 элемент «Список» (заполните названиями 6 месяцев), 2 элемента «Поле» (для ввода числа и года), 4 элемента «Надпись» (для текста «Введите число», «Введите год», «Выберите месяц» и для вывода сформированной даты), 2 элемента «Кнопка» (для формирования даты и выхода из программы).
Составьте процедуру, которая запрашивает по отдельности фамилию студента, баллы за семестр и баллы за экзамен, затем из введенных баллов формирует рейтинг и выводит текстовую строку (например, "Иванов – рейтинг 90 баллов"). Разместите на форме: 1 элемент «Поле со списком» (заполните фамилиями 6 студентов), 2 элемента «Поле» (для ввода баллов за семестр и за экзамен), 3 элемента «Надпись» (для вывода текста «Введите баллы за семестр», «Введите баллы за экзамен», «Выберите фамилию», 2 элемента «Кнопка» (для формирования рейтинга и выхода из программы). Сформированный текст выведите в окне сообщений (MsgBox).
Составьте процедуру, которая запрашивает по отдельности марку автомобиля, цвет и год выпуска, затем введенные значения в виде текстовой строки добавляет в элемент «Список» (например, "Лада цвет красный 2009 год выпуска"). Разместите на форме: 3 элемента «Список» » (1 список заполните названиями 5 марок автомобилей, 2 список – 5 цветами, 3 список – для вывода сформированного текста), 1 элемент «Поле» (для ввода года выпуска), 4 элемента «Надпись» (для вывода текста «Введите год», «Выберите марку», «Выберите цвет», «Сформированный список»), 2 элемента «Кнопка» (для формирования текста для добавления в список и выхода из программы).
Составьте процедуру, которая запрашивает по отдельности фамилию работника, должность и номер цеха, затем из введенных значений формирует текстовую строку (например, "Мастер Иванов работает в 1 цехе") и выводит ее. Разместите на форме: 1 элемент «Поле со списком» (заполните номерами 6 цехов), 2 элемента «Поле» (для ввода фамилии и должности), 4 элемента «Надпись» (для текста «Введите фамилию», «Введите должность», «Выберите цех» и для вывода сформированного текста), 2 элемента «Кнопка» (для формирования текста для вывода и выхода из программы).
Составьте процедуру, которая запрашивает по отдельности город, улицу, номер дома и номер квартиры, затем введенные значения в виде текстовой строки добавляет в элемент «Список» (например, "Адрес: город Волжский, улица Мира, дом 5 кв.30"). Разместите на форме: 3 элемента «Список» (1 список заполните названиями 5 улиц, 2 список – номерами 5 домов, 3 список – для вывода сформированного текста), 2 элемента «Поле» (для ввода города и номера квартиры), 4 элементов «Надпись» (для вывода текста «Введите город», «Введите квартиру», «Выберите улицу», «Выберите дом»), 2 элемента «Кнопка» (для формирования текста для добавления в список и выхода из программы).
Составьте процедуру, которая запрашивает по отдельности цену, количество и наименование товара, затем из введенных значений формирует текстовую строку (например, "Монитор 1 шт. 5000 руб.") и выводит ее. Разместите на форме: 1 элемент «Список» (заполните названиями 6 товаров), 2 элемента «Поле» (для ввода цены и количества), 4 элемента «Надпись» (для текста «Введите цену», «Введите количество», «Выберите товар» и для вывода сформированного текста), 2 элемента «Кнопка» (для формирования текста для вывода в поле и выхода из программы).
Составьте процедуру, которая запрашивает по отдельности наименование товара, количество товара на складе и количество заказанного товара, затем из введенных значений формирует остаток товара на складе и выводит текстовую строку в окне сообщений (MsgBox) (например, "Сахар – остаток на складе 30 кг."). Разместите на форме: 1 элемент «Поле со списком» (заполните наименованиями 6 товаров), 2 элемента «Поле» (для ввода количества товара на складе и заказанного товара), 3 элемента «Надпись» (для вывода текста «Введите количество заказанного товара», «Введите количество товара на складе», «Выберите товар», 2 элемента «Кнопка» (для формирования остатка товара на складе и выхода из программы).
Составьте процедуру, которая запрашивает по отдельности фамилию студента, номер группы и номер курса, затем введенные значения в виде текстовой строки добавляет в элемент «Список» (например, "Иванов: студент 1 курса 106 группы"). Разместите на форме: 3 элемента «Список» (1 список заполните номерами 5 групп, 2 список – номерами 5 курсов, 3 список – для вывода сформированного текста), 1 элемент «Поле» (для ввода фамилии), 3 элемента «Надпись» (для вывода текста «Введите фамилию», «Выберите курс», «Выберите группу»), 2 элемента «Кнопка» (для формирования текста для вывода и выхода из программы).
Составьте процедуру, которая запрашивает по отдельности число, месяц, год рождения и фамилию, затем из введенных значений формирует дату рождения и выводит текстовую строку в окне сообщений (MsgBox) (например, "Иванов - дата рождения 12 января 1996 года"). Разместите на форме: 3 элемента «Список» (1 список заполните названиями 4 месяцев, 2 список – 4 числами, 3 список – 4 годами), 1 элемент «Поле» (для ввода фамилии), 5 элементов «Надпись» (для текста «Введите фамилию», «Выберите год», «Выберите месяц», «Выберите число» и для вывода сформированного текста), 2 элемента «Кнопка» (для формирования текста даты рождения и выхода из программы).
Составьте процедуру, которая запрашивает по отдельности номер группы, фамилию студента и факультет, затем из введенных значений формирует текстовую строку (например, "Иванов учится на факультете ФЭИ в группе ВВТ-106") и выводит ее. Разместите на форме: 1 элемент «Поле со списком» (заполните названиями 6 групп), 2 элемента «Поле» (для ввода фамилии и факультета), 4 элемента «Надпись» (для текста «Введите фамилию», «Введите факультет», «Выберите группу» и для вывода сформированного текста), 2 элемента «Кнопка» (для формирования текста для вывода и выхода из программы).
Тема №3: «Обращение к ячейкам листа Excel»
Пример 3.
Добавьте форму. Разместите на форме 2 элемента "Кнопка" (кнопка CommandButton2 для выхода из программы) и 1 элемент "Надпись".
Напишите код процедуры, которая с помощью оператора IfThenElseEnd If окрашивает положительные числа в синий цвет, отрицательные – зеленым, а нуль – красным.
Для создания универсальной программы, т.е. щелчок по кнопке будет форматировать каждую последующую ячейку, нужно использовать переменные в адресе, что позволяет сделать объект Cells.
If X > 0 Then
Cells(Y, 1).Font.ColorIndex = 5
ElseIf X < 0 Then
Cells(Y, 1).Font.ColorIndex = 4
Else
Cells(Y, 1).Font.ColorIndex = 3
End If
Условимся, что номер строки – это Y, а значение ячейки это переменная Х. Опишите в программе до процедуры CommandButton1_Click() эти переменные:
Dim Y As Byte и Dim X As Integer
Примечание: Переменные, объявленные вне процедуры, сохраняют значение после окончания выполнения процедуры. Переменные, объявленные внутри процедуры Sub...End Sub или вовсе не объявленные, при каждом запуске программы обнуляются.
Введите 10 чисел (положительных, отрицательных и нулевых) в ячейки столбца А. Проверьте работу программы. Результат окажется нулевым, т.к. переменная Y не изменяет своего значения – это значит Y=0.
Добавьте до оператора If строку Y=Y+1. Теперь при каждом щелчке номер строки будет вырастать на 1. Проверьте работу кнопки. Результат окажется неверным, т.к. для программы значение Х тоже нулевое.
До оператора If добавьте строку X=Cells(Y, 1). Проверьте работу кнопки и объясните назначение этой строки.
Чтобы прослеживать в какой строке происходит форматирование, добавьте до End Sub строку: Range("B1")=Y. Проверьте работу кнопки и объясните назначение этой строки.
Добавьте на форму еще 1 кнопку. Напишите код процедуры, которая окрашивает числа в черный цвет: Range("A1:A10").Font.ColorIndex = 0, а также прослеживает в какой строке происходит форматирование.
Проверьте работу программы: сначала работу 2 кнопки, затем 1 кнопки. В ячейке В1 значение номера строки только вырастает.
Обнулите значение Y. Проверьте работу программы.
Добавьте на форму еще 1 кнопку. Напишите код процедуры, которая с помощью оператора Select CaseEnd Select изменяет размера шрифта по правилу: чем больше число, тем больше значение размера шрифта.
Select Case X
Case Is < -20
Cells(Y, 1).Font.Size = 10
Case Is < 0
Cells(Y, 1).Font.Size = 12
Case 0 To 20
Cells(Y, 1).Font.Size = 14
Case Is > 20
Cells(Y, 1).Font.Size = 16
End Select

Изучите код процедуры.
Установите для столбца А размер шрифта 8 (меню Формат-Ячеек). Код процедуры измените таким образом, чтобы положительные числа имели размер шрифта 14, отрицательные – 12, нули – 10.

ЗАДАНИЕ №3.

Измените код процедуры из п.10 примера 3 таким образом, чтобы выполнить задание согласно варианту.
Варианты заданий

Изменение цвета шрифта не выполнялось далее 4 строки.
Производить поворот положительных чисел на 45 градусов (Range(“A1”).Orientation=45).
Изменение размера шрифта не выполнялось далее 6 строки.
Цвет шрифта для положительных четных и нечетных был разным.
Производить поворот первых 5 чисел на 45 градусов (Range(“A1”).Orientation=45).
Производить изменение цвета шрифта только для чисел из диапазона от -5 до 5 включительно.
После 5 строки размер шрифта был равен 8.
Отрицательные числа располагались вертикально (например, Range(“A1”).Orientation=90).
Изменение размера шрифта производилось для положительных и отрицательных чисел (исключить 0).
Изменялся цвет шрифта и поворот на 45 градусов положительных чисел (например, Range(“A1”).Orientation=45).











Приложенные файлы

  • doc 9326766
    Размер файла: 127 kB Загрузок: 0

Добавить комментарий