我在试着找数字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的变量类型是什么?
发布于 2012-02-17 05:41:37
@Bluefeet将未声明的变量默认为变量数据类型,这是正确的。但没有像“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‘永远不会作为类型的名称返回。最后一行是您感兴趣的那一行。
发布于 2012-02-17 05:41:30
应始终声明数据类型,但如果不声明数据类型,则缺省值为Variant
VBA Variant
大多数情况下,您应该使用特定的数据类型来声明变量,例如String、Long或Double。VBA支持可以容纳任何类型数据的Variant数据类型。如果在变量声明中省略了As type子句,则默认类型为Variant。虽然这看起来可能很有用,但在代码中遇到时,它会增加处理时间,因为在幕后,编译器添加了大量代码来测试变量中实际存储的数据类型。此外,使用变体可以掩盖在测试过程中应该捕获的可能的类型不匹配错误。不使用变量类型,而是声明具有特定数据类型的变量。
https://stackoverflow.com/questions/9319466
复制相似问题