強制轉爲或轉換爲int,注意以下事項。
這些函數是Excel VBA中取決於系統區域設置的視圖函數之一。因此,如果您在歐洲某些國家/地區使用雙倍逗號,則會在美國遇到錯誤。
例如,在歐洲的Excel版本0.5將與CDbl()表現良好,但在美國的版本,它會導致5 因此,我建議使用以下選擇:
Public Function CastLong(var As Variant)
' replace , by .
var = Replace(var, ",", ".")
Dim l As Long
On Error Resume Next
l = Round(Val(var))
' if error occurs, l will be 0
CastLong = l
End Function
' similar function for cast-int, you can add minimum and maximum value if you like
' to prevent that value is too high or too low.
Public Function CastInt(var As Variant)
' replace , by .
var = Replace(var, ",", ".")
Dim i As Integer
On Error Resume Next
i = Round(Val(var))
' if error occurs, i will be 0
CastInt = i
End Function
當然,你也可以考慮人們使用逗號和點的情況,例如三千如3,000.00。如果您需要這些類型的功能,那麼您必須檢查另一個解決方案。
即使IsNumeric返回True,CInt仍可能因溢出而失敗 - 特別是對於小於-32768或大於32767的數字。 – 2011-06-01 14:32:12
爲避免溢出問題,您可以使用Int或Fix而不是CInt,儘管它們的行爲是在處理非整數十進制數時會略有不同--Cnt回合,而Int向下截斷(遠離零),Fix向上截斷(向零)。 – 2011-06-01 14:38:03
作爲使用IsNumeric的替代方法,您可以簡單地以默認值0開始,嘗試使用Int轉換提供的值,並忽略任何錯誤,如下所示:'Public Function IntOrZero(ByVal vValue As Variant)As Double | IntOrZero = 0 | On Error Resume Next | IntOrZero = Int(vValue)| End Function' - 只需替換|換行符。 – 2011-06-01 14:43:44