KattMan:They got so close to the Try-Catch-Finally pattern it isn't funny. One small change and they would have had it:
Private Sub Command212_Click()
On Error GoTo Err_Command212_Click
Me.Close
GoTo Cleanup
Err_Command212_Click:
MsgBox Err.Description
Cleanup:
End Sub
This then works exactly like Try-Catch-Finally
The way the pattern was written by Publius is correct
(edit: except for missing the 'on error resume next' in the error handler) and already includes a cleanup block: between the label "Exit_Command212_Click:" and the statement "Exit Sub" he would have to close his database connections for example.
By putting the clean-up block after the regular code and before the Error handling block it will always get executed after normal flow of code (without have to use GOTO because apparently they are evil). And to ensure clean-up after handling the error, the error handling section should start with "On Error Resume Next" and end with "Resume Exit_Command212_Click".
The REAL problem with this pattern is that organizations are forcing developers to use it for every single function. I have seen many functions that abuse the clean-up block for cleaning local variables (e.g Set myPerson = Nothing) because they didn't understand that local variables go out of scope and that setting the reference to Nothing doesn't change a single thing.
I would rather compare this pattern to the "using" block in C# because you should only use it when you have to free resources, like database connections and the like

It's... Monkey Piston's Frying Circle!