Click Here!
home account info subscribe login search My ITKnowledge FAQ/help site map contact us


 
Brief Full
 Advanced
      Search
 Search Tips
To access the contents, click the chapter and section titles.

Visual Basic 6 Black Book
(Publisher: The Coriolis Group)
Author(s): Steven Holzner
ISBN: 1576102831
Publication Date: 08/01/98

Bookmark It

Search this book:
 
Previous Table of Contents Next


Using On Error GoTo Label

The Visual Basic On Error GoTo statement is the foundation of handling trappable errors. When you execute an On Error GoTo Label statement in your code, execution is transferred to the code starting at Label if a trappable error has occurred. The code following that label is your error handler.

Let’s see an example to make this clear. In the previous topic, we executed a statement indicating that our error handler code starts at the label FileError this way:

Private Sub Command1_Click()

    On Error GoTo FileError
...

Now if an error occurs, we’ll transfer program execution to the code that follows the label FileError. That means that for all this code, error trapping is enabled:

Private Sub Command1_Click()

    On Error GoTo FileError

    With CommonDialog1
        .ShowOpen
        Open .FileName For Input As #1
        Text1.Text = Input$(LOF(1), #1)

        Close #1

    End With

    Exit Sub
...

The actual error-handling code itself follows the label FileError like this:

Private Sub Command1_Click()

    On Error GoTo FileError

    With CommonDialog1

        .ShowOpen
        Open .FileName For Input As #1
        Text1.Text = Input$(LOF(1), #1)

        Close #1

    End With

    Exit Sub

FileError:
    Select Case Err.Number
        Case cdlCancel
            MsgBox "Please select a file."
            Resume
        Case 53
            MsgBox "File not found"
        Case Default
            MsgBox "File Error"
    End Select

End Sub


TIP:  Note that if you want to turn off error trapping at some point in your code, you can execute the statement On Error GoTo 0 (see “Using On Error GoTo 0” coming up later in this chapter). You can also redirect error trapping to a new error handler by executing a new On Error GoTo Label statement.

Using On Error GoTo line#

Besides using a label to start an error handler (see the previous topic), you can refer to an error handler by line number in Visual Basic, using the On Error GoTo line# statement. Numbering code lines is part of Visual Basic history all the way back to the original days of the Basic language, and, in fact, many programmers don’t know that you can number the lines of code in Visual Basic. For example, here’s how we set up an error handler that starts at line 16 in our code (you can enter the line numbers directly in the code as shown in the following code), using the On Error GoTo line# statement:

Private Sub Command1_Click()
1
2    On Error GoTo 16
3
4    With CommonDialog1
5
6        .ShowOpen
7        Open .FileName For Input As #1
8        Text1.Text = Input$(LOF(1), #1)
9
10        Close #1
11
12    End With
13
14    Exit Sub
15
16
17    Select Case Err.Number
        Case cdlCancel
            MsgBox "Please select a file."
            Resume
        Case 53
            MsgBox "File not found"
        Case Default
            MsgBox "File Error"
    End Select

End Sub

Now when there’s a trappable error, program execution jumps to line 16 to execute our error handler. Note that numbering lines has long been obsolete in Visual Basic; for most purposes, it’s better to stick with On Error GoTo Label.

Using On Error Resume Next

The On Error Resume Next statement provides an easy way to disregard errors, if you want to do so. Once you execute this statement, execution continues with the next line of code if the current line generates an error, and the error is disregarded.

Let’s see an example. Here we set the Text, Caption, Min, and Max properties of the currently active control on a form when the user clicks that form. Because no one control has all those properties, this code would generate an error in a message box to the user:

Private Sub Form_Click()
    ActiveControl.Text = "Active control"
    ActiveControl.Caption = "Active Control"
    ActiveControl.Min = 0
    ActiveControl.Max = 100
End Sub

However, we can place an On Error Resume Next statement in the code to suppress all the trappable errors:

Private Sub Form_Click()
    On Error Resume Next
    ActiveControl.Text = "Active control"
    ActiveControl.Caption = "Active Control"
    ActiveControl.Min = 0
    ActiveControl.Max = 100
End Sub

The result here is that whichever of these four properties the active control does have is set, without any errors.


WARNING!  Note, however, that code like this is not good programming form, of course; it’s better to check what the type of the active control is before setting its properties instead of simply disregarding errors.

Using On Error GoTo 0

To turn off error trapping, you can use the On Error GoTo 0 statement. For example, here we turn on error trapping to catch the case where the user clicks the Cancel button in a Common Dialog control’s Font dialog box, but we then turn error trapping off if the user did not press Cancel (to make the Cancel button generate a trappable error, set the Common Dialog control’s CancelError property to True; this is the standard way of catching the Cancel button when working with Common Dialogs):

Private Sub Command1_Click()
    On Error GoTo Cancel
    CommonDialog1.Flags = cdlCFBoth Or cdlCFEffects
    CommonDialog1.ShowFont
    On Error GoTo 0

    Text1.FontName = CommonDialog1.FontName
    Text1.FontBold = CommonDialog1.FontBold
    Text1.FontItalic = CommonDialog1.FontItalic
    Text1.FontUnderline = CommonDialog1.FontUnderline
    Text1.FontSize = CommonDialog1.FontSize
    Text1.FontName = CommonDialog1.FontName
Cancel:
End Sub


Previous Table of Contents Next


Products |  Contact Us |  About Us |  Privacy  |  Ad Info  |  Home

Use of this site is subject to certain Terms & Conditions, Copyright © 1996-2000 EarthWeb Inc.
All rights reserved. Reproduction whole or in part in any form or medium without express written permission of EarthWeb is prohibited.