Using Rubberduck


Rubberduck is a VBE add-in for VBA developers. It will not interfere in any way with the host process unless the Visual Basic Editor is brought up (Alt+F11 in Microsoft Office) and loads it.

When the IDE loads the Rubberduck add-in, Rubberduck’s startup sequence is invoked and the splash screen is displayed until we’re good to go.


Rubberduck inserts its Rubberduck menu in the VBE’s main menu bar, just before the Window menu. You’ll find most of Rubberduck’s commands and tools under this menu.

RubberduckMenu v2.2

The About window has a feature that copies helpful debugging context information into the Windows Clipboard when you press Ctrl+C:

Version 2.2.6672.23085
OS: Microsoft Windows NT 10.0.16299.0, x64
Host Product: Microsoft Office 2016 x64
Host Version: 16.0.8431.2236
Host Executable: EXCEL.EXE

If you encounter any problems you wish to create a new issue for, you’ll want to include this information (it’s included in the logs too, if you’ve enabled logging).

You’ll probably want to peek at the Settings first.



  • Rubberduck needs to “refresh” its internal representation of the user’s code whenever the code changes – the VBIDE API isn’t telling us! Changes made since the previous parse WILL be lost if you make Rubberduck work off an out-of-sync parse tree.
  • Rubberduck needs to build its internal representation of the user’s code starting with a string that contains a whole module’s code. The tokenizing and parsing steps are actually pretty fast.. the longest part of “refreshing” is making sense of the codeMake the best use of parser state caching by modifying only a single module between two refreshes; after the initial parse, only modified modules are re-processed.
  • Rubberduck can’t [yet] rewrite a module without blowing away any/all member attributes. Member attributes WILL be lost if you let Rubberduck make changes to a class/module with member attributes.  This is infuriatingly annoying, and addressing this is …complicated. But we have a plan. And in the meantime, we will soon be prompting to cancel the rewrite operation if a module contains member attributes.
  • The VBIDE API does not expose breakpoints and bookmarks, so Rubberduck has no [easy] way to know anything about them. Breakpoints and bookmarks in a module are lost after Rubberduck rewrites the module.