ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 19.06.2025

Просмотров: 1434

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Строковые переменные переменной длины изменяют длину, в зависимости от длины строки, сохраняемой переменной. Иногда может понадобиться использовать строку фиксированной длины (fixed-length). Строки фиксированной длины всегда имеют одну и ту же длину. Следующая строка показывает общий синтаксис для создания строки фиксированной длины:

Dim varname As String * N

varname – это любое допустимое имя переменной, a N – это любое число от 1 до 65400 символов

Область действия: доступность переменных

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

Переменная, объявленная в процедуре, является доступной только в этой процедуре. Например, переменная HelloMsg из строки 2 листинга 5 является доступной только в процедуре HelloExcel; никакая другая процедура не имеет доступа к этой переменной.

Поэтому говорят, что переменная HelloMsg имеет область действия процедурного уровня (procedure-level scope). В действительности, переменная HelloMsg реально существует только в то время, когда VBA фактически выполняет процедуру HelloExcel.

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

Для этого:

ü введите две законченные процедуры (листинг 6):

Листинг 6 – Процедура HelloExcel

1Sub HelloExcel()

2Dim HelloMsg As String

4HelloMsg = "Здравствуй, Excel!"

5MsgBox HelloMsg, , "Моя первая программа"

6End Sub

8Sub HelloDave()

9Dim HelloMsg As String

11HelloMsg = "Добрый день, Excel!"

12MsgBox HelloMsg, , "Другое окно сообщения"

13End Sub

46


Строки 1–6 содержат ту же процедуру HelloExcel из листинга 4, которая работает точно так же. В модуль была добавлена процедура HelloDave, которая и начинается в строке 8 листинга 6. Процедура HelloDave работает так же, как процедура HelloExcel, просто она отображает другое текстовое сообщение и заголовок в своем диалоговом окне. В строках 2 и 9 обе процедуры используют оператор Dim для объявления локально переменных с именем HelloMsg.

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

VBA позволяет объявлять переменные, доступные для нескольких процедур. Когда какая-либо переменная доступна всем процедурам в модуле, говорят, что эта переменная имеет область действия модульного уровня (module level). VBA ограничивает область действия переменной модульного уровня модулем, в котором объявляется эта переменная (VBA предоставляет способы еще большего расширения области действия переменной; эти методы описываются далее).

Для того чтобы переменная была доступной для всех процедур в определенном модуле, поместите оператор Dim для нее в начало модуля перед любыми объявлениями процедур.

Упражнение 1

Создайте две процедуры и единственное объявление переменной модульного уровня (перенесите в строку 1 оператор Dim с переменной HelloMsg убрав строки 2 и 9 из листинга 6).

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

можно иметь переменные с одним и тем же именем на разных уровнях области действия. Когда переменные имеют одно имя, но разные области действия, VBA использует переменную с наиболее локальной (local) областью действия.

Требование явного объявления переменных

Хотя неявное объявление переменных (объявление переменных просто их использованием) удобно, с ним связаны некоторые проблемы. Когда переменные объявляются неявно, существует риск нечаянно создать новую переменную, когда

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

Чтобы легче было в любое время обнаруживать ошибки, связанные с неявным объявлением переменных, VBA предоставляет команду Option Explicit. При использовании Option Explicit VBA требует объявления всех переменных (с помощью оператора Dim) перед их использованием в модуле.

Чтобы установить режим, при котором VBA требует явного объявления для всех переменных в модуле, добавьте команду Option Explicit в область объявлений модуля, то есть в начало модуля перед любыми объявлениями переменных или процедур. Такие команды, как Option Explicit, называются

директивами компилятора (compiler directives).

47


Команда Option Explicit действует только на модуль, в котором она появляется. Если проект, содержащий этот модуль, содержит также другие модули, на них не действует команда Option Explicit. Необходимо включать команду Option Explicit в каждый модуль, для которого требуются явные объявления переменных.

Поскольку включение Option Explicit во все модули является очень полезным, Редактор VB предоставляет способ автоматически включать эту команду в каждый новый модуль при его создании. Для того чтобы Редактор VB добавлял команду Option Explicit в каждый новый модуль, выполните следующие шаги:

üвыберите команду Tools/Options (Сервис/Параметры); Редактор VB отображает диалоговое окно Options;

üщелкните на вкладке Editor (Редактор) для отображения параметров редактирования, если необходимо;

üвыберите флажок Require Variable Declaration (Явное описание переменных);

üвыберите ОК. Редактор VB закрывает диалоговое окно Options.

Упражнение 2

Установите автоматическое включение команды Option Explicit в каждый новый модуль при его создании.

Константы

Константа (constant) – это значение в программе VBA, которое не меняется. Примеры процедур, уже приведенные выше, используют строковые константы типа "Здравствуй, Excel!" и "Моя первая программа". Константы,

