Среда программирования  

Среда программирования

Занятие 1

Среда программирования

Программы на языке Visual Basic for Application (VBA) создаются с помощью редактора Visual Basic (Visual Basic Editor, VBE). Для перехода в окно редактора выполните команду Разработчик/ Visual Basic или нажмите комбинацию клавиш Alt + F11. Если вкладка Разработчик не отображается на ленте, выполните команду Файл/ Параметры/ Настройка ленты. В разделе Настройка ленты в списке Основные вкладки выберите пункт Разработчик и нажмите кнопку OK.

Для возврата в рабочую книгу, не закрывая редактора, можно использовать кнопку на панели задач. Для выхода из редактора VBE и возврата в рабочую книгу закройте окно редактора или выберите команду File/ Close and Return to Microsoft Excel.

Каждая рабочая книга в редакторе VBE рассматривается как проект, который состоит из модулей. Модули бывают различных типов. Каждый модуль представляет собой набор описаний и процедур. Модули сохраняются в файле рабочей книги, однако существует возможность сохранить их в виде отдельных файлов, чтобы затем добавлять в другие проекты. Для этого используются команды File/ Export FileиFile/ Import File. При импорте в проект добавляется копия файла.

Окно проекта показывает список проектов всех открытых рабочих книг и состав каждого проекта (модули проекта). В любом проекте автоматически создается модуль для каждого рабочего листа и рабочей книги в целом. При записи макроса к проекту добавляется модуль, содержащий текст макроса. Другие модули добавляет пользователь, используя команды меню Insert. С помощью окна проекта легко перейти от одного модуля к другому. Для этого достаточно выполнить двойной щелчок на имени нужного модуля. В верхней части окна имеются кнопки View Code и View Object. Для просмотра или редактирования текста программы (кода) выделенного модуля достаточно щелкнуть по кнопке View Code. Будет открыто окно с инструкциями на VBA. Для просмотра объектов модуля надо щелкнуть по кнопке View Object.

Существуют два режима работы с программой на VBA: режим проектирования и режим выполнения. В режиме проектирования можно создавать или изменять программу. В режиме выполнения вы работаете с ней как пользователь. Этот режим нужен для тестирования программы. Для перехода в режим выполнения перейдите в окно нужного модуля. Если вы тестируете процедуру, то установите курсор внутри этой процедуры, выполните команду Run/ Run Sub/ UserForm либо воспользуйтесь инструментом или нажмите клавишу F5. Для возврата в режим проектирования (останов программы) выберите команду Run/Reset или инструмент или нажмите на кнопку диалогового окна своей программы.



Структура программы на VBA

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

Инструкции, предназначенные для решения определенной задачи, объединяются в процедуры. Все исполняемые инструкции обязательно должны находиться внутри какой-нибудь процедуры. Процедуры сохраняются в модулях. Модули могут быть различных типов: программный модуль, модуль формы, модуль класса.

VBA не различает регистры, поэтому слова For, for и FOR для него одинаковы. В каком бы регистре вы не набрали текст программы, редактор автоматически преобразует служебные слова к стандартному виду, а ваши собственные имена переменных и функций к виду, указанному в их описании.

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

Процедуры Sub и Function. Параметры процедур и функций

В VBA имеются два типа процедур: процедуры Sub (подпрограммы) и процедуры Function. Процедура Sub – это просто последовательность инструкций, у которой есть имя и, возможно, параметры. Процедура Function – это последовательность инструкций, в результате выполнения которой вычисляется некоторое значение, которое называют возвращаемым значением функции. Для краткости процедуры Sub обычно называют просто процедурами, а процедуры Function – просто функциями. Синтаксис процедуры:

[Private | Public] [Static] Sub Имя [(Параметры)]

[Инструкции]

[Exit Sub]

[Инструкции]

End Sub

Синтаксис функции выглядит несколько иначе:

[Private | Public] [Static] Function Имя [(Параметры)] [As Тип]

[Инструкции]

[Имя = Выражение]

[Exit Function]

[Инструкции]

[Имя = Выражение]

End Function

Обратите внимание, что при описании синтаксической конструкции языка она обычно приводится в максимально полном виде. Те части конструкции, которые являются необязательными, т.е. могут отсутствовать, заключаются в квадратные скобки. В тексте программы эти скобки указывать не нужно. Вертикальная черта при описании разделяет альтернативные варианты. Мы будем также служебные (зарезервированные) слова языка выделять полужирным шрифтом.

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

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

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

