激活和停用 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>
以下是我用来确保维护对功能区的引用(我的代码中的功能区,你的代码中的 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