
Косарев_Экомическая информатика
.pdfПрограммирование |
421 |
Цикл For Each
VBA поддерживает специфическую форму цикла For, пред назначенную для выполнения операции с объектом, входящим в состав некоторой коллекции объектов. Например, такими опе рациями могут быть вызов метода или обращения к свойству. Это позволяет выполнять массовые манипуляции с управляющими элементами или другими объектами аналогично тому, как это де лается с массивами переменных. Синтаксис цикла For:
For Each ИмяОбъекта In ИмяКоллекции Код операций над объектами
Next ИмяОбъекта
Циклы с условием
Главной особенностью циклов с условием является условие, которое может быть любым выражением, принимающим значе ние True (Истина) или False (Ложно). В VBA есть два основных цикла с условием: цикл Do ... While и цикл Do ... Until. Оба могут быть с предусловием или с постусловием.
Синтаксическая конструкция цикла Do While:
Цикл с предусловием |
Цикл с постусловием |
Do While Выражение |
Do |
Операторы |
Операторы |
Loop |
Loop While Выражение |
Здесь Do - ключевое слово;
While - ключевое слово, указывающее тип цикла;
Выражение - выражение условия, принимающее значение True или False; Loop - ключевое слово, указывающее на окончание цикла.
Цикл Do While выполняется до тех пор, пока выражение ус ловия имеет значение True.
Рассмотрим пример цикла Do While, реализующего алгоритм программы, аналогичный алгоритму, приведенному в примере для цикла For с досрочным прерыванием:
Option Explicit
Dim Sum As Integer
Dim j As Integer
Sum = 2
Do While Sum < 10
422 |
Глава 8 |
Sum = Sum + j
j = j + l Loop
Textl.Text = Sum
Врезультате выполнения этого фрагмента программы в тек стовом окне будет показано вычисленное значение переменной Sum, равное 12.
Вотличие от него цикл Do Until выполняется до тех пор, пока выражение условия имеет значение False. Его синтаксическая кон струкция:
Цикл с предусловием |
Цикл с постусловием |
Do Until Выражение |
Do |
Операторы |
Операторы |
Loop |
Loop Until Выражение |
П р и м е р цикла Do Until, реализующего алгоритм програм мы, аналогичен приведенному выше:
Option Explicit Dim Sum As Integer Dim j As Integer Sum = 2
Do Until Sum >9 Sum = Sum + j
j = j + l Loop
Textl.Text = Sum
В результате выполнения этого примера в текстовом окне бу дет показано вычисленное значение переменной Sum, равное 12.
Иногда бывает необходимо прервать цикл с условием, если выполняется какое-либо дополнительное условие. Это может быть сделано с помощью оператора Exit Do, например:
Option Explicit
Dim Sum As Integer
Dim j As Integer
Sum = 2
Программирование |
423 |
Do Until Sum > 9
Sum = Sum + j
Ifj > 3 Then
Exit Do
End If
Loop
Text1.Text = Sum
В этом примере цикл с условием досрочно прерывается, если выполняется дополнительное условие j > 3. В результате будет получено значение переменной Sum, равное 8.
Так же, как и в случае цикла For, из цикла Do ... Loop можно выйти досрочно, используя оператор Exit Do.
Благодаря циклу с условием можно организовать бесконеч ный цикл. Иногда это бывает необходимо, а иногда это происхо дит из-за ошибки пользователя. Для создания бесконечного цик ла условное выражение должно быть таким, которое никогда не выполняется или выполняется всегда.
П р и м е р :
Do Until l Операторы
Loop
Выйти из такого бесконечного цикла и прервать работу про граммы можно, нажав комбинацию клавиш [Ctrl+Break].
8.4.5. ВСТРОЕННЫЕ ФУНКЦИИ
Функция - это специальным образом оформленный блок про граммного кода, который выполняет действия в пределах этого блока и возвращает значение. Синтаксическая конструкция фун кции:
[Private | Public] Function ИмяФункции(СписокПараметров) As Тип ' Тело функции (строки кода)
Имя Функции = Возвращаемое Значение End Function
424 |
Глава 8 |
где [Private | Public] - необязательные ключевые слова, определяющие об ласть видимости функции;
Function - ключевое слово, указывающее на то, что это функция; Имя Функции - имя функции;
Список Параметров - список формальных параметров, который может от сутствовать;
As - ключевое слово, предваряющее значение типа данных; Тип - тип данных возвращаемого значения; Возвращаемое Значение - значение, возвращаемое функцией;
End Function - ключевые слова, указывающие на окончание блока функ ции.
Обращение к функции производится с помощью элементар ного первичного выражения, называемого «вызов функции». Оно имеет следующую конструкцию:
Имя Функции (Список Параметров)
где Список Параметров - список фактических параметров (аргументов), которые могут быть выражениями, заменяющими формальные параметры.
Значением выражения обращения к функции является возвра щаемое функцией значение, которое определяется в теле функции выполнением оператора:
Имя Функции = Возвращаемое Значение
VBA обладает большим набором встроенных функций. По назначению встроенные функции объединяются в следующие группы:
•финансово-математические функции;
•функции преобразования типа;
•математические функции;
•функции статуса;
•функции обработки строк;
•функции даты и времени;
•функции для работы с массивами;
•функции для работы с файлами;
•прочие функции.
Назначение функций первых трех групп приведено ниже.
Программирование |
425 |
Имя функции, параметры Назначение Ф и н а н с о в о - м а т е м а т и ч е с к и е ф у н к ц и и
DDB(Crc>HMOCTb, Остаточная_стоимость, Времяэксплуатации, Период, Кратность)
РУ(Ставка, Клер, Плата [, Нз[,Тип]])
1Рт1(Ставка, Период, Кпер, Нз[, Бз[, Тип]])
Ш1(ВеличинаО[, guess])
МПШСВеличинаО, Ставкафинанс, Ставка_реинвест) МРег(Ставка;Платеж;Нз;Бз;Т ип)
ЫРУ(Ставка, Величина())
РРМТ(Ставка;Период;Кпер;
Нз;Бз;Тип)
Рт1(Ставка, Кпер, Нз[, Бз[, Тип]])
РУ(Ставка, Кпер, Плата[, Бз[,Тип]])
Вычисляет амортизацию фондов в течение заданного интервала времени
Вычисляет накопленную стоимость при известном размере регулярного взноса и постоянной процентной ставке Вычисляет сумму выплат при извест
ном размере регулярного взноса и постоянной процентной ставке Вычисляет внутреннюю норму доход ности при известной последователь ности выплат и поступлений Вычисляет модифицированную внут реннюю норму доходности
Вычисляет количество периодов, не обходимых для достижения заданной фактической стоимости при постоян ном размере выплат и постоянной процентной ставке Вычисляет чистую приведенную
стоимость инвестиционного проекта при известном размере выплат и по ступлений и при постоянной дисконт ной ставке
Вычисляет величину постоянного взноса для достижения определенной суммы при постоянной процентной ставке Аналогична РРМТ, но позволяет вы
числить величину выплаты в зависи мости от того, когда она производится (в начале или в конце периода) Вычисляет приведенную стоимость при известном и постоянном размере выплаты, периоде и постоянной про центной ставке
426 |
Глава 8 |
|
Продолжение |
Имя функции, параметры |
Назначение |
Rate(Knep, Плата, Нз[, Бз[, |
Вычисляет процентную ставку, необ |
Тип]]) |
ходимую для достижения заданной |
|
стоимости при известном периоде |
|
выплат |
SLN(CTOHMOCTI>, Ликвиднаястоимость, Жизнь)
SYD(CTOHMOCTI>, Ликвидная_стоимость, Жизнь, Пе риод)
Функции пр
Азс(СтрокаСимволов) СВоо1(Выражение )
СВу1е(Выражение)
ССш (Выражение ) СОа1е(Выражение) СОЫ(Выражение)
СОес(Выражение)
СтцТЗыражение)
Ол^Выражение)
С8п§(Выражение)
СБпХВыражение)
Оаг(Выражение)
Нех(Число)
Вычисляет величину амортизации фондов линейным методом Вычисляет величину годовой аморти зации фондов за определенный период
е о б р а з о в а н и я т и п о в
Возвращает код первого символа строки Преобразует числовое выражение или
строку в булево значение: True, если значение выражения отлично от нуля, или False, если значение выражения равно нулю Преобразует числовое выражение или
строку в байт. Аргумент может при нимать значения в диапазоне 0-255 Преобразует числовое выражение или строку в число денежного формата Преобразует числовое выражение или строку в дату
Переводит числовое выражение или строку в число типа Double Преобразует числовое выражение или строку в число типа Decimal Преобразует числовое выражение или строку в число типа Integer Преобразует числовое выражение или строку в число типа Long Преобразует числовое выражение или строку в число типа Single Преобразует числовое выражение или строку в строку
Преобразует числовое выражение или строку в число типа Variant Преобразует числовое выражение или строку в шестнадцатеричное число
Программирование |
427 |
Продолжение
Имя функции, параметры
Ос1(Число)
Уа1(Строка)
М а т е м а т и
АЬ5(ЧисловоеВыражение)
Ай1(ЧисловоеВыражение)
СоБ(ЧисловоеВыражение) Ехр(Числовое_выражение)
Р1х(ЧисловоеВыражение)
1ш(ЧисловоеВыражение)
Ьо£(ЧисловоеВыражение)
Яп(1[(Число]
8§п(ЧисловоеВыражение)
8т(ЧисловоеВыражение)
Бдг(ЧисловоеВыражение)
Тап(ЧисловоеВыражение)
Назначение
Преобразует числовое выражение или строку в восьмеричное число Преобразует строку цифровых симво лов в число
ч е с к и е ф у н к ц и и
Абсолютное значение числа Арктангенс от значения параметра, заданного в радианах Косинус указанного в радианах угла
Возвращает число е, возведенное в указанную степень; е - основание на турального логарифма Возвращает результат округления вы
ражения с плавающей точкой до це лой части. Для положительных значе ний аргумента возвращает ближайшее меньшее число, а для отрицательных - ближайшее большее Возвращает результат округления вы
ражения с плавающей точкой до це лой части. В случае отрицательного параметра возвращает ближайшее меньшее отрицательное число Возвращает натуральный логарифм от значения числового выражения Возвращает псевдослучайное число одинарной точности в интервале от О до 1. Необязательный параметр, уста навливает то, как генерируется сле дующее псевдослучайное число Возвращает +1, если значение пара метра положительное, -1 - если отри цательное, и 0 - если О Возвращает синус угла от значения параметра, заданного в радианах Возвращает квадратный корень чи слового выражения
Возвращает тангенс угла от значения параметра, заданного в радианах
428 |
Глава 8 |
8.5. ОБРАБОТКА СОБЫТИИ
События представляют собой сообщения специального вида, создаваемые средой Windows. Событие, как и всякое сообщение, имеет отправителя и получателя. Отправителем сообщения мо жет быть клавиатура или мышь (но список источников событий в среде Windows этим не исчерпывается), а получателем - окно при ложения и управляющий элемент в этом окне, который обладает фокусом. Чтобы приложение могло реагировать на эти события, в коде программы должны быть предусмотрены соответствующие процедуры их обработки. Если обработка какого-либо события в коде программы не предусмотрена, то оно будет потеряно для приложения, которому адресовывалось.
Для создания кода обработки события формы нужно выпол нить следующие действия:
• в окне кода проекта выбрать элемент UserForm или управ ляющий элемент, для которого будет обрабатываться событие (рис. 8.14);
ЩЗ JgS |
A u t o s s v e ( A U T O S A V E . X L A ) |
Ф - 4 $ T u n c r e x ( F U N C R C S . X L A ) |
|
ф"<% £ |
V B A P r a l e c t < f » E R & O r 4 A L . X L S ) |
цЗ-iJG$£ V B A S ^ r o f e c l : ( п р и |
м е р ы V B A j d s ] |
|
4 S |
Mlcroeof t Excel |
О б ъ е к т ы |
- |
в THfcBWorfcbook |
ЧВ ЛИСТ1 ( Л и с т 1 )
-• в листг (листг)
"*-^TJ ЛИСТЭ <ЛИСТЭ>
• г ' в й |
Лис-т«» (д>мгт4} |
—- в5 |
Л и с т Б Х Э а д а ч и Excel) |
СИ—СИЗ Ф о р м ы 1Э " ^ ^ МОДУЛИ
StS. w z t e m p l t . x l a ( W Z T E M P L T . X L A )
Рис. 8.14. Окно кода проекта со списком событий
•раскрыть список событий и в нем выбрать нужное событие, при этом в окне кода проекта появится заготовка процедуры об работки этого события;
•внести в процедуру код обработки события.
Программирование |
429 |
8.5.1. ОБРАБОТКА СОБЫТИЙ ФОРМЫ
Большое значение имеют события формы (их описание при ведено в разд. 8.3.5).
Обработка событий формы производится процедурами:
Private Sub UserForm_Initialize() "Процедура обработки события Initialize
Код End Sub
Private Sub UserForm_Terminate() "Процедура обработки собы тия TerminateO t
Код обработки события End Sub
Рассмотрим пример обработки событий формы:
1) создайте проект с экранной формой, представленной на рис. 8.15:
Рис. 8.15. Экранная форма для примера обработки событий формы
2) свойству Caption формы установите значение «События формы», а свойству Caption элемента управления Command Button 1 - значение «Выгрузить форму»;
3)в процедуру обработки события CommandButtonl_Click() для элемента управления запишите код:
430 |
Глава 8 |
Private Sub CommandButtonl_Click()
Unload UserForm 1 ' Выгрузка Forml
End 'Завершить выполнение программы
End Sub
4) в процедуры обработки событий формы введите код
Private Sub UserForm_Initialize() MsgBox «Событие формы Initialize »
End Sub
Private Sub UserForm_Terminate()
MsgBox «Событие формы Terminate - выгрузка формы» End Sub
5) запустите программу на выполнение. При обработке каж дого из событий формы на экране должно появляться окно сооб щения с текстовой информацией об обрабатываемом событии (рис. 8.16).
Рис. 8.16. Окно сообщения:
а- о событии 1; б - о событии 2
8.5.2.ОБРАБОТКА СОБЫТИЙ МЫШИ
VBA поддерживает пять событий мыши. Их описание при ведено ниже.