Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование с помощью процедур VBA.doc
Скачиваний:
1
Добавлен:
28.09.2019
Размер:
149.5 Кб
Скачать

Счетный цикл

В языке VBA к таким циклам относится Цикл For... Next, который, выполняет блок операторов заданное количество раз.

Синтаксис этого оператора цикла следующий:

For переменная цикла = нач значение То кон значение Step шаг

операторы

Next переменная цикла

В цикле For...Next переменная цикла это обычная переменная.

Во время первого выполнения (прохода) цикла переменная имеет начальное значение нач_значение, и выполняются все операторы цикла (вплоть до ключевого слова Next).

Во время второго прохода цикла к значению переменная прибавляется значение шаг и результат сравнивается со значением кон значение.

Если переменная больше кон значение, цикл прерывается, если нет, операторы цикла выполняются снова.

Шаг цикла можно опустить, в этом случае шаг считается равным 1. Если значение шаг отрицательно, то счет в цикле идет в обратную сторону до тех пор, пока переменная не станет меньше, чем кон_значение.

Переменная цикла должна иметь целый или вещественный тип. Соответственно начальное и конечное значения должны иметь целый или вещественный тип.

Упражнение. Составить программу процедуры для определения количества рабочих дней месяца.

Это можно сделать проверив каждый день месяца с помощью стандартной функции VBA – WeekDay, которая по календарной дате (день,месяц,год) выдает номер дня недели. Будем считать нерабочими днями субботу и воскресенье (6,7).

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

Каждый месяц начинается с числа 1 (начало цикла), для определения значения количества дней используем процедуру предыдущего примера (ее результат задаст конец цикла).

Чтобы использовать значение, возвращаемое функцией, надо поместить ее имя справа от знака равенства.

Функция WeekDay имеет аргументом переменную специального типа ДатаВремя (календарная дата), которая может быть вычислена специальной функцией Excel – DateValue по номеру года, месяца и дня.

Function Раб_дней_месяце( Месяц, Год)

Dim ДеньКалендаря As Dateвспомогательная переменная для календарной даты

Раб_дней_месяце = 0 ‘вначале не найдено ни одного раб. дня

Кол_дней = Дней_в_меяце(Месяц, Год)

For день = 1 То Кол_дней

ДеньКалендаря = DateSerial (Год, Месяц, день) Формируем новую дату

ДеньНедели = WeekDay(ДеньКалендаря, 1)

Вставьте здесь оператор, который в зависимости от значения переменной ДеньНедели, должен прибавить к переменной Раб_дней_месяце 1, если ДеньНедели является рабочим, иначе ничего прибавлять не надо.

Next день

End Function

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

СПРАВОЧНИК ФУНКЦИЙ VBA

Арифметические функции

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

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

Int(число) Fix(число) Возвращают значение, которое содержит целую часть числа. Обе функции Int и Fix отбрасывают дробную часть числа и возвращают целое значение. Различие между функциями Int и Fix состоит в том, что для отрицательного значения аргумента число функция Int возвращает ближайшее отрицательное целое число, меньшее либо равное указанному, а Fix - ближайшее отрицательное целое число, большее либо равное указанному.

Rnd[(число)] Возвращает значение типа Single, содержащее случайное число. Необязательный аргумент число представляет значение типа Single или любое допустимое числовое выражение. Функция Rnd возвращает значение из диапазона 0<X<1.

Перечень ключевых слов, связанных с датами и временем

DateSerial(год, месяц, день). Возвращает значение типа Variant (Date), соответствующее указанному году, месяцу и дню.

DateValue(год, месяц, день).. Возвращает дату, содержащуюся в строке-параметре

DateAdd, Возвращает значение типа Variant (Date), содержащее дату, к которой добавлен указанный временной интервал

WeekDay (Дата, [начало недели]) – Возвращает номер дня недели для переменной Дата, Начало недели=0, если неделя начинается с воскресенья, 1 – если с понедельника.

Mounth(Дата) Возвращает число в диапазоне 1—12, соответствующее месяцу

Уеаr(дата) Возвращает число, соответствующе году переданной в параметре даты

Date, Now, Time Определение текущей даты или времени,..

Date, Time Установка даты или времени

Определение времени. TimeSerial, TimeValue

Функции над строковыми переменными

Len (строка, имяПеременной) Возвращает число символов в строке.

строка - любое допустимое строковое выражение.

имяПеременной - любое допустимое имя переменной. Если имяПеременной является значением типа Variant, функция Len обрабатывает его так же, как и значение типа String, и всегда возвращает число содержащихся в нем символов.

Mid(cтpoka, старт, [длина]) Возвращает часть исходной строки, содержащее указанное число символов строки.

строка - обязательный элемент. Строковое выражение, из которого извлекаются символы.

