Как определить, является ли вариант целым числом в VBA?

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

dim v as variant
v = "42"
if v <> round(v) then
   msgBox("<>")
end if

здесь появляется msgBox, вероятно, потому, что вариант был создан из строки, хотя я ожидал, что v будет = round(v).

2 ответов


вы должны написать что-то типа:

if cDbl(v) <> round(cDbl(v)) Then

где cDbl-функция, преобразующая любые данные в число двойного типа. Возможно, вам придется обработать случаи, когда v не может быть преобразован в число с помощью функции isNumeric() перед вызовом функции cDbl. Вы даже можете использовать функцию cInt для своих сравнений:

if isnumeric(v) then
    if cDbl(v) - cInt(v) <> 0 Then
    ....
    endif
else
   debug.print "data cannot be converted to a number"
endif

Sub test()

    Dim v As Variant
    v = "42"
    If Val(v) <> Int(Val(v)) Then
       MsgBox ("<>")
    End If

End Sub

Если вы используете Val (), он будет стараться изо всех сил преобразовать в число. Если он не может, он вернет ноль, и Val(v) всегда будет равен Int(Val (v)) в этом случае.