eXcellence-team eXcellence

Информация о типе переменной

Есть такой термин 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(выражение) - проверка выражения, представляет ли оно ошибку