УПРАВЛЕНИЕ ОБРАЗОВАНИЯ
АДМИНИСТРАЦИИ МУНИЦИПАЛЬНОГО ОБРАЗОВАНИЯ
ГОРОДСКОГО ОКРУГА «ВОРКУТА»
МУНИЦИПАЛЬНОЕ ОБЩЕОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ «ЛИЦЕЙ №1»
ЛАБОРАТОРНЫЕ РАБОТЫ ПО ИНФОРМАТИКЕ
Методические указания по выполнению лабораторных работ VBA
Составитель Яменко Ольга Петровна, учитель информатики
Воркута 2012
В методических указаниях рассмотрены основы работы с текстовым редактором Word.
Методические указания предназначены как для обучающихся основного общего (полного) образования., так и для студентов очно-заочной и заочной форм обучения всех специальностей.
Содержание:
Лабораторная работа №1. «Программирование линейного алгоритма в среде VBA» 4
Лабораторная работа №2. «Программирование разветвляющегося алгоритма в среде VBA» 6
Лабораторная работа №3 «Циклы. Одномерный массив» 7
Лабораторная работа №3 «Циклы. Одномерный массив» 8
Лабораторная работа №4 «Вложенные циклы. Двумерный массив» 11
Лабораторная работа №5 «Обработка строковых данных» 13
Начало процедуры 13
Лабораторная работа №6 «Создание форм в VBA» 16
Dim St As String 19
Лабораторная работа №1. «Программирование линейного алгоритма в среде VBA»
Цель работы: ознакомиться со средой VBA. Овладеть навыками программирования в VBA.
Задание 1. Программирование линейного алгоритма.
Пример1 : Написать программу вычисления функции f(x)=x2+1 в диалоговом режиме.
В программе нам понадобятся две переменные – x и f. Для ввода значения х будем использовать функцию ввода InputBox, а для вывода значения f – оператор вывода MsgBox. Переменные х и у опишем как переменные вещественного типа, т.е. Single.
Чтобы попасть в VBA необходимо выполнить команду СервизМакросРедактор Visual Basic или нажать клавиши Alt+F11. Появиться окно VBA. Для вставки модуля выполним команду ВставкаМодуля (рис.7.).
В открывшемся окне модуля наберите следующую строку Sub PR1() и нажмите клавишу Enter. Таким образом у вас будет создан каркас процедуры:
Sub Pr1()
End Sub
Теперь необходимо наполнить этот каркас операторами.
Во-первых, опишем наши переменные x и f – Dim x as Single, f as Single
Во-вторых, огранизуем ввод переменной х – x = InputBox(“Введите значение х”)
В-третьих, запишем оператор для вычисления f
f = x^2+1
В-четвертых, выведем значение переменной f – MsgBox "f=" & Format(f, "###.#0"). Функцию Format использовали для того, чтобы вывести значение функции с 2-мя знаками после запятой. Итак, процедура должна иметь следующий вид:
Sub Pr1()
Dim x As Single, f As Single
x = InputBox("Введите значение х")
f = x ^ 2 + 1
MsgBox "f=" & Format(f, "###.#0")
End Sub
Для запуска программы на выполнение нажмите клавишу F5. Для запуска программы с листа Excel необходимо выполнить следующие действия:
Зайти на лист Excel.
Выполнить команду ВидПанели инструментовЭлементы управления (рис.8.).
Щелкнуть на элементе управления кнопка и нарисуйте кнопку на листе Excel
Вызовите контекстное меню для нарисованной кнопки (щелчок правой кнопкой мыши) и выполните команду Свойства. Откроется окно свойств кнопки (Рис.3.). Используя свойства BackColor, Font, ForeColor выберите закраску фона кнопки и шрифт для надписи на кнопке.
В окне свойства Caption введите текст надписи на кнопке – Диалоговый режим.
Выполните двойной щелчок на кнопке. Откроется окно процедуры и каркас заготовки процедуры для кнопки
Private Sub CommandButton1_Click()
End Sub
Внутри каркаса напишите операторы, которые должны будут выполняться для при щелчке на этой кнопке. В нашем случае щелчок на кнопке, должен вызывать процедуру вычисления функции. Для вызова процедуры достаточно указать её имя. Итак, процедура для кнопки будет иметь следующий вид:
Private Sub CommandButton1_Click()
Pr1
End Sub
Зайдите на лист Excel и отключите режим конструктора на панели элементов управления («отожмите» кнопку конструктора)
Щелкните на кнопке для запуска процедуры расчета функции.
Пример 2. Написать программу вычисления функции f(x)=x2+1 с использованием ячеек Excel.
Любая ячейка или группа ячеек является объектом Range, который в свою очередь, является производным от объекта Worksheet. Например, для обращения к значению ячейки А1 на втором листе Excel, необходимо использовать следующую конструкцию : Worksheets(2).Range(“A1”)
Итак, оформим программу вычисления функции, причем значение переменной х будем считывать из ячейки листа Excel и значение переменной f, так же будем помещать в ячейку.
В ячейку A1 введите – х=, а в ячейку A2 – f(x)=
В ячейку B1 введите любое числовое значение переменной х
Зайдите в редактор VBA , откройте первый модуль, установите курсор под оператором End Sub
Наберите оператор начала процедуры для второго примера – Sub Pr2() и нажмите Enter
Опишите переменные x и f
Переменной х присвоим значение содержимого ячейки B1. Для этого запишите следующую конструкцию – x=Range(“B1”)
Напишите оператор вычисления функции (см. пример 1)
Поместим значение переменной f в ячейку B2 – Range(“B2”)=f
Оформите вызов программы Pr2 c листа Excel (с помощью кнопки, см. пример 1)
Задание 2.
Напишите программу вычисления функции из лабораторной №4 для одного значения х.
| А | В | С |
1 | Иванов П.С. | | |
2 | оклад | 500 | |
3 | северные | 400 | |
4 | Итого начислено: | 900 | |
5 | подоходный налог | 65 | |
6 | Итого удержано: | 65 | |
7 | Итого к выплате | 835 | |
Задание 3. Напишите программу вычисления заработной платы для отдельного сотрудника. Исходные данные – ФИО, оклад и северные вводить в диалоговом режиме, а расчетный лист сотрудника оформите на втором листе Excel в виде таблицы
Лабораторная работа №2. «Программирование разветвляющегося алгоритма в среде VBA»
Цель работы: овладеть навыками программирования разветвляющихся алгоритмов. Освоить структуру операторов If…Then и Select…Case
Оператор If...Then...Else
Синтаксис этого оператора следующий:
If условие Then [инструкции] [Else инструкции_else]
Допускается также использование блоковой формы синтаксиса:
If условие Then
[инструкции]
[Else
[инструкции_else]]
End If
Простую однострочную форму рекомендуется использовать для коротких, простых проверок. Однако блочная форма обычно проще для чтения, обработки и отладки.
Однострочная форма допускает выполнение нескольких инструкций в результате проверки одного условия If...Then, но все инструкции должны находиться на одной строке и разделяться двоеточием, как в следующем примере:
If A 10 Then A = A + 1 : B = B + A : C = C + B
Допускаются вложенные блоки инструкций If; то есть блоки If, содержащиеся в других блоках.
Пример 1: Выбрать максимальное из двух введенных чисел. Рассмотрим 2 примера программы-в первой используется строчная форма записи условного оператора, во-второй – блочная
Строчная форма записи | Блочная форма записи |
Sub pr1() Dim x As Integer, y As Integer y = Range("A1") x = Range("A2") If y x Then Range("A3") = y Else Range("a3") = x End Sub | Sub pr1() Dim x As Integer, y As Integer y = Range("A1") x = Range("A2") If y x Then Range("A3") = y Else Range("a3") = x End If End Sub |
Пример2: Вычислить площадь треугольника, если таковой существует.
Sub pr1()
Dim x As Integer, y As Integer, z As Integer
x = Range("A1")
y = Range("A2")
z = Range("A3")
If (x + y) z And (x + z) y And (y + z) x Then
p = (x + y + z) / 2
s = Sqr((p - a) * (p - b) * (p - c))
Range("a4") = s
Else
Range("a4") = "Треугольник с такими сторонами не существует"
End If
End Sub
Оператор Select … Case
Если приходится проверять одно и то же значение в сравнении с различными выражениями, то самым подходящим обычно оказывается оператор Select…Case. Синтаксис этого оператора следующий:
Select Case значение
Case критерий1
(операторы, выполняемые, когда значение удовлетворяет критерий1)
Case критерий2
(операторы, выполняемые, когда значение удовлетворяет критерий2)
…’дополнительные операторы Case
Case Else ‘необязательный
(операторы, выполняемые, когда значение не удовлетворяет ни одному из приведенных критериев)
End Select
В каждом предложении Case допускается использование нескольких выражений или диапазонов. Например, допустима следующая строка:
Case 1 To 4, 7 To 9, 11, 13, Is MaxNumber
Пример 3
Sub pr()
Dim x as Integer
X= InputBox(“Введите число”)
Select Case x
Case 1 To 5
MsgBox "Между 1 и 5"
Case 6, 7, 8
MsgBox "Между 6 и 8"
Case x 8 And x
MsgBox "Больше 8"
Case Else
MsgBox "Вне интервала 1 -- 10"
End Select
End Sub
| A | B | C | D |
| Решение квадратного уравнения ax2+bx+c=0 |
1 | | | | |
2 | Коэффициенты | |
3 | а | b | c | |
4 | 9 | 1 | 1 | |
5 | | | | |
6 | Решение | |
7 | D | корней нет | | |
8 | -35 | | | |
9 | | | | |
10 | | |
11 | |
12 | |
13 | |
Задание 1. Запрограммировать в VBA вычисление функции f(x) из лабораторной работы №6. В программе использовать обращение к ячейкам. Вызов программы организовать с листа Excel.
Задание 2. Написать программу решения квадратного уравнения ах2+bx+c=0 с помощью условного оператора Select…Case. В программе рассмотреть три случая: D=0,D0,DExcel. Пример оформления задачи на рисунке 10
Рис.10. Оформление решения
Лабораторная работа №3 «Циклы. Одномерный массив»
Цель работы: овладеть навыками применения циклического процесса при обработке одномерных массивов и табулирования функции.
Наиболее часто используемыми циклами являются следующие:
For… Next – заданное число раз
For счетчик = начало To конец [Step шаг]
[инструкции]
Next [счетчик]
Синтаксис инструкции For…Next содержит следующие элементы:
Счетчик - числовая переменная, используемая в качестве счетчика цикла.
Начало - начальное значение переменной счетчик.
Конец - конечное значение переменной счетчик.
Шаг - значение, на которое изменяется счетчик при каждом выполнении тела цикла. Если это значение не задано, по умолчанию шаг равен единице.
Инструкции - одна или несколько инструкций между For и Next, которые выполняются указанное число раз.
Do While…Loop – пока или до тех пор, пока некоторое условие имеет значение True
Do While условие
[инструкции]
Loop
Синтаксис инструкции Do… Loop содержит следующие элементы:
Условие - числовое выражение или строковое выражение, которое имеет значение True или False.
Инструкции -одна или несколько инструкций, выполнение которых повторяется, пока условие имеет значение True .
Пример 1. Посчитать количество отрицательных элементов в массиве
Операторы программы | Описание действий |
Sub pr() | Начало процедуры |
Dim x(10) as Integer, I as Integer | Задаем размерность массива Х (10 элементов) и тип массива и переменной I |
For I=1 to 10 | Начало цикла для считывания массива |
x(i)=Cells(I,”a”) | i-ому элементу массива Х присвоить значение ячейки расположенной на пересечении I-ой строки и столбца “A” |
if x(i) | Проверяем является ли I-ый элемент массива отрицательным. Если элемент оказался отрицательным увеличиваем счетчик отрицательных элементов (k) на единицу. |
Next i | Конец цикла |
Range(“B1”)=k | Ячейке “B1” присвоить значение переменной k |
End sub | Конец процедуры |
Пример 2. Указать индекс первого нулевого элемента в массиве.
Операторы программы | Описание действий |
Sub pr() | Начало процедуры |
Dim x(10) as Integer, I as Integer | Задаем размерность массива Х (10 элементов) и тип массива и переменной I |
For i=1 to 10 | Начало цикла для считывания массива |
x(i)=Cells(I,”a”) | i-ому элементу массива Х присвоить значение ячейки расположенной на пересечении I-ой строки и столбца “A” |
Next i | Конец цикла |
I=1 | Присваиваем счетчику элементов массива (переменная i) начальное значение 1 |
Do while x(i)0 | Начало цикла Do. До тех пор пока i-ый элемент массива больше 0 |
I=i+1 | Увеличиваем счетчик на 1 (т.е. переходим к следующему элементу) |
Loop | Конец цикла Do |
Range(“C1”)=i | В ячейку С1 выводим значение переменной i |
End sub | Конец процедуры |
Задание 1. Сформировать указанный массив и вывести результат на лист Excel.
Вариант | Задание |
1 | Сформировать элементы массива по правилу xi= cos(2i)-1.Определить максимальный элемент массива и его порядковый номер |
2 | Сформировать элементы массива по правилу xi= isin(1-i). Посчитать сумму положительных элементов массива. |
3 | Сформировать элементы массива по правилу xi=(2+i)cos(i2). Найти среднее арифметическое элементов массива. |
4 | Сформировать элементы массива по правилу хi=sin(i)-cos(i). Вывести положительные элементы массива в один столбец, а отрицательные в другой |
5 | Сформировать элементы массива по правилу хi=sin(2i)-cos(i). Определить количество элементов массива кратных 3 и переписать их в отдельный массив. |
6 | Сформировать элементы массива по правилу хi=sin2 (i)-cos(i). Переписать в массив Y элементы -3i |
7 | Сформировать элементы массива по правилу хi=sin(i)-cos2 (i). Посчитать сумму элементов, стоящих в массиве на четных местах |
8 | Сформировать элементы массива по правилу хi=cos(i)-sin(i). Поменять местами максимальный и минимальный элементы массива |
9 | Сформировать элементы массива по правилу хi=isin(i)-cos(i). Найти сумму максимального и минимального элементов |
10 | Сформировать элементы массива по правилу хi=sin(i)-icos(i). Заменить все отрицательные элементы массива на 0 |
11 | Сформировать элементы массива по правилу хi=sin3 (i)-cos(3i). Определить минимальный элемент массива и его порядковый номер. |
12 | Сформировать элементы массива по правилу хi=sin(2i)-cos3 (i). Посчитать сумму отрицательных элементов массива. |
13 | Сформировать элементы массива по правилу хi=sin(i)+2cos(i). Найти отклонение каждого элемента массива от среднего значения |
14 | Сформировать элементы массива по правилу хi=sin(i)+cos 3(i). Определить количество четных элементов массива переписать их в отдельный массив. |
15 | Сформировать элементы массива по правилу хi=3sin(i)+cos3(i). Переписать в массив Y элементы массива Х меньшие 2 или большие 5 и посчитать их количество. |
16 | Сформировать элементы массива по правилу хi=sin3(i)+2cos(i). Посчитать сумму элементов, стоящих в массиве на нечетных местах |
17 | Сформировать элементы массива по правилу хi=sin3(3i)-cos(3-i). Поменять местами максимальный и первый, и минимальный и последний элемент |
18 | Сформировать элементы массива по правилу хi=sin(1-i)-cos(i3). Найти сумму элементов, больших среднего значения |
19 | Сформировать элементы массива по правилу хi=sin(i)cos(i). Заменить все положительные элементы массива на 0 |
20 | Сформировать элементы массива по правилу хi=sin3(3i)+cos(i). Записать в массив сначала положительные элементы , а затем отрицательные |
Задание 2. Упорядочить элементы массива по возрастанию.
Задание 3. Для функции из лабораторной работы №4 написать программу в редакторе VBA.
Лабораторная работа №4 «Вложенные циклы. Двумерный массив»
Цель работы: овладеть навыками применения циклического процесса при обработке двумерных массивов.
Пример 1. Посчитать кол-во нулевых элементов каждой строки массива А. Результат записать в вектор В .
Элементы массива А задать с помощью функции случайных чисел.
Операторы программы | Описание действий |
Sub Pr1() | Начало процедуры |
Блок описания переменных |
Dim a(5, 5) As Single, b(5) As Byte | Описание двумерного массива А и вектора B |
Dim i As Byte, j As Byte | Описание переменных i,j |
Range("a1") = "Массив А" | В ячейку А1 помещаем заголовок “Массив А” |
Range("g1") = "Отрицательные эл-ты" | В ячейку G1 помещаем заголовок “ Отрицательные эл-ты ” |
Определение формата для ячеек |
Range("A2:G6").Select | Выбираем ячейки А2:G6 |
Selection.NumberFormat = "0" | Задаем выбранным ячейкам формат – целые числа |
Блок формирования и вывода значений элементов матрицы А |
For i = 1 To 5 | |
For j = 1 To 5 | |
a(i, j) = Int((-5 * Rnd) + 4) | Формирование элементов массива a(i,j) |
Cells(i + 1, j) = a(i, j) | Вывод значений на лист Excel |
Next j | |
Next i | |
Подсчет нулевых элементов матрицы А |
For i = 1 To 5 | |
b(i) = 0 | |
For j = 1 To 5 | |
If a(i, j) = 0 Then b(i) = b(i) + 1 | |
Next j | |
Next i | |
Вывод элементов вектора В на лист Excel |
For i = 1 To 5 | |
Cells(i + 1, "G") = b(i) | |
Next i | |
End Sub | Конец процедуры |
Задание 1. С помощью справочной системы VBA ознакомиться с инструкцией Randomize. Разобрать пример из справки.
Задание 2. Сформировать массив произвольной размерности, используя счетчик случайных чисел и результат вывести на лист Excel.
Вариант | Задание |
1 | Подсчитать сумму элементов каждого столбца матрицы. Результат записать в одномерный массив. Указать номер столбца с максимальной суммой элементов |
2 | Посчитать сумму отрицательных элементов, лежащих на главной диагонали и сумму положительных элементов, лежащих на побочной диалонали. Вывести эти элементы в разные столбцы. |
3 | Найти минимальный элемент в матрице и записать его на место первого элемента |
4 | Поменять местами элементы, лежащие на главной диагонали и на побочной |
5 | Посчитать сумму положительных элементов, лежащих выше главной диагонали |
6 | Посчитать сумму отрицательных элементов, лежащих ниже главной диагонали |
7 | Записать вместо элементов, лежащих на побочной диагонали на элементы первого столбца |
8 | К положительным элементам главной диагонали прибавить значение минимального элемента матрицы А |
9 | Транспонировать матрицу |
10 | Сформировать одномерный массив В, элементами которого будут являться минимальные элементы каждой строки матрицы А |
11 | Исключить из массива строку, содержащую хотя бы один нулевой элемент |
12 | Сформировать одномерный массив В, в котором сначала будут записаны положительные элементы массива А, а затем отрицательные |
13 | Посчитать сумму отрицательных элементов, лежащих ниже побочной диагонали |
14 | Поменять местами элементы побочной диагонали и последней строки |
15 | Поменять местами второй столбец и столбец с максимальной суммой элементов |
16 | Сформировать одномерный массив, элементами которого будут являться положительные элементы, лежащие под главной диагональю. |
17 | Сформировать одномерный массив, элементами которого будут являться отрицательные элементы, лежащие под главной диагональю. |
18 | Вычеркнуть из матрицы столбец, содержащий максимальное число отрицательных элементов. |
19 | Поменять местами столбцы с минимальной и максимальной суммой элементов |
20 | Записать в массив В четные элементы массива А |
Лабораторная работа №5 «Обработка строковых данных»
Цель работы: овладеть навыками обработки строковых данных в среде VBA
При обработке строк , в случае удаления или добавления каких-либо символов, удобнее всего использовать циклы типа Do…Loop. Если же длина строки в процессе обработки не меняется, то можно использовать цикл For…Next.
При обработке строк используются следующие функции: InStr, Mid, Len и другие (см. лекции).
Пример 1. Посчитать количество слов, начинающихся на указанную букву
В этой программе нам понадобятся переменная строкового типа, в которой будет храниться исходное предложение (st), переменная целого типа, которая будет отвечать за количество слов (k), и счетчик для цикла (i).
Операторы программы | Описание действий |
Sub lab15() | Начало процедуры |
Dim st As String, k as Integer, i As Byte | Описание переменных |
st = Range("a1") | Считываем значение из ячейки А1 в переменную st |
S=InputBox(“На какую букву искать слова”) | Вводим букву, на которую будем искать слова |
k=0 | Обнуляем счетчик слов |
If Mid(st, 1, 1) = s Then k = 1 | Сравниваем первый символ предложения с заданным символом. |
| |
For i=2 to len(st) | Цикл, начиная со второго по последний символ |
If Mid(st, i, 2) = " "+s Or Mid(st, i, 1) = ","+ s Then k = k + 1 End If | Будем считать, что слова в предложении разделены пробелом или запятой. Тогда , если в предложении необходимо посчитать кол-во слов на букву “с” будем искать в предложении сочетания “ c” или “,c” |
Next i | Конец цикла |
Range(“a2”)=”Кол-во слов начинающихся на букву ” & s & “ равно “ & k | Вывод ответа в ячейку А2 |
End Sub | Конец цикла |
Задание1. Ознакомиться с функциями обработки строк в справке VBA
Задание2. Написать программу в VBA. Исходные и расчетные данные выводить на лист Excel. Запуск программ организовать с листа Excel.
№ варианта | Задание |
1 | Ввести предложение и слово. Определить вхождение этого слова в предложение. Определить количество слов в предложении. |
2 | Определить длину предложения. Поставить в конце предложения точку, если ее нет. |
3 | В заданном предложении указать слово , в котором доля гласных ‘a’, ‘е’, ‘и’ максимальна. Выделить подстроку между первой и второй точкой. |
4 | Вставить после каждой буквы ‘a’ звездочку и посчитать количество вставленных символов. Определить самое длинное слово в предложении. |
5 | Проверить, имеется ли баланс открывающих и закрывающих скобок. В заданном тексте удалить пробелы и посчитать количество удаленных символов. |
6 | Проверить, имеется ли баланс открывающих и закрывающих скобок. В заданном тексте удалить пробелы и посчитать количество удаленных символов. |
7 | Определить длину введенного слова. Вставить звездочки в начале и в конце слова. Из предложения S1 в переменную S скопировать четыре символа, начиная с первого пробела. |
8 | Вставить в конце предложения восклицательный знак. Напечатайте каждое слово предложения с новой строки, центрируя их по правому краю. |
9 | Определить длину введенного предложения. Вставить восклицательный знак в начале и в конце предложения. Посчитать количество пробелов в предложении. |
10 | Ввести предложение и определить длину первого слова. Распечатать каждое слово предложения с новой строки. Заменить все запятые в предложении на пробелы. |
11 | Вставить после каждого пробела звездочку. Для каждого слова заданного предложения указать долю согласных букв – “ Н”, ”П”, ”Р”. Определить слово, в котором доля согласных максимальна. |
12 | Распечатать каждое слово предложения с новой строки. В заданном предложении удалить лишние пробелы, оставляя только по одному пробелу между символами. |
13 | Ввести предложение, определить длину каждого слова и распечатать каждое слово с новой строки. В тексте предложения заменить пробелы на запятые. Если в тексте встречается несколько пробелов подряд, то вместо них поставить одну запятую. |
14 | В заданном предложении указать слово, в котором доля гласных ‘a’, ‘е’, ‘и’ максимальна. Выделить подстроку между второй и третьей точкой. |
15 | Проверить, имеется ли баланс открывающих и закрывающих скобок. В заданном тексте удалить пробелы и посчитать количество удаленных символов. |
16 | Определить длину введенного предложения. Вставить восклицательный знак в начале и в конце предложения. Посчитать количество пробелов в предложении. |
17 | Определить длину введенного слова. Вставить звездочки в начале и в конце слова. Из предложения S1 в переменную S скопировать четыре символа, начиная с первого пробела. |
18 | Удалить из текста пробелы и подсчитать длину сформированного текста. Из заданного текста предложения выбрать и напечатать только те символы, которые встречаются в нем только один раз ( в том порядке, в котором они встречаются в тексте). |
19 | Поменяйте местами первое и последнее слова в предложении. Ввести предложение и слово. Определить есть ли в предложении это слово |
20 | Удалить из предложения все запятые. Определить длину второго слова в предложении. |
Лабораторная работа №6 «Создание форм в VBA»
Цель работы: освоить приемы создания прикладных программ.
Наша программа-пример должна будет открывать на экране новое окно с показанной в нем цитатой, а также датой и временем (сообщением). Окно будет оставаться на экране до тех пор, пока пользователь не щелкнет на кнопке ОК.
Программа будет состоять из следующих элементов:
форма (UserForm), т.к. программа имеет одно окно;
два элемента управления для формы (надпись для сообщения и кнопка для команды OK);
программный код для двух процедур(одной – для надписи, в которую нужно поместить сообщение, а другой – для выхода из программы, когда пользователь щелкнет на кнопке OK).
Обе наши процедуры можно разместить в окне программного кода, ассоциированом с формой. Так как эти процедуры отвечают на события, которые происходят с формой.
Создание новой формы.
Для создания новой формы, которая будет служить окном программы, из меню редактора VBA выберите InsertUserForm.
Новая пользовательская форма представляет собой серую панель. Можно изменять её размеры, перетаскивая маленькие белые квадратики, примыкающие к правому и нижнему краям формы. Окно нашей программы должно быть немного шире и немного меньше по высоте (рис.11).
Добавим в форму пару элементов управления. Начнем с элемента управления надписью, который просто отображает текст. Во время выполнения программы элемент управления надписью отображает текст, который пользователь видит, но изменить не может. Но программа это сделать может и ей придется это сделать, так как она будет отображать дату и время, которые зависят от того, когда программа выполняется.
Чтобы поместить надпись в новую пользовательскую форму, выполните следующее:
Убедитесь, что форма активна, щелкнув на ней;
Щелкните на пиктограмме с буквой А в панели элементов управления;
Каждой новой надписи VBA автоматически приписывает заголовок, поэтому в прямоугольной рамке, ограничивающий наш элемент управления надписью будет текст Label1. Это не тот текст, который нам нужен. Чтобы удалить автоматически созданный текст надписи, придется обратиться в окно свойств.
Окно свойств.
Каждый элемент управления имеет список свойств. Они определяют внешний вид и поведение элемента управления при выполнении программы. VBA дает возможность менять свойства элементов управления без печатания программного кода.
Для управления свойствами предназначено окно свойств. Как видно из рис.12., в окне свойств представлен список всех свойств выделенного в данный момент элемента управления. Чтобы изменить нужное нам свойство, просто найдите его в левом столбце и измените значение этого свойства в правом.
Для надписи в нашей программе нужно изменить лишь два свойства – Name (Имя) и Caption (Заголовок) . Замените имя элемента управления с Label1 на lblNow. Чтобы сделать это, найдите свойство Name в списке свойств. Двойным щелчком в правом столбце строки этого свойства выберите его, а затем впечатайте новое имя.
Затем опуститесь по списку ниже и найдите свойство Caption. Здесь просто удалите значение свойства, так как ваша программа сама обеспечит текст для надписи во время выполнения.
Кнопка команды
Элемент управления кнопкой команды отличается от надписи тем, что предполагает определенные действия со стороны пользователя программы. Когда кто-нибудь щелкает на кнопке, её изображение на экране меняется так, что она выглядит нажатой, а программа в ответ выполняет какие-нибудь действия.
Чтобы поместить такую кнопку в форму выполните следующее:
Щелкните в окне формы, чтобы сделать его активным снова;
Щелкните на той пиктограмме в панели элементов управления, на которой изображена кнопка;
Начав немного левее середины формы и нажав левую кнопку мыши, перетащите указатель по диагонали вниз, чтобы создать кнопку.
Для установления нужных значений свойств, выполните следующие шаги:
Измените значение свойства Name на OKButton
Измените значение свойства Caption на OK. Этот текст увидит пользователь на кнопке во время выполнения вашей программы.
Добавление программного кода
Чтобы напечатать связанный с формой или одним из её элементов управления программный код, вам нужно вместо окна формы открыть окно программного кода этой формы. Для этого выделите форму или элемент управления в ней. Затем воспользуйтесь одним из следующих способов:
В появившемся при этом окне программного кода должна уже присутствовать заготовка процедуры. Первой строкой созданного для вас программного кода будет
Private Sub OKButton_Click()
В любой VBA-процедуре первая строка программного кода определяет тип процедуры ( в данном случае это процедура типа Sub, т.е. подпрограмма) и имя процедуры. Для процедуры VBA предлагает имя OKButton_Click, которое представляет собой комбинацию имени кнопки и типа события.
Последней строкой автоматически генерируемого программного кода является
End Sub
Такой строкой должны заканчиваться все процедуры типа Sub. Эта строка сообщает VBA о том, что выполнение процедуры пора завершить.
Текстовый курсор будет мигать между этими двумя созданными VBA строками. Напечатав лишь одну дополнительную строку программного кода, мы дадим возможность программе завершить работу. Вот её программный код:
Unload Me
Оператор Unload убирает указанный объект из памяти. Здесь это объект с именем Me, имеющим в VBA специальный смысл. В данном случае оно означает форму и весь её программный код.
Вторая процедура должна отображать на экране сообщение. В окне программного кода, которое должно было остаться активным, выполните следующие шаги:
В текстовом поле слева вверху окна программного кода, в котором до сих пор должно быть написано OKButton, щелкните на стрелке в правом конце поля. В результате откроется сисок объектов, имеющих отношение к форме (рис.13.);
Из раскрывающего списка выберите UserForm.
VBA создаст новую процедуру для события Click (щелчок). Эта процедура будет вызвана, если пользователь вашей программы щелкнет кнопкой мыши в любом месте формы, где нет элементов управления. Нам пока эта процедура не нужна.
Теперь щелкните на стрелке в конце текстового поля, находящегося справа, чтобы открыть список процедур, в котором будут перечислены все события, которые VBA распознает в связи с объектом UserForm;
Выберите Activate – самый первый пункт в списке. VBA создаст заготовку процедуры UserForm_Activate.
Можете удалить пустую процедуру UserForm_Click, выделив весь её текст и нажав клавишу Del.
Внутри заготовки процедуры наберите следующие три строки:
первая строка
Dim St As String
Создает переменную с именем St и определяет её как строковую.
Вторая строка
St=”Сегодня:”
Сохраняет текст “Сегодня” в созданной переменной St.
Третья строка
LblNow.Caption = St & Format(Now, “dddddd, hh ч. mm мин.”)
Содержит программный код, который непосредственно отображает нужное сообщение в форме. Эта строка начинается с идентификации элемента управления с именем lblNow как объекта с которым идет работа. После имени идет точка, означающая, что далее идет свойство объекта lblNow – в данном случае это свойство Caption. Оставшаяся часть строки определяет сообщение, которое должно появиться на экране в виде надписи.
Теперь программа готова к запуску. Чтобы запустить программы из редактора VBA, выполните следующее:
Щелкните либо в окне форме, либо в окне программного кода, чтобы соответствующее окно стало активным;
Нажмите F5.
Описанные методы работают только в редакторе VBA. Чтобы вывести форму на экран из VBA-приложения, нужно с помощью редактора Visual Basic создать процедуру типа Sub, которая вызывает форму, а затем выполнить эту процедуру в приложении. Для этого сделайте следующее:
В редакторе VBA выберите InsertModule, чтобы создать модуль и открвть окно его программного кода.
Напечатайте следующие строки программного кода:
Sub ShowSt()
UserForm1.Show
End Sub
Если ваша форма названа не UserForm1, а как-то иначе, замените это имя во второй строке на правильное.
Задание 1
Написать программу в VBA c использованием форм. На форме должны присутствовать окна для ввода данных и вывода данных, кнопки ОК и Отмена. Вызов программы организовать с листа Excel. Организовать проверку на правильность ввода данных. Вычисленное значение выводить с точностью до двух знаков после запятой.
№ варианта | Задание |
1 | Ввести длины сторон треугольника и вычислить площадь треугольника, если таковой существует. |
2 | Ввести величины диагоналей и вычислить длину стороны ромба. |
3 | Вычислить площадь пирамиды. |
4 | Вычислить площадь цилиндра. |
5 | Вычислить площадь трапеции. |
6 | Зная длины двух сторон треугольника и угол между ними, вычислить длину третьей стороны |
7 | Вычислить объем пирамиды. |
8 | Вычислить объем цилиндра. |
9 | Создать калькулятор для вычисления деления и возведения в степень. |
10 | Создайте калькулятор для вычисления логарифма по любому основанию. |
11 | Вычислить площадь круга. |
12 | Вычислить объем шара. |
13 | Вычислить длину вектора. |
14 | Найти корни квадратного уравнения. |
15 | Вычислить определитель матрицы А(2,2). |
16 | Вычислить скалярное произведение двух векторов. |
17 | Вычислить высоту цилиндра, зная радиус основания и объем. |
18 | Создать калькулятор вычисления sin, cos, tg |
19 | Создать калькулятор вычисления arcsin, arcсos. |
20 | Вычислить диаметр основания цилиндра, зная высоту и объем. |