学习Excel技术,关注微信公众号:
excelperfect
重新利用内置控件
通过使用command元素及其onAction属性,可以临时或永久地覆盖内置控件的功能。
例如,下面的示例XML代码重新利用了“剪切”和“加粗”控件:
在标准VBA模块中编辑回调过程,永久地重新利用“剪切”控件的功能:
代码语言:javascript复制'Callback for Cut onAction
Sub MyCut(control As IRibbonControl, ByRef cancelDefault)
MsgBox "剪切按钮已经被永久地重新利用."
End Sub
单击已被重新利用的“剪切”控件,执行MyCut过程。
然而,如果用户不单击控件或者使用合适的Alt 键来触发控件(本例中,Alt H X触发剪切控件),被重新利用的控件不会总是按意图工作。例如,仍然可以通过使用Ctrl X键组合来访问剪切功能。
也可以临时覆盖内置控件的功能,并通过简单地设置回调过程中的参数cancelDefault为False来重新恢复其功能。例如,下面的回调过程在显示用户一条信息后重新恢复加粗控件的功能:
代码语言:javascript复制'Callback for Bold onAction
Sub MyBold(control As IRibbonControl, pressed As Boolean, ByRef cancelDefault)
MsgBox "加粗按钮被临时重新利用."& Chr(10) & _
"单击确定重新恢复其正常功能."
cancelDefault = False
End Sub
注意,“加粗”控件是一个切换按钮,其onAction属性的回调必须带有上面所示的3个参数。然而,在Custom UI Editor for Microsoft Office中产生的回调签名的参数数量错误,如下:
'Callback for Bold onAction(wrong number of arguments)
Sub MyBold(control AsIRibbonControl, ByRef cancelDefault)
End Sub
本文示例的效果展示如下图所示:
监控内置控件
重新利用内置控件可用于监控该控件。有时,在单击特定的内置控件时,可能想采取必要的操作。例如,如果被打印的页数超过100,那就中断打印。
或者,最好通过Workbook_BeforePrint事件处理来中断打印,如下面的代码:
代码语言:javascript复制Private Sub Workbook_BeforePrint(Cancel As Boolean)
If ActiveSheet.PageSetup.Pages.Count >100 Then
If MsgBox("要打印"& ActiveSheet.PageSetup.Pages.Count & _
"页!",vbYesNo) = vbNo Then
Cancel = True '中断打印
End If
End If
'默认情况下,Cancel=False,i.e.:continue to print
End Sub
说明:本专题系列大部分内容学习整理自《Dissectand Learn Excel VBA in 24 Hours:Changingworkbook appearance》,仅供学习研究。注:如果你有兴趣,你可以到知识星球App的完美Excel社群下载这本书的完整中文版电子书。
欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。