一个RibbonX示例

本节包含了另一个使用RibbonX修改UI的示例。这个工作簿将在“页面布局”选项卡中创建一个新的组,并添加一个复选框控件,用于切换分页符的显示。
注:虽然Excel有大约1700个命令,但没有切换分页符显示的命令。在打印或预览一个工作表之后,隐藏分页符的唯一方式是使用Excel选项对话框。因此,本示例也有一些实用价值。
本示例有一点技巧,因为需要使新的Ribbon控件与活动工作表同步。例如,如果激活一个没有显示分页符的工作表,则复选框控件应该处于未选中状态;如果激活的工作表显示分页符,则该控件应该被选中。而且,分页符应该与图表工作表不相关,因此如果激活图表工作表,则该控件应该被禁用。
1、RibbonX代码
下面的RibbonX代码添加一个新组(带复选框控件)到“页面布局”选项卡中:
<customUI
  xmlns=”http://schemas.microsoft.com/office/2006/01/customui
  onLoad=”Initialize”>
<ribbon>
<tabs>
<tab idMso=”TabPageLayoutExcel”>
  <group id=”Group1″ label=”Custom”>
    <checkBox id=”Checkbox1″
        label=”Page Breaks”
        onAction=”TogglePageBreakDisplay”
        getPressed=”GetPressed”
        getEnabled=”GetEnabled”/>
    </group>
</tab>
</tabs>
</ribbon>
</customUI>
这段RibbonX代码引用了四个VBA回调过程:

  • Initialize:工作簿打开时执行。
  • TogglePageBreakDisplay:用户单击复选框控件时执行。
  • GetPressed:该控件无效时执行(用户激活了一个不同的工作表)。
  • GetEnabled: 该控件无效时执行(用户激活了一个不同的工作表)。
  • 图1显示了这个新控件。
    NewAddControl

图1:该复选框控件总是与活动工作表的分页符显示同步
2、VBA代码
CustomUI标记包含一个参数onLoad,指定了Initialize VBA的回调过程,如下:
Public MyRibbon As IRibbonUI

Sub Initialize(Ribbon As IRibbonUI)
‘   工作簿装载时执行
    Set MyRibbon = Ribbon
End Sub

这个Initialize过程创建一个名为MyRibbon的IRibbonUI对象。注意,MyRibbon是一个Public变量,因此也可以在该模块中的其它过程里访问该变量。
创建一个简单的事件过程,无论何时激活某工作表都将执行该过程。该过程位于ThisWorkbook代码模块中,名为CheckPageBreakDisplay:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Call CheckPageBreakDisplay
End Sub

CheckPageBreakDisplay过程使该复选框控件无效。换句话说,它销毁了与该控件相关的任何数据。
Sub CheckPageBreakDisplay()
‘   当激活工作表时执行
    MyRibbon.InvalidateControl (”Checkbox1″)
End Sub

当某控件无效时,调用GetPressed和GetEnabled过程。
Sub GetPressed(control As IRibbonControl, ByRef returnedVal)
‘   该控件是无效时执行
    On Error Resume Next
    returnedVal = ActiveSheet.DisplayPageBreaks
End Sub

Sub GetEnabled(control As IRibbonControl, ByRef returnedVal)
‘   该控件无效时执行
    returnedVal = TypeName(ActiveSheet) = “Worksheet”
End Sub

注意,参数returnedVal按ByRef传递,这意味着代码可以改变该值,并且确实会发生。在GetPressed过程中,设置returnedVal变量为活动工作表的DisplayPageBreaks属性的状态。结果是,如果显示分页符(选中该控件),则该控件的Pressed参数为True。否则,该控件没有被选中。
在GetEnabled过程中,如果当前工作表是工作表(不是图表工作表),变量returnedVal被设置为True。因此,该控件仅当活动工作表是工作表时启用。
仅有的VBA过程是onAction过程,TogglePageBreakDisplay,在用户选中或取消选中该复选框时执行:
Sub TogglePageBreakDisplay(control As IRibbonControl, pressed As Boolean)
‘   当单击该复选框时执行
    On Error Resume Next
    ActiveSheet.DisplayPageBreaks = pressed
End Sub

如果用户选中了该复选框,则参数pressed为True,反之如果没有选中该复选框则为False。该代码也相应地设置DisplayPageBreaks属性。


提示:您可以在评论中使用HTML标签,且任何与HTML标签相同的符号都会被理解为HTML标签并以相应的格式显示.如果您的评论中有代码,可以使用相应的标签,例如,如果有VB或VBA代码,则可以使用[vb]标签,即[vb]放置的代码[/vb],这样会很清晰地显示代码.

留下回复