Wiz(): Never Forget to Set the WizHook Magic Key

The first time I played around with the hidden WizHook function in Access, I could not get it to work.

I was using one of the sample functions from JasonM's WizHook PDF reference, but it did not seem to be doing anything.  No error message.  No error code.  Just nothing.  I spent more time than I care to admit before I eventually gave up and reread the whole manual.  That's when I realized I'd made a critical oversight by skimming through the documentation.  

I missed the most important note on the first page of JasonM's reference:

The biggest thing to know: WizHook.Key = 51488399. Some methods can be called without this key, but most of them require it. The key only needs to be set once per application session, to save space I'm not including it in any sample functions.

So, to save you from a similar fate, I put together this simple function that returns a WizHook object only after it has been properly initialized.  

The Approach

Since the key only needs to be applied once per session, I use a static boolean variable inside the function to keep track of whether the WizHook object has been initialized with the key.  

The first time through the function, the boolean variable has its default value of False.  This lets the execution pass into the If block.  Inside the If block, the Key property gets set to the required "magic" value and the boolean variable gets set to True.  On subsequent calls to the function, the boolean variable being set to True prevents the execution from passing into the If block marginally boosting performance.

The final step is to set the function's return value to the Application.WizHook object.

The Wiz() Function

' ----------------------------------------------------------------
' Procedure : Wiz
' Date      : 10/26/2022
' Author    : Mike Wolfe
' Source    : https://nolongerset.com/wiz-wizhook-helper/
' Purpose   : Convenience function that sets the WizHook Key once per session.
' Notes     - Many WizHook functions fail *silently* if this key is not set.
' Usage     : Simply call `Wiz` anywhere you would normally call `WizHook`
' ----------------------------------------------------------------
Public Function Wiz() As Access.WizHook
    Static WizHookInitialized As Boolean
    
    If Not WizHookInitialized Then
        'Most WizHook methods only work after this key has been applied:
        Const MagicWizHookKey As Long = 51488399
        WizHook.Key = MagicWizHookKey
        
        'The key only needs to be applied once per session
        WizHookInitialized = True
    End If
    
    Set Wiz = WizHook
End Function

Sample Usage

Simply call the Wiz function anywhere that you would normally refer to the WizHook object directly.  

And don't worry about setting (or forgetting to set!) that .Key property ever again.

Cover Image: That's Elaine's one-time boyfriend, Jack, the fact-checker (aka, The Wiz...and nobody beats him!)