使用VB6编写COM加载项.docx
《使用VB6编写COM加载项.docx》由会员分享,可在线阅读,更多相关《使用VB6编写COM加载项.docx(15页珍藏版)》请在冰豆网上搜索。
![使用VB6编写COM加载项.docx](https://file1.bdocx.com/fileroot1/2023-2/3/d65eb299-00e5-4e5b-81b9-6a1792776177/d65eb299-00e5-4e5b-81b9-6a17927761771.gif)
使用VB6编写COM加载项
使用VB6编写COM加载项
一个简单的COM加载项示例
步骤1:
启动VB6,在“新建工程”对话框中选择“外接程序”,单击“打开”按钮,如下图。
VB6将自动创建一个名为MyAddIn的工程,包含一个名为frmAddIn的窗体和一个名为Connect的Designer类变量。
步骤2:
将工程名称修改为MyFirstCOMAddIn。
步骤3:
删除默认的窗体frmAddIn。
步骤4:
删除Connect中的全部代码。
步骤5:
在工程资源管理器窗口双击Connect打开加载项设计器窗口,并对其进行相应的设置,如下图所示。
如上图所示,在“通用”选项卡中设置COM加载项在Excel的COM加载项对话框中显示的名称及相应的描述。
设置“应用程序”为MicrosoftExcel,根据用户计算机上安装的Excel选择相应的应用程序版本,这里选择“MicrosoftExcel14.0”,即Excel2010。
选择初始化加载行为为“Startup”,即在Excel启动时运行该加载项,还可以选择其它的加载选项。
说明:
外接程序显示名称:
填写加载项的名字
外接程序描述:
描述所创建的加载项的作用和功能
应用程序:
使用所创建的加载项的应用程序。
应用程序版本:
使用所创建的加载项的应用程序的版本。
初始化加载行为:
当应用程序开启时,是否自动装载该加载项,有四个选项。
若设置为Startup,则Excel启动时装载该加载项;若设置为Loadondemand,则在Excel中需要使用该加载项时再装载该加载项。
步骤6:
在工程资源管理器窗口的Connect中单击右键,选择“查看代码”,打开代码窗口。
步骤7:
在代码窗口顶部左侧的对象列表框中选择AddinInstance对象,在右侧的事件列表框中选择OnConnection事件,输入的代码如下:
PrivateSubAddinInstance_OnConnection(ByValApplicationAsObject,_
ByValConnectModeAsAddInDesignerObjects.ext_ConnectMode,_
ByValAddInInstAsObject,custom()AsVariant)
MsgBox"这是使用VB6创建的COM加载项."
EndSub
然后,再在事件列表框中选择OnDisconnection事件,输入的代码如下:
PrivateSubAddinInstance_OnDisconnection(ByValRemoveModeAsAddInDesignerObjects.ext_DisconnectMode,_
custom()AsVariant)
MsgBox"Excel工作簿将要关闭,里面的数据已经保存了吗?
"
EndSub
步骤8:
保存所有的工程文件。
步骤9:
单击菜单“文件——生成MyFirstCOMAddIn.dll”。
至此,这个简单的COM加载项编写完成。
步骤10:
打开Excel2010,将会出现一个消息框,显示在COM加载项的OnConnection事件中设置的消息,如下图所示。
关闭Excel2010时,将会出现一个消息框,显示在COM加载项的OnDisconnection事件中设置的消息,如下图所示。
这个加载项之所以会在Excel2010会话开启时运行,是因为我们在设置加载项时选择了选项“Startup”,即在Excel启动时加载该加载项。
单击“开发工具”选项卡“加载项”组中的“COM加载项”,显示“COM加载项”对话框,列出了所有可用的COM加载项,如下图所示。
在该对话框中,可以取消某加载项前的复选,使其不可用,或者通过“删除”按钮删除该加载项。
一个菜单COM加载项示例
步骤1:
启动VB6,在“新建工程”中选择“外接程序”,打开新工程。
步骤2:
在工程资源管理器中将会有一个名为frmAddIn的窗体和一个名为Connect的设计器对象,如下图所示。
移除工程资源管理器窗口中的frmAddIn窗体,设置Connect设计器对象。
步骤3:
双击设计器对象,出现一个设计器窗体,对其进行设置,如下图所示。
步骤4:
添加对Excel的引用。
选择菜单“工程——引用”,在“引用”对话框中选择“MicrosoftExcel14.0ObjectLibrary”前的复选框。
步骤5:
设置工程属性。
选择菜单“工程——MyAddIn属性”,或在工程资源管理器中单击右键,选择“MyAddIn属性”命令,在“工程属性”对话框中设置工程名称和工程描述。
步骤6:
编写Connect设计器代码。
在Connect设计器对象上右击并选择“查看代码”或者单击Connect设计器后再单击窗口顶部的“查看代码”按钮,出现VB自动生成的代码。
删除其中的代码,只保留OnConnection过程和OnDisconnection过程,用于在应用程序中装载和卸载加载项,并在其中添加自已需要实现的功能的代码。
在本示例中,Connect设计器中的代码如下:
'------------------------------------------------------
'thismethodaddstheAdd-IntoVB
'------------------------------------------------------
PrivateSubAddinInstance_OnConnection(ByValApplicationAsObject,_
ByValConnectModeAsAddInDesignerObjects.ext_ConnectMode,_
ByValAddInInstAsObject,custom()AsVariant)
'设置应用程序变量
SetxlApp=Application
'设置自定义菜单子程序
CreateToolBarButtons
EndSub
'------------------------------------------------------
'thismethodremovestheAdd-InfromVB
'------------------------------------------------------
PrivateSubAddinInstance_OnDisconnection(ByValRemoveModeAsAddInDesignerObjects.ext_DisconnectMode,_
custom()AsVariant)
'释放占用的存
SetxlApp=Nothing
'移除自定义的菜单子程序
RemoveToolBarButtons
EndSub
步骤7:
选择菜单“工程——添加模块”命令,添加一个标准的模块并添加相应的代码。
'声明变量、类实例和集合
PublicxlAppAsExcel.Application
DimButtonEventAscbEvents
DimButtonEventsAsCollection
'定义自已菜单的子程序
PublicSubCreateToolBarButtons()
'为了确保只添加按钮一次,先移除它们
RemoveToolBarButtons
'声明变量
DimcbBarAsOffice.CommandBar
DimbtNewAsOffice.CommandBarButton
'创建一个新的集合
SetButtonEvents=NewCollection
'查找工作表菜单栏(带有文件、编辑、视图等命令)
SetcbBar=xlApp.CommandBars("WorksheetMenuBar")
'添加一个新按钮到工具栏菜单
SetbtNew=cbBar.FindControl(Id:
=30007).Controls.Add(msoControlButton,,,,True)
WithbtNew
.OnAction="Sub1"
'设置一个唯一的标签,使自定义的控件在后面容易找到或删除
.Tag="COMAddinTest"
'设置提示文本
.ToolTipText="CallsSub1"
'设置显示在菜单中的标题
.Caption="Sub1"
EndWith
'获取cbevents类中的一个新实例
SetButtonEvent=NewcbEvents
'将之指定给所创建的按钮
SetButtonEvent.cbBtn=btNew
ButtonEvents.AddButtonEvent
'添加另一个按钮
SetbtNew=cbBar.FindControl(Id:
=30007).Controls.Add(msoControlButton,,,,True)
WithbtNew
.OnAction="Sub2"
'设置一个唯一的标签,使自定义的控件在后面容易找到或删除
.Tag="COMAddinTest"
'设置提示文本
.ToolTipText="CallsSub2"
'设置显示在菜单中的标题
.Caption="Sub2"
EndWith
'获取cbevents类中的一个新实例
SetButtonEvent=NewcbEvents
'将之指定给所创建的按钮
SetButtonEvent.cbBtn=btNew
ButtonEvents.AddButtonEvent
EndSub
'删除自定义菜单的子程序
PublicSubRemoveToolBarButtons()
DimcbBarAsCommandBar
DimcbCtrAsCommandBarControl
'忽略错误
OnErrorResumeNext
'需要从命令中移除按钮,首先找到该按钮
SetcbBar=xlApp.CommandBars("WorksheetMenuBar")
'使用所设置的标签查找控件
SetcbCtr=cbBar.FindControl(,,"COMAddinTest")
WhileNotcbCtrIsNothing
'删除
cbCtr.Delete
SetcbCtr=cbBar.FindControl(,,"COMAddinTest")
Wend
'恢复占用的存
SetButtonEvents=Nothing
SetButtonEvent=Nothing
EndSub
'示例子过程
SubSub1()
MsgBox"Hello!
"
EndSub
'示例子过程
SubSub2()
MsgBox"Hi!
"
EndSub
步骤8:
创建类模块处理菜单栏事件。
选择菜单“工程——添加类模块”,将其命名为cbEvents,添加代码:
PublicWithEventscbBtnAsCommandBarButton
PrivateSubcbBtn_Click(ByValCtrlAsOffice.CommandBarButton,CancelDefaultAsBoolean)
'忽略产生的任何错误
OnErrorResumeNext
'检查OnAction属性并执行相应的程序
SelectCaseCtrl.OnAction
Case"Sub1"
Sub1
Case"Sub2"
Sub2
EndSelect
'查找指定给OnAction属性的程序删除Excel
CancelDefault=True
EndSub
步骤9:
生成dll文件。
选择“文件——生成MyAddIn.dll”。
步骤10:
安装ExcelCOM加载项。
(1)注册Dll
Dll文件需要注册到Windows中以便能够运行。
如果是在VB6中生成的Dll文件,将在所创建该加载项的计算机中自动注册。
也可以手工注册。
点击屏幕左下角的“开始”按钮,选择“所有程序——附件——运行”,在出现的“运行”对话框中输入“regsvr32.exe
”。
若要移除或删除dll,先要注销它,即在“运行”对话框中使用regsvr32.exe命令并附加/u参数实现。
(2)在Excel中安装加载项
在VB6中创建该加载项时,在设计器中设置初始化加载行为时选择“Startup”,则在装载Excel时,会自动装载加载项并运行。
如果没有选择“Startup”,则需要手动装载。
单击“开发工具”选项卡“加载项”组中的“COM加载项”,在“COM加载项”对话框中,选取或取消选取所需加载项前的复选框来装载和卸载加载项。
加载上述加载项后,Excel的“加载项”选项卡如下图所示。
Excel2007中的COM加载项
下面的容介绍了Excel2007中COM加载项的一些改变。
(1)介绍
Excel很好地做了一些涉及到向后兼容的工作。
在Excel2000、ExcelXP(2002)或Excel2003中创建的COM加载项(CAI)不需要修改就应该能在Excel2007中正常运行。
然而,在开发应用于不同的Excel版本中的CAIs时,应该记住一些事项。
(2)菜单和命令栏
Excel2007修改了传统的界面,使用功能区(Ribbon)界面替换了菜单和命令栏控制结构。
根据选择可以采用不同的面板组(面板是一组具有相关功能的按钮,在下图1中,选择“开始”,将显示7个面板组:
剪贴板、字体、对齐方式、数字、样式、单元格、编辑,在开发阶段,面板(panels)称作chunks,不知道这些对象现在是否有正式的名称)。
如果选择“开始”,将看到一组面板;如果单击“插入”,则会出现另一组面板。
这对CAI开发意味着什么呢?
意味着创建命令栏、命令栏控件或菜单项的CAI中的任何代码都不再按预料的工作。
仅仅可以通过Excel2007文件格式(xlsx或xlsm)里的Excel文件来定制功能区,在Excel2007文件格式中包含必需的XML代码用于修改功能区。
(一个Excel2007的xlsx或xlsm文件事实上是包含大约20个文本XML数据文件的Zip文件,其中一个文件用于修改功能区。
)Excel2003文件格式(xls)、XLA加载宏、COM加载项都不能修改功能区。
所有的定制,无论是在Excel2003中已有的命令栏中的新菜单项、控件,还是新的命令栏,都将显示在功能区“加载项”中的菜单命令或自定义工具栏命令面板组中。
这将混淆各加载项的命令元素。
下图为功能区“加载项”视图:
在Excel2003和以前的版本中,可能会放置一些菜单项在“工具”菜单中、其它的在“视图”菜单中、以及“数据”菜单中,可能放置菜单项和命令栏按钮在合乎逻辑的位置。
在Excel2007中,所有的定制都被放置在加载项视图中的“菜单命令”和“工具栏命令”面板组中。
(3)加载项
关于COM加载项的联接信息,为Excel指出了可用的CAI,它们存放在系统注册表的两个位置中的其中一个:
HKEY_CURRENT_USER\Software\Microsoft\Office\Excel\AddIns(HKCU)或
HKEY_LOCAL_MACHINE\Software\Microsoft\Office\Excel\AddIns(HKLM)。
在Excel2003和早期版本中,仅仅配置在HKCU中的CAIs显示在COM加载项对话框中,这避免某用户禁用在本机上为所有用户使用的CAI。
在Excel2003和早期版本中,用户仅能装载或卸载配置在HKCU中的CAIs,不能够装载或卸载配置在HKLM中的CAI。
在Excel2007中,所有的加载项都配置在
HKEY_CURRENT_USER\Software\Microsoft\Office\Excel\AddIns
或
HKEY_LOCAL_MACHINE\Software\Microsoft\Office\Excel\AddIns
在COM加载项对话框中是可见的,这意味着单个的用户可以禁用或卸载本机上所有用户使用的CAIs。