Dim iVar As Integer
iVar = 1.5
в результате выполнения присваивания переменной целого типа iVar значения 1.5 типа Double она будет иметь значение 2 типа Integer.
При присваивании переменной нецелого типа значения нецелого типа, но с большим диапазоном значений, происходит его округление. Например, в результате выполнения следующего фрагмента кода:
Dim sVar As Single
sVar = 1.23456789
переменная sVar получит значение 1.234568. Так происходит потому, что значение 1.23456789 типа Double в результате выполнения операции присваивания округляется до значения типа Single, которое может иметь не более 6 цифр после десятичной точки.
В результате присваивания переменной числового типа логического значения False она получит значение 0, а True – -1, т.е. все двоичные разряды ячейки памяти выделенной под эту переменную будут иметь значения 1.
После выполнения следующего фрагмента кода:
Dim Var As Double
Var = #4/15/2002 12:00:00 PM#
переменная Var получит значение 37361.5, поскольку его целая часть – это количество дней прошедших от начальной даты – 30 декабря 1899 года – до указанной в литерале, а дробная указывает, что 12:00 – это 0.5 суток. Тот же результат будет после присваивания этого литерала переменной типа Single, поскольку её диапазона значений для этого вполне достаточно. Однако, если переменная Var будет иметь тип Long, то её значение в результате выполнения операции присваивания будет округлено до 37362, а если Integer или Byte – произойдет переполнение, и выполнение программы будет прервано с выдачей соответствующего сообщения об ошибке.
Подобно оператору присваивания выполняется преобразование типа при передаче выражения в качестве аргумента функции.
Приведенные выше правила автоматического преобразования типов операндов в выражениях не всегда являются простыми и очевидными. Поэтому хорошей практикой программирования является явное преобразование типов данных с помощью соответствующих функций. В конце концов, VBA тоже использует эти функции для автоматического преобразования типов в выражениях. Функции явного преобразования типов обеспечивают полный контроль над типами данных в выражениях, а также делают код программы более понятным и, в некоторой степени, – самодокументированным.
Для преобразования строки в число используется функция Val (от английского value – значение). Она возвращает значение типа Double, а единственный её аргумент – это строка, построенная по правилам записи числовых литералов языка VBA. Например, в результате оценки следующего выражения:
Var = Val("-1.2e1")
переменная Var будет иметь значение -12.
Функция Str, наоборот, преобразует в строку значение своего единственного аргумента числового типа. Например, в результате выполнения следующей инструкции:
Var = str(-1.2e1)
переменная Var получит значение "12" типа String. В качестве допустимого разделителя целой и дробной части числа функция Str воспринимает только точку. При наличии другого разделителя, соответствующего, например, текущим локальным установкам операционной системы, для преобразования числа в строку следует использовать функцию CStr.
Кроме функций Val и Str VBA имеет много различных функций для преобразования значения из одного типа в другой. Названия всех этих функций начинаются с прописной буквы C, которая является первой буквой в слове convert – преобразовать. Имя каждой из них определяет тип возвращаемого значения в соответствии со следующей таблицей.
Функция |
Тип возвращаемого значения |
Аргумент |
CBool |
Boolean |
Любое допустимое строковое или числовое выражение |
CByte |
Byte |
Любое значение от 0 до 255 |
CCur |
Currency |
Любое значение от -922,337,203,685,477.5808 до 922,337,203,685,477.5807. |
CDate |
Date |
Любое допустимое выражение типа Date |
CDbl |
Double |
Любое значение от ‑1.79769313486231E308 до ‑4.94065645841247E‑324 для отрицательных и от 4.94065645841247E‑324 до 1.79769313486232E308 для значений |
CInt |
Integer |
Любое округленное до целого значение от ‑32,768 до 32,767 |
CLng |
Long |
Любое округленное до целого значение от ‑2,147,483,648 до 2,147,483,647 |
CSng |
Single |
Любое значение от ‑3.402823E38 до ‑1.401298E‑45 для отрицательных и от 1.401298E‑45 до 3.402823E38 для положительных |
CVar |
Variant |
Для численных данных – тот же что и для Double, для нечисловых – тот же что и для String |
CStr |
String |
Функция CStr возвращает значение типа String, зависящее от её аргумента, в соответствии со следующей таблицей:
Аргумент |
Возвращает |
Boolean |
Строку, содержащую True или False |
Date |
Строку, содержащую дату в коротком формате |
Null |
Ошибку времени выполнения |
Empty |
Пустую строку нулевой длины ("") |
Error |
Строку, содержащую слово Error, оканчивающуюся номером ошибки – целым числом в диапазоне 0 ÷ 65,535 |
Число |
Строку, содержащую число |
Например, в следующем выражении:
Var = CSng(1.2)
литерал 1.2 типа Double с помощью функции CSng будет преобразован в значение типа Single и присвоен переменной Var. А в следующем выражении:
Var = CBool(2 + 3)
значение выражения 2 + 3 типа Integer равное 5 преобразуется в значение типа Boolean True и, затем, присваивается переменной Var.
Функция CVDate, которая имеет такой же синтаксис, что и CDate, возвращает значение типа Variant, которое в свою очередь, содержит значение типа Data. Тот же результат можно получить, если возвращаемое функцией CDate значение присвоить переменной типа Variant. Функция CVDate оставлена в VBA для поддержки совместимости с программами для предыдущих версий Visual Basic. Во вновь создаваемых программах следует использовать функцию CDate.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.