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

Учебник Макаровой

.pdf
Скачиваний:
90
Добавлен:
12.04.2015
Размер:
11.93 Mб
Скачать

т.п. объявляются следующими операторами:

локальный массив

Dim <Arr> (размерность) As <type>

глобальный массив

Public <Arr> (размерность) As <type>

где <Arr>

имя массива,

(размерность)

размерность массива.

 

Пример 19.13.

Пользовательские типы данных

Оператор Туре позволяет на уровне модуля определить пользовательскую структуру данных, включающую другие разнородные, логически связанные переменные, например:

[Private | Public] Type <typename>

<elementname1> As <type>

<elementname2> As <type>

...

End Type

где <typename>

имя пользовательского типа данных;

<elementname> – имя составляющей структуры.

Вмодуле с помощью операторов Dim или Public необходимо объявить переменную, использующую пользовательский тип данных. Как правило, это массивы.

Пример 19.14.

Type Student FullName As String *20 Group As Single BirthDay As Date Hight As Integer ...

End Type

Dim Student_Card (1 To 1000) As Student

581

Тип Student служит для объявления массива Student_Card размерностью 1000 элементов, структура записи включает: фамилию, имя, номер учебной группы, дату рождения, рост.

Объявление констант

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

Константы объявляют с помощью оператора:

Const <const> = <значение>

где <const> – имя константы; <значение> – значение константы.

Для констант существует понятие сфера действия: глобальные константы имеют ключевое слово Public:

Public Const Datel=#12.12.96#

локальные константы:

Const Date2=# 12.12.97#

Локальные константы объявляются в пределах процедуры или модуля, глобальные константы на уровне внешнего модуля и доступны для всех вложенных модулей и процедур.

VBA имеет встроенные константы, которые применяют без специального объявления и начинаются с символов vb. Excel 5.0 использует встроенные константы, начинающиеся символами xl.

ОПЕРАТОРЫ ЯЗЫКА VBA

Оператор присваивания

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

Оператор присваивания имеет следующую структуру построения:

<var>= <formula>

где <var> – имя переменной; <formula> – формула.

Переменная слева от знака "=" может быть простой переменной, элементом массива или свойством объекта. Формула состоит из переменных, констант, операций и функций.

Пример 19.15.

Place="d:\windows\system"

File="GameTree.Exe" Student_Card( 100).Group= 133

С помощью оператора присваивания сохраняются результаты вычислений по формуле в памяти машины под именем переменной.

VBA использует различные операции для построения выражений, проверки условий. Операции имеют определенный приоритет (старшинство) выполнения (табл. 19.5).

582

Присвоение значения числа строк и столбцов в выделенной области электронной таблицы
583

Таблица 19.5. Основные операции языка VBA

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

Пример 19.16.

Disct=(S – P)/(dt)^2

Сначала вычисляется разность S – Р, затем произведение dt возводится в степень 2, после этого вычисляется частное от деления; результат присваивается переменной Disct.

Оператор комментариев

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

Пример 19.17.

Текст программы

Комментарий

 

Option Explicit

Обязательность

объявления

всех

 

переменных в модуле перед их

 

использованием

 

 

Sub случ_числа()

Процедура генерации случайных чисел

 

в выделенной

области электронной

 

таблицы Excel 5.0

 

Dim numrows As Integer; numcols As Объявление переменных Integer

Dim therow As Integer; thecol As Integer numrows = Selection.Rows.Count numcols = Selection.Columns.Count

Randomize

Запуск генератора случайных чисел

For therow = 1 To numrows

Организация цикла типа Fоr-Next,

 

внешний цикл

 

 

For thecol = 1 To numcols

Внутренний цикл

 

 

Selection.Cells(therow; thecol).Value

= Присваивание

текущей

ячейке

Rnd

случайного числа

 

 

 

Selection – выбор ячейки

 

 

Cells – метод доступа к ячейке с

 

определенными координатами Value –

 

свойство "значение"

 

Next thecol

Конец внутреннего цикла

 

Next therow

Конец внешнего цикла

 

End Sub

Конец процедуры

 

 

Процедуры

Программные модули VBA состоят из процедур (одной или более).

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

Процедуры имеют стандартное оформление: Sub <имя_процедуры> (аргументы)

..................................

тело процедуры (операторы)

..................................

End Sub

Оператор Sub - объявление процедуры, задается имя, указывается состав аргументов, передаваемых при вызове процедуры из программы. Каждому оператору Sub обязательно соответствует End Sub.

Тело процедуры набор последовательно выполняемых операторов на языке VBA.

В программе можно не только использовать процедуры данного программного модуля, но и ссылаться на процедуры других модулей текущей рабочей книги, а также процедуры других рабочих книг. Для этого необходимо задать ссылки; при нахождении на рабочем листе модуля выполняется команда СЕРВИС, Ссылки. В диалоговом окне «Ссылки» (рис. 19.22) показан список доступных ссылок на библиотеки или другие рабочие книги.

