控件回调 大多数RibbonX定制可以在设计时定义,并且因此可以直接包括在XML文件中。然而,如果一些属性需要在启动时设置或者可以在运行时改变,则可以使用等价的get属性来提供回调函数的名称。当Excel开启时,调用该函数且该函数提供属性的值。与过去使用的OnAction调用不同,Excel不会自动作于该回调到包含RibbonX定义的工作簿。如果多个工作簿包含带有相同回调名称的过程,则不会保证有哪一个会被调用。 例如,下面是XML文件中最初所包含的代码行,对组标签进行了硬编码: <group id=”rxAuditMisc” label=”Miscellaneous”> 为了使用回调来代替,添加下面的VBA过程到Auditing.xlam工作簿中,以在运行时提供标签。VBA过程的参数必须与RibbonX希望提供的参数相匹配,大多数参数以引用方式传递到RibbonX控件且以ByRef参数为返回值: Sub rxAuditMisc_getLabel(ByRef Control As IRibbonControl, _ ByRef ReturnValue As Variant) ReturnValue = "Miscellaneous-" & Format(Date, "dddd") End Sub 保存该加载项,卸载它,然后使用自定义UI编辑器来改变RibbonX XML以使用getLabel属性,所添加的调用过程为: <group id="rxAuditMisc" getLabel="rxAuditMisc_getLabel"> 如果重新装载该加载项并单击Auditing选项卡,第一组现在应该在名称中包括了星期几(如图3所示)。 图3 (译注:本人在调试此段代码时,总是没有任何反应,最后检查才得知修改后的语句中getlabel的l小写了,实际上应该是大写的L,即getLabel,改正后,才调试通过。这说明,在使用XML时,一定要严格执行大小写) 传递到回调中的Control引用是一个相当简单的对象,仅有三个只读属性且没有方法: (1) id —— 控件的id属性 (2) tag —— 如果定义在XML中,则是控件的tag属性 (3) context —— 没有在Excel中使用 如果为多个控件指定一个普通的回调名称,则id属性可以用于区分控件。例如,在使用多种语言的应用程序中,可以在所有控件的定义中包括getLabel=”rxGetLabel”并从语言查找表中读取合适的文本,以匹配控件的ID: Sub rxGetLabel(ByRef Control As IRibbonControl, _ ByRef ReturnValue As Variant) ReturnValue = Application.WorksheetFunction.VLookup(Control.ID, _ shtLanguages.Range("rngLabels"), glLanguaeID, False) End Sub 除了get等价于所有设计时属性外,下表列出的控件回调仅在运行时可用。 下表列出了所有可用的控件回调函数标记。如果您使用Office 2007自定义UI编辑器,可以为任何包含于XML文件中的回调生成正确的调用标记,并可以粘贴到VBA工程中。
[此贴子已经被作者于2007-3-13 9:11:07编辑过] |