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

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

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

Добавлен: 19.06.2025

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

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

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

результат операции сравнения.

VBA использует тип Date для хранения дат и времени. Нет необходимости беспокоиться о том, как VBA хранит данные типа Date, – можно просто отображать, сохранять или манипулировать датами; VBA автоматически управляет всеми деталями преобразования последовательного числа в год, месяц, день и время. VBA-тип Date является типом последовательных дат (serial Dates).

Последовательные даты сохраняют дату как число дней от заданной стартовой даты. Базовой датой для VBA-типа Date является 30 декабря 1899. VBA использует отрицательные числа для представления дат ранее 30.12.1899 и положительные – для дат после 30.12.1899. Число 0 представляет саму дату 30.12.1899. По этой схеме 1 января 1900 записывается числом 2 (1.1.1990 – это 2 дня после 30.12.1899), однако число –2 является датой 28.12.1899 (два дня до 30.12.1899). Чтобы убедиться в этом, напишите простую процедуру.

Задание 1. Напишите процедуру, выводящую сообщение даты.

Для этого:

ü напишите процедуру (листинг 3):

Листинг 3 – Процедура DateTest

1Sub DateTest()

2Dim d As Date

4d = 1

5MsgBox d

6End Sub

Врезультате работы этой процедуры на экран будет выдана базовая дата

(рис. 15).

