Sub TestFunction()
Dim var As Double
var = 25 * 24 * 23 * 22 * 21 * 20
End Sub
我收到此vba操作的溢出錯誤。當我在一個單元格中運行它我得到127,512,000excel VBA溢出錯誤,當它不應該
什麼可能是這個錯誤?這應該遠遠低於這種數據類型的大小限制嗎?
Sub TestFunction()
Dim var As Double
var = 25 * 24 * 23 * 22 * 21 * 20
End Sub
我收到此vba操作的溢出錯誤。當我在一個單元格中運行它我得到127,512,000excel VBA溢出錯誤,當它不應該
什麼可能是這個錯誤?這應該遠遠低於這種數據類型的大小限制嗎?
VBA惱人地將第一項轉換爲整數,因爲在你的情況下,它足夠小。
修改這條線,它明確地轉換爲double:
var = CDbl(25) * 24 * 23 * 22 * 21 * 20
試試這樣說:
Option Explicit
Sub TestFunction()
Dim var As Double
var = 25
var = var * 24 * 23 * 22 * 21 * 20
Debug.Print var
End Sub
你的情況的問題是,當VBA試圖總結數字有它自己的邏輯,首先經過Integer,然後解析它到左邊的數字。 如果第一個數字大於整數(32767)或明確轉換爲Double
,Long
,Single
,則表示沒問題。在這裏,你不會有任何問題,因爲43333
被自動轉換爲long
,它是確定:
Option Explicit
Sub TestFunction()
Dim var As Double
var = 43333 * 6 * 6
End Sub
在你的情況下,如果第一個數字是25.1
,而不是25
,它就會自動轉換爲加倍,從而以後你會不會有問題,就Double*Integer = Double
Sub TestFunction()
Dim var As Double
var = 25.1 * 24 * 23 * 22 * 21 * 20
Debug.Print var
End Sub
去得更深一些,用VarType()
function。聲明k
爲Variant,看看VBA將其轉換爲,根據其價值和算術運算:
所有debug.print
回報True
。
不是Excel。 VBA。這種行爲與主機應用程序無關。 –
@ Mat'sMug - true。 – Vityata
另一種方法是通過添加'&'字符來定義第一個數字,例如'25&'。這也可以用於常量定義(不允許調用'CDbl'的函數)。 – FunThomas
@FunThomas如果你打算使用類型提示,並且你需要一個double,你可以使用'Const myDouble = 25#'或'Const myDouble = 25.0'(它會通過VBE漂亮的打印機自動糾正'Const myDouble = 25#') – ThunderFrame