А зачем, вы спросите, иметь информацию о типе переменной в ходе работы программы? Ведь это делает программист. Опаньки:-). В VBA есть тип переменной Variant, который может быть любого типа за исключением пользовательского. Не верите? Смотрите код:
Sub Test()
Dim string_var As String
Dim int_var As Integer
Dim test_variant As Variant
string_var = "Hello Variant"
int_var = 123
test_variant = string_var
test_variant = int_var
End Sub
Как видите, и Variant можно передавать в процедуры, поэтому определение типа нужно, конечно если подобными вещами вы будете пользоваться. Для определения кода есть функция TypeName (...), которая вернет строку с именем переменной. Вот так, например, можно её использовать:
Sub Test()
Dim string_var As String
Dim int_var As Integer
Dim test_variant As Variant
string_var = "Hello Variant"
int_var = 123
test_variant = string_var
MsgBox (TypeName(test_variant))
test_variant = int_var
MsgBox (TypeName(test_variant))
End Sub
Кроме этого есть ряд вспомогательных функций позволяющих получить информацию о переменных. IsArray позволяет проверить является ли переменная массивом.
Sub Test()
Dim arr_var(10) As String
If IsArray(arr_var) Then
MsgBox ("Массив")
End Sub
|
|
IsEmpty проверка инициализации (наличия) переменной. Запустите код ниже, а потом раскомментируйте строку.
Sub Test()
' Dim arr_var As String
If IsEmpty(arr_var) Then MsgBox ("NO")
End Sub
IsDate проверяет можно ли преобразовать переменную к типу даты. Ниже надпись YES появится один раз.
Sub Test()
Dim arr_var As String
arr_var = "01.01.1998"
If IsDate(arr_var) Then
MsgBox ("YES")
arr_var = "41.01.1998"
If IsDate(arr_var) Then
MsgBox ("YES")
End Sub
Так же проверяется можно ли перевести в число IsNumeric:
Sub Test()
Dim arr_var As String
arr_var = "not numeric"
If IsNumeric(arr_var) Then MsgBox ("YES")
arr_var = "1998"
If IsNumeric(arr_var) Then MsgBox ("YES")
End Sub
Есть еще ряд подобных функций:
IsObject - проверка, что переменная обьект
IsNull(выражение) - проверка на пустое значение
IsError(выражение) - проверка выражения, представляет ли оно значение ошибки