细品RibbonX(15):回调(CallBacks)

本文详细介绍了RibbonX中回调的概念及其重要性,回调使得自定义的Excel功能区界面能够正常工作。回调是VBA代码中的子过程和函数,用于处理用户交互。文章讲解了如何通过XML指定回调,并在VBA中编写相应代码进行处理。同时,还探讨了如何使用工具如Office 2007 CustomUI Editor自动生成回调签名,以及如何处理回调签名的灵活性。最后,讨论了如何组织回调,包括单个回调处理和全局回调处理的方式,以及如何使Ribbon或单个控件无效以实现界面更新。
摘要由CSDN通过智能技术生成

回调,即使自定义界面能够工作的代码。如果没有回调,那么自定义界面可能看起来漂亮,但只是一个漂亮的功能区。当然,除内置控件不需要自定义回调外。

下面的内容介绍如何使用回调来提供自定义控件所需的功能。在编写XML代码时,需要指定回调,然后在Excel中编写VBA代码来匹配和处理回调。

回调概要

回调是自定义的用户界面使用的子过程和函数,使自定义的用户界面能够工作。回调简单地表现为所提供的指令的动向。例如,当设置某按钮的onAction属性并装载用户界面时,一旦单击该按钮,就产生回调,即在属性中指定的操作。

如果没有找到指定的操作,那么回调将失败,因为代码中发生了例外,即在属性中指定的回调在VBA中不存在,因此失败了。

自定义用户界面一装载就会调用VBA工程,搜寻指定的函数或过程。如果找到,则将其值传回到用户界面。如果没有找到指定的函数或过程,那么将产生错误的结果。

有两种主要的方式来创建回调:

n         直接在VBE的标准模块中输入过程或函数

n         使用工具生成过程,例如Office 2007 CustomUI Editor

使用诸如Office 2007 CustomUI Editor这类工具的主要优势是能够扫视XML代码并返回回调签名,也称作subprocedure stubXML代码中每个属性都有一个需要处理的回调。接受回调作为值的属性包括onActiongetVisiblegetImage

除了节省时间外,使用CustomUI Editor还能避免由于手工编写回调签名而导致的拼写错误。上述每个属性都会产生一个不同的回调签名,必须按顺序使用代码处理,使用户界面有合适的功能。

此外,当工程装载时需要访问某些回调并运行,这意味着如果回调处理(即响应回调的VBA代码)在该工程中不存在,将产生错误消息。当然,下面的内容也会介绍如何缓解这类错误,甚至如何避免错误。

为动态回调建立文件

为了使自定义控件工作,文件必须启用宏,否则不能够添加或运行VBA代码。

1、捕获IRibbonUI对象

IRibbonUI对象引用功能区用户界面,用于控制事物如何响应。

VBA中使用的关键之一是使整个Ribbon对象无效(因而能够改变功能区的某项特征)或者使功能区中指定的控件无效(因而能够改变该控件的某项特征)。

1)调整XML以包括onLoad

为了使用IRibbonUI对象,需要在VBA中对其设置。首先,需要对UIonLoad属性指定值,这能通过为onLoad属性指定回调来实现:

<customUI xmlns=http://schemas.microsoft.com/office/2006/01/customui onLoad=rxIRibbonUI_onLoad>

因为onLoad属性的值是一个回调,所以需要在VBA代码中对其进行处理。接着,能够在工程中使用IRibbonUI对象。

2)创建VBA代码处理onLoad事件

可能会注意到,前面将onLoad称作为属性,但现在将其称为事件。这是因为在XML文件中,能为许多属性定义值,例如onActiongetLabelonLoad。一旦为某属性赋值,如果能以某种方式触发,将导致事件发生。这就是属性和事件的区别。

因为IRibbonUI对象用于整个应用程序,所以需要在标准模块的全局声明部分对其声明,如下面的代码所示。

全局的ribbon对象

Dim grxIRibbonUI As IRibbonUI

这里使用标准的格式grxIRibbonUI引用IRibbonUI对象,接着添加回调来设置该对象:

Sub rxIRibbonUI_onLoad(ribbon As IRibbonUI)

    Set grxIRibbonUI = ribbon

End Sub

设置为全局对象之后,该对象可用于整个工程。然而,Ribbon对象对于修改是非常敏感的。这意味着任何时候修改代码,该对象实例将丢失并且任何需要Ribbon对象的操作都将失败。因此,无论何时作出修改,都需要保存、关闭并重新打开工程。

生成第一个回调

知道需要获得回调签名后,还需要知道如何使用回调签名。例如,对于切换按钮(toggleButton)有下列签名:

Sub rxtgl_click(control as IRibbonControl,pressed as boolean)

一个普通按钮的签名如下:

Sub rxbtn_click(control as IRibbonControl)

1、从头开始编写回调

如果知道了回调签名,则不必使用标准的形式声明参数。例如,有一个使用下列XML的切换按钮:

<toggleButton

id=”rxtgl”

label=”Toggle”

size=”large”

onAction=”rxtgl_click”

imageMso=”FormatPainter”/>

编写rxtgl_click回调如下:

Sub rxtgl_click(rxctl As IRibbonControl,toggled As Boolean)

If toggled Then

    MsgBox “我已切换 我的ID “ & rxctl.ID,vbInformation

End If

End Sub

注意到回调的参数名与上面介绍的标准的参数名不一样,但是单击切换按钮时仍触发该回调,像平常一样传递参数,因此签名中的修改不会导致过程失败,只要使用了正确类型的正确参数。

也能修改onLoad回调签名来满足需要,如下所示:

Sub rxIRibbonUI_onLoad(MyRibbon As IRibbonUI)

Set grxIRibbonUI=MyRibbon

End Sub

然而,如果使用标准的签名及其参数名称,那么其他人将更容易理解代码。下面列出了一些回调签名。

属性onLoad,回调签名(ribbon as IRibbonUI)

属性getLabel,getPressed,getEnabled,getImage,getScreentip,getVisible,等,回调签名(control as IRibbonControl,ByRef returnedVal)

属性onAction(切换按钮),回调签名(control as IRibbonControl,pressed as Boolean)

属性onAction(按钮),回调签名(control as IRibbonControl)

2、使用Office CustomUI Editor生成回调

一种很容易生成回调的方法是使用CustomUI Editor。这个工具将所有的返回回调的属性搜寻在一起,然后生成需要的回调。因此,无须追踪XML中所有的回调。对于大段的XML代码来说,这是无价的。

CustomUI Editor中(以Excel为例),可以使用下列步骤自动生成必需的回调:

步骤1 使用CustomUI Editor打开包含XML代码的Excel

步骤2 单击“Generate Callbacks

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值