Читаем VBA для чайников полностью

В VBA есть целый ряд встроенных функций для преобразования одних типов данных в другие. Эти функции рассматриваются в главе 11 и с их помощью вы можете управлять такими преобразованиями. Но важно знать, что всегда, когда это следует из контекста, VBA автоматически конвертирует данные к подходящему типу. Например, если в выражении участвуют строка, состоящая только из цифр, и числовое значение, связанные знаком операции +, то к числовому значению будет прибавлено число, определяемое строкой. Точно так же, если присвоить целой переменной значение с десятичными знаками, то VBA автоматически округлит это значение.

Часто такие автоматические преобразования типов вполне соответствуют тому, что вам нужно. Но основная проблема здесь состоит в том, что даже если вы позаботитесь о явном объявлении типов данных для всех своих переменных, вероятность появления ошибок не исчезает как раз из-за стремления VBA предугадать ваши желания.

<p>Тип Variant</p>

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

Dim varЧтоУгодно As Variant

varЧтоУгодно = 3

varЧтоУгодно = "Я полагаю."

varЧтоУгодно =#12/31/99 11:59:59 РМ#

VBA не только допускает такой набор операторов, но еще и помнит, данные какого типа вы помещаете в переменную типа Variant. Например, после выполнения последнего из приведенных выше операторов varЧтоУгодно будет идентифицироваться как переменная типа Variant/Date. Выяснить, данные какого типа хранятся в переменной типа Variant в данный момент, можно с помощью функции VBA TypeName. Например, если бы предыдущий фрагмент программного кода продолжался оператором

strVariantType = TypeName (varЧтоУгодно)

то значением переменной strVariantType было бы Date, поскольку данные именно такого типа находятся в varЧтоУгодно.

Благодаря такой своей гибкости переменные типа Variant очень удобны. Вместо того чтобы заботиться об использовании конкретных типов данных, можно всем переменным назначить тип Variant, и тогда в них легко помешать данные любых типов. Однако такой подход тоже имеет свои недостатки, о которых уже говорилось в разделе "Использование конкретного типа данных по сравнению с типом Variant: за и против".

Но даже если вы назначите конкретные типы данных всем своим переменным, переменные типа Variant не утратят своей роли хотя бы как черновые переменные для простых вычислений в небольших процедурах. А в VBA 5 и VBA 6 такие переменные придется использовать, если вам потребуется максимально допустимая в VBA точность вычислений (подробности - в следующем разделе).

<p>Выбор числового типа данных</p>

Если назначить переменным определенные типы данных, а не тип Variant, и при этом в каждом конкретном случае выбрать наиболее подходящий тип данных, то программа будет выполняться быстрее, будет меньше по объему и, возможно, вероятность ее правильной работы будет выше. Ясно, что переменная должна занимать в памяти объем, достаточный для хранения любого из возможных для нее значений, а все сверх этого - пустая трата памяти.

Например, если в программе требуется одна переменная для хранения информации о дне недели (диапазон возможных значений от 1 до 7) и одна переменная для числа месяца (диапазон 1-31), то вполне достаточными для этого будут переменные типа Byte, позволяющие хранить числовые значения в диапазоне от 0 до 255. Если же для работы вам нужны 365 дней в году, придется использовать переменную типа Integer.

Диапазоны допустимых значений для переменных каждого из допустимых в VBA типов данных были приведены в табл. 7.1. Вот еще несколько советов об использовании некоторых типов данных.

* Для хранения целых чисел (т.е. не имеющих дробной части) используйте переменные типов Boolean, Byte, Integer или Long.

* Используйте переменные типов Single или Double, чтобы хранить числа с плавающей запятой и показателем степени, имеющие до 15 значащих цифр. Хотя в этом случае диапазон допустимых значений просто огромен, не упускайте из виду возможность ошибок округления, когда выполняются операции со значениями, сильно отличающимися по порядку. Чтобы присвоить, например, значение 4,72X10-22 переменной типа Single или Double, используйте следующий формат (когда знак + или - после буквы Е пропущен, VBA считает показатель экспоненты положительным):

sngFloating = 4 . 7 2Е-2 2

Перейти на страницу:

Все книги серии Для чайников

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных

Все жанры