Инструкция Exit Sub (Exit Function) используется для прерывания выполнения процедуры (функции).

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

[Optional] [ByVal | ByRef] имяПеременной [As тип] [= поУмолчанию]

ByVal указывает, что параметр передается по значению,ByRef– по ссылке. По умолчанию параметры передаются по ссылке. При использовании ByVal процедураработает с копией фактической переменной, поэтому изменить фактическую переменную внутри процедуры невозможно (все изменения вносятся в копию, которая уничтожается при завершении процедуры). При использовании ByRef в процедуру передается адрес фактической переменной, поэтому процедура может изменить значение этой переменной.

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

Вызвать процедуру Sub можно, указав ее имя и фактические значения параметров или применив оператор Call. Если используется Call, список параметров заключается в круглые скобки. Если Call опускается, скобки вокруг списка параметров не нужны.

Фактические параметры перечисляются через запятую. Необязательные параметры можно не указывать, но необходимые запятые нужно писать. В списке фактических параметров можно использовать имена параметров. В этом случае именованными должны быть все параметры, причем каждый из них имеет вид:

ИмяПараметра := Значение

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

Пусть, например, у нас имеется две процедуры Proc1 и Proc2:

Тогда мы можем вызвать их следующим образом:

Функции обычно используют в выражениях. Чтобы получить возвращаемое функцией значение, надо указать имя функции и значения параметров. Параметры заключаются в скобки. Если возвращаемое значение функции не требуется, можно вызвать функцию так же, как процедуру Sub: опустить скобки и указать список параметров. Параметры функций и процедур задаются одинаково.

Так, например, можно вызвать стандартную функцию MsgBox, у которой второй и третий параметры (Buttons и Title) необязательные. В первых двух случаях возвращаемое значение присваивается переменной Ans, в трех остальных оно не используется, поэтому функция вызывается как процедура:

Создание простейших функций

Функцию можно разместить в любом модуле (обычно в том, в котором вы будете ее использовать), но необходимо помнить, что в формулах рабочего листа Excel можно вызвать только те функции, которые объявлены как Public в обычном модуле. Такие функции в литературе часто называют функциями пользователя. Если написать функцию в модуле формы, класса, листа или рабочей книги, то ее невозможно вызвать на рабочем листе.

При описании имя функции указывается обязательно. Не следует давать функциям имена, похожие на адрес ячейки (например, F1), или совпадающие с названиями встроенных функций, ибо в случае конфликта имен VBA отдает предпочтение встроенным функциям.

Имена, которые вы используете в своей программе, в том числе имена функций, всегда должны начинаться с буквы. Они не могут содержать пробел, точку, восклицательный знак и символы @, &, $, #. В именах можно использовать русские буквы.

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

Для создания функции пользователя выполните следующие действия:

1. перейдите в модуль, в котором вы хотите разместить функцию (проще всего выполнить двойной щелчок на имени нужного модуля в окне проекта). Если нужно, добавьте к проекту новый модуль, используя команду Insert/Module.Не нужно для каждой функции создавать свой модуль, в одном модуле может быть много функций;

2. наберите в этом модуле необходимый код, для ускорения процесса можно воспользоваться командой Insert/Procedure;

3. если вы хотите задать описание функции, которое будет выводиться в окне Мастер функций, выведите на экран окно Макрос (вкладка Разработчик/ Макросы), введите в поле Имя макроса имя вашей функции, нажмите кнопку Параметры и в появившемся окне в поле Описание введите необходимый текст.

Вызвать на рабочем листе созданную функцию можно с помощью Мастера функций. Она находится в категории Определенные пользователем. Функции пользователя ведут себя подобно встроенным функциям. Обычно функция пользователя пересчитывается тогда, когда изменяется значение ее аргумента. Если внутри функции помещена инструкция Application.Volatile True, то функция будет пересчитываться при изменении любой ячейки листа.

Пример 1.1. Напишем функцию с именем Функция1, которая вычисляет сумму двух своих аргументов. Простейший вариант такой функции выглядит следующим образом:

