Tại sao 0/0
ném Overflow error
trong VBA, trong khi với các ngôn ngữ .Net, nó chỉ đơn giản là một Division by 0
lỗi?
Ví dụ, trong C#
đó là mộtSystem.DivideByZeroException
static void Main()
{
int k = 0;
int p = 0;
Console.WriteLine(k/p);
}
Div/0
lỗi tồn tại trong VBA
. Nhưng 0/0
đưa ra một ngoại lệ tràn , trong khi bất kỳ thứ gì khác chia cho 0 sẽ đưa ra một Div/0
ngoại lệ:
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
Đó là những gì bạn nhận được trong cửa sổ ngay lập tức:
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
Chỉnh sửa: Để làm cho toàn bộ câu chuyện thú vị hơn:
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