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

VBA. Практическое программирование

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
666 Кб
Скачать

 

Структура проекта на языке VBA

 

 

 

 

Название

Пояснения

 

 

Load

Загрузка

LostFocus

Потеря фокуса

MouseDown

Движение клавиши мыши вниз

MouseMove

Движение мыши.

MouseUp

Движение клавиши мыши вверх

Paint

Закраска объекта

Resize

Изменение размера объекта

Unload

Выгрузка объекта из приложения

 

 

Замети, что для различных элементов управления в среде VBA реализованы разные события. Это обусловлено рядом причин, в частности, назначением самого элемента управления, его местом в иерархии объектов и т. д.

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

В целом структура программы на VBA имеет следующий вид. Код VBA хранится в проектах. Проекты в свою очередь содер-

жат модули, а модули включают процедуры. Формально можно описать структуру компонентов следующим образом:

Проекты являются совокупностью модулей. Проект может содержать как стандартные модули, так и модули класса.

Модули являются совокупностью процедур, описаний и инструкций, Каждое приложение имеет собственный способ хранения проектов:

Word сохраняет проекты в шаблонах документа (DOT) и в документах (DOC), Excel — в рабочих книгах (XLS), Access — в файлах базы данных (MDB), PowerPoint — в презентациях (РРТ).

Проект может включать несколько модулей. Имеются два типа модулей — стандартные модули и модули класса.

Стандартные модули — это модули, в которых можно описать доступные во всем проекте процедуры Sub и Function.

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

21

1. Основы VBA

Создание процедур

Наступила пора самостоятельно написать процедуру, но прежде чем мы это сделаем, необходимо разобраться с типами процедур.

Процедура Sub — набор команд, с помощью которого можно решить определенную задачу. При ее запуске выполняются команды процедуры, а затем управление передается в приложение или процедуру, которая вызвала процедуру Sub. Большую часть кода VBA, составляют процедуры именно этого типа. Любой макрос или другой код VBA, который просто выполняет определенный набор действий, используя приложения Office, также является процедурой Sub.

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

Процедура Property используется для ссылки на свойство объекта. Данный тип процедур применяется для установки или полу- чения значения пользовательских свойств форм и модулей.

В следующем упражнении мы создадим процедуру Sub, связанную с элементом управления Командная кнопка (CommandButton). Эта процедура будет выполнять те же действия, что макрос, созданный нами в первом упражнении, но Вы убедитесь, что процедура проще и понятнее.

Упражнение 3

1.Откройте чистую рабочую книгу Excel и убедитесь, что находитесь на рабочем листе «Лист1».

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

3.Через эту же панель откройте окно свойств.

4.Создайте на рабочем листе элемент Кнопка (CommandButton), и если она выделена, то в окне свойств можно будет менять свойства этой кнопки

22

Создание процедур

5. В окне свойств, в строке Name вместо «CommandButton1» наберите другое имя — «Cmd1» (работаем в латинском шрифте!!!). Чтобы «почувствовать разницу» измените свойство Caption — наберите там произвольное слово — сообщение на русском языке, например «Проба». После этого можно считать, что элемент управления «сформирован» и теперь переходим к созданию процедуры.

Рис. 1.3. Окно свойств для командной кнопки

6. Дважды щелкните по кнопке (двойной щелчок) и Вы перейдете в окно редактора VBA. В окне проекта Вы увидите, что выделен объект «Лист1», а справа, на переднем плане будет расположено окно для написания кода именно для объектов этого листа. Обращаем внимание, что в верхней строке этого окна, разбитой на две части слева располагается имя кнопки (Cmd1), а справа — слово Click, означающее одно из событий, на которое может реагировать элемент CommandButton. Также обращаем внимание, что и имя объекта и названия события являются элементами списка, то есть, если нажать на треугольники справа от этих слов, то можно получить либо список объектов рабочего листа (пока только General, Cmd1, Worksheet), либо список событий для одного из объектов.

23

1.Основы VBA

7.Познакомимся с текстом внутри окна кода. Находим следующие две строки

Private Sub Cmd1_Click()

End Sub

Первая строка является началом процедуры Sub которая является «местной» для этого модуля (слово Private). Эта процедура относится к элементу управления Cmd1 и будет выполнена, когда произойдет событие Click, то есть щелчок мышью по кнопке. Имя данной процедуры таким образом — «Cmd1_Click»

Нижняя строка End Sub означает конец процедуры. Код для данной процедуры должен находиться между двумя этими строками.

