Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка_VBA

.pdf
Скачиваний:
183
Добавлен:
29.03.2016
Размер:
2.84 Mб
Скачать

49

кнопку Режим конструктора

.

 

 

 

 

тора

на панели Элементы управле-

 

 

ния

 

 

 

 

12.3. Выберите элемент

управления

12.3. Нажмите кнопку Вставить и выбе-

Кнопка и перенесите его

на рабочий

рите элемент Кнопка в элементах

лист.

 

управления ActiveX и перенесите его на

 

 

рабочий лист.

 

 

 

 

12.4.Выполните двойной щелчок на кнопке. В окне редактирования кода появляется первая и последняя строки новой процедуры.

Private Sub CommandButton1_Click()

End Sub

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

Рисунок 15. Список событий связанных с объектом CommandButton1

50

Два раскрывающихся списка в верхней части окна редактора кода облегчают ориентацию в событиях, которые связаны с выбранным объектом. Так на рисунке 15 показан список событий, связанных с объектом CommandButton1.

12.6.Вернитесь на рабочий лист и на панели Элементы управления нажмите кнопку Свойства .

12.7.В окне свойств измените значение свойства Caption. Вместо Commandbutton1 наберите, например, ПерваяПрограмма. Закройте окно свойств.

12.8.Выйдите из режима конструктора, снова нажмите кнопку Режим конструктора на панели Элементы управления.

12.9.Заполните ячейки А1, А2, А3 и нажмите кнопку ПерваяПрограмма.

13.Выполните следующие задания самостоятельно.

13.1.Создайте кнопку на рабочем листе, при нажатии на которую очищался бы только формат ячеек. Необходимый метод найдите самостоятельно в списке методов объекта Range.

13.2.Создайте кнопку на рабочем листе, при двойном щелчке на которую очищался бы столбец рабочего листа. Необходимую событийную процедуру создайте, используя список компонентов и список соответствующих им событий в окне редактора кода. (Событие DblClick).

51

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

Тема: Ввод/вывод данных с помощью диалоговых окон. Запись арифметических и логических выражений на языке VBA

1.Откройте новую рабочую книгу.

2.Войдите в редактор VBA.

3.В окне проекта выберите объект Лист1 и войдите в окно редактирования кода объекта Лист1.

4.Решим следующую задачу: вывести в диалоговое окно сегодняшнюю дату.

Для решения поставленной задачи воспользуемся материалом пункта 15.

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

4.1.Выполните команду Insert/Procedure. в диалоговом окне введите имя процедуры Prog15_1.

4.2.Далее начните вводить программный код процедуры в соответствии с рисунком 16. После ввода запятой при задании фактических параметров процедуры MsgBox появляется подсказка о возможных значениях следующего параметра процедуры MsgBox. Выбираем vbInformation для того чтобы в окне вывода появилась пиктограмма, которая соответствует информационному сообщению.

Рисунок 16.

Далее вводим параметры в соответствии с указанным ниже кодом.

Public Sub Prog15_1() x = Date

MsgBox "" & x, vbInformation, " " End Sub

4.3.Выполните отладку программы (Debug/Compile VBAProject)

4.5. Запустите созданную процедуру. В результате появится диалоговое окно представленное на рис. 17.a.

52

 

 

a)

б)

 

 

 

Рисунок 17.

Если

в

функции

MsgBox использовать только один параметр

(MsgBox

"

"

& x), получим окно сообщений представленное на

рис.17.б.

 

 

 

5. Разработаем диалог с компьютером, который позволит пользователю сравнить свой ответ с правильным. Например, предложим пользователю решить следующую задачу: какое наибольшее десятичное число можно записать тремя цифрами

впятиричной системе счисления?

5.1.Выполните команду Insert/Procedure. В диалоговом окне введите имя процедуры Dialog.

5.2.Введите приведенный ниже программный код.

Public Sub Dialog()

 

Dim st As String

 

st = "

" _

& "

"

st = InputBox(st)

 

MsgBox "

- 124" _

& vbCr & "

- " & st

End Sub

 

