通过此演练,可以用 vb 创建 com 加载项。com 加载项可以在不给用户增加复杂性的情况下扩展应用程序的功能。究其实质,com 加载项是一个动态链接库 (dll),需要进行注册才能供 microsoft® office xp 应用程序加载和使用。虽然可以将加载项编写成可执行文件 (.exe),但 dll 通常会比 .exe 文件提供更好的性能。
此演练将使用 vb 创建并运行一个自定义工具栏 com 加载项。本主题中的任务假定您熟悉 office 应用程序、vb 工程,以及调试和运行代码。
引言
创建 com 加载项时可以使用任何支持 com 的语言,如 vba、visual basic 和 microsoft® visual c++®。用 office developer 创建的加载项将自动打包成 dll,并由宿主应用程序注册后进行加载。可以创建一个加载项但能用于多个应用程序中。有关详细信息。请参阅为多个应用程序创建 com 加载项。
此演练将完成一系列步骤,从而用 vb 创建一个 com 加载项。创建 com 加载项的基本步骤包括:
1.配置外接程序设计器。
2.在外接程序设计器中编写代码。
3.将命令条控件集成到加载项中。
4.对 com 加载项进行调试和测试。
5.为 com 加载项生成 dll。
6.解决 com 加载项的开发问题。
配置外接程序设计器
用外接程序设计器创建的工程为开发加载项提供工作区域。使用外接程序设计器可以创建用于 vba 或任何 office 应用程序的 com 加载项。工程中的每个外接程序设计器都表示一个单独的、只能在一种 office 应用程序中运行的加载项。创建的 dll 可包含多个加载项,它们使用相同的窗体、模块和类模块,但面向的却是不同的应用程序。此演练使用 excel 作为宿主 office 应用程序。
如果希望加载项可供多个应用程序使用,就必须为每个宿主应用程序各自添加一个外接程序设计器。可以通过模块共享代码;但在每个工程中,必须引用每个宿主应用程序所特定的对象模型。
配置外接程序设计器
1.打开 vb
2.在“文件”菜单中,选择“新建工程”,然后选择“外接程序”。
3.把窗体移除,双击设计器中的connect.
3.在“外接程序显示名称”文本框中键入名称 greeting toolbar,在“外接程序描述”文本框中键入说明 toolbar add-in that launches a hello world message in excel。
4.从“应用程序”列表中选择 microsoft excel。
5.从“应用程序版本”列表中选择 microsoft excel 10.0。
6.从“初始化加载行为”列表中选择 "startup"。有关各种不同类型初始加载行为的详细信息,请参阅指定加载行为。
此主题相关图片如下:
7.在“工程”菜单中,选择“引用”,确保让工程引用下列类型库。(该引用列表是此演练所必需的。对于您的加载项,要确保选择每个可以使用加载项的 office 应用程序所需的类型库。)
●visual basic for applications
●ole automation
●microsoft add-in designer
●microsoft office 10.0 object library
●microsoft excel 10.0 object library
9.在“文件”菜单中选择“保存 connect”。
10.在“工程另存为”对话框中,输入名称 greetings.dsr,选择要将其保存到的文件夹,然后单击“保存”。
在外接程序设计器中编写代码
在创建工程并为外接程序设计器赋值后,可以添加代码将加载项与宿主应用程序连接起来。此演练将向您展示将加载项与宿主应用程序连接起来所需的典型过程和事件。idtextensibility2 接口提供连接这二者所需的 com 对象和事件。然后,加载项可以使用宿主应用程序所展示的对象模型与宿主应用程序接合。可以在对象浏览器中查看特定应用程序的对象模型。
外接程序设计器中的代码可处理加载项与宿主应用程序的集成。例如,加载或卸载加载项时运行的代码驻留在“外接程序设计器”的模块中。如果加载项中包含窗体,则外接程序设计器还可以包含用于显示窗体的代码。
声明变量和设置过程存根
1.在“工程资源管理器”窗口中,选择 connect,然后打开“视图”菜单,单击“代码”。清除原来有的代码.
2.在“通用声明”部分,引用可扩展性接口。
implements idtextensibility2
3.添加用于在加载项和宿主之间提供通讯的模块级变量。只要加载了 com 加载项,赋值为 as excel.application 的变量就一直存在,因此,所有过程都可以确定加载项当前正在哪个应用程序中运行。因为 withevents 关键字指派给 cbbbutton 变量,所以菜单项的 click 事件过程将在用户单击新菜单项时触发。
'global object references
public apphostapp as excel.application
private withevents cbbbutton as office.commandbarbutton
4.在“代码”窗口中,从“对象”列表中选择 idtextensibility2,从“事件”列表中选择 onconnection。这将创建 onconnection 事件过程存根。
注意 您必须使由 idtextensibility2 界面提供的每个事件中都包括事件过程存根。如果您删除了任何事件过程,工程就无法编译。
5.为下列每个事件添加事件过程存根:
●ondisconnection
●onstartupcomplete
●onbeginshutdown
●onaddinsupdate
现在就可以为您的加载项添加功能了。
将命令条控件集成到加载项中
如果您的 com 加载项有一个用户界面,就可以添加用于显示命令条的代码,以方便用户运行您的加载项。此演练将显示如何在宿主应用程序中包含用于创建新命令条控件(工具栏按钮或菜单项)的代码。加载您的加载项时,会同时加载控件,用户可以通过单击按钮或菜单项打开并使用加载项。
创建命令条控件
1.查找 onconnection 事件过程。在 private sub 和 end sub 行之间,添加代码以创建新的命令条控件并将其指派给支持事件的 commandbarbutton 对象变量。整个过程将显示如下:
private sub idtextensibility2_onconnection(byval _
application as object, byval connectmode as _
addindesignerobjects.ext_connectmode, byval addininst _
as object, custom() as variant)
' 存储启动引用
set apphostapp = application
' 添加命令条