VBA для «чайников» - [60]
Дополнительные сведения о типах данных
В этом разделе приводятся рекомендации по поводу того, где и когда использовать различные типа данных VBA. При этом рассматриваются все типы данных, кроме двух. Тип данных Object, хотя и очень полезен, но достаточно сложный, поэтому отдельно обсуждается в главе 12. Пользовательские типы данных в настоящей книге не рассматриваются.
Преобразование типов данных
Типы данных существуют только для удобства программиста - VBA хранит всю свою информацию исключительно в цифровой форме. А поскольку это так, преобразование данных одних типов в другие не слишком большая проблема для VBA.
В VBA есть целый ряд встроенных функций для преобразования одних типов данных в другие. Эти функции рассматриваются в главе 11 и с их помощью вы можете управлять такими преобразованиями. Но важно знать, что всегда, когда это следует из контекста, VBA автоматически конвертирует данные к подходящему типу. Например, если в выражении участвуют строка, состоящая только из цифр, и числовое значение, связанные знаком операции +, то к числовому значению будет прибавлено число, определяемое строкой. Точно так же, если присвоить целой переменной значение с десятичными знаками, то VBA автоматически округлит это значение.
Часто такие автоматические преобразования типов вполне соответствуют тому, что вам нужно. Но основная проблема здесь состоит в том, что даже если вы позаботитесь о явном объявлении типов данных для всех своих переменных, вероятность появления ошибок не исчезает как раз из-за стремления VBA предугадать ваши желания.
Тип Variant
Тип 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 точность вычислений (подробности - в следующем разделе).
Выбор числового типа данных
Если назначить переменным определенные типы данных, а не тип 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 считает показатель экспоненты положительным):
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.