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
Vous devez vous connecter pour publier un commentaire.
J'ai pu réussir à créer et exécuter le complément par votre cahier des charges.
Tout d'abord, j'ai créé l' *.xlsm à l'aide de votre customUI.xml comme ci-dessus. NOTE: je suis sur Excel 2007, j'ai donc utilisé l'autre xlmns comme vous l'avez indiqué, spécifiquement
http://schemas.microsoft.com/office/2006/01/customui
. J'ai ajouté du ruban-de la manipulation de code suivant, puis rouvert le classeur pour vérifier la fonctionnalité ruban. J'ai immédiatement reçu une messagebox "le Ruban de Référence" (j'ai les macros sont activées par défaut). J'ai vérifié que l'onglet "Insérer" a votre bouton supplémentaire et qu'il bascule.Deuxième, j'ai sauvé la xlsm Excel Add-In *.xlam. J'ai ouvert manuellement le fichier xlam en double-cliquant et toutes les fonctionnalités est apparu que dans le premier test ci-dessus.
Troisième, j'ai installé l'Add-In à travers le Fichier Excel
Menu
--->Options
--->Add-Ins
--->Manage Excel Add-Ins
--->Go
. J'ai ouvert un autre classeur Excel et vérifié que le complément chargés de la même que les tests avant. J'ai désinstallé les Ajouter À l'aide du même menu.Quatrième, j'ai navigué à
C:\Program Files(x86)\
et vérifié l'emplacement de l'Excel.exe exécutable, puis a trouvé leXLSTART
dossier. J'ai placé le xlam dans le dossier et ouvert non liées classeur Excel et a été en mesure de vérifier que le complément a fonctionné comme avant.Je sais que ce qui précède ne pas répondre directement à votre question, mais de tester ces cas et nous allons comparer les résultats afin de savoir où il pourrait être briser.
EDIT:
En réponse à votre commentaire, quand j'ai copier manuellement le fichier *.xlam dans le
%APPDATA%\Microsoft\Excel\XLSTART
dossier, il fonctionne comme prévu. Sur mon ordinateur Windows 7, le chemin d'accès évalue àC:\Users\username\AppData\Roaming\Microsoft\Excel\XLSTART
. Comme vous l'avez remarqué, j'ai vérifié dans les options d'Excel que c'est un défaut de l'emplacement approuvé.Une chose que vous pouvez vérifier si vous avez plus d'un Add-In en cours de chargement qui définit ces mêmes ruban objets. J'imagine que si c'est arrivé qu'ils allaient provoquer un conflit qui serait de prévenir votre code de s'exécuter même si le contrôle/la section créées. L' *.xlam de travail lorsque vous ouvrez manuellement en double-cliquant sur?
OriginalL'auteur Blackhawk
Je sais que c'est un vieux post ... mais j'ai eu le même problème et était à la recherche pendant des heures pour trouver une solution.
La cause racine dans mon cas était aussi simple que difficile à trouver: j'ai eu deux différents AddIns - mais en raison de copier et de coller j'ai manqué de renommer la fonction de rappel dans la deuxième.
Le nom de la procédure de rappel doit être unique dans l'ensemble de l'instance d'Excel.
Donc tout simplement essayer de renommer la procédure de rappel dans le code VBA (et bien sûr aussi dans le XML)!
OriginalL'auteur cboden