Преобразование типов данных

Для преобразования типов данных предназначены следующие функции:

Debug.Print CBool(0)       ' Выведет: False
Debug.Print CBool(1)       ' Выведет: True
Debug.Print CBool("True")  ' Выведет: True
Debug.Print CBool("False") ' Выведет: False
Debug.Print CByte(0)       ' Выведет: 0
Debug.Print CByte(145.8)   ' Выведет: 146
Debug.Print CByte(145.3)   ' Выведет: 145
Debug.Print CByte(145.5)   ' Выведет: 146
Debug.Print CInt("45")    ' Выведет: 45
Debug.Print CInt(145.8)   ' Выведет: 146
Debug.Print CInt(145.3)   ' Выведет: 145
Debug.Print CInt(145.5)   ' Выведет: 146
Debug.Print CLng("45,5")  ' Выведет: 46
Debug.Print CLng(145.8)   ' Выведет: 146
Debug.Print CLng(145.3)   ' Выведет: 145
Debug.Print CLng(145.5)   ' Выведет: 146
Debug.Print CSng(145)     ' Выведет: 145
Debug.Print CSng("45,5")  ' Выведет: 45,5
Debug.Print CDbl(145)     ' Выведет: 145
Debug.Print CDbl("45,5")  ' Выведет: 45,5
Debug.Print CCur(145)     ' Выведет: 145
Debug.Print CCur("45,5")  ' Выведет: 45,5
Debug.Print CDec(145)     ' Выведет: 145
Debug.Print CDec("45,5")  ' Выведет: 45,5
Debug.Print TypeName(CVar(12))       ' Выведет: Integer
Debug.Print TypeName(CVar(12.5))     ' Выведет: Double
Debug.Print TypeName(CVar("Строка")) ' Выведет: String
Debug.Print CStr(True)               ' Выведет: True
Debug.Print "'" & CStr(145) & "'"    ' Выведет: '145'
Debug.Print "'" & CStr(145.5) & "'"  ' Выведет: '145,5'
Debug.Print "'" & CStr(-145.5) & "'" ' Выведет: '-145,5'
Debug.Print "'" & str(145) & "'"     ' Выведет: ' 145'
Debug.Print "'" & str(145.5) & "'"   ' Выведет: ' 145.5'
Debug.Print "'" & str(-145.5) & "'"  ' Выведет: '-145.5'
Debug.Print CDate("Декабрь 21, 2012") ' Выведет: 21.12.2012

В качестве примера рассмотрим возможность сложения двух чисел, введенных пользователем. Как вы уже знаете, вводить данные позволяет функция InputBox(). Воспользуемся этой функцией для получения чисел от пользователя (листинг 2.4).

Листинг 2.4. Получение данных от пользователя

Dim x, y
x = InputBox("x = ")  ' Вводим 5
y = InputBox("y = ")  ' Вводим 12
Debug.Print x + y     ' Выведет: 512

Результатом выполнения этого кода будет не число, а строка "512". Таким образом, следует запомнить, что функция InputBox() возвращает результат в виде строки. Чтобы просуммировать два числа, необходимо преобразовать строку в число (листинг 2.5).

Листинг 2.5. Преобразование строки в число

Dim x, y
x = CInt(InputBox("x = "))  ' Вводим 5
y = CInt(InputBox("y = "))  ' Вводим 12
Debug.Print x + y           ' Выведет: 17

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

Debug.Print IsNumeric("10")     ' Выведет: True
Debug.Print IsNumeric("10,5")   ' Выведет: True
Debug.Print IsNumeric("10.5")   ' Выведет: False
Debug.Print IsNumeric("Строка") ' Выведет: False
Dim obj As Object
Debug.Print IsObject(obj)      ' Выведет: True
Set obj = Nothing
Debug.Print IsObject(obj)      ' Выведет: True
Debug.Print IsObject("Строка") ' Выведет: False
Dim x
Debug.Print IsEmpty(x)      ' Выведет: True
x = 10
Debug.Print IsEmpty(x)      ' Выведет: False
x = Empty
Debug.Print IsEmpty(x)      ' Выведет: True
Dim x
Debug.Print IsNull(x)      ' Выведет: False
x = Null
Debug.Print IsNull(x)      ' Выведет: True
Dim x
Debug.Print IsNull(x)      ' Выведет: False
x = Null
Debug.Print IsNull(x)      ' Выведет: True

Переделаем предыдущий пример (листинг 2.5) и используем функцию IsNumeric() для проверки возможности преобразования введенного пользователем значения в число (листинг 2.6). Код оформим в виде процедуры с названием Сумма().

Листинг 2.6. Использование функции IsNumeric()

Sub Тест()
   Dim x, y
   x = InputBox("x = ")        ' Вводим 5
   If IsNumeric(x) = False Then
      MsgBox "Ошибка. Вы ввели не число"
      Exit Sub                 ' Завершаем выполнение процедуры
   End If
   y = InputBox("y = ")        ' Вводим 12
   If IsNumeric(y) = False Then
      MsgBox "Ошибка. Вы ввели не число"
      Exit Sub                  ' Завершаем выполнение процедуры
   End If
   MsgBox "Результат: " & CStr(CInt(x) + CInt(y)) ' Результат: 17
End Sub
Предыдущая статья Все статьи Следующая статья