细品RibbonX(39):技巧—使用VBA自定义功能区元素属性

细品RibbonX(39):技巧—使用VBA自定义功能区元素属性

资料整理来自于论坛
完整版下载地址:http://download.csdn.net/download/nodeman/10264659

 

 Loading ...

 

除了使用类创建自定义属性外,也可以为许多对象(例如工作簿、工作表,等)创建自定义属性。此外,在给对象定义自定义属性之后,属性作为对象的成员被公开,例如:

ThisWorkbook.MyRibbon

正如所见,从父对象直接引用UI对象非常容易,当引用回Ribbon对象时可以省去很多麻烦。考虑到用户经常同时打开多个应用程序,每个程序都会有一个名为MyRibbon的对象,因此让代码可以清楚地指定引用的确切对象是至关重要的。
设置自定义属性
设置内置对象的自定义属性与使用标准的类模块创建自定义属性相同。唯一不同的是,属性必须驻留在其容器对象里,以便属性能够作为该指定对象的成员公开。
可以使用自定义属性模拟上下文选项卡来容易地访问可视的属性、确定标签值,等等。下面的示例中,我们开发自定义属性来控制可见性。该示例实现下列功能:

  • 显示/隐藏与工作表相关的选项卡的自定义属性
  • 两个复选框,控制两个内置组的可见性(字体和表)

本例中,关键属性是getVisible属性,我们将使之变成自定义属性以便通过该属性修改其值。注意,通过这些自定义属性将显示/隐藏位于不同选项卡里的组。

<customUIxmlns="http://schemas.microsoft.com/office/2006/01/customui"

          onLoad="rxIRibbonUI_onLoad">

    <ribbonstartFromScratch="false">

        <tabs>

            <tabid="rxtabSheet"

                 label="Sheet Tab"

                 insertBeforeMso="TabHome"

                 getVisible="rxtabSheet_getVisible">

                <groupid="rxgrp1"

                       label="My Custom Group">

                </group>

             </tab>

             <tabidMso="TabHome"

                  label="Modified Home">

                 <groupid="rxgrp2"

                       insertBeforeMso="GroupClipboard"

                       label="My CheckBox">

 

                 <!-- Add a checkBox -->

                 <checkBoxid="rxchkHideFontGroup"

                       getLabel="rxchkHideFontGroup_getLabel"

                       onAction="rxchkHideFontGroup_Click"

                       screentip="Hide the FontGroup"

                       supertip="Click here tohide/unhide the Font Group"/>

 

                 <!-- Add a checkBox -->

                 <checkBoxid="rxchkHideTableGroup"

                       getLabel="rxchkHideTableGroup_getLabel"

                       onAction="rxchkHideTableGroup_Click"

                       screentip="Hide the TablesGroup"

                       supertip="Click here to hidethe Tables Groups"/>

                 </group>

             </tab>

             <tabidMso="TabHome">

                 <groupidMso="GroupFont"

                      getVisible="GroupFont_getVisible"/>

             </tab>

             <tabidMso="TabInsert">

                 <groupidMso="GroupInsertTablesExcel"

                      getVisible="GroupInsertTablesExcel_getVisible"/>

             </tab>

        </tabs>

    </ribbon>

</customUI>

上述代码创建了“Modified Home”选项卡,在剪贴板前添加了“My CheckBox”组,并且添加了一个名为“Sheet Tab”的空选项卡,界面如下图所示。

接下来,定义属性。在ThisWorkbook对象中定义下列属性:

Private pRibbonUI As IRibbonUI

Private pblnGrpTblVisible As Boolean

Private pblnGrpFontVisible As Boolean

 

'设置Ribbon对象,使之能够作为ThisWorkbook的成员访问

Public Property LetrxIRibbonUI(iRib As IRibbonUI)

    SetpRibbonUI = iRib

End Property

 

Public Property GetrxIRibbonUI() As IRibbonUI

    SetrxIRibbonUI = pRibbonUI

End Property

 

'设置可见性属性,使之能够作为ThisWorkbook的成员访问

Public Property LetrxIRibbonUIGroupTableVisible( _

    ByValblnVisible As Boolean)

    pblnGrpTblVisible = blnVisible

End Property

 

Public Property GetrxIRibbonUIGroupTableVisible() As Boolean

    rxIRibbonUIGroupTableVisible =pblnGrpTblVisible

