Подтвердить что ты не робот

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

как выразить выражение, если x является целым числом в языке VBA? Я хочу написать код, который что-то делает, если x целое и делает что-то еще, если его не с vba excel.

Sub dim()
  Dim x is Variant

  'if x is integer Then 

  'Else:

End Sub 
4b9b3361

Ответ 1

If IsNumeric(x) Then 'it will check if x is a number

Если вы хотите проверить тип, вы можете использовать

If TypeName(x) = "Integer" Then

Ответ 2

Это зависит от того, если вы имеете в виду тип данных "Целое число" или Целое число в смысле: "Число без десятичной дроби". Если вы имели в виду последний, то достаточно быстрого ручного теста (см. Первый пример); если вы имели в виду первое, то есть три способа взглянуть на типы данных с различными плюсами и минусами:

  • VarType сообщит вам вариант подтипа (см. пример). Это достаточно быстро, так как это просто память, читаемая enum, но может использоваться только в вариантах и ​​не укажет вам конкретный тип объекта. Кроме того, альтернативный подтип часто присваивается автоматически (обычно имеет тенденцию печатать с наименьшим подходящим типом данных). Но это может быть сложно (см. Пример).
  • ТипName является наиболее гибким и надежным. Он может рассказать вам конкретные типы классов и подтипы Variant. Он имеет небольшой недостаток в том, что для тестирования требуется сравнение строк, поэтому наблюдается незначительное поражение производительности. Это не будет заметно, если только не произойдет серьезного повторения. Кроме того, если у вас есть два объекта с одинаковым именем в вашем проекте (пример Word.Range и Excel.Range), TypeName не может определить разницу (он вернет "Range" для обоих).
  • Наконец, есть оператор TypeOf (который вам не поможет). Оператор TypeOf не может тестировать примитивы (пример: Integer, Long, String и т.д.), Но он может указать конкретный тип объекта (пример. Excel.Range vs Word.Range). Оператор TypeOf выдаст ошибку, если объект ничего, поэтому вы всегда должны предварительно протестировать объект для "Not Is Nothing", но являетесь оператором, а не функцией, он намного быстрее, чем TypeName (даже с предварительным тестированием).
Public Sub ExampleManual()
    Dim d As Double
    d = 1
    If Fix(d) = d Then
        MsgBox "Integer"
    End If
End Sub

Public Sub ExampleTypeName()
    Dim x As Integer
    MsgBox TypeName(x)
End Sub

Public Sub ExampleTypeOf()
    Dim x As Excel.Range
    Set x = Selection
    ''//Using TypeOf on Objects set to Nothing will throw an error.
    If Not x Is Nothing Then
        If TypeOf x Is Excel.Range Then
            MsgBox "Range"
        End If
    End If
End Sub

Public Sub ExampleVarType()
    Dim x As Variant
    ''//These are all different types:
    x = "1"
    x = 1
    x = 1&
    x = 1#
    Select Case VarType(x)
        Case vbEmpty
        Case vbNull
        Case vbInteger
        Case vbLong
        Case vbSingle
        Case vbDouble
        Case vbCurrency
        Case vbDate
        Case vbString
        Case vbObject
        Case vbError
        Case vbBoolean
        Case vbVariant
        Case vbDataObject
        Case vbDecimal
        Case vbByte
        Case vbUserDefinedType
        Case vbArray
        Case Else
    End Select
End Sub

Ответ 3

Это может подойти:

If x = Int(x) Then