I was trying to exercise the repurposing functionality in the Office 2007 ribbon today.
Specifically, I wanted to intercept the FileDocumentInspect command on the Office Menu.
Now, I’ve already added a button to the ribbon, so I added the <commands> section just like all the examples I’ve found indicate:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon> <tabs> <tab idMso="TabHome"> <group id="MyGroup" label="My Controls" insertAfterMso="GroupClipboard"> <button id="MyButton" label="Hello, Word!" imageMso="HappyFace" onAction="HelloMacro" size="large"/> </group> </tab> </tabs> </ribbon> <commands> <command idMso="FileDocumentInspect" onAction="MySub"/> </commands> </customUI>
Run the app, load up Word, no joy.
Is the example I found based on Beta bits? Have I mistyped a quote somewhere?
So I start hunting.
Eventually, I had what you might call an AHA moment.
If you have ever played with the .NET configuration stuff, you know that one of the infuriating aspects of it is that the XML sections can be “positional”, meaning that if you put a particular section after another section, it won’t work, but put it BEFORE and all is good. I suppose there might be a rational explanation for this, and for that matter, I suppose there might be a rational reason I’d want two different files to be distinguishable only by case<g>, but sorry, I just don’t see it.
Anyway, put the commands section BEFORE the ribbon section and all is right in the world again:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <commands> <command idMso="FileDocumentInspect" onAction="MySub"/> </commands> <ribbon> <tabs> <tab idMso="TabHome"> <group id="MyGroup" label="My Controls" insertAfterMso="GroupClipboard"> <button id="MyButton" label="Hello, Word!" imageMso="HappyFace" onAction="HelloMacro" size="large"/> </group> </tab> </tabs> </ribbon> </customUI>
Positionally dependent XML. Gotta love it.