Monday, August 05, 2013

Outlook 2010 Macros -- Adventures in Getting Them to Work

In a post that included Outlook VBA code, I mentioned that I stopped using the macro because of Outlook's tougher security.

Today, I decided to try to eliminate the main problem that I had, namely an inability to run the macro except from within the VBA Project IDE.

Here's the scenario:  I have code that worked on Outlook 2000.  I assigned a toolbar button to call it.  But the toolbar button doesn't work in Outlook 2010.  Nothing happens.  Pressing Alt-F8 and clicking Run opens the VBA macro in the IDE and displays an error "Subroutine or Function not found" (paraphrased).  But then I can run the macro by clicking the play button.

One aspect of my solution was to make sure macros were not being disabled.  I choose to self-sign the macro rather than enable all macros.  First I used SelfCert.exe, which I found in the Outlook program directory (C:\Program Files\Microsoft Office\Office14).  SelfCert.exe can be used to create personal certificate -- it would work for me on my local computer.  After I created the certificate, I signed the macro (Tools | Digital Signatures | Choose).  After clicking OK, I immediately pressed Ctrl-sto save the macro.  And then I closed Outlook.  But when I did, it asked me whether I wanted to save VbaProject.OTM.  Odd.  First I responded No.  But when I reopened the VBA editor and checked for digital signatures, it reported that the macro was unsigned.  But answering Yes to the prompt to save didn't help either.  The macro still wasn't signed.

I wondered if the Read Only attribute had been set on VbaProject.OTM.  But no, I had Full Control rights on the file.  Yet, the file's timestamp was old!  It wasn't getting saved!  Ahh, but the old timestamp was a trick, an undocumented "feature".  According to this support thread, it was normal for the timestamp and file size of VbaProject.OTM to remain unchanged after a save.  (This is why the phrase "WTF?" was invented.)  I verified that the save was taking place by adding a comment to my code, saving, closing Outlook and then re-opening the macro.

After that little detour, I found that it was necessary for me to install the certificate in the "Trusted Root Certification Authorities."  This can be done deep within the bowels of the VBA editor.  Tools | Digital Signatures | Choose.  Click the link that says "Click here to view the certificate prope..."  Click the button "Install Certificate..." then Next.  In the next dialog box, click the radio button for "Place all certificates in the following store" then Browse.  Select "Trusted Root Certification Authorities" and then OK / Next your way out.  Save and close Outlook again.

BTW, every time you close Outlook, you should use Task Manager to verify that the Outlook process is not running.

Still the macro would not run except from within the editor.  But I found the solution in another thread.  My code was in a module.  After I moved it to ThisOutlookSession, I was able to assign an actual functioning toolbar button to it.

Whew!

It is very nice that even though I have other macros working that access the From and To properties of a message, I no longer get the annoying message box that warns me that my address book is being accessed and asks whether I want to allow that.