Разберем как работает данная процедура.

Dim st As String

st="

& "

Резервируется ячейка оперативной памяти для хранения строковой переменной

" _

Переменной st присваивает- ?" ся строковая константа.

Причем в коде выполнен перенос строковой константы, она представлена как результат конкатенции двух строковых констант (см. пункт 14)

53

st = InputBox(st)

 

Вызывается функция

Input-

 

 

 

Box. В результате появляет-

 

 

 

ся диалоговое окно пред-

 

 

 

ставленное на рис. 18. Пе-

 

 

 

ременной st будет присвое-

 

 

 

но значение строки, кото-

 

 

 

рую

пользователь введет в

 

 

 

текстовое поле (например,

 

 

 

число 124).

 

 

MsgBox "

- 124" _

Вызывается

оператор

 

 

 

& vbCr & "

- " & st

MsgBox для вывода просто-

 

 

 

го

окна сообщений

(см.

 

 

 

рис.19). Строковая констан-

 

 

 

та представлена как резуль-

 

 

 

тат конкатенции двух стро-

 

 

 

ковых констант и встроен-

 

 

 

ной

константы

VBA

vbCr

 

 

 

(см.замечание ниже). Ис-

 

 

 

пользование константы по-

 

 

 

зволяет при выводе разбить

 

 

 

строку на две.

 

 

 

 

 

 

 

 

 

Замечание

Для обозначения некоторых наиболее часто употребляемых клавиш сущест-

 

 

вуют встроенные константы VBA, например для клавиши <Backspace> —

 

vbBack, клавиши <Tab> — vbTab, клавиши <Enter> — vbCr.

 

 

 

 

 

 

 

 

 

Рисунок 18.

5.3. Выполните команду Debug/Compile VBAProject и запустите процедуру, нажав кнопку F5.

Рисунок 19.

54

6. Далее научимся записывать арифметические выражения на языке VBA и получать их значения.

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

Арифметическое выражение в VBA записывается в одну строку.

Арифметические операции, которые используются в VBA, приведены в таблице 4. Порядок выполнения операций в арифметическом выражении задается круглыми скобками. При их отсутствии установлен следующий порядок старшинства арифметических операций: вычисление функции, операция возведения в степень, операции умножения и деления, операции сложения и вычитания.

Операции одинакового старшинства выполняются в том порядке, в котором они следуют в выражении, т.е. слева направо.

Математические функции, которые могут входить в арифметическое выражение, представлены в таблице 5. При записи функции ее аргумент обязательно берется в круглые скобки.

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

 

 

Арифметическое

Запись в VBA

 

 

 

выражение

 

 

 

 

 

 

 

 

Sqr(Exp(2 * x) + Exp(3 * x ^ 2 + 4))

 

 

 

e2 x e3 x2 4

 

 

 

 

 

 

 

(Exp(2 * x) + Exp(3 * x ^ 2 + 4)) ^ (1 / 2)

 

 

 

 

 

 

 

Иногда арифметическое выражение может быть записано

 

 

 

 

 

 

 

несколькими способами в VBA. В данном примере корень

 

 

 

 

 

 

 

квадратный может быть записан как с помощью функции

 

 

 

 

 

 

 

Sqr, так и с помощью операции возведения в степень (пока-

 

 

 

 

 

 

 

затель степени равен ½).

 

sin x2 cos2 x

(Sin(x ^ 2) + Cos(x) ^ 2) / Abs(Log(x - 1.2) ^ 2 / Log(10))

 

 

lg( x 1,2)2

 

 

Обратите внимание, что десятичный логарифм мы заменили

 

 

 

 

 

 

 

 

 

 

 

дробью, содержащей натуральный логарифм. VBA содер-

 

 

 

 

 

 

 

жит запись только натурального логарифма. Числитель дро-

 

 

 

 

 

 

 

би, содержащий сумму, взят в скобки.

6.1. Создайте в модуле редактирования кода объекта Лист1 следующую процедуру.

Public Sub Arifm()

Dim x As Single, y As Single x = InputBox("введите число")

