Vba вывести тип переменной

Определение типа данных в ячейке или переменной

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

Чтобы определить какой тип данных в ячейке или в переменной типа Variant, можно воспользоваться несколькими способами.

Способ 1. Использовать функцию TypeName для определения типа данных

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

Возможные возвращаемые функцией значения:

Byte Число типа Byte
Integer Целое число
Long Длинное целое число
Single Число одиночной точности с плавающей запятой
Double Число двойной точности с плавающей запятой
Currency Валюта
Decimal Число с плавающей запятой
Date Дата
String Строка
Boolean Логическое
Error Ошибка
Empty Не проинициализировано (т.е. переменная не была объявлена)
Null Неверные данные (в переменной нет корректных данных)
Object Объект (класс)
Unknown Тип данных не известен
Nothing Объект, никуда не ссылающийся
Читайте также:  Как чистить кеш компа

Приведу несколько примеров по использованию TypeName.

Пример 1. Определение типа переменной.

Обратите внимание: если вы используете результат TypeName в условии, т.е. проверяете, соответствует ли тип данных определенному, например, Integer, то регистр символов возвращаемого типа имеет значение. Т.е. нужно писать Integer с заглавной буквы, либо использовать приведение всех символов к одному регистру.

Пример 2. Использование TypeName в условии.

Пример 3. Определение типа данных в ячейке.

Если функции была передана переменная массив, она вернет тип данных в массиве с добавлением скобок.

Пример 4. Определение типа массива.

Способ 2. Проверка на возможность преобразования строки к нужному типу.

Бывает ситуация, когда значение, например, число или дата, содержится в строке. В этом случае TypeName вернет String, а не Integer или Date. Чтобы узнать, что содержится в строке, можно воспользоваться одной из функций IsNumeric, IsDate, IsObject, IsArray, IsNull, IsError.

IsNumeric Проверяет может ли выражение быть преобразовано в число
IsDate Проверяет может ли выражение быть преобразовано в дату
IsObject Проверяет, является ли переменная объектом
IsArray Проверяет, является ли переменная массивом
IsNull Проверка на пустое значение
IsError Проверка выражения на ошибку

Пример 4. Определение может ли переменная быть преобразована в число.

К сожалению, как видим из примера, нет возможности проверить, содержится ли в строке число с плавающей точкой.

Пример 5. Определение содержит ли переменная дату (может быть преобразована в дату).

Проверка, содержится ли число или дата в ячейке листа делается аналогично, как и с переменными.

Помимо этих способов можно конечно еще придумать и другие, например, проверку строки с данными регулярным выражением или пройти по каждому символу в цикле и проверить цифра это или нет и тому подобное. Но на мой взгляд, описанных мной способов вполне достаточно для решения повседневных задач.

Источник

Объявление переменной в Visual Basic

Переменная объявляется для указания ее имени и характеристик. Оператор объявления для переменных является оператором Dim. Его расположение и содержимое определяют характеристики переменной.

Правила именования переменных и рекомендации см. в разделе Имена объявленных элементов.

Уровни объявления

Локальные и переменные членов

Локальная переменная — это одна из процедур, объявленная в процедуре. переменная-член является членом типа Visual Basic; Он объявляется на уровне модуля, внутри класса, структуры или модуля, но не внутри какой-либо процедуры, внутренней для этого класса, структуры или модуля.

Переменные Shared и instance

В классе или структуре категория переменной-члена зависит от того, является ли она общей. Если он объявлен с ключевым словом Shared , то это Общая переменная, которая существует в одной копии, совместно используемой всеми экземплярами класса или структуры.

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

Объявление типа данных

Предложение as в операторе объявления позволяет определить тип данных или тип объекта объявляемой переменной. Для переменной можно указать любой из следующих типов:

Простейший тип данных, например Boolean , Long или Decimal

Составной тип данных, например массив или структура

Тип объекта или класс, определенный либо в приложении, либо в другом приложении

класс платформа .NET Framework, например Label илиTextBox

Тип интерфейса, например IComparable или IDisposable

