onLoad ruban de rappel échoue (pas de tir/de travail) à partir d'Excel VBA .xlam

J'ai créé un simple Excel add-in pour démontrer le problème selon lequel le ruban événement onLoad n'est-ce pas de tir lorsque le projet est enregistré automatiquement et chargé comme une .xlam mais fonctionne lorsque s'est ouverte comme une .xlsm. Je l'ai vérifié pour Excel 2007 (avec le correspondant xmlns), 2010 (x32) et 2013 (x32) et il échoue dans tous les cas, lorsqu'il est chargé comme un .xlam

L'échantillon a un seul bouton et quand on clique dessus, doit provoquer un drapeau à être basculée et puis annule le ruban qui permet de basculer l'étiquette du bouton via le GetLabel de rappel.

Il fonctionne lorsqu'il est ouvert comme une .fichier xlsm, mais pas lorsqu'il est chargé automatiquement à partir de l'utilisateur dossier XLSTART (pas de Registre Windows des modifications ont été apportées) comme une .xlam complément. Le problème semble être que l'événement onLoad n'est-ce pas de tir de la .xlam version et donc la onLoadRibbon procudure ne fonctionne pas et il n'y a pas de ruban objet d'invalider.

<customUI onLoad="onLoadRibbon" xmlns="http://schemas.microsoft.com/office/2009/07/customui">
    <ribbon startFromScratch="false">
        <tabs>
            <tab idQ="TabInsert">
                <group id="GroupTest" label="2010" insertBeforeMso="GroupInsertLinks">
                    <button id="ButtonTest"
                        getLabel="GetLabel"
                        onAction="ButtonClick"/>
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>

Et voici l'additif correspondant dans le code VBA:

Option Explicit

Public Toggle As String
Public myRibbonUI As IRibbonUI

' Ribbon callback : runs when ribbon is loaded
Public Sub onLoadRibbon(ribbon As IRibbonUI)
    ' Get a reference to the ribbon
    Set myRibbonUI = ribbon
    Debug.Print "Ribbon Reference Set"
    MsgBox "Ribbon Reference Set"
End Sub

' Ribbon callback : runs when ribbon button is clicked
Public Sub ButtonClick(control As IRibbonControl)
    ' Invalidate the ribbon so that the label of the button toggles between "true" and "false"
    myRibbonUI.Invalidate
    Debug.Print "Ribbon Invalidated"
End Sub

' Ribbon callback : runs when ribbon is invalidated
Public Sub GetLabel(control As IRibbonControl, ByRef label)
    ' Toggle the label for the button to indicate that the callback has worked
    Toggle = IIf(Toggle = "State 1", "State 2", "State 1")
    label = Toggle
    Debug.Print "Ribbon Button Label Toggled"
End Sub

Pourquoi n'est-ce pas de travail dans le .xlam?

OriginalL'auteur Jamie Garroch | 2013-10-22