Converting "On Error..." To "Try...Catch"
- 09 Mar 2006 10:48
We all know that we should use
Try ... Catch instead of
On Error... But our VSdocman contains some code ported from VB6. This code naturally uses
On Error... and it was OK as long as the code worked correctly.
Recently, we decided to clean the old code and use String.equals method for comparing two strings instead of = operator. And suddenly On Error Resume Next wasn't good anymore. If the original method was
Function test(ByVal str As String) As Integer On Error Resume Next If str = "a" Then Return 1 End If Return 0 End Function
and you called it with Nothing argument, it worked as expected and returned 0. But if you called modified version
Function test(ByVal str As String) As Integer On Error Resume Next If str.equals("a") Then Return 1 End If Return 0 End Function
with Nothing argument, it returned 1. str.equals failed because str was Nothing.
On Error Resume Next didn't skip whole
If...Then block but continued on the very next line.
So there was good reason to remove all old
On Error Resume Next statements. It's not possible to automatically remove
On Error Resume Next lines and place
Try...Catch block on whole function. What if I don't want to exit the function on the first exception but I want to catch it and continue? I need to decide myself where to insert
Try...Catch blocks. I've used MZ-Tools add-in for that. I deleted
On Error Resume Next lines manually and then used MZ-Tools' Add Exception Handler function which surrounds selected text with your predefined pattern. In my case it was
Try ... Catch ex As Exception End Try