2012-02-16 39 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