- Oct 17, 2005
- Office Version
I'm a bit stumped: why does VBA behave like this? See the Sub below: when I simply Debug.Print 60*24*2*60, I get an Overflow error. So apparently VBA treats that multiplication as an integer and therefore fails as it's too big. But why do the tests after that fail and why do the last two succeed? I mean: I'm happy my code works again, but I don't get why the one Overflows and the other doesn't.
Anybody a clue?
Anybody a clue?
Sub TestOverflow() Dim LimitTime As Double Dim AddTime As Double On Error Resume Next 'Test 1 Debug.Print 60 * 24 * 2 * 60 Debug.Print 1, Err.Number, Err.Description Err.Clear 'Overflow, apparently the Debug.Print can only handle an integer (-32k to +32k) 'Test 2 AddTime = (60 * 24 * 2 * 60) Debug.Print AddTime Debug.Print 2, Err.Number, Err.Description Err.Clear 'Overflow, although AddTime is declared 'Test 3 AddTime = CDbl(60 * 24 * 2 * 60) Debug.Print AddTime Debug.Print 3, Err.Number, Err.Description Err.Clear 'Overflow, although forcing a double, also seen as integer 'Test 4 LimitTime = 1234567890 LimitTime = LimitTime - ((60 * 24) * 2 * 60) Debug.Print LimitTime Debug.Print 4, Err.Number, Err.Description Err.Clear 'Overflow, although there is a value again the logic seems to transform the multiplication into an integer 'Test 5 bla = 60 Debug.Print bla * 24 * 2 * 60 Debug.Print 5, Err.Number, Err.Description Err.Clear 'NO ERROR, why? 'Test 6 blaTwo = 2 Debug.Print 1234567890 - 60 * 24 * blaTwo * 60 Debug.Print 6, Err.Number, Err.Description 'NO ERROR Err.Clear 'NO ERROR, why? On Error GoTo 0 End Sub