Рис. 19.22. Диалоговое окно для подключения программных модулей и их процедур

584

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

Различают 4 типа процедур:

процедуры общего назначения (стандартные), как правило, не вносят изменений вне себя; командные процедуры расширяют возможности прикладных программ, реализуя новые виды обработки;

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

использовано по аналогии с вызовом встроенных функций VBA.

Существует несколько вариантов вызова процедур (все необходимые ссылки на соответствующие процедуры заранее устанавливают).

1. Из другой процедуры того же модуля вызов осуществляется по имени процедуры

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

3.Из другого приложения (другой рабочей книги ППП Excel 5.0) – вызов осуществляется по имени модуля, имени процедуры и имени рабочей книги

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

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

585

Для защиты модуля рабочей книги от доступа к нему из процедур другой рабочей книги в начале модуля указывают: Option Private Module

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

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

Объявление аргументов в заголовке процедуры имеет стандартный вид: Sub Proc_B (Val1 As Single; Val2 As Date;... )

Через выбранный разделитель списков (в зависимости от настройки Windows – запятая или точка с запятой) следуют аргументы с указанием имени и типа значения.

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

ключевое слово Optional.

Пример 19.18. Процедура вычисления площади прямоугольника по двум сторонам

Текст программы

Комментарий

Sub SquarPr (L As Single; H As Single;

Объявление процедуры SquarPr и ее

S As Single; Optional F)

аргументов

If IsMissing (F) Then F=100

Встроенная функция VBA – IsMissing

 

проверяет наличие аргумента F, если F не

 

задано, по умолчанию F присваивается

 

значение 100 (F имеет тип Variant)

S=L*H

Вычисление площади прямоугольника

End Sub

Конец процедуры

Вызов такой процедуры выполняется различным образом.

1-й вариант непосредственное задание значений аргументов при вызове

процедуры

Текст программы

Комментарий

Sub Proc_A ()

Вызывающая процедура

Dim Sq as Single

 

SquarPr 12; 23; Sq

Вызов процедуры с передачей

 

значений длин сторон

 

прямоугольника в явном виде,

 

результат вычисления будет

 

присвоен переменной Sq

End Sub

Конец процедуры

2-й вариант через имена переменных, которым присвоены значения

Текст программы

Комментарий

Sub Proc_A ()

Вызывающая процедура Объявление

 

переменных ПЛОЩАДЬ

Dim Sq as Single

ДЛИНА

Dim LL as Single

ВЫСОТА

Dim HH as Single

 

LL=12

Присвоение значений переменным

HH=23

 

SquarPr LL HH Sq

Вызов процедуры с передачей значений

 

длин сторон прямоугольника в явном

 

виде, результат вычисления будет

 

присвоен переменной Sq

End Sub

Конец процедуры

3-й вариант использование списка поименованных аргументов при вызове

586

процедуры

Текст программы

Комментарий

Sub Proc_A ()

Вызывающая процедура

 

Объявление переменных

Dim Sq as Single

ПЛОЩАДЬ

Dim LL as Single

ДЛИНА

Dim HH as Single

ВЫСОТА

LL=12

Присвоение значений переменным

HH=23

 

SquarPr L:=LL; H:=HH; S:=Sq

Вызов процедуры с указанием

 

соответствия имен аргументов

 

вызываемой процедуры и имен

 

переменных вызывающей процедуры,

 

которые разделяются в строке знаком :

End Sub

Конец процедуры

При завершении работы вызываемой процедуры и передаче управления вызывающей процедуре происходит потеря значений переменных, объявленных в вызываемой процедуре.

Для предотвращения этого сохраняемые переменные следует объявлять оператором:

Static <var> As <type>

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

Для модификации заголовка процедуры выполняется указание ключевого слова By Val перед именами аргументов, значение которых не изменится внутри процедуры.

Пример 19.19.

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

Пример 19.20.

Текст программы

Комментарий

Sub Proc_A ()

Вызывающая процедура

 

Объявление переменных

Dim Sq as Single

ПЛОЩАДЬ

Dim LL as Single

ДЛИНА

Dim HH as Single

ВЫСОТА

LL=12

Присвоение значений переменным

HH=23

 

SquarPr L:=(LL); H:=(HH); S:=Sq

Преобразование аргумента в

 

формулу

End Sub

Конец процедуры

Встроенные функции VBA

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

587

отдельные значения (не массивы).

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

(String), если:

в большой программе используется много переменных; программа детально структурирована; данные записываются непосредственно в файл прямого доступа.

Некоторые встроенные функции VBA возвращают значение в виде строки символов, если к имени функции добавлен символ – $. Следующие встроенные функции имеют одинаковые формат и правила применения, что и без символа $:

Таблица 19.6. Категории встроенных функций VBA

Категории встроенных функций

Примеры функций

Математические

ABS() – абсолютное значение числа;

 

RND() – случайное число;

 

