Вход/Регистрация
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 точность вычислений (подробности - в следующем разделе).

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

Если назначить переменным определенные типы данных, а не тип 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

Если требуется еще более высокая точность вычислений, тип данных Currency обеспечит 19 значащих цифр, а тип данных Decimal - все 29 (эти типы данных в своих представлениях чисел не используют экспоненты). Однако в настоящей версии VBA Decimal не является самостоятельным типом данных- это значит, что нельзя объявить переменную типа Decimal, а тип данных Decimal существует только как возможное значение для типа Variant. Чтобы поместить в переменную типа Variant числовое значение не как значение с плавающей запятой, а как значение типа Decimal, используйте в операторе присваивания функцию CDec.

Вот пример того, как это реализовать (обратите внимание, что для функции CDec значения с большим количеством значащих цифр придется представлять в виде строк):

Dim decvar Pi As Variant

decvar Pi = CDec("3.1415926535897932384626433833" )

Если в программе выполняются вычисления с использованием значений некоторых переменных, то тип данных этих переменных должен быть достаточно емким, чтобы хранить результат вычисления, даже если этим переменным сам результат и не присваивается. Для примера внимательно ознакомьтесь со следующим фрагментом программного кода:

Dim bytBytei As Byte

Dim bytByte2 As Byte

Dim intInteger As Integer

byuBytel = 255 ' максимальное значение для типа Byte

bytByte2 = 1

intInteger = bytBytei + bytByte2 ' ошибка!

Здесь, несмотря на то, что переменная intInteger вполне допускает хранение значения, соответствующего результату вычисления, в последней строке этого фрагмента программного кода VBA зафиксирует ошибку переполнения. Чтобы вычисления выполнялись, необходимо в данном случае хотя бы вместо одной из переменных типа Byte использовать переменную типа Integer.

  • Читать дальше
  • 1
  • ...
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: