ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 23.03.2025
Просмотров: 1038
Скачиваний: 2
MyVar = 14
Этот оператор сохраняет численное значение 14 в ячейке памяти, заданной именем переменной MyVar.
Создание переменной путем ее использования в операторе на-
зывается неявным объявлением переменной (implicit variable declaration). Используя имя переменной в операторе, можно неявно указать (объявить) VBA создать эту переменную. Все переменные, которые VBA создает неявным объявлением переменной, имеют тип данных Variant. Неявное объявление переменных известно также как объявление переменных «на лету» (on-the-fly).
Неявное объявление переменных удобно, но имеет потенциальные проблемы. Например, когда вы имеете переменную с именем MyVar и сделаете позже ошибку в имени, набирая MVar. В зависимости от того, где появится в вашем коде неправильное имя переменной, VBA может выдать ошибку во время исполнения макроса или просто создать новую переменную. Если VBA создаст новую переменную, могут возникнуть ошибки, причины появления которых очень трудно обнаружить.
По этим и другим причинам VBA предоставляет вам возможность выполнять явное (explicit) объявление переменных.
Для явного объявления переменных используйте VBA оператор Dim со следующим синтаксисом:
Dim name1 [, name2]
nameN – это любой допустимый идентификатор переменной. Все переменные, которые вы создаете с этой формой ключевого слова Dim, являются переменными типа Variant.
Переменную можно объявлять только один раз в отдельной процедуре или модуле. Так как оператор Dim находится перед любыми операторами, фактически использующими переменную, вы
19
можете помещать его в любом месте в процедуре. В практике программирования хорошим правилом является собирать все явные объявления переменных в одном месте в начале процедуры.
Пример 2. Процедура HelloStudent, использующая явное определение переменной.
' 1
‘2
‘3
‘4
‘5
Оператор Dim (в строке 2) объявляет переменную HelloMsg и резервирует для нее определенную область памяти (в данной подпрограмме HelloMsg – это переменная типа Variant). Строка 2 включает конечный комментарий, указывающий назначение этой переменной. В строке 3 выполняется присваивание переменной HelloMsg строки "Здравствуй, Петров!". Далее (в строке 4) переменная HelloMsg используется как один из аргументов для MsgBox. Функция MsgBox отображает то же окно сообщения, что и раньше. Хотя MsgBox получает теперь свой первый аргумент из переменной, эта переменная содержит ту же строковую информацию, что была ранее (в программах предыдущей части) записана непосредственно в оператор MsgBox.
Все переменные в VBA, независимо от того, объявляются – ли они неявно или явно, являются переменными типа Variant, если только вы не задаете тип переменной в объявляющем ее операторе. Для объявления типизированной переменной и ее типа с помощью оператора Dim добавьте ключевое слово As после переменной, а
20
затем введите имя типа данных для этой переменной. Вот общий синтаксис для использования оператора Dim при объявлении типизированных переменных:
Dim varnamel [As typel] [, varname2 [As type2] ]
где varnameN представляет любое допустимое имя переменной VBA, a typeN – любое из имен типов данных VBA.
После объявления типизированной переменной, независимо от того, объявляется ли эта переменная явно или неявно, и как задается тип, эта переменная сохраняет тот же самый тип столько времени, сколько она существует. Нельзя повторно объявить переменную или переопределить ее тип.
При неявном объявлении можно также задавать тип переменной, добавляя специальный символ, называемый символом определения типа (type-definition character), в конец имени переменной. В табл. 1.2 приводятся символы определения типа VBA и типы, которые они обозначают.
Таблица 1.2 – Символы определения типа
Символ опреде- |
Тип |
Символ опреде- |
Тип |
ления |
ления |
||
! |
Single |
& |
Long |
@ |
Currency |
% |
Integer |
# |
Double |
$ |
String |
Символы определения типа могут находиться только в конце имени переменной.
Несмотря на то, что следует знать, что такое символы определения типа и как они используются, необходимость в их применении бывает редкой — использование оператора Dim с ключевым
21
словом As намного легче и понятнее. Большинство программистов, работающих на VBA, не используют символы определения типа.
Пример 3. Процедура использует определение типизированной переменной.
Код процедуры HelloSudent
Sub HelloStudent() |
‘1 |
Dim HelloMsg As String |
‘2 |
HelloMsg = "Здравствуй, Петров!" |
‘3 |
Title$ = "Моя третья программа" |
‘4 |
MsgBox HelloMsg, , Title$ |
‘5 |
End Sub |
‘6 |
Строка 1 содержит объявление процедуры. В строке 2 оператор Dim явно объявляет переменную HelloMsg. Поскольку оператор Dim включает ключевое слово As и имя типа String, переменная HelloMsg имеет тип String. Строка 3 присваивает текст сообщения строковой переменной HelloMsg. Строка 4 неявно объявляет переменную Title$ и в то же время присваивает переменной текст заголовка окна сообщения. Поскольку имя переменной Title$ имеет на конце символ определения типа для строки, эта переменная также имеет тип String. Наконец, строка 5 использует функцию MsgBox для отображения окна сообщения; в этом операторе и текст сообщения, и строка заголовка окна являются переменными: HelloMsg и Title$, соответственно.
После добавления символа определения типа к переменной необходимо включать символ определения типа каждый раз, когда вы используете имя переменной.
Независимо от того объявляются ли переменные типа String с помощью оператора Dim или добавлением символа определения
22
типа $, создаваемые вами строковые переменные по умолчанию являются строками переменной длины. Строковые переменные переменной длины изменяют длину, в зависимости от длины строки, сохраняемой переменной. Иногда может понадобиться использовать строку фиксированной длины (fixed-length). Строки фиксированной длины всегда имеют одну и ту же длину. Следующая строка показывает общий синтаксис для создания строки фиксированной длины:
Dim varname As String * N
varname – это любое допустимое имя переменной, a N – это любое число от 1 до 65400 символов.
Требование явного объявления переменных
Хотя неявное объявление переменных (объявление переменных просто их использованием) удобно, с ним связаны некоторые проблемы. Когда переменные объявляются неявно, существует риск нечаянно создать новую переменную, когда на самом деле необходимо использовать уже существующую, или использовать существующую переменную, когда пользователь намеревается создать новую. Обе эти ситуации приводят к ошибкам в коде, которые очень трудно отслеживать.
Чтобы легче было в любое время обнаруживать ошибки, связанные с неявным объявлением переменных, VBA предоставляет команду Option Explicit. При использовании Option Explicit VBA
требует объявления всех переменных (с помощью оператора Dim) перед их использованием в модуле.
Чтобы установить режим, при котором VBA требует явного объявления для всех переменных в модуле, необходимо добавить команду Option Explicit в область объявлений модуля, то есть в начало модуля перед любыми объявлениями переменных или проце-
23
дур. Такие команды, как Option Explicit, называются директивами компилятора (compiler directives).
Команда Option Explicit действует только на модуль, в котором она появляется. Если проект, содержащий этот модуль, содержит также другие модули, внутри них не действует команда
Option Explicit. Необходимо включать команду Option Explicit в
каждый модуль, для которого требуются явные объявления переменных.
Отображение окон сообщений. Ввод данных пользователя
Получение данных от пользователя, сохранение их в переменной и отображение результатов действий, выполненных над ними, являются основными элементами, необходимыми для написания интерактивных процедур. Интерактивная (interactive) процедура – это процедура, обменивающаяся информацией с пользователем, то есть процедура, которая взаимодействует с пользователем отображая сообщения и получая ввод.
Функция MsgBox отображающая окно с сообщением имеет следующий синтаксис:
MsgBox (Prompt [, Buttons] [, Title] [, HelpFile, Context])
Аргумент Prompt представляет любое строковое значение (литерал, константу или переменную). MsgBox отображает эту строку в диалоговом окне; необходимо всегда предоставлять аргумент Prompt, поскольку это – обязательный аргумент (required argument). Аргумент Buttons (необязательный аргумент), является численным выражением, определяет отображаемые в диалоговом окне кнопки и сообщений. Аргумент Title представляет любое строковое значение (литерал, константу или переменную). MsgBox отображает текст этой строки в строке заголовка диалогового окна. Если опустить аргумент Title, VBA отображает в строке заголовка диалогово-
24
го окна MsgBox слово "Microsoft Excel". Аргумент HelpFile – файл справки, Context – раздел в справочном файле. Текст сообщения можно заключать в скобки, но скобки необязательны, когда функция MsgBox используется как оператор.
Данные, вводимые пользователем, называются входными данными (input). Чтобы получить входные данные от пользователя процедуры, используйте функцию InputBox. Функция (Function) – это особый тип процедуры VBA, возвращающей значение.
Функция InputBox отображает диалоговое окно, содержащее текст, который запрашивает пользователя ввести некоторое значение, и текстовое окно для ввода этого значения. Диалоговое окно, отображаемое InputBox, содержит также командные кнопки ОК и
Cancel.
Функция InputBox имеет следующий синтаксис:
stringvar = InputBox (Prompt [, Title] [, Default] [, XPos] [, YPos]
[, HelpFile, Context])
Здесь stringvar представляет любую переменную, которая может сохранять строку (либо переменную типа String, либо – Variant). Аргумент Prompt представляет любое строковое значение (литерал, константу или переменную). InputBox отображает эту строку как запрос в диалоговом окне; необходимо всегда предоставлять аргумент Prompt, поскольку это – обязательный аргумент; все остальные – необязательные. Аргумент Title является вторым аргументом для InputBox. Title представляет любое строковое значение (литерал, константу или переменную). InputBox отображает текст этой строки в строке заголовка диалогового окна. Если опустить аргумент Title, VBA отображает в строке заголовка диалогово-
го окна InputBox слово "Microsoft Excel".
25
Аргумент Default – строковое выражение, отображаемое в поле ввода как используемое по умолчанию, если пользователь не введет другую строку; если это аргумент опущен, поле ввода изображается пустым. Аргументы XPos и YPos могут быть любыми численными выражениями. Эти аргументы позволяют указать, где в активном окне появляется окно ввода, и являются координатами верхнего левого угла диалогового окна: XPos – горизонтальное расстояние от левого края окна; YPos – это вертикальное расстояние от верхнего края окна. Оба расстояния измеряются в твипах (twips); один твип равен 1/20 точки (точка – это измерение шрифта печати). Поскольку точка составляет 1/72 часть дюйма, то один твип приблизительно равен 0,0007 дюйма. Последние два необязательных аргумента для функции InputBox – это HelpFile и Context. Они имеют то же назначение, что и подобные аргументы функции MsgBox.
Использование именованных аргументов функций
Пропуск или перестановка аргументов в списке аргументов функции могут привести к ошибкам несовпадения типов. Ошибка (что еще хуже) может быть не обнаружена. Чтобы предотвратить ошибки программирования и сделать более легким использование функций, имеющих необязательные аргументы, VBA предоставляет альтернативу перечислению значений в списке аргументов в определенном порядке. Можно также передавать значения аргументов функции, используя именованные аргументы (named arguments) функций. Следующие строки показывают два оператора MsgBox, которые имеют один и тот же результат; первый оператор использует обычный метод перечисления аргументов, а второй – метод именованных аргументов:
MsgBox AnyMsg, , AnyTitle
MsgBox Prompt:=AnyMsg, Title:=AnyTitle
26