Чтение онлайн

на главную - закладки

Жанры

VBA для чайников

Каммингс Стив

Шрифт:

"У меня двенадцать" > "У меня двадцать два" дает в результате True (Истина), поскольку буква е в слове двенадцать больше, чем а в слове двадцать, несмотря на то, что левая часть выражения короче правой.

Сравнение с помощью Like

Как правило, с помощью Like строка сравнивается не с конкретным набором символов, а с заданным образцом, в котором используются замещающие символы, когда нужно убедиться, что строка попадает (или не попадает) в некоторый класс строк. У меня нет возможности вдаваться здесь в детали, но вы должны знать, что сравнение такого типа в VBA есть и что это довольно

мощное средство для обработки текстовых данных.

Операторы сравнения в программном коде

Результат выполнения сравнения можно сохранить в переменной (обычно для этого используется переменная типа Boolean) с помощью стандартного оператора присваивания: boolTheAnswerIs = 5 > 4

Поскольку 5 больше, чем 4, результатом сравнения будет True (Истина), а поэтому VBA присвоит переменной boolTheAnswerIs значение True.

Ключевые слова True и False на самом деле встроенные числовые константы

VBA, соответственно представляющие значения -1 и 0. Результат сравнения можно присвоить любой числовой переменной.

Операции сравнения часто используются в условных операторах, чтобы принять решение о выполнении той или иной ветви программного кода:

If intP <= intQ Then

ЧтоТоНеТак ' вызов процедуры обработки ошибок

End If

Объединение текста

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

strA = "Вы ответили " & InputBox("Введите ответ:") & _

". Правильным ответом было " & strAnswer & "."

В результате выполнения этого оператора strA может содержать, например, "Вы ответили Португалия. Правильным ответом было Испания", или какую-то подобную строку.

При составлении большой строки из маленьких не забывайте добавлять в строку результат необходимые пробелы и знаки пунктуации.

Дополнительные сведения о типах данных

В этом разделе приводятся рекомендации по поводу того, где и когда использовать различные типа данных 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. Вот еще несколько советов об использовании некоторых типов данных.

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

Стеллар. Трибут

Прокофьев Роман Юрьевич
2. Стеллар
Фантастика:
боевая фантастика
рпг
8.75
рейтинг книги
Стеллар. Трибут

Его огонь горит для меня. Том 2

Муратова Ульяна
2. Мир Карастели
Фантастика:
юмористическая фантастика
5.40
рейтинг книги
Его огонь горит для меня. Том 2

На границе империй. Том 9. Часть 4

INDIGO
17. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 4

Наследник

Кулаков Алексей Иванович
1. Рюрикова кровь
Фантастика:
научная фантастика
попаданцы
альтернативная история
8.69
рейтинг книги
Наследник

Совершенно несекретно

Иванов Дмитрий
15. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Совершенно несекретно

Ваше Сиятельство 2

Моури Эрли
2. Ваше Сиятельство
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Ваше Сиятельство 2

Прометей: каменный век II

Рави Ивар
2. Прометей
Фантастика:
альтернативная история
7.40
рейтинг книги
Прометей: каменный век II

Единственная для темного эльфа 3

Мазарин Ан
3. Мир Верея. Драконья невеста
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Единственная для темного эльфа 3

Жандарм

Семин Никита
1. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
4.11
рейтинг книги
Жандарм

Долгий путь домой

Русич Антон
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
6.20
рейтинг книги
Долгий путь домой

Прогрессор поневоле

Распопов Дмитрий Викторович
2. Фараон
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прогрессор поневоле

Наследие Маозари 6

Панежин Евгений
6. Наследие Маозари
Фантастика:
попаданцы
постапокалипсис
рпг
фэнтези
эпическая фантастика
5.00
рейтинг книги
Наследие Маозари 6

Я еще не барон

Дрейк Сириус
1. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я еще не барон

Лолита

Набоков Владимир Владимирович
Проза:
классическая проза
современная проза
8.05
рейтинг книги
Лолита