The first thing you will notice of Rubberduck is its commandbar and menus; Rubberduck becomes part of the VBE, but at startup you'll notice almost everything is disabled, and the Rubberduck commandbar says "Pending":
This button is how Rubberduck keeps in sync with what's in the IDE: when it's Rubberduck itself making changes to the code, it will refresh automatically, but if you make changes to the code and then want to use Rubberduck features, you'll need Rubberduck to parse the code first.
The status label will display various steps:
- Loading declarations: Rubberduck noticed new project references and is retrieving information from the COM type libraries.
- Parsing: Rubberduck is creating a parse tree for each new module, and/or updating the parse trees for the modified ones.
- Resolving declarations: The parse trees are being traversed to identify all declarations (variables, procedures, parameters, locals, ...line labels, everything).
- Resolving references: The parse trees are being traversed again, this time to locate all identifier references and resolve them all to a specific declaration.
- Inspecting: At this point most features are enabled already; Rubberduck is running its inspections and displaying the results in the inspection results toolwindow.
That's if everything goes well. Rubberduck assumes the code it's parsing is valid, compilable code that VBA itself can understand.
It's possible you encounter (or write!) code that VBA has no problem with, but that Rubberduck's parser can't handle. When that's the case the Rubberduck commandbar will feature an "error" button:
Clicking the button brings up a tab in the Search Results toolwindow, from which you can double-click to navigate to the exact problematic position in the code:
The Code Explorer will also be displaying the corresponding module node with a red cross icon:
You'll find the Code Explorer under the Navigate menu. By default the Ctrl+R hotkey to display it instead of the VBE's own Project Explorer. The treeview lists not only modules, but also every single one of their members, with their signatures if you want. And you can make it arrange your modules into folders, simply by adding a @Folder("Parent.Child")
annotation/comment to your modules:
The inspection results toolwindow can be displayed by pressing Ctrl+Shift+i (default hotkey), and allows you to double-click to navigate all potential issues that Rubberduck found in your code.
Rubberduck also features a port of the popular "Smart Indenter" add-in (now supports 64-bit hosts, and with a few bugfixes on top of that!), so you can turn this:
Sub DoSomething()
With ActiveCell
With .Offset(1, 2)
If .value > 100 Then
MsgBox "something"
Else
MsgBox "something else"
End If
End With
End With
End Sub
Into this:
Sub DoSomething()
With ActiveCell
With .Offset(1, 2)
If .value > 100 Then
MsgBox "something"
Else
MsgBox "something else"
End If
End With
End With
End Sub
...with a single click!
Rubberduck > Indent > Current Procedure / Module / Project
Some helpful shortcuts (these hotkeys are all configurable):
Shortcut | Function |
---|---|
Ctrl + r |
Rubberduck's Code Explorer toolwindow, a better version of VBE's own Project Explorer |
Ctrl + Shift + i |
Rubberduck's Code Inspections toolwindow, to quickly summarize your code issues |
Ctrl + p |
Smart Indent the current Procudure |
Ctrl + m |
Smart Indent the current Module |
There's quite a lot to Rubberduck, the above is barely even a "quick tour"; the project's website lists all the features, and the wiki will eventually document everything there is to document. Feel free to poke around and break things and request features / create new issues too!