Ðèñ. 1.4. Îêíî êîäà

8. Переходим к написанию кода. Прежде всего, спланируем, что мы хотим сложить два числа, взятые из двух ячеек, а результат сложения поместить в третью ячейку. Пусть эти числа будут расположены в ячейках A2 и B2, а результат поместим в ячейку C2. Сначала рассмотрим более длинный вариант, который поможет нам понять использование переменных в программе. Набираем строчки

24

Создание процедур

X1 = Ñells(2,1)

X2 = Ñells(2,2)

Cells(2,3) = X1 + X2

В первой строке в ячейку памяти компьютера, которой мы дали имя X1 (это одна из переменных, используемых в программе), мы помещаем содержимое ячейки A2 (2-я строка, 1-й столбец в электронной таблице), во второй строке под именем X2 запоминается содержимое ячейки B2. В третьей строке происходит сложение этих переменных, и результат отправляется в ячейку C2.

Рис. 1.5. Текст процедуры

В целом процедура выглядит вот так

Private Sub Cmd1_Click()

X1 = Ñells(2,1)

X2 = Ñells(2,2)

Cells(2,3) = X1 + X2

End Sub

9. Возможен второй вариант написания процедуры, выполняющей те же действия

25

1. Основы VBA

Private Sub ()

Cells(2,3) = Ñells(2,1) + Ñells(2,2)

End Sub

Здесь важно сделать следующее замечание. Вы уже наверно смогли заметить, что операцию сложения можно выполнить напрямую в электронной таблице, или путем написания макроса, или через создание процедуры. Безусловно, первый способ самый простой, а все остальное — только как упражнения. Но бывают ситуации, когда электронная таблица без использования VBA «бессильна» реализовать

Ваши планы. Искусство написания программ как раз и заключается

в правильном выборе — что же поручить электронной таблице, а что — языку программирования.

При написании кода Вы уже заметили, что после набора слова «Cells» на экране появилась подсказка, о том, что пора вводить номер строки (RowIndex) — это очень приятная «услуга» со стороны редактора VBA, и свидетельствует она о том, что Вы набирает код в данной строки синтаксически правильно.

Продолжаем выполнять упражнение. Итак код записан.

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

11.Введите в ячейки A2 и B2 два произвольных числа

12.Выйдите из режима конструктора, отжав соответствующую кнопку в панели элементов управления

13.Щелкните по созданной Вами кнопке. В ячейке C3 должен появиться результат сложения.

Типы данных, переменные, константы

Следующая тема для обсуждения — переменные и константы. Сначала расскажем о переменных.

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

26

Типы данных, переменные, константы

использовали переменные с именами Õ1 è Õ2, для того чтобы было понятно, как можно обращаться к этим числам. Следовательно, переменные позволяют организовать имеющуюся информацию требуемым образом и многократно использовать ее в случае необходимости.

Переменная — это именованная область памяти, отведенная для временного хранения данных. При выполнении программы можно изменить значение переменной.

Используя это определение легко понять, что под переменные отводится определенное количество памяти, и если пишутся серьезные и профессиональные программы, то возникает вопрос о правильном распределении ресурсов памяти при работе программы. Например, если мы знаем, что будем оперировать с простыми числами, то нам не нужно тратить для этих данных много памяти, а если требуется высокая точность вычислений, то необходимо запоминать все числа с большим количеством знаков после запятой. Кроме того, желательно указать программе (во избежание ошибок) какие действия допустимы с этими переменными. Так в программах числа можно складывать, делить, умножать и т. д. а строки текста и символы можно только объединять друг с другом. Это привело к необходимости при написании программ определять и заранее объявлять тип переменных или тип данных.

Visual Basic для приложений позволяет описать и использовать переменные различных типов. Выбор типа основывается на требованиях создаваемого приложения. При этом необходимо найти наилучшее соотношение затрат памяти, скорости выполнения и ограничений, накладываемых использованием выбранных типов данных. В VBA имеются следующие типы — числа, строки, логи- ческие значения, даты и объекты, а также наиболее общий тип данных — тип Variant.

Остановимся на числовых типах данных Числовые типы данных различаются размером и диапазоном

допустимых значений. Размер — это количество байтов, которое занимает переменная данного типа в памяти. Диапазон допустимых значений определяет наибольшее и наименьшее значение для переменных данного типа.

В таблице 3 приводятся параметры основных числовых типов данных.

27

1. Основы VBA

Таблица 3 Основные числовые типы данных Visual Basic

Тип данных