В одной инструкции можно объявить несколько переменных без повторения типа данных. В следующих инструкциях переменные i , j и k объявляются как тип Integer , и l m как, и и, Long x y как Single :

Дополнительные сведения о типах данных см. в разделе типы данных. Дополнительные сведения об объектах см. в разделе объекты и классы и программирование с помощью компонентов.

Вывод локального типа

Определение типа используется для определения типов данных локальных переменных, объявленных без As предложения. Компилятор выводит тип переменной из типа выражения инициализации. Это позволяет объявлять переменные без явного указания типа. В следующем примере оба типа num1 и num2 строго типизированы как целые числа.

Если требуется использовать вывод локального типа, Option Infer необходимо задать значение On . Дополнительные сведения см. в разделах Вывод локального типа и Оператор Option Infer.

Характеристики объявленных переменных

Время существования переменной — это период времени, в течение которого она доступна для использования. Как правило, переменная существует, пока не будет существовать элемент, объявляющий ее (например, процедуру или класс). Если переменная не должна продолжаться за пределами времени существования содержащего его элемента, не нужно делать ничего особенного в объявлении. Если переменная должна продолжать существовать дольше, чем содержащая ее элемент, можно включить Static Shared ключевое слово или в Dim инструкцию. Дополнительные сведения см. в разделе время существования в Visual Basic.

Областью действия переменной является набор всего кода, который может ссылаться на него без уточнения его имени. Область переменной определяется тем, где она объявлена. Код, расположенный в данном регионе, может использовать переменные, определенные в этом регионе, без уточнения их имен. Для получения дополнительной информации см. Scope in Visual Basic.

Уровень доступа переменной — это область кода, имеющая разрешение на доступ к нему. Это определяется модификатором доступа (например, открытым или закрытым), который используется в Dim инструкции. Дополнительные сведения см. в разделе уровни доступа в Visual Basic.

Источник

Определение типа объекта (Visual Basic)

Универсальные объектные переменные (то есть переменные, объявляемые как Object ) могут содержать объекты из любого класса. При использовании переменных типа Object может потребоваться выполнить различные действия на основе класса объекта. Например, некоторые объекты могут не поддерживать конкретное свойство или метод. Visual Basic предоставляет два способа определения типа объекта, хранящегося в объектной переменной: TypeName функции и TypeOf. Is оператора.

TypeName и TypeOf. Рекомендуется

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

TypeOf. Is Оператор является лучшим выбором для тестирования типа объекта, так как он гораздо быстрее, чем эквивалентное сравнение строк с помощью TypeName . В следующем фрагменте кода используется TypeOf. Is If. Then. Else оператор:

В этом случае следует соблюдать осторожность. TypeOf. Is Оператор возвращает значение True , если объект относится к определенному типу или является производным от определенного типа. почти все, что выполняется с Visual Basic, включает объекты, которые включают в себя некоторые элементы, которые обычно не считаются объектами, например строками и целыми числами. Эти объекты являются производными от методов и наследуют от них Object . Если передается Integer и вычисляется с помощью Object , TypeOf. Is оператор возвращает True . В следующем примере сообщается, что параметр InParam является Object и, и Integer :

В следующем примере используются методы TypeOf. Is и TypeName для определения типа объекта, переданного в него в Ctrl аргументе. TestObject Процедура вызывается ShowType с тремя различными видами элементов управления.

Запуск примера

создайте новый проект приложения Windows и добавьте в Button форму элемент управления, CheckBox элемент управления и RadioButton элемент управления.

В форме нажмите кнопку, чтобы вызвать TestObject процедуру.

Источник

VBA Excel. Типы данных

Справочная таблица по встроенным типам данных 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 млрд символов

*Резервируется память в байтах на каждую переменную соответствующего типа.

Тип данных 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, возвращаемое значение будет зависеть от содержимого переменной.

Источник

Сводка типов данных (Visual Basic)

в следующей таблице показаны типы данных Visual Basic, поддерживаемые типы среды clr, их номинальное выделение памяти и диапазоны значений.

