强制转为或转换为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