INT() – выделение целой части числа;

 

тригонометрические функции и др.

Строковые

LCASE() – преобразование в строчные буквы строки символов;

 

UCASE() – преобразование в прописные буквы строки символов;

 

LEFT() – выделение подстроки слева;

 

RIGHT() – выделение подстроки справа;

 

LEN() – определение длины строки и др.

Даты и времени

DATE() – возврат текущей системной даты;

 

CDATE() – конвертирование выражения в формат дата/время;

 

ТIМЕ() – возврат текущего системного времени;

 

NOW() – возврат текущей даты и текущего времени (по

 

компьютеру);

 

DAY() – возврат номера дня года;

 

MONTH() – возврат номера месяца года;

 

WEEKDAY() – возврат номера дня недели;

 

YEAR() – возврат номера года и др.

Преобразования типов данных

СINТ() – преобразование действительного числа в целое (с

 

округлением);

 

CSTR() – преобразование числа в строку символов;

 

CVAR() – преобразование в тип данных VARIANT;

 

FORMAT() – форматирование данных типа дата, время, число,

 

строка символов для печати или записи в файл;

 

STRCOMP() – сравнение двух строк;

 

VAL() – преобразование строки символов в число и др.

Файловой системы

FILEATRR() – возврат атрибутов файла;

 

FILEDATETIME() – определяет дату и время создания

 

(модификации) файла;

 

FILELEN() – определяет длину файла в байтах;

 

FREEFILE() – определяет следующий свободный номер для

 

работы с файлом и др.

Функции пользователя

На языке VBA можно создавать функции пользователя, которые, в отличие от процедуры, возвращают

588

вычисленное значение (одно); оно может участвовать в выражениях оператора присваивания. Заголовок функции пользователя имеет вид:

Внимание! Для функции указывается тип возвращаемой величины – As <type>. В теле функции используется оператор присваивания вычисленного значения имени функции.

Пример 19.21. Использование пользовательской функции вычисления площади прямоугольника

Текст программы

Комментарий

Sub Proc_A ()

Вызывающая процедура

 

Объявление переменных

Dim S as Single

ПЛОЩАДЬ

Dim LL as Single

ДЛИНА

Dim HH as Single

ВЫСОТА

LL=12

Присвоение значений переменным

HH=23

 

S=Sq(LL;H)/2+1200

Формула вызова функции Sq

End Sub

Конец процедуры

Function Sq (H As Single; L As Single As Single)

Объявление функции Sq с аргументами

Sq=H*L

Присвоение функции Sq результата

 

вычисления

End Function

Конец функции

Управляющие структуры

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

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

Оператор простой структуры имеет следующий формат записи:

If <выражение> Then <оператор>

Данный оператор обеспечивает проверку выражения (условия). Если условие истинно (True), выполняется простой или составной оператор, следующий за словом Then; если условие ложно (False), управление передается следующему за If оператору.

Составной оператор последовательность операторов одной строки, разделенных знаком : (двоеточие).

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

Пример 19.22.

If MaxPrice > 23,000.00$ Then MaxPrice=23,500.00$

If Student_Card(100).FullName Like "Пе*" Then number=Student_Card(100).Group

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

589

Функция

Описание

Функция

Описание

Not

Инверсия или отрицание

Хоr

Исключающее "Или"

And

Логическое "И"

Imp

Импликация

Or

Логическое "ИЛИ"

Eqv

Эквивалентность

Последовательно выполняется проверка истинности выражений. Если выражение 1 истинно, выполняется блок операторов 1, иначе выполняется проверка истинности выражения 2 и т.д.

Если ни одно из выражений не соответствует требованиям истинности, выполняется блок операторов Else, если оно имеется, иначе оператор, следующий за End If.

Пример 19.23. Организация проверки условия блочной структурой оператора If

Текст программы

Комментарий

If AvgPrice > 12000 Then

Проверка условия 1

DiffPrice=Full(234, 45600)

Если условие 1 истинно, вызов процедуры

ElseIf AvgPrice > 24000 Then

Проверка условия 2

DiffPrice=Full( 12000, 45000)

Если условие 2 истинно, вызов процедуры

ElseIf AvgPrice > 36000 Then

Проверка условия 3

DiffPrice=Full(24000, 50000)

Если условие 3 истинно, вызов процедуры

Else

Если условия 1 – 3 не выполняются, вызов

DiffPrice=Full(36000, 70000)

процедуры

End If

Конец блока If

Оператор выборки Select Case. Данный оператор применяется в том случае, если во всех логических условиях участвует одна и та же величина (переменная):

Выражение для сравнения может быть записано в виде: Case 45 или Case 3, 4, 5, или Case 5 То 12. Если ни одно из сравнений не является истинным, выполняется блок операторов Else, если блок Else

отсутствует, управление передается оператору, следующему за End Case.

Пример 19.24. Организация последовательной проверки значения переменной

Текст программы

Комментарий

590