VBA CustomUI 激活或停用控件

问题描述 投票:0回答:1

激活和停用 Excel 功能区上的按钮

此代码 VBA 在“Actualise_CTRL process”中返回错误。

objRuban.InvalidateControl "Bouton1"

错误91 未定义的变量或块对象

html代码较低

从今天下午开始我就一直纠结这个话题。原则上,这组代码应该启用或禁用对 EXCEL 功能区的自定义选项卡的控制,但一定有一些我遗漏的东西。

非常感谢您对此主题的任何帮助


Option Explicit

Public objRuban As IRibbonUI
 boolResult As Boolean


'Callback for customUI.onLoad
'Est déclenché lors du chargement du ruban personnalisé.
Sub RubanCharge(ribbon As IRibbonUI)
   boolResult = False
   Set objRuban = ribbon
End Sub


'Callback for Bouton1 onAction
'La procédure déclenchée lorsque vous cliquez sur le bouton.
Sub ProcLancement(control As IRibbonControl)
   MsgBox "ma procédure."
End Sub


'Callback for Bouton1 getEnabled
'Active ou désactive le bouton en fonction de la variable boolResult
Sub Bouton1_Enabled(control As IRibbonControl, ByRef returnedVal)
    returnedVal = boolResult
End Sub


Sub Actualise_CTRL(ByVal Target As Range)

'Vérifie si la cellule A1 est modifiée et si la cellule contient la valeur 1.
    If Target.Address = "$A$1" And Target = 1 Then
       boolResult = True
   Else
       boolResult = False
    End If
        
'Rafraichit le bouton personnalisé

    
   objRuban.InvalidateControl "Bouton1"

End Sub

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">


    
<!-- Indiquez True pour masquer tous les autres onglets standards-->
<ribbon startFromScratch="false">
    
    <tabs>

<tab id="OngletPerso" label="OngletPerso" visible="true">
   <group id="Projet01" label="Projet 01">

      <!-- onAction="ProcLancement" définit la macro déclenchée lorsque vos cliquez sur le bouton. -->
      <!-- getEnabled="Bouton1_Enabled" gére la condition d'activation ou de désactivation. -->       
     <button id="Bouton1" label="Lancement" onAction="ProcLancement" size="normal" 
         imageMso="Repeat" getEnabled="Bouton1_Enabled"/> 

   </group>
</tab>

</tabs>

</ribbon>
</customUI>

vba ribbon
1个回答
0
投票

以下是我用来确保维护对功能区的引用(我的代码中的功能区,你的代码中的 objRuban)的内容。

Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (destination As Any, source As Any, ByVal length As Long)

Private Ribbon As IRibbonUI

' instance check/fix - if ribbon object is Nothing, attempt to load stored reference
Public Sub getRibbon()
    Dim Path As String: Path = Environ("temp") & "\RibbonUI"
    Dim File As Integer: File = FreeFile
    Dim Value As String
    If Ribbon Is Nothing Then
        Open Path For Input As #File
        Input #File, Value
        Close #File
        CopyMemory Ribbon, CLng(Value), 4
    End If
End Sub

' onload callback - set Ribbon object and store reference in temp file
Public Sub Ribbon_onLoad(ByVal RibbonUI As IRibbonUI)
    Dim Path As String: Path = Environ("temp") & "\RibbonUI"
    Dim File As Integer: File = FreeFile
    Open Path For Output As #File
    Print #File, ObjPtr(RibbonUI)
    Close #File
    Set Ribbon = RibbonUI
End Sub

Public Sub Example()
    getRibbon
    Ribbon.InvalidateControl "example"
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.