старт - обязательный элемент. Значение типа Long. Позиция символа в строке, с которого начинается нужная подстрока. Если старт больше числа символов в строке, функция Mid возвращает пустую строку.

длина - необязательный элемент. Значение типа Variant (Long). Число возвращаемых символов. Если этот аргумент опущен или превышает число символов, расположенных справа от позиции старт, то возвращаются все символы от позиции старт до конца строки.

InStr([start, ]string1, string2[, compare]) Возвращает значение типа Variant (Long), указывающее позицию первого вхождения одной строки внутри другой строки.

start Необязательный. Числовое выражение, задающее позицию, с которой начинается каждый поиск

string1 Обязательный. Строковое выражение, в котором выполняется поиск.

string2 Обязательный. Искомое строковое выражение.

compare Необязательный. Указывает способ сравнения строк. Аргумент compare может быть опущен или иметь значение 0, 1 или 2.

Функции преобразований типов

Asc[cтpoka) Возвращает значение типа Integer, представляющее ASCII-код символа, для первого символа строки. Обязательный аргумент строка является любым допустимым строковым выражением. Если строка не содержит символов, возникает ошибка выполнения.

Сhr(кодСимвола) Возвращает значение типа String, содержащее символ, соответствующий указанному коду символа. Обязательный аргумент кодСимвола является значением, определяющим символ. Коды 0...31 соответствуют стандартным управляющим символам ASCII. Например, Chr(10) возвращает символ перевода строки, возвращает символ табуляции, Chr(2) возвращает символ пробел. Обычным диапазоном значений аргумента кодСимвола является интервал 0...255.

Str(число) Возвращает значение типа Variant (String), являющееся строковым представлением числа. Обязательный аргумент число может задаваться любым допустимым числовым выражением. При преобразовании числа в строку вначале строки обязательно резервируется позиция для знака числа. Если число является положительным, возвращенная строка будет содержать пробел на месте знака.

В качестве допустимого десятичного разделителя функция Str воспринимает только точку. При наличии другого десятичного разделителя (например, запятой) для преобразования чисел в строки следует использовать функцию CStr

Val(строка) Возвращает числа, содержащиеся в строке, как числовое значение соответствующего типа. Обязательный аргумент строка является любым допустимым строковым выражением. Функция Val прекращает чтение строки на первом символе, который она не может распознать в качестве части числа. Символы, которые часто рассматриваются в качестве частей числовых значений типа знака доллара и запятых не распознаются в качестве разделителя целой и дробной части распознается только точка (.). Пробелы, символы табуляции и символы перевода строк удаляются из значения аргумента.

ДОПОЛНИТЕЛЬНО

Комментарии. Это пояснительный текст, который можно записать в любом месте программ. Каждая строка комментариев начинается со знака апострофа. Комментарии игнорируются компилятором, и поэтому никакого влияния на программу не оказывают.

Цикл-пока и Цикл-до. В языке VBA эти структуры реализуются с помощью операторов Do...Loop. В структуре Do...Loop для определения количества циклов выполнения блока операторов используется условие. Условие можно проверять в начале (цикл-пока) или конце цикла (цикл до).

Существует четыре различных способа написания цикла Do...Loop:

Выполнение операторов цикла будет продолжаться, пока условие, стоящее за ключевым словом While (Пока), истинно (True); Условие записывают в виде логического выражения. Оператор тела цикла повторяется, пока условие истинно.

Do While условие

операторы

Loop

Do Until условие

операторы

Loop

Do

операторы

Loop While условие

Do

операторы

Loop Until условие

Проверка осуществляется на входе. Если при входе в цикл условие не выполняется, то оператор тела цикла игнорируется

В иной записи выполнение операторов цикла будет выполняться, пока условие, стоящее за ключевым словом Until (До тех пор пока не), не станет истинно (т.е. цикл выполняется, пока условное выражение ложно).

Цикл-до. Операторы тела цикла повторяются до выполнения условия, условие проверяется на выходе, т.е. тело цикла всегда выполняется хотя бы один раз.

Оператор безусловной передачи управления. Этот оператор передает управление в точку, определенную специальной меткой

GOTO <метка>

Метка ставится перед любым выполняемым оператором программы. Метка от оператора отделяется знаком «:» (двоеточие). На один оператор можно поставить несколько меток.

GOTO M2

<инструкции программы>

M2: <инструкции программы>

Кроме того, оператор Exit - осуществляет выход из подпрограммы, из любого места процедуры.

Использование встроенных диалоговых окон для ввода значений переменных

В языке VBA существует два типа встроенных диалоговых окон, которыми вы можете пользоваться в программах для сообщения данных пользователю и получения данных от пользователя или при отладке программы.

Эти диалоговые окна вызываются с помощью функций MsgBox() и InputBox().

Функция MsgBox() отображает диалоговое окно, содержащее сообщение и одну или несколько кнопок, необходимых для закрытия этого диалогового окна.

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

11