Работа в среде vba — примеры
Do … Loop Until.
Ниже приведен синтаксис этих операторов цикла:
‘ Цикл с предусловием Do While … Loop
Do While УСЛОВИЕ
БЛОК_ОПЕРАТОРОВ
[Exit Do]
БЛОК_ОПЕРАТОРОВ
Loop
Примечание. Не рекомендуется принудительно изменять значения параметра цикла, его начального и конечного значения в теле цикла For…Next.
‘ Цикл с предусловием Do Until … Loop
Do Until УСЛОВИЕ
БЛОК_ОПЕРАТОРОВ
[Exit Do]
БЛОК_ОПЕРАТОРОВ
Loop
‘ Цикл с постусловием Do … Loop While
Do
БЛОК_ОПЕРАТОРОВ
[Exit Do]
БЛОК_ОПЕРАТОРОВ
Loop While УСЛОВИЕ
‘ Цикл с постусловием Do … Loop Until
Do
БЛОК_ОПЕРАТОРОВ
[Exit For]
БЛОК_ОПЕРАТОРОВ
Loop Until УСЛОВИЕ
Оператор Do While…Loop обеспечивает многократное повторение блока операторов до тех пор, пока УСЛОВИЕ соблюдается, а оператор Do Until…Loop пока УСЛОВИЕ не соблюдается. Операторы Do…Loop While, Do…Loop Until отличаются от перечисленных выше операторов тем, что сначала блок операторов выполняется по крайней мере один раз, а потом проверяется УСЛОВИЕ.
Для избежания зацикливания в теле цикла должен быть хотя бы один оператор, который изменяет значения переменных, стоящих в УСЛОВИИ.
Оператор Exit Do обеспечивает досрочный выход из оператора цикла.
Пример 1. Составить фрагмент программы для алгоритма на рис. 3.6.
Пример 2. Составить фрагмент программы для алгоритма на рис. 3.7.
Пример 3. Составить фрагмент программы, соответствующей алгоритму
Структура программы. Модули, процедуры и функции
Модуль представляет собой текстовый ASCII-файл с программным кодом, содержащим подпрограммы, переменные и константы. Проект может состоять из множества программных модулей. Для их создания необходимо выполнить команду Вставка Модуль. Рабочее окно модуля представлено на рис. 4.1.
Основу программ в VBA составляют процедуры и функции.
Процедура Sub– это обособленная совокупность операторов VBA, выполняющая определенные действия. В общем случае процедура принимает некоторые параметры (переменные, которые передаются процедуре в качестве исходных данных), выполняет программу и может возвращать результирующие значения, которые присваиваются параметрам внутри процедуры. Однако чаще используются процедуры без параметров. Например, процедуры, выполняющиеся при возникновении определенных событий. Вложенность процедур в другие процедуры не допускается. Структура процедуры следующая:
[ДОСТУП] Sub ИМЯ_ПРОЦЕДУРЫ ([СПИСОК_ПАРАМЕТРОВ])
ТЕЛО_ ПРОЦЕДУРЫ
End Sub
Ключевое слово ДОСТУП является необязательным и определяет область видимости процедуры. Public указывает, что процедура доступна для всех других процедур во всех модулях (глобальная). Private указывает, что процедура доступна для других процедур только того модуля, в котором она описана (локальная). СПИСОК_ПАРАМЕТРОВ также является необязательным элементом и позволяет передавать процедуре различные исходные данные при вызове, которые называются формальными параметрами. При этом ключевое слово Dim не указывается. ТЕЛО_ПРОЦЕДУРЫ состоит из описательной части и блока операторов, выполняющихся один за другим. Если необходимо прекратить выполнение процедуры в некотором конкретном месте, это можно сделать с помощью оператора Exit Sub. ИМЯ_ПРОЦЕДУРЫ – это любой идентификатор, определенный пользователем. Идентификатор – это последовательность букв, цифр и символа подчеркивания, начинающаяся с буквы (пробелы внутри идентификатора недопустимы). Имя процедуры всегда определяется на уровне модуля. Для использования процедуры в тексте программы (т. е. для её вызова), необходимо указать имя процедуры и список фактических параметров, которые должны по типу и порядку следования совпадать с формальными параметрами.
Функция Function во многом похожа на процедуру, но в отличие от неё при вызове всегда возвращает значение. Функция получает параметры, называемые аргументами, и выполняет с ними некоторые действия, результат которых возвращается функцией. Структура функции следующая:
[ДОСТУП] Function ИМЯ_ФУНКЦИИ(СПИСОК_АРГУМЕНТОВ) As ТИП
ТЕЛО_ ФУНКЦИИ
ИМЯ_ФУНКЦИИ = ВЫРАЖЕНИЕ
End Function
ТИП определяет тип данных возвращаемого результата. В теле функции обязательно должен присутствовать, по крайней мере, один оператор, присваивающий имени функции значение вычисляемого выражения. Досрочное завершение функции возможно с помощью оператора Exit Function. В программе вызов функции осуществляется с помощью оператора присваивания, в правой части которого указывается имя функции с перечнем фактических параметров, как и любой другой встроенной функции, например, Sqr, Cos или Chr.
Процедуры и функции, не описанные явно с помощью ключевых слов Public или Private, по умолчанию являются общими.
Для быстрого добавления в модуль подпрограмм удобно воспользоваться командой Вставка Процедура. В появившемся окне (рис. 4.2) нужно выбрать необходимые опции.
В MS Excel с функциями, созданными пользователем, можно работать с помощью Мастера функций точно так же, как и со встроенными функциями рабочего листа.
Пример. В MS Excel создать функцию пользователя, математически определенную следующим образом:
y = sin(x) ∙ e-5x
Создадим модуль, как указано выше (рис 4.2), и введем в него текст следующей программы:
Public Function Y(x As Single) As Single
Y = Sin(x) * Exp(- 5 * x )
End Function
Для использования созданной функции на рабочем листе MS Excel введем в ячейку А2 число 0.1. В ячейке В2 вычислим значение функции Y при x = 0.1. Для этого в ячейку В2 достаточно ввести формулу =Y(A2). Это можно сделать и с помощью Мастера функций, который будет содержать функцию Y наряду с другими встроенными функциями MS Excel (рис 4.3).
Общие принципы организации программ VBA в модуле следующие. Обычно текст программы начинается с опций, которые управляют описанием переменных, способом сравнения строк и т. д.
Затем следует объявление глобальных для данного модуля переменных и констант, т. е. таких, которые используются во всех процедурах модуля.
Далее располагают непосредственно текст функций и процедур, составляющих саму программу.
Разделителем операторов в одной строке при записи программы является символ “:”.
Для переноса оператора на другую строку используется символ “_” (знак подчеркивания).
Иногда внутри программы удобно помещать комментарии – пояснительный текст, который игнорируется компилятором и может быть записан в любом месте программы. Комментарии удобно также использовать при отладке программы для временного отключения операторов. Каждая строка комментариев начинается со знака апострофа.
Пример организации модуля:
Option Base 1
Option Explicit
‘ PI – глобальная константа
Const PI As Double = 3.14159
‘ x — глобальная переменная
Dim x As Double
‘ Функция Disc вычисляет площадь круга
Public Function Disc(R As Double) As Double
x = 2
Disc = PI * R ^ 2
End Function
‘ Функция Rec вычисляет площадь треугольника
Public Function Rec(a As Double, b As Double, c As Double ) As Double
‘ p – локальная переменная
Dim p As Double
p = ( a + b + c) / 2
Rec = Sqr ( p * ( p – a )* ( p – b ) * ( p – c))
End Function