Базовые типы данных и операции над ними, страница 14

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.