如果x是整数,在VBA语言中如何表达?

问题描述 投票:0回答:4

如果x是整数,在VBA语言中如何表达? 我想编写一个代码,如果 x 是整数,则执行某些操作;如果不是使用 vba excel,则执行其他操作。

Sub dim()
  Dim x is Variant

  'if x is integer Then 

  'Else:

End Sub 
vba vb6
4个回答
29
投票
If IsNumeric(x) Then 'it will check if x is a number

如果你想检查类型,你可以使用

If TypeName(x) = "Integer" Then

25
投票

这可能适合:

If x = Int(x) Then

12
投票

这取决于您的意思是数据类型“整数”,还是“没有小数的数字”意义上的整数。如果您指的是后者,那么快速手动测试就足够了(参见第一个示例);如果您的意思是前者,那么可以通过三种方法来查看数据类型,每种方法都有不同的优缺点:

  1. VarType 将告诉您变体的子类型(参见示例)。它相当快,因为它只是读取枚举的内存,但只能用于变体,并且不会告诉您特定的对象类型。此外,变体的子类型通常是自动分配的(通常倾向于使用最小的合适数据类型进行键入)。但这可能很棘手(参见示例)。
  2. TypeName 是最灵活、最健壮的。它可以告诉您特定的类类型和变体子类型。它有一个小缺点,即测试需要进行字符串比较,因此对性能的影响很小。除非有一些严重的重复,否则它不会被注意到。此外,如果您的项目中有两个同名的对象(例如 Word.Range 和 Excel.Range),TypeName 无法区分(它将为两者返回“Range”)。
  3. 最后是 TypeOf 运算符(这对你没有帮助)。 TypeOf 运算符不能测试基元(例如:Integer、Long、String 等),但它可以告诉对象的特定类型(例如 Excel.Range 与 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

0
投票

所有答案都不适合我。 如果输入是任何 EG 字符串,那么此代码可以安全运行,不会出现错误:

Function IsInt(s As String) As Boolean
    Dim res As Boolean: res = False
    If IsNumeric(s) Then
        res = (s = Int(s))
    End If
    IsInt = res
End Function

注意:显然 VBA 没有短路评估 (SCE),因此您需要在这里使用 if-then 语句。

我不喜欢 SCE 的缺失,但至少现在我有一个例子可以向我的朋友和同事展示,他们认为所有语言都有 SCE,尽管支持和反对都有争论。

© www.soinside.com 2019 - 2024. All rights reserved.