y = Sqr(Exp(2 * x) + Exp(3 * x ^ 2 + 4))

55

MsgBox "y=" & y End Sub

Для ввода значения переменной x используется окно ввода. Для вывода значения арифметического выражения простое окно сообщений.

6.2. Выполните команду Debug/Compile VBAProject и запустите процедуру Arifm, нажав кнопку F5.

6.3.В текстовое поле диалогового окна введите число 1.3 (разделителем целой и дробной части введите точку) и нажмите кнопку OK.

Рисунок 20.

На экране появляется сообщение об ошибке, в котором указывается код ошибки и краткое описание ошибки (см. рис.21).

Нажмите кнопку Debug.

Замечание

Рисунок 21.

Если в сообщении об ошибке отсутствует кнопка Debug, следует выполнить предварительно команду Tools/Options/Вкладка General/Выбрать переключатель Break on all Errors. Повторите пункт 6.3. сначала.

Управление передается в процедуру. Желтым цветом выделяется строка, содержащая ошибку (рис.22).

В данном случае неправильно введено значение переменной x.

6.4. Завершите работу программы, нажав кнопку Reset на стандартной панели инструментов.

запись на языке VB b^2-4*a*c>0
i<>j
Sqr(x)>=2.83

56

Рисунок 22.

6.5.Вновь запустите программу и в качестве значения x введите 1,3 (разделитель целой и дробной части – запятая).

6.6.На экране появляется сообщение о значении арифметического выражения при введенном значении x (рис.23). Ошибка ввода исправлена, мы получили результат работы программы.

Рисунок 23.

6.7. Исправьте программный код процедуры Arifm, чтобы в результате работы программы появлялось диалоговое окно представленное на рис. 24.

Рисунок 24.

6.8. Напишите процедуры для вычисления значений выражения всех арифметических выражений, приведенных в примерах.

7. Далее научимся записывать логические выражения на языке VBA и получать их значения.

Простейшее логическое выражение — это отношение типа a b (меньше), a b (больше), a b (равно), a b (не равно), a b (меньше либо равно), a b (больше либо равно), где a, b константа или переменная (операнды).

Например, запись математическая

b2 4ac 0 i j

x 2,83

57

Результат вычисления логического выражения является переменная типа Boolean, т.е. логическое выражение принимает значения истина (true) или ложь

(false).

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

Логические выражения кроме отношений могут содержать логические операции: инверсию (Not), конъюнкцию (And), дизъюнкцию (Or), строгую дизъюнкцию (Xor), эквивалентность (Equ) и импликацию Imp).

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

Арифметическое Условие Запись условия на VBA выражение

 

 

(a 0) и ((x 1) и (x>0))

a<>0 And x<>1 And x>0

z

ex

Обратите внимание, что скобки опущены, так

 

 

как при вычислении значения выражения со-

a ln x

 

 

блюдается приоритет выполнения операций:

 

 

 

 

 

 

сначала операции отношения, затем конъюнк-

 

 

 

ция.

z

 

 

2

 

(x<-3) или (x>2)

x<-3 or x>2

 

 

 

 

 

 

 

 

x2

x 6

 

 

 

 

 

7.1. Создайте в модуле редактирования кода объекта Лист1 следующую процедуру.

Public Sub Logic()

Dim x As Single, a As Single, y As Boolean

x= InputBox("x")

a= InputBox("a")

y= a <> 0 And x <> 1 And x > 0 MsgBox "Условие " & y

End Sub

Обратите внимание, что переменная y объявлена как логическая переменная, т.е. эта переменная может принимать только два значения True (истина) или

False (ложь).

7.2.Выполните команду Debug/Compile VBAProject и запустите процедуру Logic, нажав кнопку F5.

7.3.Введите значения переменных a и x. Например a=3, x=4. На экране появляется диалоговое окно представленное на рис. 25,а. Если же ввести, например, a=0, x=4, то появится диалоговое окно, представленное на рис. 25,б.

58

а)

б)

Рисунок 25.

8.Выполните задание №1 контрольной работы.

9. Выполните задание №2 контрольной работы.