Visual Basic’s error handling is its own special WTF in itself. For those that haven’t had to suffer through it, you can set the error-handling mode with a special On Error statement. For example, On Error Resume Next , is a delightful statement that tells Visual Basic to simply ignore errors, and continue execution. A good programmer will know to check errors with conditional statements .

More common, is the On Error Goto ErrHandler approach. As the code implies, when an error occurs, this simply executes a goto to jump to a specific label, with all of the fun that goto statements normally include.

There are a few global variables that VB manages for you, so that you can find out what error occurred. Err contains the last error code that was raised. Erl contains the line of VB code that triggered the error, which is useful for printing out meaningful error messages.

Ryan inherited an application that used yet another VB WTF- Office Automation- to script behaviors in Microsoft Word. After he fixed one minor bug in the application by adding a single line of code, the application stopped working completely. It was difficult to debug, because there were a number of operations it performed that were likely to fail on the first few attempts, and so the error handler had retry logic built into it. Upon investigation, he found that it wasn’t ever retrying, and just insta-failing and quitting Microsoft Word.

See if you can spot why:

ErrHandler: loopctr = loopctr + 1 If (Err=213 And (Erl = 49 Or Erl = 46 Or Erl = 44 Or Erl = 224 Or Erl = 39) ) Then If loopctr <= 100 Then If (Err=213 And (Erl = 49 Or Erl = 46 Or Erl = 44) ) Then Resume Again Else If Erl = 39 Then Resume again3 Else Resume again2 End If End If End If End If Msgbox ("Error " & Err & " on line " & Erl & " - " & Error & " in CreateDocument") If Isobject(MSWORD) Then MSWord.Quit( wdDoNotSaveChanges ) End If

You guessed right- Ryan’s predecessor, the Erl-king, used line numbers as magic numbers to determine what the exact source of the error was. Once Ryan added a line or two of code, the numbers were all off.