mkofler
mkofler

Reputation: 1

Display a custom tab on Word Ribbon depending on the version of Word detected?

I have customized the Office Ribbon adding a new tab to the Word ribbon by creating a custom XML file. The customization is in a template in the Word start-up directory. I am using Word 2016. It works under Word 2016; however it does not work in Word 2010. When opening a document in Word 2010 I get the dreaded "Error in hidden module" message. After hours of debugging and researching I cannot find the cause of this error in my VBA code. All the users in my company should be using Word 2016, however I must assume that some users will still be using Word 2010. If a user opens a document using Word 2010 I don't want my custom tab to be visible, that is I don't want the OnLoad event to fire. I tried the following code in the OnLoad Event callback:

If Application.Version = "16" Then     
   Set myribbon = ribbon
Else
    End
End If

In the other callbacks such as ToggleOn Action, getlabel, getTag, GetImage I checked for the Word Version like this:

Public Sub…
   If Application.Version = "16" then
     Do callback code
Else
     End        
   End If     
End Sub

However, the ribbon always loads and I could not find a way to stop it from loading. I also believe that you cannot hide a custom tab on the ribbon using VBA. To solve this problem I did the following: I put a template in the startup directory that checked for the correct version of Word. If the correct version was found, it loaded a template as an add-in from the users template directory with the ribbon customisation and my VBA code. It works, but it means I have to distribute two templates to the users. Ideally I'd like to have to distribute only one template. Is there a way to enable or prevent the OnLoad event firing, that is display a custom tab, depending on the version of Word detected?

Upvotes: 0

Views: 603

Answers (1)

JohnyL
JohnyL

Reputation: 7152

Use getVisible callback.

XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
    <ribbon>
        <tabs>
            <tab id="tab1" label="CUSTOM" getVisible="OnGetTabVisible">
                <group id="group1" label="Group1">
                    <button idMso="SaveAll" label="Save All" size="large"/>
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>

Callback:

Sub OnGetTabVisible(ctrl As IRibbonControl, returnVal)
    If Val(Application.Version) = 14 Then
        returnVal = False
    Else
        returnVal = True
    End If
End Sub

UPDATE

I would suggest following resources:

  1. RibbonX: Customizing the Office 2007 Ribbon

  2. Excel 2007 VBA Programmer's Reference

  3. Ron de Bruin Excel Automation

Upvotes: 1

Related Questions