【问题标题】:how do I express the term if x is integer in VBA language?如果 x 是 VBA 语言中的整数,我该如何表达这个术语?
【发布时间】:2012-05-08 22:52:17
【问题描述】:

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

Sub dim()
  Dim x is Variant

  'if x is integer Then 

  'Else:

End Sub 

【问题讨论】:

  • 您的意思是 x 是整数(而不是像 Decimal 或 Long 这样的不同类型)还是 x 是整数(没有小数部分的数字,例如 3 而不是 3.2)?
  • 编辑问题,选择包含代码的部分并单击文本框上方的工具栏上带有 0 和 1 的图标。这将格式化代码以显示为代码。而且,继续并接受答案,这有助于你得到你想要的。
  • @shahkalpesh 还有其他答案也可以帮助@excel34 得到他们想要的。

标签: vba vb6


【解决方案1】:
If IsNumeric(x) Then 'it will check if x is a number

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

If TypeName(x) = "Integer" Then

【讨论】:

  • 感谢您的意见。我查了一下,发现这里。
  • 这个答案是错误的:IsNumeric("1.2")(或"1,2",取决于您的语言环境)返回Truemsdn.microsoft.com/en-us/vba/language-reference-vba/articles/…
  • @Nickolay:看问题的具体问题是什么?
  • integer 是一个没有小数部分的数字; IsNumeric 仅检查给定值是否可以转换为数字,对于非整数,它返回 True。
  • @Nickolay:我对使用TypeName 的编辑没有帮助吗?
【解决方案2】:

这可能适合:

If x = Int(x) Then

【讨论】:

  • This 或相同的 fix [ if x = fix(x) then ] 非常适合我的目的,因为 Int 和 Fix 除了负非整数之外是等价的。
【解决方案3】:

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

  1. VarType 将告诉您变体的子类型(参见示例)。它相当快,因为​​它只是对枚举的内存读取,但只能用于变体并且不会告诉您特定的对象类型。此外,变体的子类型通常是自动分配的(通常倾向于使用最小的合适数据类型进行键入)。但这可能很棘手(参见示例)。
  2. TypeName 是最灵活和健壮的。它可以告诉您特定的类类型和 Variant 子类型。它有一个小缺点,即测试需要进行字符串比较,因此对性能的影响很小。除非有一些严重的重复,否则它不会引起注意。此外,如果您的项目中有两个同名的对象(例如 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

【讨论】:

  • TypeName 存在严重限制。在单元格 A1 中键​​入“3”并查看 TypeName(Range("A1").value) 的输出。在我的系统上,我得到“双”。默认情况下,工作表上的数字似乎具有 Double 类型,即使它们没有小数部分。
猜你喜欢
  • 2010-12-31
  • 2015-01-30
  • 1970-01-01
  • 1970-01-01
  • 2013-02-03
  • 1970-01-01
  • 1970-01-01
  • 2020-05-25
  • 1970-01-01
相关资源
最近更新 更多