细品RibbonX(39):技巧—使用VBA自定义功能区元素属性
资料整理来自于论坛
完整版下载地址:http://download.csdn.net/download/nodeman/10264659
Loading ...
除了使用类创建自定义属性外,也可以为许多对象(例如工作簿、工作表,等)创建自定义属性。此外,在给对象定义自定义属性之后,属性作为对象的成员被公开,例如:
ThisWorkbook.MyRibbon
正如所见,从父对象直接引用UI对象非常容易,当引用回Ribbon对象时可以省去很多麻烦。考虑到用户经常同时打开多个应用程序,每个程序都会有一个名为MyRibbon的对象,因此让代码可以清楚地指定引用的确切对象是至关重要的。
设置自定义属性
设置内置对象的自定义属性与使用标准的类模块创建自定义属性相同。唯一不同的是,属性必须驻留在其容器对象里,以便属性能够作为该指定对象的成员公开。
可以使用自定义属性模拟上下文选项卡来容易地访问可视的属性、确定标签值,等等。下面的示例中,我们开发自定义属性来控制可见性。该示例实现下列功能:
本例中,关键属性是getVisible属性,我们将使之变成自定义属性以便通过该属性修改其值。注意,通过这些自定义属性将显示/隐藏位于不同选项卡里的组。
onLoad="rxIRibbonUI_onLoad">
label="Sheet Tab"
insertBeforeMso="TabHome"
getVisible="rxtabSheet_getVisible">
label="My Custom Group">
label="Modified Home">
insertBeforeMso="GroupClipboard"
label="My CheckBox">
getLabel="rxchkHideFontGroup_getLabel"
onAction="rxchkHideFontGroup_Click"
screentip="Hide the FontGroup"
supertip="Click here tohide/unhide the Font Group"/>
getLabel="rxchkHideTableGroup_getLabel"
onAction="rxchkHideTableGroup_Click"
screentip="Hide the TablesGroup"
supertip="Click here to hidethe Tables Groups"/>
getVisible="GroupFont_getVisible"/>
getVisible="GroupInsertTablesExcel_getVisible"/>
上述代码创建了“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对象相关的不同的属性。