VBA专题10-22:使用VBA操控Excel界面之重新利用内置控件以及监控内置控件

2021-03-26 17:06:02 浏览数 (1)

学习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社群下载这本书的完整中文版电子书。

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

0 人点赞