Мы не указали тип возвращаемого значения и типы аргументов, поэтому они будут иметь тип Variant. Этот тип используется в VBA как тип по умолчанию. В зависимости от фактических значений он способен играть роль нескольких наиболее употребительных типов (строка, дата, целое, вещественное и др.), необходимые преобразования данных выполняются автоматически. Использование Variant имеет два существенных недостатка: требует больше памяти и может привести к непредсказуемому поведению ваших программ. Подробнее различные типы данных VBA будут рассмотрены ниже.

Тело функции состоит из одного оператора присваивания. Слева от «=» указано имя функции, поэтому этот оператор определяет значение, которое возвращает функция. Справа от символа присваивания указано выражение, значение которого присваивается переменной.

Результат использования функции Функция1 для различных типов данных приведен на рисунке:

Обратите внимание, что если аргументы являются строками, то результатом функции является строка, полученная путем «склеивания» исходных строк. Дело в том, что в VBA символ «+» используется не только для обозначения операции арифметического сложения, но и для обозначения операции конкатенации (сцепления) строк, наряду с символом «&».

В VBA имеются следующие арифметические операции: сложение (+), вычитание (-), изменение знака (-), умножение (*), деление (/), целочисленное деление (\), получение остатка от деления (mod), возведение в степень (^).

Пример 1.2.Создадим функцию, которая находит сумму трех последних цифр числа:

Переменные в программах на VBA можно не объявлять. В этом случае переменная имеет тип Variant. Необходимые преобразования типов при работе программы выполняются автоматически. Однако процедуры с такими переменными работают медленнее и менее надежны. Например, очень трудно заметить ошибку, вызванную элементарной опечаткой, когда в имени X вы в одном месте использовали русскую букву, а в другом – английскую. Фактически в этом случае вы имеете 2 разные переменные, которые в тексте выглядят одинаково. Кроме того, если в двух разных процедурах вы используете для переменной одно и то же имя, то все равно это разные переменные (память под них выделяется в разное время и в разных местах).

При создании выражений можно использовать встроенные функции языка и функции рабочего листа. В таблице 1 приведены основные математические функции VBA.

Таблица 1

Функция

Описание

Abs(число)

Возвращает абсолютное значение числа.

Atn(число)

Возвращает арктангенс числа.

Cos(число)

Возвращает косинус угла, заданного в радианах.

Exp(число)

Возвращает результат возведения числа e в указанную степень

Fix(число)

Отбрасывает дробную часть числа и возвращает целое значение. Для отрицательного значения Fix возвращает ближайшее отрицательное целое число, большее либо равное указанному.

Int(число)

Отбрасывает дробную часть числа и возвращает целое значение. Для отрицательного значения Int возвращает ближайшее отрицательное целое число, меньшее либо равное указанному.

Log(число)

Возвращает натуральный логарифм числа.

Rnd[(число)]

Возвращает случайное число меньшее 1 и большее или равное нулю. Аргумент число определяет способ генерации случайного числа. Перед вызовом функции Rnd используйте инструкцию Randomize без аргумента для инициализации генератора случайных чисел значением, возвращаемым системным таймером.

Sgn(число)

Возвращает 1, если число > 0; -1, если число < 0; 0, если число = 0.

Sin(число)

Возвращает синус угла, заданного в радианах.

Sqr(число)

Возвращает квадратный корень числа.

Tan(число)

Возвращает тангенс угла, заданного в радианах.

Как использовать функции рабочего листа будет рассказано позже.

Пример 1.3.Напишем функцию, которая вычисляет случайное целое число из заданного диапазона.

В отличие от встроенной функции Excel СЛУЧМЕЖДУ наша функция будет выдавать новое значение только при изменении ее аргументов. Но если убрать апостроф во второй строке (перед Application), функция будет вычисляться заново при изменении любой ячейки рабочего листа.

Задания для самостоятельной работы:

Напишите функции пользователя, создайте для них описания и продемонстрируйте их работу, вызвав на рабочем листе:

1.1. Функция возвращает 0 для четных чисел и 1 – для нечетных;

1.2. Для числа, содержащего не более 3 цифр, вычислите число, у которого цифры идут в обратном порядке (например, для числа 253 ответ – 352);

1.3. Функция вычисляет площадь треугольника по трем его сторонам (Указание: если a, b, c – стороны треугольника, то для вычисления площади воспользуйтесь формулой Герона , где ).

Дата добавления: 2015-11-04; просмотров: 2 | Нарушение авторских прав


3691056325670629.html
3691082521826342.html
    PR.RU™