подобные им, называют литеральными константами (literal constants), потому что литеральное значение записывается непосредственно в код.

В коде VBA можно также писать литеральные численные константы и даты; примеры численных литеральных констант включают числа 25, 3.14. Примеры литеральных констант-дат включают даты #12/31/96# или #октябрь 28, 1997# (вы узнаете подробнее о написании констант-дат далее в этой части).

VBA позволяет создавать именованные константы (named constants).

Именованная константа, подобно переменной, имеет заданное ей имя; это имя представляет конкретное неизменяемое значение. Однако в отличие от переменной значение именованной константы никогда не изменяется. Следующая строка показывает общий синтаксис для объявления именованных констант:

Const namel = valuel [operator name2…] _

[, патеЗ = value3 [operator name4] … ]

nameN представляет любой допустимый идентификатор, valueN – любое значение данных: численное, строковое или дата, a operator – арифметическая или операция сравнения между двумя именами ранее описанных констант.

Следующие строки показывают несколько объявлений именованных констант:

Const Pi = 3.14, text = "Здравствуй, Excel!"

48


Const Pi2 = 2*Pi

Область действия констант

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

Написание литеральных констант

При написании литеральных строковых констант в коде VBA выполняйте следующие правила:

üстроковые константы должны быть заключены в двойные кавычки (");

üпустая строковая константа (называемая нулевой строкой null string или empty string) обозначается двумя двойными кавычками, между которыми ничего нет ("");

üстроковая константа должна вся находиться на одной и той же строке.

При написании литеральных численных констант в коде VBA выполняйте следующие правила:

üчисленные константы должны состоять только из числовых символов от

0 до 9;

üчисленная константа может начинаться со знака (–) и может содержать десятичную точку;

üможно использовать экспоненциальное представление для численных констант.

VBA распознает константы даты в любом из нескольких различных форматов; необходимо помещать все константы даты между знаками фунта (#). Следующие строки показывают некоторые из форматов констант дат, которые распознает VBA:

#2-5-97 21:17:34#

#February 5, 1997 9:17:34pm#

#Маг-31-97# #15 April 1997#

Независимо от того, в каком из указанных форматов записывается литеральная константа типа Date, VBA переформатирует эту константу (когда курсор вставки будет убран со строки после записи константы) для соответствия одному из двух следующих форматов, в зависимости от того, содержит ли константа Date информацию о времени:

#2/5/1997 9:17:34 PM# #2/5/1997#

Существует только две правильные константы типа Boolean: True и False.

Задание типа константы

Когда вы объявляете именованную константу или используете литеральную константу, VBA «считает», что значение, представленное этой константой, имеет

49


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

В VBA можно задать тип константы. Общий синтаксис для объявления типизированной константы следующий:

Const name As type = value [, name As type = value ]

name – это любое допустимое имя константы, type – имя любого из типов данных VBA и value – значение, которое вы присваиваете константе.

Следующая строка иллюстрирует правильное объявление константы с определенным типом:

Const Pi As Double = 3.14

Внутренние константы

VBA предоставляет несколько внутренних констант (intrinsic constants),

называемых также предопределенными константами (predefined constants).

Внутренняя константа – это именованная константа, которая была определена разработчиками VBA. Внутренние константы, определяемые VBA, все начинаются с букв vb для указания того, что они определяются языком Visual Basic for Applications (или Visual Basic). Например, константы vbOKOnly, vbOKCancel определяются VBA. Внутренние константы Excel 2002 начинаются с букв xl, чтобы было понятно, что они определяются Excel. Благодаря внутренним константам легче использовать некоторые встроенные процедуры VBA, такие как оператор MsgBox, о котором вы уже знаете, и оператор InputBox, о которых рассказывается далее в этой части.

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

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

Функция MsgBox отображающая окно с сообщением имеет следующий синтаксис:

MsgBox (Prompt [, Buttons] [, Title] [, HelpFile, Context])

аргумент Prompt представляет любое строковое значение (литерал, константу или переменную). MsgBox отображает эту строку в диалоговом окне; необходимо всегда предоставлять аргумент Prompt, поскольку это – обязательный аргумент (required argument). Аргумент Buttons (необязательный аргумент) является численным выражением, определяет отображаемые в диалоговом окне кнопки и сообщения. Аргумент Title представляет любое строковое значение (литерал, константу или переменную). MsgBox отображает текст этой строки в строке заголовка диалогового окна. Если опустить аргумент Title, VBA отображает в строке заголовка диалогового окна MsgBox слово "Microsoft Excel". Аргумент HelpFile – файл справки, Context – раздел в справочном файле. Текст сообщения можно заключать в скобки, но скобки необязательны, когда функция MsgBox

50