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

Косарев_Экомическая информатика

.pdf
Скачиваний:
170
Добавлен:
03.05.2015
Размер:
9.05 Mб
Скачать

Программирование

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 поддерживает пять событий мыши. Их описание при­ ведено ниже.