excelperfect 重新利用内置控件 通过使用command元素及其onAction属性,可以临时或永久地覆盖内置控件的功能。 例如,下面的示例XML代码重新利用了“剪切”和“加粗”控件: 在标准VBA模块中编辑回调过程,永久地重新利用“剪切”控件的功能: 'Callback for Cut onAction Sub 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 print End Sub 说明:本专题系列大部分内容学习整理自《Dissectand Learn Excel VBA in 24 Hours:Changingworkbook appearance》,仅供学习研究。注:如果你有兴趣,你可以到知识星球App的完美Excel社群下载这本书的完整中文版电子书。 |
|
来自: hercules028 > 《VBA》