VBA Debugging Tips
If you've worked with VBA for any length of time, you know that it's relatively easy to
make errors. In fact, most VBA programmers can do so with very little effort on their
part. The process of locating and correcting errors in your VBA code is known as
Types of Errors
There are basically three types of errors that can occur:
- Syntax errors:A variety of errors related to entering the code itself.
These include incorrectly spelled keywords, mismatched parentheses, and a wide variety of
other errors. Excel flags your syntax errors and you can't execute your code until they
- Run-time errors:
These are the errors that occur while your code is executing. There are many, many types
of run-time errors. For example, if your code refers to an object that doesn't exist,
you'll get a run-time error. Excel displays a message when there is a run-time error.
- Logical errors:
These are errors that occur through faulty programming. Logical errors may or may not
cause a run-time error. In many cases they will simply produce incorrect results.
Debugging your code is the process of finding and correcting run-time errors and
Eight Bug Reduction Tips
I can't help you completely eliminate bugs in your programs, but I can provide a few
tips that will help you keep them to a minimum.
- Use an Option Explicit at the beginning of your module. Doing so will require
that you define the data type for every variable that you use. It's a bit more work, but
you'll avoid the common error of misspelling a variable name.. And there's a nice side
benefit: Your routines will often run faster.
- Format your code with indentation. I've found that using indentation to delineate
code segments is quite helpful. If you have several nested For...Next loops, for example,
consistent indentation will make it much easier to keep track of them all.
- Be careful with On Error Resume Next. This statement causes Excel to ignore any
errors and continue. In some cases, using this statement will cause Excel to ignore errors
that shouldn't be ignored. Your may have bugs and not even realize it.
- Use lots of comments. Nothing is more frustrating than revisiting code that you
wrote six months ago - and not having a clue as to how it works. Adding a few comments to
describe your logic can save you lots of time down the road.
- Keep your subroutines and functions simple. Writing your code in smaller modules,
each of which has a single, well-defined purpose, makes it much easier to debug them.
- Use the macro recorder to help you identify properties and methods. If I can't
remember the name or syntax of a property or method, I've found that it's often quicker to
simply record a macro and look at the recorded code.
- Consider a different approach. If you're having trouble getting a particular
routine to work correctly, you might want to scrap the idea and try something completely
different. In most cases, Excel offers several alternative methods of accomplishing the
- Understand Excel's debugger. Although it can be a bit daunting at first, you'll
find that Excel's debugger is an excellent tool. Invest some time and get to know it. I
used VBA for quite a while before I took the time to learn how the debugger works (it's
well documented in the on-line help). I spent about an hour learning the details, and I
estimate that it has saved me dozens of hours in wasted time.