home insert 类似word文档

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



















  • 每个按钮都有其onAction属性,因此如果企图对按钮添加功能则必须处理每个属性:

    单独处理每个属性非常繁锁且难以维护,而一种可供选择的方法昰一次处理多个属性

    我要回帖

     

    随机推荐