1、细品RibbonX39技巧使用VBA自定义功能区元素属性细品RibbonX(39):技巧使用VBA自定义功能区元素属性 除了使用类创建自定义属性外,也可以为许多对象(例如工作簿、工作表,等)创建自定义属性。此外,在给对象定义自定义属性之后,属性作为对象的成员被公开,例如:ThisWorkbook.MyRibbon正如所见,从父对象直接引用UI对象非常容易,当引用回Ribbon对象时可以省去很多麻烦。考虑到用户经常同时打开多个应用程序,每个程序都会有一个名为MyRibbon的对象,因此让代码可以清楚地指定引用的确切对象是至关重要的。设置自定义属性设置内置对象的自定义属性与使用标准的类模块创建自定
2、义属性相同。唯一不同的是,属性必须驻留在其容器对象里,以便属性能够作为该指定对象的成员公开。可以使用自定义属性模拟上下文选项卡来容易地访问可视的属性、确定标签值,等等。下面的示例中,我们开发自定义属性来控制可见性。该示例实现下列功能:显示/隐藏与工作表相关的选项卡的自定义属性两个复选框,控制两个内置组的可见性(字体和表) 本例中,关键属性是getVisible属性,我们将使之变成自定义属性以便通过该属性修改其值。注意,通过这些自定义属性将显示/隐藏位于不同选项卡里的组。<customUI xmlns= onLoad=rxIRibbonUI_onLoad><ribbon sta
3、rtFromScratch=false><tabs><tab id=rxtabSheet label=Sheet Tab insertBeforeMso=TabHome getVisible=rxtabSheet_getVisible><group id=rxgrp1 label=My Custom Group></group></tab><tab idMso=TabHome label=Modified Home><group id=rxgrp2 insertBeforeMso=GroupClipboard
4、label=My CheckBox> <!- Add a checkBox -><checkBox id=rxchkHideFontGroup getLabel=rxchkHideFontGroup_getLabel onAction=rxchkHideFontGroup_Click screentip=Hide the Font Group supertip=Click here to hide/unhide the Font Group/> <!- Add a checkBox -><checkBox id=rxchkHideTableGro
5、up getLabel=rxchkHideTableGroup_getLabel onAction=rxchkHideTableGroup_Click screentip=Hide the Tables Group supertip=Click here to hide the Tables Groups/></group></tab><tab idMso=TabHome><group idMso=GroupFont getVisible=GroupFont_getVisible/></tab><tab idMso=Tab
6、Insert><group idMso=GroupInsertTablesExcel getVisible=GroupInsertTablesExcel_getVisible/></tab></tabs></ribbon></customUI>上述代码创建了“Modified Home”选项卡,在剪贴板前添加了“My CheckBox”组,并且添加了一个名为“Sheet Tab”的空选项卡,界面如下图所示。接下来,定义属性。在ThisWorkbook对象中定
7、义下列属性:Private pRibbonUI As IRibbonUIPrivate pblnGrpTblVisible As BooleanPrivate pblnGrpFontVisible As Boolean 设置Ribbon对象,使之能够作为ThisWorkbook的成员访问Public Property Let rxIRibbonUI(iRib As IRibbonUI)Set pRibbonUI = iRibEnd Property Public Property Get rxIRibbonUI() As IRibbonUISet rxIRibbonUI = pRibbonUI
8、End Property 设置可见性属性,使之能够作为ThisWorkbook的成员访问Public Property Let rxIRibbonUIGroupTableVisible( _ByVal blnVisible As Boolean)pblnGrpTblVisible = blnVisibleEnd Property Public Property Get rxIRibbonUIGroupTableVisible() As BooleanrxIRibbonUIGroupTableVisible = pblnGrpTblVisibleEnd Property Public Prope
9、rty Let rxIRibbonUIGroupFontVisible( _ByVal blnVisible As Boolean)pblnGrpFontVisible = blnVisibleEnd Property Public Property Get rxIRibbonUIGroupFontVisible() As BooleanrxIRibbonUIGroupFontVisible = pblnGrpFontVisibleEnd Property注意,虽然用于决定可见性的这些变量在ThisWorkbook模块,但由于ThisWorkbook对象可以在本工程的任何地方访问,因此可以在该
10、模块之外设置或获取这些属性的值。在编写回调代码之前,还需要为工作表创建自定义属性,然后使用这些属性来决定与该工作表相关的选项卡是否显示,这里使用工作表Sheet1,当然您可以根据需要修改。使用下列代码为该工作表设置自定义属性:Private pglnTabVisible As Boolean Property Let rxIRibbonUISheetTabVisible(ByVal blnVisible As Boolean)pglnTabVisible = blnVisibleEnd Property Property Get rxIRibbonUISheetTabVisible() As
11、BooleanrxIRibbonUISheetTabVisible = pglnTabVisibleEnd Property Private Sub Worksheet_Activate()Sheet1.rxIRibbonUISheetTabVisible = TrueThisWorkbook.rxIRibbonUI.InvalidateEnd Sub Private Sub Worksheet_Deactivate()Sheet1.rxIRibbonUISheetTabVisible = FalseThisWorkbook.rxIRibbonUI.InvalidateEnd Sub注意,现在
12、可以利用我们为ThisWorkbook创建的自定义属性来使Ribbon无效。我们不再将该属性作为普通的对象,相反我们将其作为属性即ThisWorkbook对象的一个成员。因此,该UI是ThisWorkbook的一部分。最后,编写回调代码:Sub rxIRibbonUI_onLoad(ribbon As IRibbonUI)ThisWorkbook.rxIRibbonUI = ribbonEnd Sub Sub rxtabSheet_getVisible(control As IRibbonControl, ByRef returnedVal)returnedVal = Sheet1.rxIRi
13、bbonUISheetTabVisibleEnd Sub Sub rxchkHideFontGroup_Click(control As IRibbonControl, pressed As Boolean)ThisWorkbook.rxIRibbonUIGroupFontVisible = pressedThisWorkbook.rxIRibbonUI.InvalidateEnd Sub Sub rxchkHideTableGroup_Click(control As IRibbonControl, pressed As Boolean)ThisWorkbook.rxIRibbonUIGro
14、upTableVisible = pressedThisWorkbook.rxIRibbonUI.InvalidateEnd Sub Sub GroupFont_getVisible(control As IRibbonControl, ByRef returnedVal)returnedVal = TrueIf control.ID = GroupFont ThenreturnedVal = Not (ThisWorkbook.rxIRibbonUIGroupFontVisible)ElseThisWorkbook.rxIRibbonUI.InvalidateEnd IfEnd Sub Su
15、b GroupInsertTablesExcel_getVisible(control As IRibbonControl, ByRef returnedVal)returnedVal = TrueIf control.ID = GroupInsertTablesExcel ThenreturnedVal = Not (ThisWorkbook.rxIRibbonUIGroupTableVisible)ElseThisWorkbook.rxIRibbonUI.InvalidateEnd IfEnd Sub Sub rxchkHideFontGroup_getLabel(control As I
16、RibbonControl, ByRef returnedVal)Select Case ThisWorkbook.rxIRibbonUIGroupFontVisibleCase TruereturnedVal = Show Font GroupCase FalsereturnedVal = Hide Font GroupEnd SelectEnd Sub Sub rxchkHideTableGroup_getLabel(control As IRibbonControl, ByRef returnedVal)Select Case ThisWorkbook.rxIRibbonUIGroupTableVisibleCase TruereturnedVal = Show Table GroupCase FalsereturnedVal = Hide Table GroupEnd SelectEnd Sub现在,你可以通过自定义属性来定义与UI对象相关的不同的属性。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1