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

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

  • CBool(<Значение>) — преобразует число или строку в логический тип данных. Если преобразование невозможно возбуждается исключение. Пример:
Debug.Print CBool(0)       ' Выведет: False
Debug.Print CBool(1)       ' Выведет: True
Debug.Print CBool("True")  ' Выведет: True
Debug.Print CBool("False") ' Выведет: False
  • CByte(<Значение>) — преобразует значение в число типа Byte. Если преобразование невозможно возбуждается исключение. Пример:
Debug.Print CByte(0)       ' Выведет: 0
Debug.Print CByte(145.8)   ' Выведет: 146
Debug.Print CByte(145.3)   ' Выведет: 145
Debug.Print CByte(145.5)   ' Выведет: 146
  • CInt(<Значение>) — преобразует значение в число типа Integer. Если преобразование невозможно возбуждается исключение. Пример:
Debug.Print CInt("45")    ' Выведет: 45
Debug.Print CInt(145.8)   ' Выведет: 146
Debug.Print CInt(145.3)   ' Выведет: 145
Debug.Print CInt(145.5)   ' Выведет: 146
  • CLng(<Значение>) — преобразует значение в число типа Long. Если преобразование невозможно возбуждается исключение. Пример:
Debug.Print CLng("45,5")  ' Выведет: 46
Debug.Print CLng(145.8)   ' Выведет: 146
Debug.Print CLng(145.3)   ' Выведет: 145
Debug.Print CLng(145.5)   ' Выведет: 146
  • CSng(<Значение>) — преобразует значение в число типа Single. Если преобразование невозможно возбуждается исключение. Пример:
Debug.Print CSng(145)     ' Выведет: 145
Debug.Print CSng("45,5")  ' Выведет: 45,5
  • CDbl(<Значение>) — преобразует значение в число типа Double. Если преобразование невозможно возбуждается исключение. Пример:
Debug.Print CDbl(145)     ' Выведет: 145
Debug.Print CDbl("45,5")  ' Выведет: 45,5
  • CCur(<Значение>) — преобразует значение в число типа Currency. Если преобразование невозможно возбуждается исключение. Пример:
Debug.Print CCur(145)     ' Выведет: 145
Debug.Print CCur("45,5")  ' Выведет: 45,5
  • CDec(<Значение>) — преобразует значение в число типа Decimal. Если преобразование невозможно возбуждается исключение. Пример:
Debug.Print CDec(145)     ' Выведет: 145
Debug.Print CDec("45,5")  ' Выведет: 45,5
  • CVar(<Значение>) — преобразует значение в тип Variant. Пример:
Debug.Print TypeName(CVar(12))       ' Выведет: Integer
Debug.Print TypeName(CVar(12.5))     ' Выведет: Double
Debug.Print TypeName(CVar("Строка")) ' Выведет: String
  • CStr(<Значение>) — преобразует значение в строку. Пример:
Debug.Print CStr(True)               ' Выведет: True
Debug.Print "'" & CStr(145) & "'"    ' Выведет: '145'
Debug.Print "'" & CStr(145.5) & "'"  ' Выведет: '145,5'
Debug.Print "'" & CStr(-145.5) & "'" ' Выведет: '-145,5'
  • str(<Число>) — преобразует число в строку. Первый символ в строке резервируется под знак числа. Если число является положительным, то первый символ будет пробелом, а если отрицательным — то первым символом будет знак минус. Обратите также внимание на то, что при выводе десятичный разделитель отображается в виде точки, а не в виде запятой, как это было при использовании функции CStr(). Пример:
Debug.Print "'" & str(145) & "'"     ' Выведет: ' 145'
Debug.Print "'" & str(145.5) & "'"   ' Выведет: ' 145.5'
Debug.Print "'" & str(-145.5) & "'"  ' Выведет: '-145.5'
  • CDate(<Значение>) — преобразует значение в тип Date. Если преобразование невозможно возбуждается исключение. Пример:
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, как и должно быть. Однако если пользователь вместо числа введет строку, то программа завершится с фатальной ошибкой. Поэтому прежде чем преобразовывать значение в число необходимо проверить его на допустимость. Выполнить проверку возможности преобразования позволяют следующие функции:

  • IsNumeric(<Значение>) — возвращает значение True, если значение можно преобразовать в число, и False — в противном случае:
Debug.Print IsNumeric("10")     ' Выведет: True
Debug.Print IsNumeric("10,5")   ' Выведет: True
Debug.Print IsNumeric("10.5")   ' Выведет: False
Debug.Print IsNumeric("Строка") ' Выведет: False
  • IsObject(<Переменная>) — возвращает значение True, если переменная является объектной, и False — в противном случае:
Dim obj As Object
Debug.Print IsObject(obj)      ' Выведет: True
Set obj = Nothing
Debug.Print IsObject(obj)      ' Выведет: True
Debug.Print IsObject("Строка") ' Выведет: False
  • IsEmpty(<Переменная>) — возвращает значение True, если переменной не было присвоено значение, и False — в противном случае:
Dim x
Debug.Print IsEmpty(x)      ' Выведет: True
x = 10
Debug.Print IsEmpty(x)      ' Выведет: False
x = Empty
Debug.Print IsEmpty(x)      ' Выведет: True
  • IsNull(<Переменная>) — возвращает значение True, если переменная содержит значение Null, и False — в противном случае:
Dim x
Debug.Print IsNull(x)      ' Выведет: False
x = Null
Debug.Print IsNull(x)      ' Выведет: True
  • IsDate(<Значение>) — возвращает значение True, если значение может быть преобразовано в тип Date, и False — в противном случае:
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

Visual Basic for Applications (VBA)
Статьи по Visual Basic for Applications (VBA)

Помощь сайту

Yandex-деньги: 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов