Лекция №1«Visual Basic for Application» 1 2 3 4 5 6 Этапы подготовки задачи к реализации на ПК....................................................................................2 Создание программ ...............................................................................................................................2 2.1 Создание новой программы ..........................................................................................................2 2.2 Объявление процедуры ................................................................................................................2 2.3 Описание функций .........................................................................................................................3 Использование операторов ..................................................................................................................3 3.1 Объявление констант ....................................................................................................................4 3.2 Оператор присваивания ................................................................................................................4 3.3 Параметры компилятора ...............................................................................................................5 3.4 Исполняемые операторы ..............................................................................................................5 Операции в VBA .....................................................................................................................................5 4.1 Приоритет операций ......................................................................................................................6 Использование встроенных функций VBA ..........................................................................................6 5.1 Функции ввода-вывода ..................................................................................................................6 Управляющие структуры ........................................................... Ошибка! Закладка не определена. 6.1 Условный оператор IF ....................................................... Ошибка! Закладка не определена. 6.1.1 Однострочный синтаксис IF .......................................... Ошибка! Закладка не определена. 6.1.2 Многострочный синтаксис оператора IF ...................... Ошибка! Закладка не определена. 6.1.3 Вложенные операторы IF .............................................. Ошибка! Закладка не определена. 1 Этапы подготовки задачи к реализации на ПК В процессе решения задачи с использованием персонального компьютера можно выделить несколько основных этапов, выполняющихся в следующем порядке: 1. Постановка задачи (математическое описание задачи, определение состава и характера исходных данных, определение искомых результатов). 2. Разработка алгоритма решения задачи. Алгоритм – это последовательность арифметических и логических операций и связей между ними, однозначно приводящая исходные данные к искомому результату. 3. Составление программы на конкретном алгоритмическом языке. Программой называется последовательность инструкций, реализующая алгоритм решения задачи на каком-либо языке программирования. 4. Трансляция программы – перевод исходного пользовательского теста программы в машинные кода и настраивание адресных констант для работы программы с библиотечными функциями. По способу работы программы-трансляторы делятся на компиляторы и интерпретаторы. Компилятор запускается после окончания ввода программы и просматривает текст программы целиком в поисках синтаксических ошибок. Если в процессе компиляции ошибки не обнаружены, то генерируется машинный код (готовая к исполнению программа). В отличие от компилятора интерпретатор просматривает текст программы последовательно на этапе ввода программы. Проверка отдельно каждого оператора осуществляется его формальным исполнением. На этапе трансляции выявляются синтаксические ошибки (runtime error) – ошибки выполнения, т.е. те ошибки, которые приводят к остановке выполнения программы. 5. Тестирование программы – проверка правильности результатов выполнения программы и реакции на действия пользователя. На этапе тестирования выявляются логические ошибки – ошибки, приводящие к получению неверных результатов в процессе эксплуатации программы. Если возникновение синтаксических ошибок связано с нарушением синтаксиса (правил написания) управляющих конструкций языка и встроенных функций, то к появлению логических ошибок приводят неверные логические рассуждения программиста, нарушение последовательности выполнения операторов программы, ошибки в записи формул и др. Выявить логические ошибки можно, выполняя контрольные примеры. 2 Создание программ VBA работает с двумя видами программ: процедурами и функциями. Они являются критическими функциональными единицами VBA, в том смысле, что вы имеете возможность выполнить только тот программный код, который содержится в программе. ! Программный код, содержащийся вне каркаса программы, выполняться не будет. Почти весь создаваемый пользовательский код содержится в программах двух видов: Sub и Function. Программы типа Sub называются процедурами и подразделяются: на простые процедуры (не относящиеся ни к какому объекту), процедуры обработки событий (процедуры, которые выполняются при наступлении определенного события, например: нажатие на кнопку или выбор элемента из какоголибо списка и т.д.) и процедуры типа Property (процедура свойства, которая выясняет или устанавливает значение свойства какого-либо объекта). 2.1 Создание новой программы 1. Необходимо открыть модуль, в котором будет размещена программа: Вызвать редактор VBA; Вставка –> Модуль (Insrert –> Module) или 2-ой щелчок по имени существующего модуля в окне проекта). 2. Создать каркас программы. 2.2 Объявление процедуры Sub Имя_программы( [аргументы] ) Инструкции End Sub Где, Sub конец процедуры. … End Sub – каркас программы, ключевые слова, обозначающие начало и 2 Имя_программы – наименование процедуры. Может быть набрано как русскими, так латинскими буквами. Должно подчинятся правилам именования объектов. [аргументы] – позволяют передать в процедуру требуемые для расчетов значения. Являются необязательными параметрами. Если процедура не требует никаких аргументов после имени. (Здесь и далее [ ] обозначают, что элемент, заключенный в квадратные скобки является не обязательным и может быть опущен). Например, Sub День_недели() Msgbox ”Сегодня – среда” End Sub Эта процедура выведет диалоговое окно с сообщением ”Сегодня – среда”. Правила именования объектов в VBA 1. Имя (идентификатор) объекта не должно превышать 255 символов; 2. Имя объекта не должно содержать пробелов; 3. Не должно содержать специальных символов: ! @ $ ‘ # ? / () {} [] = ^ / * - + ~ <> ^ ?; 4. Не должно совпадать с ключевыми словами VBA (Sub, If, Do и т.д.); 5. В рамках одного модуля совпадение имен процедур запрещается. 2.3 Описание функций Основное отличие процедур и функций заключается в том, что процедуры предназначены для выполнения каких-либо действий, могут возвращать несколько результатов или не возвращать ни одного. Функция же всегда возвращает какое-либо одно значение. Описание функции имеет следующий синтаксис: Function имя_функции ([аргументы]) [As Тип] Инструкции имя_функции= выражение End Function Где, Function … End Function – ключевые слова, обозначающие начало и конец функции; имя_функции – идентификатор, подчиняющийся правилам именования объектов; аргументы – необязательные параметры, передающие в функцию требуемые значения для расчетов; As Тип – объявляет тип возвращаемого функцией значения; имя_функции= выражение – обязательная инструкция, связывающая имя функции с конечным результатом вычислений. Например: Function Сумма(x As Integer, y As Integer) As Long Сумма = x + y End Function В эту функцию передается два числа х и у целого типа. Функция находит их сумму и возвращает результат типа Long. Конечный результат вычислений связывается с именем функции. Воспользоваться (ab)*(ac) (bd) этой функцией можно, например, так, для вычисления выражения z Sub Вычисление_z() Dim a As Integer, b As Integer Dim c As Integer, d As Integer, z As Double a = Range("A1").Value b = Range("A2").Value c = Range("A3").Value d = Range("A4").Value z = Сумма(a, b) * Сумма(a, c) / Сумма(b, d) Msgbox "Значение выражения " & z End Sub В этой процедуре объявляются четыре переменные целого типа и одна z – вещественного типа. Значения для переменных берутся с активного листа из ячеек А1, А2, А3 и А4. При вычислении z три раза вызывается функция Сумма с конкретными значениями для аргументов. 3 Использование операторов Программа на VBA – это набор операторов (инструкций). Как правило, каждый оператор VBA занимает одну строку. Операторы в программе VBA выполняются последовательно друг за другом (если нет структур, передающих управление). ! Концом оператора служит признак конца строки. 3 VBA имеет следующие типы операторов: Объявления; Оператор присваивания; Исполняемые операторы; Параметры компилятора. Объявление – это оператор, сообщающий компилятору VBA о намерении пользователя использовать тот или иной именованный объект (константу, переменную, объект пользовательского типа и т.д.) ! Объявление объекта должно предшествовать его использованию. 3.1 Объявление констант Константа – это именованный элемент, сохраняющий постоянное значение в течении выполнения программы. Константны VBA делятся на: a) Непоименованные, т.е. такие, которые вносятся прямо в текст программы, например, 2 3.14 562 – числовые константы “привет, студент” – текстовые константы #12/31/2002# – дата True False –логические константы b) Поименованные. Такие константы имеют имя, которое используется в тексте программы и за место которого подставляется значение константы. Поименованная константа объявляется следующим образом: Const имя_константы [As Тип] = значение Например, Const Pi As double =3.14159 Const Цена =500 Const Str =”Hello” ! Все строковые константы заключаются в двойные английские кавычки. c) Внутренние константы VBA (предопределенные константы). Они служат для упрощения работы с некоторыми встроенными процедурами и функциями, такими например, как Msgbox, InputBox. Хорошо вам известные кнопки, появляющиеся в различных диалоговых окнах, такие как “Ok”, “Yes”, “Cancel”,”No” и т. п. могут обозначаться с помощью поименованных целочисленных констант. Все внутренние константы VBA обозначаются с помощью префикса vb, т.к. есть еще внутренние константы Excel и Word. Например, константа vbOkOnly имеет значение равное 0 и выводит в диалоговом окне кнопку “Ok”. Константа VbYesNoCancel имеет значение равное 3 и выводит в диалоговом окне кнопки “Yes”, ”No”, и ”Cancel”. 3.2 Оператор присваивания Оператор присваивания приписывает переменным конкретные значения. Состоит всегда из трех частей: имени переменной, знака равенства и выражения задающего нужное значение Имя_переменной = выражение Выражение – это комбинация ключевых слов, операторов, переменных и констант, результатом вычисления, которого является строка, число или логическое выражение. ! При выполнении оператора присваивания переменной, стоящей в левой части, присваивается результат вычисления выражения, стоящего в правой части. X=4 ‘ переменной X присваивается число 4 A=4+Sin(X) C=S>4 ‘ переменной С присваивается результат сравнения S>4 Z=Cells(1,2).Value ‘переменной Z присваивается значение ячейки, стоящей на пересечении 1‘ой строки и 2-ого столбца Cells(1,2).Value= Z ‘Ячейке, стоящей на пересечении 1-‘ой строки и 2-ого столбца ’присваивается значение переменной Z Не следует путать знак “=” с математическим знаком равенства. В математике знак “=” служит для обозначения того факта, что две величины равны между собой. В VBA знак присваивания служит другой цели – записывает некоторое значение в участок памяти, на который указывает имя переменной. 4 3.3 Параметры компилятора Параметры компилятора – класс операторов, представляющих собой инструкции для управления поведением компилятора VBA. Компилятор – это специальная программа, входящая в состав многих языков программирования. Предназначена для перевода кода программы из формы, понятной программисту в форму, понятную компьютеру (в машинный код). Некоторые параметры компилятора: Option Base число – установка правила нумерации элементов массива. По умолчанию элементы массива в VBA нумеруются с 0. Option Base 1 ‘устанавливает нумерацию элементов массива с 1. Option Explicit – в результате помещения этой директивы в модуль, VBA запрещает использование необъявленных переменных. Аналогично использованию последовательности команд в редакторе VBA: Сервис–> Параметры –>флажок «Явное описание переменных» (“Require Variable Declaration”). Эту директиву рекомендуется добавлять в ваш проект, т.к. она исключает возможность случайного использования необъявленных переменных. Например, если будет допущена ошибка при использовании некоторых операций, например, набрано 5mod2 вместо 5 mod 2 или aORb вместо a OR b, то VBA воспримет 5mod2 и aORb как новые не объявленные переменные. 3.4 Исполняемые операторы Исполняемые операторы используются для выполнения следующих задач: – вызов пользовательских функций; – активизация методов объектов; – управление порядком выполнения других операторов; – выполнение встроенных функций VBA. Как правило, один оператор занимает в VBA-программе одну строку. Если строка программного кода слишком длинна, то ее можно разместить на 2-х и более строках, используя знак подчеркивания. Например, Msgbox “Эта строка – ” & St & _ “является слишком длинной” Если же необходимо разместить несколько операторов на одной строке, используется знак двоеточия. Например, Dim A As Byte, B As Byte, C As Integer A=20 : B=12 : C=48 Комментарии Комментарии в VBA-программе начинаются со знака английского апострофа. Например, ‘Это комментарий Dim A As Byte, B As Byte ‘Объявление переменных 4 Операции в VBA Операция представляет собой специальный символ (-,+ и т.д.) или ключевое слово (Or, And и т.д.), комбинирующее два значения (операнда) с целью получения нового результата. VBA-оперции разделяются на 4 группы: арифметические, логические, сравнения и оператор конкатенации. Обозначение Пояснение Пример Арифметические операции + – Сложение, вычитание А+4 * / Умножение, деление A*b/c ^ Возведение в степень B^4 \ mod Not Целочисленное деление. Возвращает целую часть от деления двух целых чисел Возвращает остаток от деления двух целых чисел Логические операции Логическое отрицание. Меняет значение своего операнда на противоположное 5\2 результат–>2 5 mod 2 результат –> 1 A = True B = Not A B –> False 5 And Or XOR = Логическое «И». Возвращает Истину, если все без исключения условия верны, иначе Ложь. Логическое «Или». Возвращает Истину, если истинно хотя бы одно условие. «Исключающие Или». Возвращает Ложь, если все условия возвращают одинаковые значения, все истинны или все ложны. Возвращает Истину, если условия исключают друг друга. Операции сравнения Знак равенства <> Не равно < Меньше > Больше <= Меньше либо равно >= Больше либо равно Like Сравнение строк с заданным образцом. В образце могут использоваться подстановочные символы: *,? и др. Is Проверка идентичности ссылок на объект Знак конкатенации Объединяет строки. & A=True : B = False C = A And B C –> False A =3 : B =5 C = (A>6) Or (B<10) C –>True A=True : B =True : C= False D =A XOR B D–>False D = B XOR C D–> True A=”Hello!” C= A Like “Привет!” C –>False C= A Like “He*” C –> True MsgBox “Пример строки:” & “Это – строка” 4.1 Приоритет операций Если выражение имеет несколько знаков операций, то их выполнение идет в следующем порядке: 1. ( ) выражения в круглых скобках 2. соs(x) вычисление функций 3. ^ возведение в степень 4. - sin(x) унарный минус (смена знака) 5. *, / умножение, деление 6. \ целочисленное деление 7. mod целочисленный остаток от деления 8. +,– сложение, вычитание 9. & знак конкатенации 10. >, <= операции сравнения 11. And, Or, Not Логические операции Порядок вычислений можно изменить расстановкой скобок. 5 Использование встроенных функций VBA Все функции VBA имеют один и тот же синтаксис: Имя_функции([аргументы]) Имя функции должно подчинятся правилам именования объектов. Аргументы – это исходные данные, необходимые для работы функции. Функция всегда возвращает один единственный результат определенного типа. Аргумент у функции может быть один, например, Sin(3.5), IsNumeric(Str), ABS(X) или аргументов может быть несколько, например, InputBox(“Вводи х”, ”Моя программа ”, 8) 5.1 Функции ввода-вывода Функция InputBox 6 Используется для ввода данных в программу. Имеет следующий синтаксис: InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context]) Отображает на рабочем листе Excel диалоговое окно с заголовком title и приглашением-подсказкой prompt и ожидает ввода данных пользователем с клавиатуры. Результат работы функции – данные, введенные пользователем. Тип возвращаемого результата –string. Default – необязательный параметр, в котором можно указать значение по умолчанию, возвращаемое функцией InputBox, в случае, если пользователь ничего не ввел. xpos, ypos – необязательный параметр, координаты верхнего левого угла диалогового окна. Оба расстояния измеряются в твипах: 1 твип равен 1/20точки (точка – единица измерения типа печати). 1 точка равна 1/72 дюйма. helpfile, context – используются для обеспечения программы контекстно-зависимой справкой. Helpfile – строковое выражение, которое содержит имя файла помощи в операционной системе Windows Context – числовое выражение, которое определяет тематический раздел в файле помощи. Если вы хотите использовать аргументы helpfile, context необходимо установить компилятор Windows Help File. Пример: Dim x As Integer X= CInt(InputBox(“Введите значение для х”, ”Ввод х”, 5)) Т.к. функция InputBox возвращает результат строкового типа, а переменная х – типа Integer, то в выше приведенном примере используется функция явного преобразования типа. CInt(выражение) – преобразует выражение к типу Integer; CDbl(выражение)– преобразует выражение к типу Double; CLng(выражение) – преобразует выражение к типу Long; CByte(выражение) – преобразует выражение к типу Byte Val(выражение) преобразует строку в число, подходящего типа. Использование этих функций желательно, но необязательно, т.к. VBA автоматически преобразует результат работы функции InputBox к типу переменной (если может). Например, если с клавиатуры введена строка, преобразовать ее к типу Byte, например, не удастся и возникнет ошибка. ! Всегда используйте функцию InputBox в составе оператора присваивания. A = InputBox(“А =”) Функция вывода. Функция Msgbox Синтаксис: MsgBox(prompt[, buttons] [, title] [, helpfile, context]) Отображает диалоговое окно с сообщением prompt и ожидает, пока пользователь щелкнет по какой-либо кнопке. Каждой кнопке ставится в соответствие целочисленная предопределенная константа. Результат работы функции – целое число, обозначающее номер нажатой пользователем кнопки. Buttons – перечисляются кнопки, которые должны присутствовать в диалоговом окне. Например, константа vbOKOnly имеет значение 0 и выводит в диалоговом окне кнопку OK; константа vbYesNoCancel имеет значение 3 и выводит в диалоговом окне кнопки OK и Cancel; константа vbAbortRetryIgnore имеет значение 2 и выводит в диалоговом окне кнопки Abort, Retry, и Ignore. Полный перечень используемых функцией MsgBox констант можно увидеть в справке. Title – заголовок окна. helpfile, context–используется так же как и в функции InputBox для обеспечения контекстнозависимой справки. Например, Dim K As integer K = MsgBox(“Продолжить работу?”, vbYesNoCancel ,”Мое сообщение”) В результате выполнения этого оператора будет выведено следующее диалоговое окно: 7 и в зависимости от номера нажатой кнопки (значения переменной К) выполнение программы пойдет тем или иным путем. Если программисту неинтересно, какое значение возвращает функция MsgBox, то эту функцию можно использовать как процедуру, т.е. вне математического выражения и, не заключая аргументы в круглые скобки. Например, MsgBox “Значение переменной ” & K 8