Microsoft Excel是Microsoft為使用Windows和Apple Macintosh操作系統(tǒng)的電腦編寫的一款電子表格軟件。直觀的界面、出色的計算功能和圖表工具,再加上成功的市場營銷,使Excel成為最流行的個人計算機數(shù)據(jù)處理軟件。 遇到幾個朋友問COM加載項怎么做,搜索一下論壇似乎沒有這方面詳細的做法。所以根據(jù)我摸索出來的道路,寫這篇東西糊弄糊弄大眾,賺賺黑心水晶。嘿嘿。。。條條大道通羅馬,這篇東東不是絕對正確也不是唯一一條道路。修仙也好,修魔也好,方向不同,但最終都是與天爭命都是追求天道的真理(網(wǎng)絡(luò)小說看多了)。欲練神功,請先自宮。。。 ?一、創(chuàng)建工程并設(shè)置屬性。
?
?二、連接 Excel我們編寫COM加載項就是要在Excel里面做點什么,如果用一個變量來保存Excel對象的話,我們基本上就能任意把Excel捏圓捏扁。變量的作用域是作為模塊級的還是全局的就看你的實際情況,為了方便,這里定義為全局變量。添加一個模塊“mduMain”,在模塊中定義變量:
Public gExcelApp As Excel.Application ?連接Excel對象
即出現(xiàn)
Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant) End Sub ? ?在該過程中寫入“Set gExcelApp = Application”
Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant) Set gExcelApp = Application End Sub ?定義用來響應(yīng)按鈕事件的類,以便添加工具欄過程中使用。添加一個類“ButtonEvent”,在類中定義一個響應(yīng)事件的變量。
Public WithEvents Button As Office.CommandBarButton 如果事先知道有多少個按鈕的話,可以用類數(shù)組。為了更好的擴展性,這里用一個集合類“ButtonEventCol”來管理“ButtonEvent”類。 添加一個類“ButtonEventCol”,“ButtonEventCol”類的代碼:
Option Explicit Private mCol As Collection '集合,用來存放“ButtonEvent”類。 Private Sub Class_Initialize() Set mCol = New Collection '類實例化時實例化集合 End Sub Private Sub Class_Terminate() Set mCol = Nothing '類銷毀時銷毀集合 End Sub Public Sub Add(ByRef Button As Office.CommandBarButton) '添加按鈕 Dim objNew As New ButtonEvent '創(chuàng)建“ButtonEvent”類新實例 Set objNew.Button = Button '連接事件 mCol.Add objNew '將類添加到集合中,只要“ButtonEventCol”類生存期未完,所有添加的“ButtonEvent”類就一直生存 Set objNew = Nothing End Sub 創(chuàng)建工具欄和按鈕雙擊設(shè)計器“Connect”,按“F7”進入代碼編輯窗口。剛才我們的代碼
Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant) Set gExcelApp = Application End Sub ?已經(jīng)在 OnConnection 事件中連接 Excel 對象。我們就用“gExcelApp”這個對象變量來創(chuàng)建工具欄和按鈕,并與響應(yīng)事件的類連接。
'定義一個變量用于存放“ButtonEventCol”類實例 Private mButtonEventCol As New ButtonEventCol
'定義一個變量用于存放“ButtonEventCol”類實例 Private mButtonEventCol As New ButtonEventCol 假設(shè)我們在Excel創(chuàng)建一個名叫“外接程序”的工具欄,工具欄中有二個按鈕,分別為:“新建工作簿”、“關(guān)閉工作簿”。 在“AddinInstance_OnStartupComplete”(對象已加載完畢)事件中創(chuàng)建工具欄、按鈕,并把按鈕和響應(yīng)事件的類連接,代碼如下:
Private Sub AddinInstance_OnStartupComplete(custom() As Variant) Dim MyControl As Office.CommandBarButton Set mMyBar = gExcelApp.CommandBars.Add(Name:="外接程序", Position:=msoBarFloating, Temporary:=True) mMyBar.Visible = True Set MyControl = mMyBar.Controls.Add(Type:=msoControlButton, Temporary:=True) With MyControl .BeginGroup = False .Caption = "新建工作簿" .Enabled = True .Visible = True .FaceId = 18 .Style = msoButtonIconAndCaption .Parameter = "New" 'Parameter 屬性是類在響應(yīng)按鈕事件時區(qū)分按鈕的標記。 '如果用 Tag 屬性來區(qū)分的話,會發(fā)生二次事件。不知道為什么。 End With mButtonEventCol.Add MyControl Set MyControl = mMyBar.Controls.Add(Type:=msoControlButton, Temporary:=True) With MyControl .BeginGroup = False .Caption = "關(guān)閉工作簿" .Enabled = True .Visible = True .FaceId = 1088 .Style = msoButtonIconAndCaption .Parameter = "Close" End With mButtonEventCol.Add MyControl Set MyControl = Nothing End Sub ?關(guān)閉 Excel 時執(zhí)行
Private Sub AddinInstance_OnBeginShutdown(custom() As Variant) Set mButtonEventCol = Nothing '關(guān)閉 Excel 時釋放類。 '因為工具欄、按鈕在創(chuàng)建的時候已經(jīng)把 Temporary 屬性設(shè)為 True 了,關(guān)閉 Excel 自動刪除。 '所以這里不用編寫刪除工具欄的代碼。 End Sub ? 三、響應(yīng)按鈕的事件打開類“ButtonEvent”的代碼編輯窗口,添加事件過程
Private Sub Button_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean) End Sub 在該事件過程中添加代碼如下:
Private Sub Button_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean) Select Case Ctrl.Parameter '根據(jù)按鈕的 Parameter 屬性決定執(zhí)行什么動作。 Case "New" gExcelApp.Workbooks.Add Case "Close" If Not (gExcelApp.ActiveWorkbook Is Nothing) Then gExcelApp.ActiveWorkbook.Close Else MsgBox "沒有活動工作簿", vbExclamation End If End Select End Sub ? 四、調(diào)試編譯分發(fā)安裝調(diào)試和編譯:關(guān)閉Excel,設(shè)計器代碼窗口中的“AddinInstance_OnConnection”事件中,在“Set gExcelApp = Application”這句代碼設(shè)置斷點。按“F5”運行,然后打開 Excel 。這時,代碼執(zhí)行到“Set gExcelApp = Application”這里就暫停了。你可以一步一步按“F8”進行跟蹤調(diào)試,看看加載項的工作方法,找到錯誤的地方并改正。當(dāng)調(diào)試沒什么問題之后,編譯就比較簡單了,按“文件”菜單?“生成工具欄連接.DLL”。然后生成就行了。 分發(fā)安裝:這里介紹用“WinRAR”制作安裝包。 按“工程”菜單?引用,查看引用項目的路徑,把引用項目的文件復(fù)制到生成的DLL文件目錄中。 如果有窗體,在工具欄點右建?“部件”,查看引用的項目的路徑,把引用項目的文件復(fù)制到生成的DLL文件目錄中。 打開“記事本”,輸入
RegSvr32.exe 工具欄連接.dll 另存為,保存類型選“所有文件”,文件名“安裝.BAT”,保存到生成的DLL文件目錄中。 打開“記事本”,輸入
RegSvr32.exe 工具欄連接.dll /U 另存為,保存類型選“所有文件”,文件名“卸載.BAT”,保存到生成的DLL文件目錄中。 打開“WinRAR”,定位到生成的DLL文件的目錄。選中要DLL文件、安裝和卸載兩個BAT文件、被工程引用項目的文件等。按“添加”。 在壓縮參數(shù)對話框中的“常規(guī)”選項卡中,勾選“創(chuàng)建自解壓格式壓縮文件”。 切換到“高級”選項卡,按“自解壓選項”。 在“高級自解壓選項”對話框中,解壓路徑中填入“工具欄連接”,選中“在 Program Files 中創(chuàng)建”,不勾選“保存并恢復(fù)路徑”,“解壓后運行”中填入“安裝.BAT”。全部確定后生成的“工具欄連接.exe”就是安裝文件了。 ?
Excel整體界面趨于平面化,顯得清新簡潔。流暢的動畫和平滑的過渡,帶來不同以往的使用體驗。 |
溫馨提示:喜歡本站的話,請收藏一下本站!