Vit*_*ata 11 excel vba runtime-error excel-vba
为什么要0/0投入Overflow errorVBA,而在.Net语言中它只是一个Division by 0错误?
例如,C#它是一个System.DivideByZeroException
static void Main()
{
int k = 0;
int p = 0;
Console.WriteLine(k/p);
}
Run Code Online (Sandbox Code Playgroud)
Div/0错误存在于VBA.但是 0/0给出了溢出异常,而其他除以0的Div/0异常给出了异常:
Public Sub TestMe()
'Integer
PrintAndCheck (11) '- Division by zero error
'Double
PrintAndCheck (0.9) '- Division by zero error
'Long
PrintAndCheck (50000) '- Division by zero error
'String
PrintAndCheck ("1.1") '- Division by zero error
'----------------------------------------------------
'----------------BUT---------------------------------
'----------------------------------------------------
'Integer
PrintAndCheck (0) '- Overflow?
End Sub
Public Sub PrintAndCheck(lngDivisor As Variant)
On Error Resume Next
Debug.Print lngDivisor / 0
Debug.Print Err.Description & " from type -> " & VarType(lngDivisor)
On Error GoTo 0
End Sub
Run Code Online (Sandbox Code Playgroud)
这就是你在即时窗口中获得的:
Division by zero from type -> 2
Division by zero from type -> 5
Division by zero from type -> 3
Division by zero from type -> 8
Overflow from type -> 2
Run Code Online (Sandbox Code Playgroud)
Public Sub TestMe()
On Error Resume Next
Debug.Print Evaluate("0/0") 'Division by 0 error (CVErr(xlErrDiv0)=2007)
Debug.Print 0 \ 0 'Division by 0 error
Debug.Print Err.Description
On Error GoTo 0
End Sub
Run Code Online (Sandbox Code Playgroud)
将尝试总结评论中的答案:
在 VBA 中0/0会引发溢出异常,因为0/0是除以0的特定情况。因此,抛出与标准不同的异常是一个好主意Division by zero error。
在 VBA 中Evaluate("0/0")返回 a Division by zero error,因为 Evaluate 不会引发错误,它返回带有错误标志的 Variant 值,并且没有可用的“溢出”标志。
在 VBA 整数除法0\0中返回 a Division by zero error,因为结果应该是整数值,而 #IND 是浮点值。至于 #IND 无法返回,它给出了下一个最好的东西 - Division by zero error。
更多关于0/0其他语言的阅读: