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

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

Sub dim()
  Dim x is Variant

  'if x is integer Then 

  'Else:

End Sub 
14
задан Deanna 8 May 2012 в 14:52
поделиться

3 ответа

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

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

If TypeName(x) = "Integer" Then
21
ответ дан 1 December 2019 в 06:23
поделиться

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

If x = Int(x) Then
15
ответ дан 1 December 2019 в 06:23
поделиться

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

  1. VarType скажет вам подтип варианта (см. пример). Он достаточно быстр, так как читает только память перечисления, но может быть использован только на вариантах и не скажет вам конкретного типа объекта. Кроме того, подтип варианта часто присваивается автоматически (как правило, он имеет тенденцию печатать с наименьшим подходящим типом данных). Но это может быть сложно (см. пример).
  2. Имя типа является наиболее гибким и надежным. Оно может указывать на конкретные типы классов и подтипы вариаций. У него есть небольшой недостаток в том, что для тестирования требуется сравнение строк, поэтому есть минускульный хит производительности. Однако, это не будет заметно, если не будет серьезных повторений. Также, если в вашем проекте есть два объекта с одинаковым именем (Example Word.Range и Excel.Range), имя типа (TypeName) не сможет отличить (оно вернет "Range" для обоих).
  3. Наконец, есть оператор 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
12
ответ дан 1 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: