分享

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

 hercules028 2021-03-15

excelperfect

重新利用内置控件

通过使用command元素及其onAction属性,可以临时或永久地覆盖内置控件的功能。

例如,下面的示例XML代码重新利用了“剪切”和“加粗”控件:

图片

在标准VBA模块中编辑回调过程,永久地重新利用“剪切”控件的功能:

'Callback for Cut onActionSub MyCut(control As IRibbonControl, ByRef cancelDefault) MsgBox '剪切按钮已经被永久地重新利用.'End Sub

单击已被重新利用的“剪切”控件,执行MyCut过程。

然而,如果用户不单击控件或者使用合适的Alt+键来触发控件(本例中,Alt+H+X触发剪切控件),被重新利用的控件不会总是按意图工作。例如,仍然可以通过使用Ctrl+X键组合来访问剪切功能。

也可以临时覆盖内置控件的功能,并通过简单地设置回调过程中的参数cancelDefault为False来重新恢复其功能。例如,下面的回调过程在显示用户一条信息后重新恢复加粗控件的功能:

'Callback for Bold onActionSub MyBold(control As IRibbonControl, pressed As Boolean, ByRef cancelDefault)    MsgBox '加粗按钮被临时重新利用.'& Chr(10) & _        '单击确定重新恢复其正常功能.'    cancelDefault = FalseEnd 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事件处理来中断打印,如下面的代码:

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 printEnd Sub

说明:本专题系列大部分内容学习整理自《Dissectand Learn Excel VBA in 24 Hours:Changingworkbook appearance》,仅供学习研究。注:如果你有兴趣,你可以到知识星球App的完美Excel社群下载这本书的完整中文版电子书。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多