2012-02-16 40 views
0

我试图找到600851475143.这是什么VBA基元数据类型?

我变暗VBA双类型的连接#号的数量到底有多少的最大的主要因素,所以我想这表明值超过double类型的限制,但我仍然可以用它运行算术运算,除非我想要做类似于模函数的操作。如果我运行下面的代码,它给了我一个溢出错误:

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的变量类型是什么?

回答

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 

复制并粘贴上面的代码并执行它,你会看到“变”永远不会返回类型的名称。最后一行是你会感兴趣的。

+0

你是对的!这真的很奇怪,我第一次运行它的代码。非常奇怪 – JKK 2012-02-16 22:06:34

+0

补给它,并不意味着打入..但是,谢谢你的调试提示。我需要获得更多关于调试方面的信息以适应它。我已经被派去做更多的VBA项目,所以我已经受到了限制!哎呀..但它是什么,至少它支持类和接口! – JKK 2012-02-16 22:08:26

+0

感谢您提供更多信息,您是否知道是否有一种数据类型能够在VBA中正确支持非常长的值600851475143或者无法完成?我知道我可以用Java解决这个问题,但对VBA的数学限制感到好奇 – JKK 2012-02-16 22:15:20

2

你应该总是声明的数据类型,但如果你不申报的数据类型,则默认为Variant

VBA Variant

Most of the time, you should declare your variables with specific data types, such as String, Long, or Double. VBA supports the Variant data type that can hold any type of data. If you omit the As Type clause in a variable declaration, Variant is the default type. While this may seem useful, it increases processing time when encountered in code because behind the scenes, the compiler has added no small amount of code to test what type of data is actually stored in the variable. Moreover, using a Variant can mask possible Type Mismatch errors that should be caught during testing. Instead of using a Variant type, declare the variable with a specific data type.

+0

感谢您的答案,我通常使用选项显式,但在这种情况下,我试图找到一种数据类型,支持在VBA中非常大的数字。不确定是否有一个 – JKK 2012-02-16 22:05:58

+0

*显式*和*特定*是不同的东西。 “Dim x As Variant”是明确的;它只是不具体。 – 2012-02-16 22:28:36

+0

好吗?但是选项显式强制声明变量,否则代码拒绝运行正确?所以这就是我的意思,我通常强迫自己声明变量,也减少了我的项目中的错别字和错误 – JKK 2012-02-16 22:31:23