Область действия: доступность переменных
Обзор типов данных VisualBasic (VB)
Перед изучением переменных следует понять, как VBA сохраняет различные виды информации. VBA, как и большинство других систем программирования, разделяет обрабатываемые данные на числа, даты, текст и другие типы. Тип данных (datatype) – это термин, относящийся к определенным видам данных, которые VBA сохраняет и которыми может манипулировать. В табл. 9 обобщены типы данных VBA, показано, какой объем памяти занимает каждый тип, кратко описаны типы данных и дан диапазон значений, которые данный тип может сохранять.
Таблица 9 – Типы данных VBA
Название типа | Размер в байтах | Описание и диапазон значения | |||
Byte | Целые положительные числа от 0 до 255 | ||||
Integer | Целые числа от -32768 до 32767 | ||||
Long | Длинные целые числа от -214 2147483647 | до | |||
Single | Вещественные числа обычной плавающей точкой. Отрицательные числа: от -3.402823Е38 до -1.401298Е-45. Положительные числа: от 1.401298Е-45 до 3.402823Е38 | точности | с | ||
Double | Вещественные числа двойной плавающей точкой. Отрицательные числа: от -1.79769313486232Е308 до -4.94065645841247Е-324. Положительные числа: от 4.94065645841247Е-324 до 1.79769313486232Е308 | точности | с | ||
Currency | Числа, имеющие до 15 цифр до десятичной точки и 4 цифры после нее (денежные единицы). От -922337203685477.5808 до 922337203685477.5807 | ||||
Boolean | Для хранения логических значений; может содержать только значения True (Истина) или False (Ложно) | ||||
Название типа | Размер в байтах | Описание и диапазон значения | |||
Date | Для хранения комбинации информации о дате и времени. Диапазон дат может быть от 1 января 100 года до 31 декабря 9999 года. Диапазон времени от 00:00:00 до 23:59:59 | ||||
String (строка переменной длины) | 10 байт + длина строки | Используется для хранения текста. Может содержать от 0 символов до (приблизительно) 2 миллиардов символов | |||
String (строка фиксированной длины) | Длина строки (один байт на один символ) | Используется для хранения текста. Может содержать от одного до (приблизительно) 65400 символов | |||
Variant | 16 байт + 1 байт/символ | Тип Variant может хранить любой другой тип данных. Диапазон для данных типа Variant зависит от фактически сохраняемых данных. В случае текста диапазон соответствует строковому типу; в случае чисел диапазон такой, как у типа Double | |||
Object | Используется для доступа к любому объекту, распознаваемому VBA. Сохраняет адрес объекта в памяти |
В табл. 9 вы встретились с представлением данных, называемым экспоненциальным представлением (scientificnotation), которое используется для отображения на внешних устройствах (монитор, принтер и т.д.) очень больших и очень малых чисел в компактном формате. В экспоненциальном представлении значения записываются без начальных и конечных нулей и слева от десятичного знака имеется только одна цифра. Число умножается на 10 в некоторой степени, чтобы показать, где на самом деле находится десятичный знак.
VBA имеет шесть различных численных типов данных: Byte, Integer, Long,
Single, Doubleи Currency.Численные типы данных используются для хранения (и манипулирования) чисел в различных форматах, в зависимости от конкретного типа.
Обычно VBA-программа (как и любые другие программы) «принимает» решения, проверяя, являются ли истинными различные условия. Для упрощения тестирования условий и обеспечения сохранения результатов такого тестирования в VBA имеется логический тип данных. Логические значения Trueи Falseназывают булевыми (Boolean) значениями. Их название связано с именем математика, разработавшего систему математической логики. Логический тип данных VBA называют также типом Boolean. Boolean-тип VBA требует двух байтов памяти и может иметь одно из двух значений: Trueили False.Если вы отображаете тип Booleanна экране, VBA автоматически преобразует его в строку, содержащую либо слово True,либо False. Булевы значения получают как результат операции сравнения.
VBA использует тип Date для хранения дат и времени. Нет необходимости беспокоиться о том, как VBA хранит данные типа Date, – можно просто отображать, сохранять или манипулировать датами; VBA автоматически управляет всеми деталями преобразования последовательного числа в год, месяц, день и время. VBA-тип Date является типом последовательных дат (serialDates). Последовательные даты сохраняют дату как число дней от заданной стартовой даты. Базовой датой для 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
1 SubDateTest()
2 Dim d AsDate
4 d = 1
5 MsgBox d
6 EndSub
В результате работы этой процедуры на экран будет выдана базовая дата
(рис. 15).
Рис. 15
В значении последовательной даты целая часть (цифры слева от десятичного знака) – это общее число дней от базовой даты. Последовательная дата VBA может иметь цифры справа от десятичного знака; эти цифры обозначают время дня как часть дня. Один час – это 1/24 дня (приблизительно 0,0416. Аналогично, одна минута – это 1/1440 дня, а секунда – 1/86400 дня.
Вы можете вычитать одну дату из другой, добавлять к дате или вычитать числа для изменения ее значения. Например, если вам необходимо определить количество дней между двумя датами, просто вычитайте более раннюю дату из более поздней. Поскольку это значения типа Date,VBA «знает», что целью вычисления является получение разности в днях между двумя этими датами. Аналогично, если вам необходимо определить дату через 60 дней после данной даты, просто прибавьте 60 к этой дате.
В 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) – это имя, которое программист дает области компьютерной памяти, используемой для хранения данных какого-либо типа. Переменные VBA могут хранить любые типы данных, перечисленные в табл. 9. Идентификатор (identifier) – это имя, которое вы даете элементам в создаваемых вами процедурах и модулях, таким как переменные. Термин идентификатор основывается на том факте, что имена, которые вы создаете, определяют конкретные участки памяти (в случае имени переменной), группы инструкций (в случае имени макроса или процедуры) или другие элементы программы.
Имена переменных не «чувствительны» к состоянию регистра (notcasesensitive), то есть написание имени переменной прописными или заглавными буквами не имеет значения.
Самым простым способом создания переменной является использование ее в операторе VBA. VBA создает переменную и резервирует память для ячейки памяти переменной, когда эта переменная в первый раз появляется в операторе (обычно в операторе, сохраняющем значение данных в переменной).
Сохранение значения данных в переменной называется присваиванием переменной (assigningthevariableили makinganassignment). Присваивание выполняется с помощью оператора присваивания, представляемого знаком равенства (=). Следующая строка является примером присваивания значения переменной:
MyVar = 25
Этот оператор сохраняет численное значение 25 в ячейке памяти, заданной именем переменной MyVar.
Создание переменной путем ее использования в операторе называется неявным объявлением переменной (implicitvariabledeclaration). Используя переменную в операторе, вы неявно указываете (объявляете) VBA, что хотите создать эту переменную. Все переменные, которые VBA создает неявным объявлением переменной, имеют тип данных Variant.Неявное объявление переменных известно также как объявление переменных «на лету» (on-the-fly). Неявное объявление переменных удобно, но имеет потенциальные проблемы. Например, когда вы имеете переменную с именем MyVarи сделаете позже ошибку в имени, набирая MVar. В зависимости от того, где появится в вашем коде неправильное имя переменной, VBA может выдать ошибку времени исполнения или просто создать новую переменную. Если VBA создаст новую переменную, у вас могут возникнуть проблемы, которые очень трудно обнаружить.
По этим и другим причинам VBA предоставляет вам возможность выполнять явное (explicit) объявление переменных.
Для явного объявления переменных используйте VBA-оператор Dimсо следующим синтаксисом:
Dimname1[, name2]
nameN – это любой допустимый идентификатор переменной. Все переменные, которые вы создаете с этой формой ключевого слова Dim, являются переменными типа Variant.
Переменную можно объявлять только один раз в отдельной процедуре или модуле. Так как оператор Dim находится перед любыми операторами, фактически использующими переменную, вы можете помещать его в любом месте в процедуре. В практике программирования хорошим правилом является собирать все явные объявления переменных в одном месте в начале процедуры.
Задание 2.Модифицируйте процедуру HelloExcel из предыдущей части, используя явное определение переменной.
Для этого: измените процедуру HelloExcel (листинг 4):
Листинг 4 – Процедура HelloExcel
1 SubHelloExcel()
2 DimHelloMsg ' переменная для MsgBox
4 HelloMsg = "Здравствуй, Excel!"
5 MsgBoxHelloMsg, , "Моя первая программа"
6 EndSub
Оператор 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.
После объявления типизированной переменной, независимо от того, объявляется ли эта переменная явно или неявно, и как задается тип, эта переменная сохраняет тот же самый тип столько времени, сколько она существует. Нельзя переобъявить переменную или переопределить ее тип. При неявном объявлении можно также задавать тип переменной, добавляя специальный символ, называемый символом определения типа (type-definitioncharacter), в конец имени переменной. В табл. 10 приводятся символы определения типа VBA и типы, которые они обозначают.
Таблица 10 – Символы определения типа
Символ определения | Тип | Символ определения | Тип | |||||
! | Single | $ | String | |||||
@ | Currency | % | Integer | |||||
Символы определения типа могут находиться только в конце имени |
переменной. Несмотря на то, что следует знать, что такое символы определения типа и как они используются, необходимость в их применении бывает редкой — использование оператора Dim с ключевым словом As намного легче и понятнее. Большинство программистов, работающих на VBA, не используют символы определения типа.
Задание 3.Модифицируйте процедуру HelloExcel из задания 3, используя определение типизированной переменной.
Для этого: измените процедуру HelloExcel (листинг 5):
Листинг 5 – Процедура HelloExcel
1 SubHelloExcel()
2 DimHelloMsgAsString
4 HelloMsg = "Здравствуй, Excel!"
5 Title$ = "Моя первая программа"
6 MsgBoxHelloMsg, ,Title$
7 EndSub
Эта версия процедуры HelloExcel работает во многом так же, как и предыдущие. Строка 1 содержит объявление процедуры. В строке 2 оператор Dim явно объявляет переменную HelloMsg. Поскольку оператор Dim включает ключевое слово As и имя типа String, переменная HelloMsg имеет тип String. Строка 4 присваивает текст сообщения строковой переменной HelloMsg.
Строка 5 неявно объявляет переменную Title$ и в то же время присваивает переменной текст заголовка окна сообщения. Поскольку имя переменной Title$ имеет на конце символ определения типа для строки, эта переменная также имеет тип String. Наконец, строка 6 использует оператор MsgBox для отображения окна сообщения; в этом операторе и текст сообщения, и строка заголовка окна являются переменными: HelloMsg и Title$, соответственно.
После добавления символа определения типа к переменной необходимо включать символ определения типа каждый раз, когда вы используете имя переменной.
Независимо от того, объявляются ли переменные типа Stringс помощью оператора Dimили добавлением символа определения типа $, создаваемые вами строковые переменные по умолчанию являются строками переменной длины.
Строковые переменные переменной длины изменяют длину, в зависимости от длины строки, сохраняемой переменной. Иногда может понадобиться использовать строку фиксированной длины (fixed-length). Строки фиксированной длины всегда имеют одну и ту же длину. Следующая строка показывает общий синтаксис для создания строки фиксированной длины:
DimvarnameAsString * N
varname – это любое допустимое имя переменной, a N – это любое число от 1 до 65400 символов
Упражнение 1
Создайте две процедуры и единственное объявление переменной модульного уровня (перенесите в строку 1 оператор Dim с переменной HelloMsg убрав строки 2 и 9 из листинга 6).
Имя переменной должно быть уникальным в ее области действия. Однако можно иметь переменные с одним и тем же именем на разных уровнях области действия. Когда переменные имеют одно имя, но разные области действия, VBA использует переменную с наиболее локальной (local)областью действия.
Требование явного объявления переменных
Хотя неявное объявление переменных (объявление переменных просто их использованием) удобно, с ним связаны некоторые проблемы. Когда переменные объявляются неявно, существует риск нечаянно создать новую переменную, когда на самом деле необходимо использовать уже существующую или использовать существующую переменную, когда пользователь намеревается создать новую. Обе эти ситуации приводят к ошибкам в коде, которые очень трудно отслеживать. Чтобы легче было в любое время обнаруживать ошибки, связанные с неявным объявлением переменных, VBA предоставляет команду OptionExplicit. При использовании OptionExplicitVBA требует объявления всех переменных (с помощью оператора Dim) перед их использованием в модуле.
Чтобы установить режим, при котором VBA требует явного объявления для всех переменных в модуле, добавьте команду OptionExplicitв область объявлений модуля, то есть в начало модуля перед любыми объявлениями переменных или процедур. Такие команды, как OptionExplicit, называются директивами компилятора (compilerdirectives).
Команда OptionExplicit действует только на модуль, в котором она появляется. Если проект, содержащий этот модуль, содержит также другие модули, на них не действует команда OptionExplicit. Необходимо включать команду OptionExplicit в каждый модуль, для которого требуются явные объявления переменных.
Поскольку включение OptionExplicit во все модули является очень полезным, Редактор VB предоставляет способ автоматически включать эту команду в каждый новый модуль при его создании. Для того чтобы Редактор VB добавлял команду OptionExplicit в каждый новый модуль, выполните следующие шаги:
выберите команду Tools/Options (Сервис/Параметры); Редактор VB
отображает диалоговое окно Options; щелкните на вкладке Editor (Редактор) для отображения параметров
редактирования, если необходимо; выберите флажок Require Variable Declaration (Явное описание
переменных); выберитеОК. Редактор VB закрывает диалоговое окно Options.
Упражнение 2
Установите автоматическое включение команды OptionExplicit в каждый новый модуль при его создании.
Константы
Константа (constant) – это значение в программе VBA, которое не меняется. Примеры процедур, уже приведенные выше, используют строковые константы типа "Здравствуй, Excel!"и "Моя первая программа". Константы, подобные им, называют литеральными константами (literalconstants), потому что литеральное значение записывается непосредственно в код.
В коде VBA можно также писать литеральные численные константы и даты; примеры численных литеральных констант включают числа 25, 3.14.Примеры литеральных констант-дат включают даты #12/31/96#или #октябрь 28,1997#(вы узнаете подробнее о написании констант-дат далее в этой части).
VBA позволяет создавать именованные константы (namedconstants). Именованная константа, подобно переменной, имеет заданное ей имя; это имя представляет конкретное неизменяемое значение. Однако в отличие от переменной значение именованной константы никогда не изменяется. Следующая строка показывает общий синтаксис для объявления именованных констант:
Constnamel = valuel [operator name2…] _ |
[, патеЗ=value3 [operator name4] … ] |
nameN представляет любой допустимый идентификатор, valueN – любое значение данных: численное, строковое или дата, a operator – арифметическая или операция сравнения между двумя именами ранее описанных констант. Следующие строки показывают несколько объявлений именованных констант:
Const Pi = 3.14, text = "Здравствуй, Excel!"
Const Pi2 = 2*Pi
Область действия констант
Как и в случае с переменными, можно объявлять именованные константы в процедурах или в области объявлений в начале модуля. Константа, объявляемая в процедуре, имеет область действия процедурного уровня, а константа, объявляемая в области объявлений модуля, – область действия модульного уровня. Для именованных констант выполняются те же правила области действия, что и для переменных.
Задание типа константы
Когда вы объявляете именованную константу или используете литеральную константу, VBA «считает», что значение, представленное этой константой, имеет тип данных, наиболее согласующийся с выражением, присвоенным константе. В VBA можно задать тип константы. Общий синтаксис для объявления типизированной константы следующий:
ConstnameAs type=value [, name As type=value ]
name – это любое допустимое имя константы, type – имя любого из типов данных VBA и value – значение, которое вы присваиваете константе.
Следующая строка иллюстрирует правильное объявление константы с определенным типом:
Const Pi As Double = 3.14
Внутренниеконстанты
VBA предоставляет несколько внутренних констант (intrinsicconstants), называемых также предопределенными константами (predefinedconstants). Внутренняя константа – это именованная константа, которая была определена разработчиками VBA. Внутренние константы, определяемые VBA, все начинаются с букв vb для указания того, что они определяются языком VisualBasicforApplications (или VisualBasic). Например, константы vbOKOnly, vbOKCancel определяются VBA. Внутренние константы Excel 2002 начинаются с букв xl, чтобы было понятно, что они определяются Excel. Благодаря внутренним константам легче использовать некоторые встроенные процедуры VBA, такие как оператор MsgBox, о котором вы уже знаете, и оператор InputBox,о которых рассказывается далее в этой части.
Выражения в VisualBasic
Выражение (expression) – это значение или группа значений, выражающая отдельное значение. Каждое выражение вычисляется до (или имеет результатом) отдельного значения. Выражения состоят из одной или более следующих частей: константы (литеральные или именованные), переменные (любого типа данных), знаки операций, массивы, элементы массива, функции.
Все выражения имеют результатом одно значение определенного типа данных. Выражения могут также иметь результатом одно из специальных значений Empty (неинициализированную переменную типа Variantили результат выражения, содержащий неинициализированную переменную типа Variant) или Null (Nullпредставляет выражение, содержащее неверные данные). Когда вы используете какой-либо знак в выражении, элементы данных (переменные или константы), над которыми производится действие, называются операндами (operands); большинству операций требуется два операнда.
Совместимость типов данных. Автоматическое преобразование данных
Не все типы данных совместимы друг с другом, и нельзя использовать несовместимые типы данных в одном и том же выражении. Например, не имеет смысла арифметическое сложение строки с числом, так как такое выражение не является значащим и VBA не может его оценить.
Многие типы данных совместимы друг с другом. Например, вы можете объединять различные численные типы данных в одном и том же выражении; VBA автоматически выполняет необходимые преобразования типа различных численных типов. VBA может также иногда автоматически преобразовывать другие типы данных так, чтобы все типы в выражении были совместимы, хотя это не всегда возможно. Очень важно контролировать и знать тип выражения, потому что если выражения содержат несовместимые типы, VBA выдает ошибку времени исполнения – ошибку несовпадения типов (type-mismatch). При обработке выражения, содержащего различные типы данных VBA сначала «пытается» устранить любое различие типов, преобразуя значения в выражении в совместимые типы данных. Если устранить какие-либо различия преобразованием типов не удается, отображается ошибка времени исполнения и процедура прекращает выполняться. Например, в выражении 25 & "Информатика" VBA всегда выполняет строковую конкатенацию (соединяет две строки), независимо от типов переменных; результатом является тип String; это выражение никогда не вызывает ошибки несовпадения типов.
VBA обычно преобразует все численные типы данных в выражении в тип наибольшей точности, а затем дает этот тип результату выражения. Например, если выражение содержит численные значения с типами Integer и Single,результат выражения является типом Single – тип наибольшей точности в этом выражении. Если вы присваиваете результат численного выражения переменной с наименьшей точностью, чем фактический тип результата выражения, VBA округляет результат выражения до тех пор, пока его точность не совпадет с ожидаемым типом. Например, если вы присваиваете численное выражение, имеющее результатом число типа Double,переменной типа Integer,VBA округляет число двойной точности до типа Integer.
При преобразовании числа в строку VBA создает строку, содержащую все цифры этого числа и десятичный знак (если число имеет его). Число 3413.72 (точка используется для записи числа в коде), например, преобразуется в строку "3413,72". Если число очень большое или очень маленькое, VBA может создать строковое представление числа в экспоненциальной записи; например, число 0.0000000004927 преобразуется в строку "4,927Е–11".
VBA может преобразовывать строку в число, если только эта строка содержит символьное представление числа в десятичном формате или экспоненциальном. Строки "988,6", "812", "-186,7", "1,ЗЕ10" представляют числа, и VBA может преобразовать их в числа. Строки "1.045", "$74.550" и "С добрым утром!" не могут быть преобразованы в числа.
Когда VBA преобразует значения типа Boolean в числа, значение True преобразуется в 1, а значение False – в 0. Когда VBA преобразует число в тип Boolean, нуль преобразуется в False, а любое другое значение преобразуется в True. Когда VBA преобразует значения типа Booleanв строки, VBA использует строку "True" для Trueи "False" – для False.
Когда VBA преобразует тип данных Dateв число, результатом является численное значение – число типа Double, которое содержит количество дней от 30 декабря 1899 (отрицательное число представляет дату, более раннюю, чем
12/30/1899). Десятичная часть числа (если имеется) выражает время дня как часть дня; 0 – это полночь, а 0.5 – это полдень. В VBA преобразование численных типов данных в типы Dateявляется просто обратным преобразованию типа Dateв число.
Оператор присваивания (=)
Этот оператор используется для присваивания результата выражения переменной. Синтаксис формы оператора присваивания следующий:
varname= expression
переменная varname – любая переменная, a expression – любое выражение.
При выполнении оператора присваивания VBA сначала вычисляет выражение справа от оператора присваивания (=), а затем сохраняет результат выражения в переменной, имя которой находится слева от оператора присваивания.
Изображение оператора присваивания на блок-схеме:
varname= expression
Когда вы присваиваете результат выражения переменной с определенным типом данных, этот результат может иметь тип данных, совместимый с типом переменной, получающей новое значение. Во многих случаях, VBA может преобразовывать тип данных результата выражения в тип, совместимый с типом переменной, принимающей новое значение, если результат выражения и переменная еще не имеют совместимых типов. Переменным типа Variantможет быть присвоен любой тип данных.
Арифметические операции
VBA может выполнять все обычные арифметические операции
(реализуемые посредством арифметических выражений): сложение, вычитание, умножение и деление, а также возведение чисел в указанную степень и предоставляет дополнительные особые математические операции для целочисленного деления и деления по модулю (табл. 11).
Таблица 11 – Знаки операций (обозначения), используемые в арифметических VBA-выражениях (Ni – это любое допустимое численное выражение VBA)
Знак | Синтаксис | Имя/Описание |
+ | N1 + N2 | Сложение. Прибавляет N1 к N2 |
– | N1 – N2 | Вычитание. Вычитает N2 из N1 |
* | N1 * N2 | Умножение. Умножает N1 на N2 |
/ | N1 / N2 | Деление. Делит N1 на N2. |
\ | Nl \ N2 | Целочисленное деление. Делит N1 на N2, отбрасывая любую дробную часть так, чтобы результат был целым числом. |
Mod | N1 Mod N2 | Деление по модулю. Делит N1 на N2, возвращая только остаток операции деления. |
^ | N1 ^ N2 | Возведение в степень. Возводит N1 в степень N2. |
Оба операнда должны быть численными выражениями или строками, которые VBA может преобразовать в число.
Операции сравнения
Операции сравнения иногда также называют операциями отношения (relationaloperators).Чаще всего операции сравнения используются для того, чтобы задать критерии для принятия решения или сформулировать описание условий, при которых группа команд должна быть повторена (организация циклов).
Результатом любой операции сравнения является значение типа Boolean: True или False. Операции сравнения используются для сравнения литеральных, константных или переменных значений любого сходного типа (табл. 12). Таблица 12 – Знаки (обозначения) операций сравнения (Е в этой таблице представляет любое действительное выражение VBA)
Операция/ Оператор | Синтаксис | Наименование/описание |
= | El = Е2 | Равенство. True, если El равно Е2, иначе – False |
< | El< Е2 | Меньше, чем. True, если El меньше, чем Е2, иначе – False |
≤ | <= | Меньше, чем или равно. True, если Е1 меньше или равно Е2, иначе – False |
> | > | Больше, чем. True, если Е1 больше, чем Е2, иначе – False |
≥ | >= | Больше, чем или равно. True, если Е1 больше или равно Е2, иначе – False |
≠ | <> | Не равно. True, если Е1 не равно Е2, иначе – False |
Is | Elis E2 | Оба операнда должны быть значениями типа Object. True, если El ссылается на тот же самый объект, что и Е2, иначе – False |
Like | ElLike E2 | Подобие. Оба операнда должны быть значениями типа String. True, если El совпадает с образцом, содержащимся в Е2, иначе – False |
Если оба операнда в выражении сравнения имеют один и тот же тип |
данных, VBA выполняет простое сравнение для этого типа. Если, например, оба операнда являются строками, VBA выполняет сравнение строк; если оба операнда являются датами, то VBA выполняет сравнение дат и так далее.
Конкатенация строк
VBA дает возможность объединять (склеивать) строки вместе для образования более длинных строк. Присоединение одной строки к другой называется конкатенацией (concatenation) строк. Знак & можно использовать только для конкатенации строк. Общий синтаксис знака & такой:
Operand1&Operand2 [&Operand3…]
Operand1 и Operand2 – любые допустимые строковые или численные выражения. Если один или оба операнда являются численными выражениями, VBA преобразует числа в строки перед выполнением операции конкатенации. Тип данных результата конкатенации строк – это всегда тип String.
Логические операторы
Чаще всего логические операторы VBA используются для объединения результатов отдельных выражений сравнения, чтобы создать сложные критерии для принятия решений в процедуре, или для создания условий, при которых группа операторов должна повторяться (табл. 13).
Таблица 13 – Логические операторы (Е в этой таблице представляет собой любое допустимое выражение с результатом типа Boolean, такое как операция сравнения)
Оператор | Синтаксис | Имя/Описание |
And | ElAnd E2 | Конъюнкция. True, если оба Е1 и Е2 имеют значение True, иначе – False |
Or | ElOr E2 | Дизъюнкция. True, если одно выражение или оба (Е1 и Е2) являются равными True; иначе – False |
Not | NotEl | Отрицание. True, если Е1 имеет значение False; False, если El является равным True |
Xor | ElXor E2 | Исключение. True, если Е1 и Е2 имеют разные значения; иначе – False |
Eqv | ElEqv E2 | Эквивалентность. True, если Е1 имеет то же самое значение, что и Е2; иначе – False |
Imp | ElImp E2 | Импликация. False, когда Е1 является равным True и Е2 равно False; иначе — True. |
Математические функции
VBA предоставляет стандартный набор математических функций (табл. 15). Таблица 15 – Математические функции VBA (N означает любое численное выражение)
Функции(аргументы) | Возвращает/действие |
Abs(N) | Возвращает абсолютное значение N |
Cos(N) | Косинус угла N, где N – это угол, измеренный в радианах |
Sin(N) | Возвращает синус угла; N – это угол, измеренный в радианах |
Tan(N) | Возвращает тангенс угла; N – угол в радианах |
Atn(N) | Возвращает арктангенс N как угол в радианах |
Exp(N) | Возвращает константу е, возведенную в степень N (е – это основание натуральных логарифмов и она (приблизительно) равна 2,718282) |
Fix(N) | Возвращае |