1、使用 VB6 创建 COM 加载宏摘要:本文通过示例详细描述了如何使用 VB6 创建 COM 加载宏的过程,以及如何在 Excel 中加载和使用。创建一个 COM 加载宏的步骤1、打开 VB6 应用程序,在“新建工程 ”中选择“外接程序” ,打开新工程。2、在右侧工程资源管理器窗口中将会有一个名为 frmAddin 的窗体和一个名为 Connect 的设计器对象。移除 frmAddin 窗体,然后对 Connect 设计器对象进行设置。双击设计器对象,出现一个设计器窗体,窗体中有如下字段及相应的文本框: 外接程序显示名称 填写加载宏的名字。 外接程序描述 描述你所创建的加载宏的作用和功能。 应
2、用程序 使用你所创建的加载宏的应用程序。在这里,选择 Microsoft Excel。 应用程序版本 使用你所创建的加载宏的应用程序版本。当在应用程序文本框中选择了 Microsoft Excel 后,该文本框自动出现 Microsoft Excel 11.0。 初始化加载行为 当应用程序开启时,是否自动装载该加载宏,有四个选项。若设置这为 Startup,那么当 Excel 开始时将装载该加载宏;若设置为 Load on demand,则在 Excel 中需要时再装载该加载宏。3、添加对 Excel 的引用。选择菜单 “工程 引用”命令,在出现的“引用”对话框中选中 Microsoft Ex
3、cel 11.0 Object Liabrary 前的复选框。4、设置工程属性。选择菜单“ 工程MyAddIn 属性” 命令,或在工程资源管理器窗口中击右键选择“MyAddIn 属性”命令,在出现的工程属性对话框中设置工程名称和工程描述。5、编辑 Connect 设计器代码。在 Connect 设计器对象上右击并选择“查看代码”或者点选 Connect 设计器后单击窗口顶部的“查看代码”按钮,将出现 VB 自动生成的代码。删除其中的代码,只保留 OnConnection 过程和 OnDisconnection 过程,用于在应用程序中装载和卸载加载宏,并在其中添加自已实现加载宏功能所需要的代码。
4、在本示例中,Connect 设计器中的最终代码如下:*Option ExplicitPrivate Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)设置应用程序变量Set xlApp = Application设置自已的菜单的子程序CreateToolbarButtonsEnd SubPrivate Sub Add
5、inInstance_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)释放占用的内存Set xlApp = Nothing移除自已的菜单的子程序RemoveToolbarButtonsEnd Sub*6、选择菜单“工程 添加模块” 命令,添加一个标准的模块并添加相应的代码。在本示例中,该标准模块的代码如下:*声明变量、类实例和集合Public xlApp As Excel.ApplicationDim ButtonEvent As cbEventsD
6、im ButtonEvents As Collection定义自已菜单的子程序Public Sub CreateToolbarButtons()为了确保只添加按钮一次,先移除它们RemoveToolbarButtons声明变量Dim cbBar As Office.CommandBarDim btNew As Office.CommandBarButton创建一个新的集合Set ButtonEvents = New Collection查找 excel 中的工作表菜单栏(带有文件,编辑、视图等命令)Set cbBar = xlApp.CommandBars(“Worksheet Menu Ba
7、r“)添加一个新按钮到工具菜单Set btNew = cbBar.FindControl(Id:=30007).Controls.Add(msoControlButton, , , , True)With btNew.OnAction = “Sub1“设置一个唯一的标签,使我们自定义控件在后面容易找到或删除.Tag = “COMAddinTest“设置提示文本.ToolTipText = “Calls Sub1“设置显示在菜单中的标题.Caption = “Sub1“End With获取 cbevents 类中的一个新实例Set ButtonEvent = New cbEvents将它指定给我
8、们所创建的按钮Set ButtonEvent.cbBtn = btNewButtonEvents.Add ButtonEvent添加另一个按钮Set btNew = cbBar.FindControl(Id:=30007).Controls.Add(msoControlButton, , , , True)With btNew.OnAction = “Sub2“设置一个唯一的标签,使我们自定义控件在后面容易找到或删除.Tag = “COMAddinTest“设置提示文本.ToolTipText = “Calls Sub2“设置显示在菜单中的标题.Caption = “Sub2“End With
9、获取 cbevents 类中的一个新实例Set ButtonEvent = New cbEvents将它指定给我们所创建的按钮Set ButtonEvent.cbBtn = btNewButtonEvents.Add ButtonEventEnd Sub删除自已定义的菜单的子程序Public Sub RemoveToolbarButtons()Dim cbBar As CommandBarDim cbCtr As CommandBarControl忽略错误On Error Resume Next需要从命令条中移除按钮首先找到该按钮Set cbBar = xlApp.CommandBars(“W
10、orksheet Menu Bar“)运用我们所设置的标签查找控件Set cbCtr = cbBar.FindControl(, , “COMAddinTest“)While Not cbCtr Is Nothing删除cbCtr.DeleteSet cbCtr = cbBar.FindControl(, , “COMAddinTest“)Wend恢复占用的内存Set ButtonEvents = NothingSet ButtonEvent = NothingEnd Sub示例子过程Sub sub1()MsgBox “Hello!“End Sub示例子过程Sub sub2()MsgBox “
11、Hi!“End Sub*7、创建一个类模块来处理菜单栏事件。选择菜单“ 工程添加类模块” ,并命名为 cbEvents,然后添加如下代码:*Public WithEvents cbBtn As CommandBarButtonPrivate Sub cbBtn_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)忽略产生的任何错误On Error Resume Next检查 OnAction 属性并执行相应的程序Select Case Ctrl.OnActionCase “Sub1“sub1Case “Su
12、b2“sub2End Select查找指定给 OnAction 属性的程序删除 ExcelCancelDefault = TrueEnd Sub*8、生成 dll 文件。选择菜单“文件 生成 dll”命令,将工程生成 dll 文件。安装 Excel COM 加载宏注册 Dll(1) Dll 文件需要注册到 Windows 中以便能够运行。如果是在 VB6 中生成 Dll 文件,将在所创建该加载宏的计算机上自动注册。(2)当然,也可以手工注册。点击屏幕左下角“开始”按钮,选择“运行” ,在出现的“运行”对话框中的“打开”文本框中输入“regsvr32.exe 。(3)若要移除或删除 dll,先要
13、注销它,即在“ 运行”对话框中使用 regsvr32.exe 命令并附加/u 参数实现。在 Excel 中安装加载宏(1)若在 VB6 中创建该加载宏时,在设计器中设置初始化加载行为时选择“Startup” ,则在装载 Excel 时,加载宏会自动装载并运行。(2)如果没有选择“Startup” ,则需要手动装载。选择菜单 “工具自定义”,在出现的“ 自定义”对话框中,选取“命令”标签,选择左侧“ 类别”中的“工具” 项,在右侧中找到 “COM 加载项”,拖动它到菜单栏中,关闭“自定义” 对话框。此时,点击菜单栏中的“COM 加载项”命令,出现“COM 加载项”对话框,刚才所生成的加载宏已出现在“可用加载项”列表中,选中或取消该加载宏前面的复选框来装载或卸载加载宏。示例文档见 testCOM 加载宏文件夹中的 test(Visual Basic Project)文件。 点击浏览该文件(By fanjy in 2006-6-26)