End Property

 

Public Property LetrxIRibbonUIGroupFontVisible( _

    ByValblnVisible As Boolean)

    pblnGrpFontVisible = blnVisible

End Property

 

Public Property GetrxIRibbonUIGroupFontVisible() As Boolean

    rxIRibbonUIGroupFontVisible =pblnGrpFontVisible

End Property

注意,虽然用于决定可见性的这些变量在ThisWorkbook模块,但由于ThisWorkbook对象可以在本工程的任何地方访问,因此可以在该模块之外设置或获取这些属性的值。
在编写回调代码之前,还需要为工作表创建自定义属性,然后使用这些属性来决定与该工作表相关的选项卡是否显示,这里使用工作表Sheet1,当然您可以根据需要修改。
使用下列代码为该工作表设置自定义属性:

Private pglnTabVisible As Boolean

 

Property Let rxIRibbonUISheetTabVisible(ByVal blnVisible AsBoolean)

    pglnTabVisible = blnVisible

End Property

 

Property Get rxIRibbonUISheetTabVisible() As Boolean

   rxIRibbonUISheetTabVisible =pglnTabVisible

End Property

 

Private Sub Worksheet_Activate()

    Sheet1.rxIRibbonUISheetTabVisible= True

   ThisWorkbook.rxIRibbonUI.Invalidate

End Sub

 

Private Sub Worksheet_Deactivate()

    Sheet1.rxIRibbonUISheetTabVisible= False

   ThisWorkbook.rxIRibbonUI.Invalidate

End Sub

注意,现在可以利用我们为ThisWorkbook创建的自定义属性来使Ribbon无效。我们不再将该属性作为普通的对象,相反我们将其作为属性即ThisWorkbook对象的一个成员。因此,该UI是ThisWorkbook的一部分。
最后,编写回调代码:

SubrxIRibbonUI_onLoad(ribbon AsIRibbonUI)

    ThisWorkbook.rxIRibbonUI = ribbon

End Sub

 

Sub rxtabSheet_getVisible(control AsIRibbonControl, ByRef returnedVal)

    returnedVal =Sheet1.rxIRibbonUISheetTabVisible

End Sub

 

SubrxchkHideFontGroup_Click(control As IRibbonControl, pressed As Boolean)

   ThisWorkbook.rxIRibbonUIGroupFontVisible = pressed

   ThisWorkbook.rxIRibbonUI.Invalidate

End Sub

 

SubrxchkHideTableGroup_Click(control As IRibbonControl, pressed As Boolean)

   ThisWorkbook.rxIRibbonUIGroupTableVisible = pressed

   ThisWorkbook.rxIRibbonUI.Invalidate

End Sub

 

Sub GroupFont_getVisible(control AsIRibbonControl, ByRef returnedVal)

    returnedVal = True

    Ifcontrol.ID = "GroupFont"Then

        returnedVal = Not (ThisWorkbook.rxIRibbonUIGroupFontVisible)

    Else

      ThisWorkbook.rxIRibbonUI.Invalidate

    EndIf

End Sub

 

SubGroupInsertTablesExcel_getVisible(controlAs IRibbonControl, ByRef returnedVal)

    returnedVal = True

    Ifcontrol.ID = "GroupInsertTablesExcel"Then

        returnedVal = Not(ThisWorkbook.rxIRibbonUIGroupTableVisible)

    Else

       ThisWorkbook.rxIRibbonUI.Invalidate

    EndIf

End Sub

 

SubrxchkHideFontGroup_getLabel(control As IRibbonControl, ByRefreturnedVal)

    SelectCaseThisWorkbook.rxIRibbonUIGroupFontVisible

        CaseTrue

            returnedVal = "Show Font Group"

        CaseFalse

            returnedVal = "Hide Font Group"

    EndSelect

End Sub

 

SubrxchkHideTableGroup_getLabel(control As IRibbonControl, ByRefreturnedVal)

    SelectCaseThisWorkbook.rxIRibbonUIGroupTableVisible

        CaseTrue

            returnedVal = "Show Table Group"

        CaseFalse

            returnedVal = "Hide Table Group"

    EndSelect

End Sub

现在,你可以通过自定义属性来定义与UI对象相关的不同的属性。

 

 

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值