首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是什么VBA基元数据类型?

这是什么VBA基元数据类型?
EN

Stack Overflow用户
提问于 2012-02-17 05:36:39
回答 2查看 1.1K关注 0票数 0

我在试着找数字600851475143的最大素因数。

我在VBA中调暗了一个双精度类型,它在数字的末尾附加了一个#号,所以我认为这表明该值超过了双精度类型的限制,但我仍然可以用它运行算术,除非我想做一些像模函数这样的事情。如果我运行下面的代码,它会给我一个溢出错误:

代码语言:javascript
复制
Sub test()

 Dim x As Double
 x = 600851475143#
 x = x - 1
 x = x Mod 11


End Sub

但是,如果我更改了代码,并且没有声明我的变量并允许VBA这样做,模函数将不会出现溢出。如下图所示:

代码语言:javascript
复制
Sub test()

 x = 600851475143#
 x = x - 1
 x = x Mod 11

End Sub

那么在第二组代码中,x的变量类型是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-17 05:41:37

@Bluefeet将未声明的变量默认为变量数据类型,这是正确的。但没有像“Variant”这样的内部类型。内部存储的内容取决于分配给变量的值。您可以使用TypeName()函数检查值的处理方式:

代码语言:javascript
复制
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‘永远不会作为类型的名称返回。最后一行是您感兴趣的那一行。

票数 4
EN

Stack Overflow用户

发布于 2012-02-17 05:41:30

应始终声明数据类型,但如果不声明数据类型,则缺省值为Variant

VBA Variant

大多数情况下,您应该使用特定的数据类型来声明变量,例如String、Long或Double。VBA支持可以容纳任何类型数据的Variant数据类型。如果在变量声明中省略了As type子句,则默认类型为Variant。虽然这看起来可能很有用,但在代码中遇到时,它会增加处理时间,因为在幕后,编译器添加了大量代码来测试变量中实际存储的数据类型。此外,使用变体可以掩盖在测试过程中应该捕获的可能的类型不匹配错误。不使用变量类型,而是声明具有特定数据类型的变量。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9319466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档