View Single Post
  #4   Report Post  
Posted to microsoft.public.excel.programming
deltaquattro deltaquattro is offline
external usenet poster
 
Posts: 65
Default Error handling in VBA

Hi, Bob,

that's a good general advice, thanks. BTW, do you know if there are
free profilers and/or dependency tree graphers for VBA? I have some
excellent open source codes for Fortran, but I haven't been able to
find something similar for VBA. He

http://www.bmsltd.co.uk/Excel/Default.htm

there's a CallTree code, but it doesn't work on my multiworkbook
project.

Best Regards

Sergio

On 4 Feb, 13:17, "Bob Phillips" wrote:
I wouldn't, I would leave the message box.

I use error trapping for unanticipated errors, that situation that you have
is perfectly predictable. My code would look something like

* * On Error GoTo errHandler
* * 'the real code

exitHandler:
* * 'general tear-down code
* * Exit Sub/Function

errHandler:
* * MsgBox "Unanticipated error:" & vbNewLine & _
* * * * * *vbTab & "Err #: " & Err.Number & vbNewLine & _
* * * * * *vbTab & "Description :" & Err.Description
* * * * * *Resume exitHandler

HTH

Bob

"deltaquattro" wrote in message

...



Hi guys,


I'm not so used to the On Error statement, ssince I come from a
Fortran background where all error handling must be performed using If
Then Else constructs. Example: in this interpolation subroutine


'Returns an interpolated value of x
'doing a lookup of xarr-yarr
Public Function Interp1(xArr() As Double, yArr() As Double, X As
Double) As Double
Dim I As Long


If ((X < xArr(LBound(xArr))) Or (X xArr(UBound(xArr)))) Then
* MsgBox "Interp1: x is out of bound"
* Stop
* Exit Function
End If


If xArr(LBound(xArr)) = X Then
*Interp1 = yArr(LBound(yArr))
*Exit Function
End If
'For i = LBound(xArr) To UBound(xArr)
' *If xArr(i) = X Then
' * *Interp1 = yArr(i - 1) + (X - xArr(i - 1)) / (xArr(i) - xArr(i -
1)) * (yArr(i) - yArr(i - 1))
' * *Exit Function
' *End If
'Next i
I = Locate(xArr, X) + 1
Interp1 = yArr(I - 1) + (X - xArr(I - 1)) / (xArr(I) - xArr(I - 1)) *
(yArr(I) - yArr(I - 1))
End Function


woudl you advise substituting the If...MsgBox combination with an On
Error statement? In general, how can I understand if it's better to
use On Error or to test for errors with If? *Finally, a purely
programming style question: would you suggest to include the error
handling in the interpolation subroutine, or to move it in the caller
subroutine? Thanks,


Best Regards


deltaquattro