2017-10-11 4 views
1

Vous avez essayé de masquer un contrôle personnalisé sur le ruban Excel et mon code affiche le message de mon sous-élément RefreshRibbon(). Le contrôle reste visible quelle que soit la chaîne que je passe du sous-menu HideImport(). J'inclus ici le XML pour le ruban personnalisé et les macros qui posent un problème.Impossible de masquer le contrôle personnalisé sur le ruban Excel

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> 
<ribbon startFromScratch="false"> 
    <tabs> 
     <tab id="tabControl1" label="Control"> 
      <group id="grpImport1" label="Import" getVisible="GetVisible" tag="ShowFalse"> 
       <button id="btnDetail" label="Read Detail" image="Ex" size="large" onAction="ReadDetail" /> 
      </group> 
      <group id="grpJourneys1" label="Journeys" getVisible="GetVisible" tag="ShowTrue"> 
       <button id="btnLegAdd" label="Add" image="AddLeg" size="large" onAction="AddLeg" /> 
       <button id="btnLegRemove" label="Remove" image="RemoveLeg" size="large" onAction="RemoveLeg" /> 
       <button id="btnLegRetime" label="Retime" image="RetimeLeg" size="large" onAction="RetimeLeg" /> 
      </group> 
     </tab> 
    </tabs> 
</ribbon> 

Dim ribControl As IRibbonUI 
Public strTag As String 

Sub RibbonOnLoad(ribbon As IRibbonUI) 
    Set ribControl = ribbon 
End Sub 

Sub GetVisible(control As IRibbonControl, ByRef visible) 
    If strTag = "Show" Then 
    visible = True 
    Else 
    If control.Tag Like strTag Then 
     visible = True 
    Else 
     visible = False 
    End If 
    End If 
End Sub 

Sub RefreshRibbon(Tag As String) 
    strTag = Tag 
    If ribControl Is Nothing Then 
    MsgBox "Error, Save/Restart your workbook" 
    Else 
    ribControl.Invalidate 
    End If 
End Sub 

Sub ReadDetail(control As IRibbonControl) 
    MsgBox "This is Read Detail" 
End Sub 

Sub AddLeg(control As IRibbonControl) 
    MsgBox "This is Add Leg" 
End Sub 

Sub RemoveLeg(control As IRibbonControl) 
    MsgBox "This is Remove Leg" 
End Sub 

Sub RetimeLeg(control As IRibbonControl) 
    MsgBox "This is Retime Leg" 
End Sub 

Sub HideImport() 
    Call RefreshRibbon(Tag:="*True") 
End Sub 

Ne pas publier normalement ici comme toujours réussi à résoudre moi-même après avoir lu vos réponses à d'autres questions, mais cela me rend fou.

Répondre

0

Vous n'avez pas la fonction de rappel dans votre code de ruban personnalisé: Exemple: <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="RibbonOnLoad">

Vous n'êtes donc pas exécuter la procédure RibbonOnLoad(). Par conséquent, vous ne définissez pas la variable ribControl

+0

Merci beaucoup pour votre réponse rapide. Les objets utilisés dans VBA before et thought onLoad faisaient partie de la déclaration IRibbonUI. Fait parfaitement sens et maintenant ça marche je peux modifier pour faire ce que je veux – Lorne