На главную Напишите нам! Напишите нам!
20-04-2024
колонтитул в word 2007, 0000002111

Совместимость типов данных 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 в число.

Как обеспечить совместимость между VBA- и VB-проектами

Мы уже несколько раз отмечали, что, несмотря на всю схожесть VB и Office/VBA, у этих систем есть ряд серьезных различий, которые препятствуют прямому перенесению кода из одного вида проекта в другой и наоборот. Поэтому при написании кода, который предполагается для использования в разных системах, нужно специально тестировать возможность их использования в обоих вариантах. К сожалению, только изучая документацию, проверить это трудно.

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

Это, в частности, касается и создания модулей формы. Мы уже писали (Совет 301), что Office/VBA использует для создания форм ActiveX-конструктор Microsoft Form 2.0, который доступен также в VB. То есть VB может создавать два типа: собственные VB-формы (Ruby Forms) и UserForms (VBA Forms). Однако проблема заключается в том, что, даже используя одинаковый конструктор, VB и VBA сохраняют модули формы в разных форматах. При этом VB может читать оба формата, а VBA — только свой собственный.

Соответственно, если вы намерены создавать модули формы двойного применения, это следует делать не просто с помощью MS Forms 2.0 , а обязательно с этой целью использовать Office/VBA.

И еще один совет, который из этого следует: для лучшей совместимости кода нужно в максимальной степени выносить код из процедур модулей формы в процедуры модуля кода или класса (эти компоненты пока — трудно сказать, что Microsoft придумает дальше — загружаются в обе среды разработки).

Перенос модулей формы в случае их несовместимости можно сделать следующим образом (например, из VB в VBA). Создайте в VBA визуальную форму со всеми компонентами. Задайте имена компонентов такие же, как в VB. Далее скопируйте содержимое кода из VB в VBA через буфер обмена.

Однако этот способ будет работать только при использовании Forms 2.0. При переносе VB-форм придется вручную корректировать имена некоторых событий и свойств. Например, в VBA события формы Initialize и Terminate соответствуют событиям Load и Unload в VB. В общем, с Microsoft не соскучишься.

колонтитулы в word 2007, 000000211111

Добавить в Мой Мир  Добавить в ВКонтакте.ру  Добавить в Facebook  Добавить в LiveJournal  Добавить в twitter

колонтитулы в word 2007, 000000211
нумерация страниц в word 2007, 00000021111
Яндекс.Метрика
Копирование возможно при указании прямой индексируемой гиперссылки
п»ї
0000002