Справочная таблица по встроенным типам данных VBA Excel. Функция TypeName, возвращающая тип данных переменной. Оператор Option Explicit в начале модуля.
Встроенные типы данных
Встроенные типы данных VBA Excel:
Тип данных | Байты* | Диапазон значений |
---|---|---|
Byte | 1 | Целые числа: от 0 до 255 |
Boolean | 2 | True (Истина) или False (Ложь) |
Integer | 2 | Целые числа: от -32768 до 32767 |
Long | 4 | Целые числа: от -2147483648 до 2147483647 |
Single | 4 | Отрицательные числа: от -3,402823Е+38 до -1,401298Е-45 Положительные числа: от 1,401298Е-45 до 3,402823Е+38 |
Double | 8 | Отрицательные числа: от -1,79769313486232Е+308 до -4,94065645841247Е-324 Положительные числа: от 4,94065645841247Е-324 до 1,79769313486232Е+308 |
Currency | 8 | от -922337203685477,5808 до 922337203685477,5807 |
Date | 8 | с 1 января 100 года по 31 декабря 9999 года |
Object | 4 | Ссылка на объект |
String (переменной длины) |
10 + длина строки | от 0 до ≈2 млрд символов |
String (фиксированной длины) |
длина строки | от 1 до ≈65400 символов |
Variant (числа) |
16 | В пределах диапазона типа данных Double |
Variant (символы) |
22 + длина строки | от 0 до ≈2 млрд символов |
Дополнительно для VBA7:
Тип данных | Байты* | Диапазон значений |
---|---|---|
LongLong | 8 | Целые числа: от –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 Доступен только в 64-разрядных системах. |
LongPtr | 4 или 8 | В 32-разрядных системах соответствует типу Long: от -2147483648 до 2147483647, в 64-разрядных — типу LongLong: от –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 |
*Резервируется память в байтах на каждую переменную соответствующего типа.
Тип данных Variant может принимать специальные значения: Empty, Error, Nothing и Null.
Кроме встроенных типов данных VBA Excel позволяет использовать пользовательские типы, создаваемые с помощью оператора Type. Диапазон значений пользовательского типа данных определяется встроенными типами, из которых он состоит.
Переменные с типами данных Byte, Boolean, Integer, Long, Single и Double можно объявлять с помощью суффиксов.
Функция TypeName
Чаще всего, функция TypeName возвращает наименование типа данных аргумента (значения), содержащегося в переменной. Кроме наименований встроенных типов данных, функция TypeName может возвращать следующие значения:
Значение | Описание |
---|---|
Collection, Dictionary, Range, Worksheet и т.д. | Тип известного объекта, ссылка на который содержится в объектной переменной |
Error | Переменная содержит значение ошибки |
Empty | Неинициализированное значение |
Null | Отсутствие допустимых данных |
Unknown | Объект, тип которого неизвестен |
Nothing | Объектная переменная, которая не ссылается на объект |
Если переменная объявлена с числовым типом данных или String, функция TypeName возвратит наименование этого типа данных. Если переменная объявлена с типом данных Variant или Object, возвращаемое значение будет зависеть от содержимого переменной.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub Primer() Dim a As Single, b As Date, c As Variant MsgBox "a As Single: " & TypeName(a) 'Single MsgBox "b As Date: " & TypeName(b) 'Date MsgBox "c As Variant: " & TypeName(c) 'Empty (значение не инициализировано) c = 1.236 MsgBox "c = 1.236: " & TypeName(c) 'Double Set c = Cells(1, 1) MsgBox "Set c = Cells(1, 1): " & TypeName(c) 'Range (тип объекта) Set c = Worksheets(1) MsgBox "Set c = Worksheets(1): " & TypeName(c) 'Worksheet (тип объекта) End Sub |
Оператор Option Explicit
VBA Excel допускает использование в коде как объявленных, так и необъявленных переменных. Необъявленным переменным присваивается тип данных Variant и они могут принимать все допустимые значения, свойственные этому типу.
Если при написании кода допустить ошибку в имени ранее использовавшейся переменной, компилятор зарегистрирует ее как новую. Это вызовет ошибки в работе программы, причину которых (ошибку в имени переменной) трудно обнаружить при отладке.
Чтобы избежать ошибок при работе с переменными используется оператор Option Explicit. Он указывает на то, что все переменные в модуле должны быть объявлены с помощью ключевого слова Dim или ReDim. В этом случае, если компилятор обнаружит строку с необъявленной переменной, то сгенерирует ошибку и выделит эту переменную.
Размещается оператор Option Explicit в самом начале модуля перед всеми остальными операторами. Чтобы каждый раз не вставлять его вручную и, тем более, не забыть о нем, можно настроить редактор VBA Excel, чтобы он автоматически добавлял Option Explicit при создании нового модуля.
Настройка автоматического добавления Option Explicit
1. Откройте окно Options через вкладку меню Tools:
2. Отметьте галочкой опцию Require Variable Declaration на вкладке Editor:
3. Теперь новый модуль открывается со строкой Option Explicit:
Надо заметить, что тип данных Date хранит не только даты, но и время.
Кстати, а можно ли определить размер переменной в байтах?
Что-нибудь типа MsgBox (Size(i))
Можно: MsgBox LenB(i)
Cтолбец «D» — текcтовая информация
для поиска и сравнения хочу переменной «poisk» присвоить значение ячейки D3
Машина ругается «Ошибка метода _Default объекта Range»
Что она (машина ) из-под меня хочет ?
Может быть переменная r равна 0?
спасибо!
На ровном месте споткнулся!
В переменной прописываю n_p а проверяю r ?!
Надо пойти на свежий воздух проветриться
Здравствуйте!
Хочу обратить внимание достопочтенной публики, что не все дробные значения одинаково полезны.
Есть несколько способов справиться с этим безобразием.
Самый простой — это не использовать Single, если планируете работать с ячейками.
Типы данных Double или Variant подобным, как будто бы, не грешат,
с другой стороны, их размер (в байтах) больше, чем у Single.
Можно также использовать округление ячеек до двух цифр после запятой
Для самых же смелых духом, я предлагаю решение, где не нужно изменять тип переменной или вводить дополнительные:
работаю с числами в текстовом формате
машина выдает «0» в числовом формате (правое расположение в ячейке)
Евгений, ответ правильный, но меня он не устраивает …
похоже я криво изложил свою проблему
[d2] — в данном случае несет визуально-контрольное назначение ( чтобы можно было ТОЛЬКО посмотреть/проверить и ВСЁ ! )
Все действия (вырезать, правый/левый, сцепить …) это всё будет проводиться с переменной t1
Именно у t1 должен быть текстовый формат
т.е.
В этом случае t2 должна быть «00000234»
вопрос снимается . Сам разобрался
Опечатка:
Спасибо, Коля! Исправил.
Обсуждение закрыто.