СОВМЕСТИМОСТЬ ТИПОВ ДАННЫХ VBA
Операторы и выражения
Выражение - это значение или группа значений, выражающая отдельное значение. Каждое выражение вычисляется до отдельного значения. Например, выражение 10+20 имеет результат 30.
Выражения состоят из одной или более частей:
· Константы;
· Переменные;
· Операторы;
· Массивы;
· Элементы массива;
· Функции.
Все выражения имеют результатом одно значение, имеющее один из типов данных, о которых говорилось на предыдущих уроках (см. таблицу).
Выражения могут также иметь результатом одно из специальных значений Empty или Null.
Значение Empty представляет неинициализированную переменную типа Variant (или результат выражения, содержащий неинициализированную переменную типа Variant).
Значение Null представляет выражение, содержащее неверные данные.
Операторы используются для объединения, сравнения или других действий над определенными значениями в выражении. Операторам присвоены имена, поскольку они являются символами, обозначающими то, что с различными значениями в выражении должны быть выполнены определенные математические и другие операции.
Элементы данных, над которыми оператор выполняет действие, называются операндами. Например, в выражении 10+20 числа 10 и 20 являются операндами оператора сложения. Выражение может содержать один, несколько операторов или ни одного.
Не все типы данных совместимы друг с другом, и нельзя использовать несовместимые типы данных в одном и том же выражении. Например, нельзя произвести арифметическое сложение над числом и строкой. При обработке выражения, содержащего различные типы данных, VBA сначала пытается устранить любое различие типов, преобразуя значения в выражении в совместимые типы данных. Если устранить какие-либо различия преобразованием типов не удается, отображается ошибка времени исполнения и процедура прекращает выполняться.
VBA предоставляет различные функции для преобразования одного типа данных в другой (о них будет рассказано позже).
VBA использует различные правила для автоматического преобразования данных в совместимые типы. Как правило, большинство выражений, использующих разные типы данных, вызывают ошибку несовпадения типов только тогда, когда оба операнда в выражении имеют определенные и разные типы. Выражения не вызывают ошибку несовпадения типов, когда один из операндов является переменной типа Variant. VBA легче выполняет автоматические преобразования типов с данными типа Variant.
Преобразования численных типов
VBA преобразует численные типы данных в выражении в тип наибольшей точности, который затем дает результату выражения. Например, операндами выражения являются числа 10 (Integer) и 20.89 (Single) - результат выражения будет иметь тип Single.
Но, если переменной типа Integer попытаться присвоить численное выражение типа Single, то VBA произведет округление до необходимой точности.
Преобразование строк и чисел
При преобразовании числа в строку VBA создает строку, содержащую все цифры этого числа и десятичный знак (если таковой имеется). Например, число 123.849 будет преобразовано в строку "123.849".
Если число очень большое или очень маленькое - VBA создаст строку в экспоненциальном виде. Например: 123000000 преобразуется в "123Е6".
Обратное преобразование возможно, если только строка содержит символьное представление числа в десятичном формате или экспоненциальном, при этом в качестве разделителя дробной части используется точка (но не запятая).
Преобразования Boolean
Когда VBA преобразует значения типа Boolean в числа, значение True преобразуется в 1, а False - в 0.
Когда происходит обратное преобразование, то VBA преобразует 0 в False, а любое другое число - в True.
Если происходит преобразование типа Boolean в строки, то VBA использует строку "True" для логического значения True и строку "False" - для False. Обратного преобразования строки в тип Boolean не предусмотрено.
Преобразование Date
Когда VBA преобразует тип данных Date в число, результатом является численное значение - число типа Double, которое содержит количество дней от 30 декабря 1899 (отрицательное число представляет дату, более раннюю чем 30 декабря 1899). Десятичная часть числа выражает время дня как часть дня; 0 - это полночь, 0.5 - это полдень.
Преобразование численных типов данных в типы Date является просто обратным преобразованию типа Date в число.