使用VB6創(chuàng)建COM加載宏這兩天學(xué)習(xí)了關(guān)于創(chuàng)建COM加載宏的知識(shí),將學(xué)習(xí)成果進(jìn)行了整理,供大家參考.
使用VB6創(chuàng)建COM加載宏
摘要:本文通過(guò)示例詳細(xì)描述了如何使用VB6創(chuàng)建COM加載宏的過(guò)程,以及如何在Excel中加載和使用。
創(chuàng)建一個(gè)COM加載宏的步驟
1、打開(kāi)VB6應(yīng)用程序,在“新建工程”中選擇“外接程序”,打開(kāi)新工程。
2、在右側(cè)工程資源管理器窗口中將會(huì)有一個(gè)名為frmAddin的窗體和一個(gè)名為Connect的設(shè)計(jì)器對(duì)象。移除frmAddin窗體,然后對(duì)Connect設(shè)計(jì)器對(duì)象進(jìn)行設(shè)置。
雙擊設(shè)計(jì)器對(duì)象,出現(xiàn)一個(gè)設(shè)計(jì)器窗體,窗體中有如下字段及相應(yīng)的文本框:
• 外接程序顯示名稱 – 填寫(xiě)加載宏的名字。
• 外接程序描述 – 描述你所創(chuàng)建的加載宏的作用和功能。
• 應(yīng)用程序 – 使用你所創(chuàng)建的加載宏的應(yīng)用程序。在這里,選擇Microsoft Excel。
• 應(yīng)用程序版本 – 使用你所創(chuàng)建的加載宏的應(yīng)用程序版本。當(dāng)在應(yīng)用程序文本框中選擇了Microsoft Excel后,該文本框自動(dòng)出現(xiàn)Microsoft Excel 11.0。
• 初始化加載行為 – 當(dāng)應(yīng)用程序開(kāi)啟時(shí),是否自動(dòng)裝載該加載宏,有四個(gè)選項(xiàng)。若設(shè)置這為Startup,那么當(dāng)Excel開(kāi)始時(shí)將裝載該加載宏;若設(shè)置為L(zhǎng)oad on demand,則在Excel中需要時(shí)再裝載該加載宏。
3、添加對(duì)Excel的引用。選擇菜單“工程——引用”命令,在出現(xiàn)的“引用”對(duì)話框中選中Microsoft Excel 11.0 Object Liabrary前的復(fù)選框。
4、設(shè)置工程屬性。選擇菜單“工程——MyAddIn屬性”命令,或在工程資源管理器窗口中擊右鍵選擇“MyAddIn屬性”命令,在出現(xiàn)的工程屬性對(duì)話框中設(shè)置工程名稱和工程描述。
5、編輯Connect設(shè)計(jì)器代碼。在Connect設(shè)計(jì)器對(duì)象上右擊并選擇“查看代碼”或者點(diǎn)選Connect設(shè)計(jì)器后單擊窗口頂部的“查看代碼”按鈕,將出現(xiàn)VB自動(dòng)生成的代碼。刪除其中的代碼,只保留OnConnection過(guò)程和OnDisconnection過(guò)程,用于在應(yīng)用程序中裝載和卸載加載宏,并在其中添加自已實(shí)現(xiàn)加載宏功能所需要的代碼。在本示例中,Connect設(shè)計(jì)器中的最終代碼如下:
‘****************************************
Option Explicit
Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)
'設(shè)置應(yīng)用程序變量
Set xlApp = Application
'設(shè)置自已的菜單的子程序
CreateToolbarButtons
End Sub
Private Sub AddinInstance_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
'釋放占用的內(nèi)存
Set xlApp = Nothing
'移除自已的菜單的子程序
RemoveToolbarButtons
End Sub
‘****************************************
6、選擇菜單“工程——添加模塊”命令,添加一個(gè)標(biāo)準(zhǔn)的模塊并添加相應(yīng)的代碼。在本示例中,該標(biāo)準(zhǔn)模塊的代碼如下:
‘****************************************
‘聲明變量、類實(shí)例和集合
Public xlApp As Excel.Application
Dim ButtonEvent As cbEvents
Dim ButtonEvents As Collection
'定義自已菜單的子程序
Public Sub CreateToolbarButtons()
'為了確保只添加按鈕一次,先移除它們
RemoveToolbarButtons
'聲明變量
Dim cbBar As Office.CommandBar
Dim btNew As Office.CommandBarButton
'創(chuàng)建一個(gè)新的集合
Set ButtonEvents = New Collection
'查找excel中的工作表菜單欄(帶有文件,編輯、視圖等命令)
Set cbBar = xlApp.CommandBars("Worksheet Menu Bar")
'添加一個(gè)新按鈕到工具菜單
Set btNew = cbBar.FindControl(Id:=30007).Controls.Add(msoControlButton, , , , True)
With btNew
.
'設(shè)置一個(gè)唯一的標(biāo)簽,使我們自定義控件在后面容易找到或刪除
.Tag = "COMAddinTest"
'設(shè)置提示文本
.ToolTipText = "Calls Sub1"
'設(shè)置顯示在菜單中的標(biāo)題
.Caption = "Sub1"
End With
'獲取cbevents類中的一個(gè)新實(shí)例
Set ButtonEvent = New cbEvents
'將它指定給我們所創(chuàng)建的按鈕
Set ButtonEvent.cbBtn = btNew
ButtonEvents.Add ButtonEvent
'添加另一個(gè)按鈕
Set btNew = cbBar.FindControl(Id:=30007).Controls.Add(msoControlButton, , , , True)
With btNew
.
'設(shè)置一個(gè)唯一的標(biāo)簽,使我們自定義控件在后面容易找到或刪除
.Tag = "COMAddinTest"
'設(shè)置提示文本
.ToolTipText = "Calls Sub2"
'設(shè)置顯示在菜單中的標(biāo)題
.Caption = "Sub2"
End With
'獲取cbevents類中的一個(gè)新實(shí)例
Set ButtonEvent = New cbEvents
'將它指定給我們所創(chuàng)建的按鈕
Set ButtonEvent.cbBtn = btNew
ButtonEvents.Add ButtonEvent
End Sub
'刪除自已定義的菜單的子程序
Public Sub RemoveToolbarButtons()
Dim cbBar As CommandBar
Dim cbCtr As CommandBarControl
'忽略錯(cuò)誤
On Error Resume Next
'需要從命令條中移除按鈕
'首先找到該按鈕
Set cbBar = xlApp.CommandBars("Worksheet Menu Bar")
'運(yùn)用我們所設(shè)置的標(biāo)簽查找控件
Set cbCtr = cbBar.FindControl(, , "COMAddinTest")
While Not cbCtr Is Nothing
'刪除
cbCtr.Delete
Set cbCtr = cbBar.FindControl(, , "COMAddinTest")
Wend
'恢復(fù)占用的內(nèi)存
Set ButtonEvents = Nothing
Set ButtonEvent = Nothing
End Sub
'示例子過(guò)程
Sub sub1()
MsgBox "Hello!"
End Sub
'示例子過(guò)程
Sub sub2()
MsgBox "Hi!"
End Sub
‘****************************************
7、創(chuàng)建一個(gè)類模塊來(lái)處理菜單欄事件。選擇菜單“工程——添加類模塊”,并命名為cbEvents,然后添加如下代碼:
‘****************************************
Public WithEvents cbBtn As CommandBarButton
Private Sub cbBtn_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
'忽略產(chǎn)生的任何錯(cuò)誤
On Error Resume Next
'檢查OnAction屬性并執(zhí)行相應(yīng)的程序
Select Case Ctrl.OnAction
Case "Sub1"
sub1
Case "Sub2"
sub2
End Select
'查找指定給OnAction屬性的程序刪除Excel
CancelDefault = True
End Sub
‘****************************************
8、生成dll文件。選擇菜單“文件——生成dll”命令,將工程生成dll文件。
安裝Excel COM加載宏
注冊(cè)Dll
(1) Dll文件需要注冊(cè)到Windows中以便能夠運(yùn)行。如果是在VB6中生成Dll文件,將在所創(chuàng)建該加載宏的計(jì)算機(jī)上自動(dòng)注冊(cè)。
(2)當(dāng)然,也可以手工注冊(cè)。點(diǎn)擊屏幕左下角“開(kāi)始”按鈕,選擇“運(yùn)行”,在出現(xiàn)的“運(yùn)行”對(duì)話框中的“打開(kāi)”文本框中輸入“regsvr32.exe <dllfilename>。
(3)若要移除或刪除dll,先要注銷它,即在“運(yùn)行”對(duì)話框中使用regsvr32.exe命令并附加/u參數(shù)實(shí)現(xiàn)。
在Excel中安裝加載宏
(1)若在VB6中創(chuàng)建該加載宏時(shí),在設(shè)計(jì)器中設(shè)置初始化加載行為時(shí)選擇“Startup”,則在裝載Excel時(shí),加載宏會(huì)自動(dòng)裝載并運(yùn)行。
(2)如果沒(méi)有選擇“Startup”,則需要手動(dòng)裝載。選擇菜單“工具——自定義”,在出現(xiàn)的“自定義”對(duì)話框中,選取“命令”標(biāo)簽,選擇左側(cè)“類別”中的“工具”項(xiàng),在右側(cè)中找到“COM加載項(xiàng)…”,拖動(dòng)它到菜單欄中,關(guān)閉“自定義”對(duì)話框。此時(shí),點(diǎn)擊菜單欄中的“COM加載項(xiàng)…”命令,出現(xiàn)“COM加載項(xiàng)”對(duì)話框,剛才所生成的加載宏已出現(xiàn)在“可用加載項(xiàng)”列表中,選中或取消該加載宏前面的復(fù)選框來(lái)裝載或卸載加載宏。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。