我试图找到数字600851475143的最大素数因子。
我在VBA中调暗了一个双重类型,在数字的末尾附加一个#符号,所以我认为这表示该值超出了双重类型的限制,但我仍然可以使用它进行算术运算,除非我想做模数函数。如果我运行下面的代码,它会给我一个溢出错误:
Sub test()
Dim x As Double
x = 600851475143#
x = x - 1
x = x Mod 11
End Sub
但是,如果我更改代码并且不声明我的变量并允许VBA执行此操作,则模数函数将在没有溢出的情况下工作。如下所示:
Sub test()
x = 600851475143#
x = x - 1
x = x Mod 11
End Sub
所以在第二组代码中,x的变量类型是什么?
答案 0 :(得分:4)
@Bluefeet是正确的,未声明的变量默认为Variant数据类型。 但是没有'Variant'这样的内部类型。内部存储的内容取决于分配给变量的值。您可以使用TypeName()
函数检查值的处理方式:
Sub test1()
Dim x As Variant: Debug.Print TypeName(x) 'Empty'
x = 1: Debug.Print TypeName(x) 'Integer'
x = 32768: Debug.Print TypeName(x) 'Long'
x = 32767: Debug.Print TypeName(x) 'Integer'
x = Null: Debug.Print TypeName(x) 'Null'
x = 1.1: Debug.Print TypeName(x) 'Double'
x = Empty: Debug.Print TypeName(x) 'Empty'
x = "": Debug.Print TypeName(x) 'String'
x = 600851475143#: Debug.Print TypeName(x) 'Double'
End Sub
复制并粘贴上面的代码并执行它,您将看到“Variant”永远不会作为类型的名称返回。最后一行是您感兴趣的那一行。
答案 1 :(得分:2)
您应始终声明数据类型,但如果您未声明数据类型,则默认值为Variant
大多数情况下,您应该使用特定数据声明变量 类型,如String,Long或Double。 VBA支持Variant数据 可以包含任何类型数据的类型。如果省略了As Type子句 变量声明,Variant是默认类型。虽然这可能 似乎很有用,它会增加代码中遇到的处理时间 因为在幕后,编译器添加了不少量 用于测试实际存储在变量中的数据类型的代码。 此外,使用Variant可以屏蔽可能的类型不匹配错误 应该在测试期间捕获。而不是使用Variant类型, 声明具有特定数据类型的变量。