Шаг 19 - Информация о типе переменной

А зачем, вы спросите, иметь информацию о типе переменной в ходе работы программы ? Ведь это делает программист. Опаньки :-). В 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

Есть еще ряд подобных функций:


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.