细品RibbonX39技巧使用VBA自定义功能区元素属性.docx
《细品RibbonX39技巧使用VBA自定义功能区元素属性.docx》由会员分享,可在线阅读,更多相关《细品RibbonX39技巧使用VBA自定义功能区元素属性.docx(7页珍藏版)》请在冰豆网上搜索。
![细品RibbonX39技巧使用VBA自定义功能区元素属性.docx](https://file1.bdocx.com/fileroot1/2022-12/30/dd427fb9-4419-43a0-ab25-89f393071989/dd427fb9-4419-43a0-ab25-89f3930719891.gif)
细品RibbonX39技巧使用VBA自定义功能区元素属性
细品RibbonX(39):
技巧—使用VBA自定义功能区元素属性
除了使用类创建自定义属性外,也可以为许多对象(例如工作簿、工作表,等)创建自定义属性。
此外,在给对象定义自定义属性之后,属性作为对象的成员被公开,例如:
ThisWorkbook.MyRibbon
正如所见,从父对象直接引用UI对象非常容易,当引用回Ribbon对象时可以省去很多麻烦。
考虑到用户经常同时打开多个应用程序,每个程序都会有一个名为MyRibbon的对象,因此让代码可以清楚地指定引用的确切对象是至关重要的。
设置自定义属性
设置内置对象的自定义属性与使用标准的类模块创建自定义属性相同。
唯一不同的是,属性必须驻留在其容器对象里,以便属性能够作为该指定对象的成员公开。
可以使用自定义属性模拟上下文选项卡来容易地访问可视的属性、确定标签值,等等。
下面的示例中,我们开发自定义属性来控制可见性。
该示例实现下列功能:
显示/隐藏与工作表相关的选项卡的自定义属性
两个复选框,控制两个内置组的可见性(字体和表)
本例中,关键属性是getVisible属性,我们将使之变成自定义属性以便通过该属性修改其值。
注意,通过这些自定义属性将显示/隐藏位于不同选项卡里的组。
<customUIxmlns="
onLoad="rxIRibbonUI_onLoad">
<ribbonstartFromScratch="false">
<tabs>
<tabid="rxtabSheet"
label="SheetTab"
insertBeforeMso="TabHome"
getVisible="rxtabSheet_getVisible">
<groupid="rxgrp1"
label="MyCustomGroup">
</group>
</tab>
<tabidMso="TabHome"
label="ModifiedHome">
<groupid="rxgrp2"
insertBeforeMso="GroupClipboard"
label="MyCheckBox">
<!
--AddacheckBox-->
<checkBoxid="rxchkHideFontGroup"
getLabel="rxchkHideFontGroup_getLabel"
onAction="rxchkHideFontGroup_Click"
screentip="HidetheFontGroup"
supertip="Clickheretohide/unhidetheFontGroup"/>
<!
--AddacheckBox-->
<checkBoxid="rxchkHideTableGroup"
getLabel="rxchkHideTableGroup_getLabel"
onAction="rxchkHideTableGroup_Click"
screentip="HidetheTablesGroup"
supertip="ClickheretohidetheTablesGroups"/>
</group>
</tab>
<tabidMso="TabHome">
<groupidMso="GroupFont"
getVisible="GroupFont_getVisible"/>
</tab>
<tabidMso="TabInsert">
<groupidMso="GroupInsertTablesExcel"
getVisible="GroupInsertTablesExcel_getVisible"/>
</tab>
</tabs>
</ribbon>
</customUI>
上述代码创建了“ModifiedHome”选项卡,在剪贴板前添加了“MyCheckBox”组,并且添加了一个名为“SheetTab”的空选项卡,界面如下图所示。
接下来,定义属性。
在ThisWorkbook对象中定义下列属性:
PrivatepRibbonUIAsIRibbonUI
PrivatepblnGrpTblVisibleAsBoolean
PrivatepblnGrpFontVisibleAsBoolean
'设置Ribbon对象,使之能够作为ThisWorkbook的成员访问
PublicPropertyLetrxIRibbonUI(iRibAsIRibbonUI)
SetpRibbonUI=iRib
EndProperty
PublicPropertyGetrxIRibbonUI()AsIRibbonUI
SetrxIRibbonUI=pRibbonUI
EndProperty
'设置可见性属性,使之能够作为ThisWorkbook的成员访问
PublicPropertyLetrxIRibbonUIGroupTableVisible(_
ByValblnVisibleAsBoolean)
pblnGrpTblVisible=blnVisible
EndProperty
PublicPropertyGetrxIRibbonUIGroupTableVisible()AsBoolean
rxIRibbonUIGroupTableVisible=pblnGrpTblVisible
EndProperty
PublicPropertyLetrxIRibbonUIGroupFontVisible(_
ByValblnVisibleAsBoolean)
pblnGrpFontVisible=blnVisible
EndProperty
PublicPropertyGetrxIRibbonUIGroupFontVisible()AsBoolean
rxIRibbonUIGroupFontVisible=pblnGrpFontVisible
EndProperty
注意,虽然用于决定可见性的这些变量在ThisWorkbook模块,但由于ThisWorkbook对象可以在本工程的任何地方访问,因此可以在该模块之外设置或获取这些属性的值。
在编写回调代码之前,还需要为工作表创建自定义属性,然后使用这些属性来决定与该工作表相关的选项卡是否显示,这里使用工作表Sheet1,当然您可以根据需要修改。
使用下列代码为该工作表设置自定义属性:
PrivatepglnTabVisibleAsBoolean
PropertyLetrxIRibbonUISheetTabVisible(ByValblnVisibleAsBoolean)
pglnTabVisible=blnVisible
EndProperty
PropertyGetrxIRibbonUISheetTabVisible()AsBoolean
rxIRibbonUISheetTabVisible=pglnTabVisible
EndProperty
PrivateSubWorksheet_Activate()
Sheet1.rxIRibbonUISheetTabVisible=True
ThisWorkbook.rxIRibbonUI.Invalidate
EndSub
PrivateSubWorksheet_Deactivate()
Sheet1.rxIRibbonUISheetTabVisible=False
ThisWorkbook.rxIRibbonUI.Invalidate
EndSub
注意,现在可以利用我们为ThisWorkbook创建的自定义属性来使Ribbon无效。
我们不再将该属性作为普通的对象,相反我们将其作为属性即ThisWorkbook对象的一个成员。
因此,该UI是ThisWorkbook的一部分。
最后,编写回调代码:
SubrxIRibbonUI_onLoad(ribbonAsIRibbonUI)
ThisWorkbook.rxIRibbonUI=ribbon
EndSub
SubrxtabSheet_getVisible(controlAsIRibbonControl,ByRefreturnedVal)
returnedVal=Sheet1.rxIRibbonUISheetTabVisible
EndSub
SubrxchkHideFontGroup_Click(controlAsIRibbonControl,pressedAsBoolean)
ThisWorkbook.rxIRibbonUIGroupFontVisible=pressed
ThisWorkbook.rxIRibbonUI.Invalidate
EndSub
SubrxchkHideTableGroup_Click(controlAsIRibbonControl,pressedAsBoolean)
ThisWorkbook.rxIRibbonUIGroupTableVisible=pressed
ThisWorkbook.rxIRibbonUI.Invalidate
EndSub
SubGroupFont_getVisible(controlAsIRibbonControl,ByRefreturnedVal)
returnedVal=True
Ifcontrol.ID="GroupFont"Then
returnedVal=Not(ThisWorkbook.rxIRibbonUIGroupFontVisible)
Else
ThisWorkbook.rxIRibbonUI.Invalidate
EndIf
EndSub
SubGroupInsertTablesExcel_getVisible(controlAsIRibbonControl,ByRefreturnedVal)
returnedVal=True
Ifcontrol.ID="GroupInsertTablesExcel"Then
returnedVal=Not(ThisWorkbook.rxIRibbonUIGroupTableVisible)
Else
ThisWorkbook.rxIRibbonUI.Invalidate
EndIf
EndSub
SubrxchkHideFontGroup_getLabel(controlAsIRibbonControl,ByRefreturnedVal)
SelectCaseThisWorkbook.rxIRibbonUIGroupFontVisible
CaseTrue
returnedVal="ShowFontGroup"
CaseFalse
returnedVal="HideFontGroup"
EndSelect
EndSub
SubrxchkHideTableGroup_getLabel(controlAsIRibbonControl,ByRefreturnedVal)
SelectCaseThisWorkbook.rxIRibbonUIGroupTableVisible
CaseTrue
returnedVal="ShowTableGroup"
CaseFalse
returnedVal="HideTableGroup"
EndSelect
EndSub
现在,你可以通过自定义属性来定义与UI对象相关的不同的属性。