Рис. 15 В значении последовательной даты целая часть (цифры слева от

десятичного знака) – это общее число дней от базовой даты. Последовательная дата VBA может иметь цифры справа от десятичного знака; эти цифры обозначают время дня как часть дня. Один час – это 1/24 дня (приблизительно 0,0416. Аналогично, одна минута – это 1/1440 дня, а секунда – 1/86400 дня.

Вы можете вычитать одну дату из другой, добавлять к дате или вычитать числа для изменения ее значения. Например, если вам необходимо определить количество дней между двумя датами, просто вычитайте более раннюю дату из более поздней. Поскольку это значения типа Date, VBA «знает», что целью вычисления является получение разности в днях между двумя этими датами. Аналогично, если вам необходимо определить дату через 60 дней после данной даты, просто прибавьте 60 к этой дате.

41


В VBA имеется несколько встроенных процедур (описанных в этой части) для отдельного извлечения года, месяца, дня, часов, минут и секунд из переменной типа Date.

Любые текстовые данные, сохраняемые в программе VBA, называются строками (strings). Строки в VBA сохраняются с использованием типа данных String. Строки получили такое название, потому что текстовые данные обычно рассматриваются как строки символов. Строка может содержать текстовые символы любых типов: буквы алфавита, цифры, знаки пунктуации или различные символы. Существуют две категории строк: строки переменной длины, размер которых растет или уменьшается, и строки фиксированной длины, размер которых всегда остается одним и тем же. Все строки в VBA являются строками переменной длины, если только вы не задаете фиксированную. Большинство данных ввода пользователей (в диалоговых окнах, ячейках рабочих листов) – это строковые данные. Кроме того, поскольку вы можете отображать на экране только текст, все другие типы данных должны быть преобразованы в строковые данные перед тем, как вы сможете их вывести на экран. Многие встроенные процедуры VBA (подобные Msgbox) используют строковые данные во всех или в некоторых своих аргументах.VBA предоставляет несколько операторов для конкатенации (concatenate), то есть для соединения вместе и для сравнения строк. VBA имеет также несколько встроенных процедур, помогающих извлекать подстроки из более длинных строк, находить символы или слова в строке, изменять регистр букв в строке и так далее. В этой части описываются строковые операторы VBA и процедуры для манипулирования строками VBA.

Тип данных Variant – это особый тип данных, который может сохранять любые типы, приведенные в табл. 9, за исключением типа Object. VBA использует тип Variant для всех переменных, если только вы не объявляете явно тип переменной, как будет описано далее в этой части. Данные типа Variant принимают характеристики определенного типа, который они сохраняют в данный момент. Например, если данные типа Variant содержат строковые данные, Variant принимает характеристики типа String. Если данные типа Variant содержат численные данные, Variant принимает характеристики какого- либо численного типа, обычно – Double, хотя типы Variant могут также иметь характеристики типов Integer, Long, Single или Currency. Несмотря на то, что

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

программирования и вам будет трудно находить и устранять ошибки в программах.

Переменные

Переменная (variable) – это имя, которое программист дает области

42


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

Идентификатор (identifier) – это имя, которое вы даете элементам в создаваемых вами процедурах и модулях, таким как переменные. Термин идентификатор основывается на том факте, что имена, которые вы создаете, определяют конкретные участки памяти (в случае имени переменной), группы инструкций (в случае имени макроса или процедуры) или другие элементы программы.

Имена переменных не «чувствительны» к состоянию регистра (not casesensitive), то есть написание имени переменной прописными или заглавными буквами не имеет значения.

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

Сохранение значения данных в переменной называется присваиванием переменной (assigning the variable или making an assignment). Присваивание выполняется с помощью оператора присваивания, представляемого знаком равенства (=). Следующая строка является примером присваивания значения переменной:

MyVar = 25

Этот оператор сохраняет численное значение 25 в ячейке памяти, заданной именем переменной MyVar.

Создание переменной путем ее использования в операторе называется

неявным объявлением переменной (implicit variable declaration). Используя переменную в операторе, вы неявно указываете (объявляете) VBA, что хотите создать эту переменную. Все переменные, которые VBA создает неявным объявлением переменной, имеют тип данных Variant. Неявное объявление переменных известно также как объявление переменных «на лету» (on-the-fly).

Неявное объявление переменных удобно, но имеет потенциальные проблемы. Например, когда вы имеете переменную с именем MyVar и сделаете позже ошибку в имени, набирая MVar. В зависимости от того, где появится в вашем коде неправильное имя переменной, VBA может выдать ошибку времени исполнения или просто создать новую переменную. Если VBA создаст новую переменную, у вас могут возникнуть проблемы, которые очень трудно обнаружить.

По этим и другим причинам VBA предоставляет вам возможность выполнять явное (explicit) объявление переменных.

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

Dim name1 [, name2]

nameN – это любой допустимый идентификатор переменной. Все переменные, которые вы создаете с этой формой ключевого слова Dim, являются переменными

43


типа Variant.

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

Задание 2. Модифицируйте процедуру HelloExcel из предыдущей части, используя явное определение переменной.

Для этого:

ü измените процедуру HelloExcel (листинг 4):

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

1Sub HelloExcel()

2Dim HelloMsg ' переменная для MsgBox

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

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

6End Sub

Оператор Dim (в строке 2) листинга 4 объявляет переменную HelloMsg и резервирует для нее область памяти (в данной подпрограмме HelloMsg – это переменная типа Variant). Строка 2 включает конечный комментарий, указывающий назначение этой переменной. В строке 4 выполняется присваивание переменной HelloMsg строки "Здравствуй, Excel!". Далее (в строке 5) переменная HelloMsg используется как один из аргументов для процедуры MsgBox. Функция MsgBox отображает то же окно сообщения, что и раньше. Хотя MsgBox получает теперь свой первый аргумент из переменной, эта переменная содержит ту же строковую информацию, что была ранее (в листингах предыдущей части) записана непосредственно в оператор MsgBox.

Все переменные в VBA, независимо от того, объявляются ли они неявно или явно, являются переменными типа Variant, если только вы не задаете тип переменной в объявляющем ее операторе. Для объявления типизированной переменной и ее типа с помощью оператора Dim добавьте ключевое слово As после переменной, а затем введите имя типа данных для этой переменной. Вот

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

Dim varnamel [As typel] [, varname2 [As type2] ]

varnameN представляет любое допустимое имя переменной VBA, a typeN – любое из имен типов данных VBA.

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

При неявном объявлении можно также задавать тип переменной, добавляя

44


специальный символ, называемый символом определения типа (type-definition character), в конец имени переменной. В табл. 10 приводятся символы определения типа VBA и типы, которые они обозначают.

Таблица 10 – Символы определения типа

Символ определения

Тип

Символ определения

Тип

!

Single

$

String

@

Currency

%

Integer

#

Double

&

Long

Символы определения типа могут находиться только в конце имени переменной. Несмотря на то, что следует знать, что такое символы определения типа и как они используются, необходимость в их применении бывает редкой — использование оператора Dim с ключевым словом As намного легче и понятнее. Большинство программистов, работающих на VBA, не используют символы определения типа.

Задание 3. Модифицируйте процедуру HelloExcel из задания 3, используя определение типизированной переменной.

Для этого:

ü измените процедуру HelloExcel (листинг 5):

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

1Sub HelloExcel()

2Dim HelloMsg As String

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

5Title$ = "Моя первая программа"

6MsgBox HelloMsg, , Title$

7End Sub

Эта версия процедуры HelloExcel работает во многом так же, как и предыдущие. Строка 1 содержит объявление процедуры. В строке 2 оператор Dim явно объявляет переменную HelloMsg. Поскольку оператор Dim включает ключевое слово As и имя типа String, переменная HelloMsg имеет тип String. Строка 4 присваивает текст сообщения строковой переменной HelloMsg.

Строка 5 неявно объявляет переменную Title$ и в то же время присваивает переменной текст заголовка окна сообщения. Поскольку имя переменной Title$ имеет на конце символ определения типа для строки, эта переменная также имеет тип String. Наконец, строка 6 использует оператор MsgBox для отображения окна сообщения; в этом операторе и текст сообщения, и строка заголовка окна являются переменными: HelloMsg и Title$, соответственно.

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

Независимо от того, объявляются ли переменные типа String с помощью оператора Dim или добавлением символа определения типа $, создаваемые вами строковые переменные по умолчанию являются строками переменной длины.

45