Размер

Диапазон

 

 

 

 

Byte

1

áàéò

Îò 0 äî 255

Integer

2

байта

Îò –32768 äî 32767

Long

4

байта

Îò –2147 483 648 äî 2147483647

Single

4

байта

Îò –3.402823Å38 äî –1.401298Å–45

 

 

 

для отрицательных чисел от 1.401298Е–45

 

 

 

до 3.402823Е38 для положительных чисел

Double

8

áàéò

Îò –1,79769313486232Å308

 

 

 

äî —4,94065645841247Å–324

 

 

 

для отрицательных чисел

 

 

 

îò 4,94065645841247Å–324

 

 

 

äî 1,79769313486232Å308

 

 

 

для положительных чисел

 

 

 

 

Обратите внимание, что переменные типа Byte, Integer и Long не могут иметь дробных значений, а переменная типа Byte — отрицательных. Попытка присвоить переменной значение, которое не входит в диапазон допустимых значений для заданного для нее типа, вызывает ошибку при выполнении программы.

Необходимо отметить, что числа также можно хранить в переменных типа Variant

Помимо числовых типов существуют следующие типы данных. Тип данных String (строковые) используется для хранения строк переменной длины или фиксированной длины. Строки переменной длины — наиболее удобный тип строк. Максимальная длина такой строки равна приблизительно 2 миллиардам символов, а ее

размер равен длине строки плюс 10 байтов.

Переменные типа Boolean (логические) занимают 2 байта памяти и принимают только два значения — True или False.

Переменные типа Data (Дата, 8 байт) являются числами с плавающей запятой двойной точности и могут хранить как дату, так и время. Целая часть такого числа представляет дату, а дробная — время дня.

Переменные типа Object (объект, 4 байта) — это указатели на объекты приложения, которые могут использованы в программе.

Если тип данных не объявляется, то программа воспринимает этот тип как Variant. При использовании типа Variant упрощается обработка чисел.

28

Типы данных, переменные, константы

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

Строго говоря, в VBA не требуется описывать большинство переменных перед их применением. Переменные называются неявно описанными, если они используются в программе без объявления. Таким переменным присваивается тип Variant, а затем они применяются как любые другие переменные этого типа.

Однако рекомендуется явно описывать все переменные. Ниже мы показываем, как задать обязательное объявление переменных перед их использованием.

Чаще других используется для описания переменных в VBA иинструкция Dim. Упрощенный синтаксис инструкции Dim:

Dim <имя Переменной> [Аs тип]

Вместо параметра <имя Переменной> Вы должны подставить имя описываемой переменной. А вместо необязательной части инструкции [As тип] Вы можете набрать тип переменной.

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

Dim A As Integer

Dim Â, Ñ, D Às Single

Dim E

Âданном примере переменная А описывается как целое число,

àпеременная D — как переменная типа single. Переменные B, C, и Е являются переменными типа Variant.

Инструкцию Dim можно разместить как в процедуре, так и в разделе описания модуля (General). Объявление переменной в процедуре делает ее личной переменной процедуры, а описание в модуле — переменной уровня модуля. Место расположения инструкции Dim указывает на область определения переменной. Более подробно о способах описания переменных мы будем говорить позже.

Перечислим основные требования к именам переменных

29

1.Основы VBA

Имена должны начинаться с буквы. Настоятельно рекомендуем применять латинские символы и не использовать кириллицу.

Имя не может содержать пробел, точку, восклицательный знак, (!), или символы ^, &, $, #., %. Это отчасти связано с тем, что некоторые из этих символов указывают на определенный тип, например, строковые переменные без объявления обозначаются так — a$, st$, тип Integer — z%, vv% и т. д.

Имена не должны содержать более 255 символов.'

Не рекомендуется использовать имена, совпадающие с названиями функций, инструкций и методов языка Visual Basic, так как при этом прекращается выделение в тексте одноименных ключевых слов языка.

Не допускается использование повторяющихся имен на одном уровне области определения.

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

Хотя может показаться, что лучше использовать переменные с именами, например, А, B, C или X, Y, Z, описательные названия упрощают чтение и понимание программ, если в последующем потребуется внести изменения в программу.

Для выполнения действий над переменными используются различные операторы, а именно:

Арифметические — + (сложение), – (вычитание), * (умножение), /(деление), ^ (возведение в степень), \ (целочисленное деление), mod (вычисление остатка от целочисленного деления);

Логические

Сравнения — <, >, =, is

Объединения строк — & или +

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

30