Есть такой термин RTTI - run-time type information. Информация о типе переменной, доступная во время выполнения программы. Иногда эта информация оказывается просто необходимой. В VBA есть тип данных Variant, который может принимать значения любого типа за исключением пользовательского. Вот например так:
Sub Test()
Dim v_string As String
Dim v_int As Integer
Dim v_variant As Variant
v_string = "Hello Variant"
v_int = 123
v_variant = v_string
v_variant = v_int
End Sub
Variant можно использовать в качестве аргумента процедуры. В этом случае может потребоваться информация о том, что же находится в переменной в данный момент. Для этого есть функция TypeName(), которая вернет строку с именем типа переменной. Вот пример её использования:
Sub TestVariant()
Dim v_string As String
Dim v_int As Integer
Dim v_variant As Variant
v_string = "Hello Variant"
v_int = 123
v_variant = v_string
MsgBox (TypeName(v_variant))
v_variant = v_int
MsgBox (TypeName(v_variant))
End Sub
Кроме этого есть еще ряд функций для проверки типа переменных. IsArray позволяет проверить, является ли переменная массивом.
Sub TestArray()
Dim v_arr(10) As String
If IsArray(v_arr) Then MsgBox ("Массив")
End Sub
IsEmpty проверяет, была ли переменная инициализирована. Попробуйте запустить код, приведенный ниже, а потом раскомментируйте строку.
Sub TestEmpty()
' Dim v_arr As String
If IsEmpty(v_arr) Then MsgBox ("NO")
End Sub
IsDate проверяет можно ли преобразовать переменную к типу даты. При выполнении нижеприведенного кода сообщение появится только один раз.
Sub TestDate()
Dim v_arr As String
v_arr = "01.01.2001"
If IsDate(v_arr) Then MsgBox ("YES")
v_arr = "41.01.2001"
If IsDate(v_arr) Then MsgBox ("YES")
End Sub
Функция IsNumeric проверяет, можно ли перевести строку в число:
Sub TestNumeric()
Dim v_arr As String
v_arr = "not numeric"
If IsNumeric(v_arr) Then MsgBox ("YES")
v_arr = "1998"
If IsNumeric(v_arr) Then MsgBox ("YES")
End Sub
Есть еще несколько подобных функций:
- IsObject - проверяет, является ли переменная обьектом
- IsNull(выражение) - проверка на пустое значение
- IsError(выражение) - проверка выражения, представляет ли оно ошибку