2012-08-08 32 views
2

我已經宣佈在速記符號整型變量testInt如下VBA宏:使用變量與類型修飾符

Dim testInt% 

任何區別使用之間

somevalue = testInt * testInt 

somevalue = testInt% * testInt% 

簡而言之,在變量被引用的每一點使用類型說明符有沒有優勢?

+1

類似的問題http://stackoverflow.com/questions/10890892/use-of-symbol-in-vba-macro: ) – 2012-08-08 06:21:30

+0

有很好的解釋!但是在每個變量之後指定int指定符'%'就像這裏所做的那樣沒有實際用處嗎? – 2012-08-08 07:59:31

+0

不,它不。它只在這種情況下才有用:) – 2012-08-08 08:04:22

回答

5

快速時間測試表明他們是線球 - 這直覺是有道理的

使用Long,而不是Integer會更有效率。看到這個MSFT Link

我會重複這個有更準確的API定時器

Sub B() 
Dim testInt% 
Dim somevalue% 
Dim lcnt As Long 
Dim dbStart As Double 
dbStart = Timer() 
For lcnt = 1 To 100000000 
somevalue = testInt * testInt 
Next 
MsgBox "Time was " & Timer() - dbStart 
End Sub 

Sub A() 
Dim testInt% 
Dim somevalue% 
Dim lcnt As Long 
Dim dbStart As Double 
dbStart = Timer() 
For lcnt = 1 To 100000000 
somevalue = testInt% * testInt% 
Next 
MsgBox "Time for type-specified was " & Timer() - dbStart 
End Sub 
+1

爲什麼Long效率更高?我會假設:a)兩種數據類型都有硬件支持b)VBA會利用這種支持c)整數是15(非符號)位,長整數是31,因此與整數有關的工作較少。這些假設中的任何一個是假的,還是有我錯過的東西? – mkingston 2012-08-08 04:41:25

+0

順便說一下,我不知道'line ball'這個詞是什麼意思。這可能是我的無知(我可以根據答案的其餘部分推斷),但如果它是某種形式的區域俚語,可能值得更新您的答案。此外,我只是澄清,我不反對任何區域方言(事實上相反),但其他讀者可能不瞭解這個詞:) – mkingston 2012-08-08 04:44:41

+0

啊。你的意思是他們沒有結果? :)另外,是否所有東西都會變成long並在結果中轉換回int? – 2012-08-08 04:54:43