тип Visual Basic Структура типа среды CLR Номинальное выделение памяти Диапазон значений
Boolean Boolean Зависит от реализации платформы True либо False
Byte Byte 1 байт от 0 до 255 (без знака)
Char (одиночный символ) Char 2 байта от 0 до 65535 (без знака)
Дата DateTime 8 байт 0:00:00 (полночь) 1 января 0001 г. по 11:59:59 – 31 декабря 9999
Десятичное число Decimal 16 байт от 0 до +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9. E + 28) † без десятичной запятой; от 0 до +/-7.9228162514264337593543950335 с 28 разрядами справа от десятичного разделителя;

наименьшее ненулевое число — +/-0,0000000000000000000000000001 (+/-1E-28) †

Double (число с плавающей запятой двойной точности) Double 8 байт -1.79769313486231570 e + 308 до-4.94065645841246544 E-324 † для отрицательных значений;

4.94065645841246544 e-324 до 1.79769313486231570 E + 308 † для положительных значений

Integer Int32 4 байта от-2 147 483 648 до 2 147 483 647 (подписано)
Long (длинное целое) Int64 8 байт от-9223372036854775808 до 9 223 372 036 854 775 807 (от а до 18 † ) (подписано)
Объект Object см 4 байта на 32-разрядной платформе

8 байт на 64-разрядной платформе

Любой тип может храниться в переменной типа Object
SByte SByte 1 байт от-128 до 127 (подписано)
Short (короткое целое) Int16 2 байта от-32 768 до 32 767 (подписано)
Single (с плавающей запятой одиночной точности) Single 4 байта -4028235E e + 38 – 1.401298 E-45 † для отрицательных значений;

1.401298 e-45 до 4028235E E + 38 † для положительных значений

Строка (переменная длина) String см Зависит от реализации платформы от 0 до приблизительно 2 000 000 000 символов Юникода
UInteger UInt32 4 байта от 0 до 4 294 967 295 (без знака)
ULong UInt64 8 байт от 0 до 18446744073709551615 (1.8. E + 19 † ) (без знака)
Определяемый пользователем (структура) (наследует от ValueType ) Зависит от реализации платформы Каждый элемент структуры имеет диапазон, определяемый типом данных и не зависящий от диапазонов других элементов.
UShort UInt16 2 байта от 0 до 65 535 (без знака)

† В экспоненциальном представлении«E» означает степень числа 10. Итак, 3.56 E + 2 означает 3,56 x 10 или 356, а 3.56 e-2 — 3,56/10 2 или 0,0356.

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

Помимо указания типа данных в операторе объявления, можно принудительно задать тип данных некоторых элементов программирования с помощью символа типа. См. раздел символы типа.

Затраты памяти

При объявлении простейшего типа данных нельзя считать, что его потребление памяти совпадает с номинальным выделением хранилища. Это обусловлено следующими соображениями.

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

Ширина платформы. назначение служба хранилища на 64-разрядной платформе отличается от назначения на 32-разрядной платформе.

Составные типы данных

Те же рекомендации применимы к каждому элементу составного типа данных, такому как структура или массив. Вы не можете полагаться на простое сложение номинальных выделений памяти для членов типа. Кроме того, существуют и другие рекомендации, например следующие:

За. Некоторые составные типы предъявляют дополнительные требования к памяти. Например, массив использует дополнительную память для самого массива, а также для каждого измерения. На 32-разрядной платформе этот объем накладных расходов в настоящее время составляет 12 байт плюс 8 байт для каждого измерения. На 64-разрядной платформе это требование удваивается.

служба хранилища Режим. Нельзя безопасно предположить, что порядок хранения в памяти совпадает с порядком объявления. Вы даже не можете делать предположения относительно выравнивания байтов, например 2-байтовой или 4-байтовой границы. При определении класса или структуры и необходимости управления структурой хранения его элементов можно применить StructLayoutAttribute атрибут к классу или структуре.

Издержки объекта

При Object ссылке на любой простой или составной тип данных в дополнение к данным, содержащимся в типе данных, используется 4 байта.

Источник

Оцените статью