人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 辦公軟件教程 > 詳細頁面

excel COM 加載項編寫過程

excel COM 加載項編寫過程

更新時間:2024-01-23 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

Microsoft Excel是Microsoft為使用Windows和Apple Macintosh操作系統(tǒng)的電腦編寫的一款電子表格軟件。直觀的界面、出色的計算功能和圖表工具,再加上成功的市場營銷,使Excel成為最流行的個人計算機數(shù)據(jù)處理軟件。

遇到幾個朋友問COM加載項怎么做,搜索一下論壇似乎沒有這方面詳細的做法。所以根據(jù)我摸索出來的道路,寫這篇東西糊弄糊弄大眾,賺賺黑心水晶。嘿嘿。。。條條大道通羅馬,這篇東東不是絕對正確也不是唯一一條道路。修仙也好,修魔也好,方向不同,但最終都是與天爭命都是追求天道的真理(網(wǎng)絡(luò)小說看多了)。欲練神功,請先自宮。。。
由于貧道作文能力有限,寫出來的東西邏輯不清晰,覺得煩的朋友直接研究代碼去吧。
廢話不說了,轉(zhuǎn)入正題:
? ? 一、創(chuàng)建工程并設(shè)置屬性
? ? 二、連接Excel
? ? 三、響應(yīng)Excel事件
? ? 四、調(diào)試編譯分發(fā)安裝

?

一、創(chuàng)建工程并設(shè)置屬性。

  • 新建工程:打開VB6.0,新建一個工程。在新建工程選項中選擇“外接程序”(有的是“Addin”)

20140710001

  • 為工程添加引用:“工程”菜單?“引用”?勾上“Microsoft Excel 11.0 Object Libray”。(如果不引用,ExcelApplication、工具欄、按鈕需聲明為“Object”,且代碼編寫過程中沒有自動完成對象的屬性、方法等)
  • 設(shè)置設(shè)計器屬性:在工程資源管理器中雙擊“Connect(Connect)”,打開設(shè)計器設(shè)計窗口。

?20140710002

  • 在設(shè)計器中。外接程序顯示名稱輸入你想要的名稱(這里為“TestAddin”);外接程序描述中輸入外接程序的描述;應(yīng)用程序選擇“Microsoft Excel”;應(yīng)該程序版本取決于你的電腦裝了什么版本的Office我裝的是Office2003,故選“Microsoft Excel 11.0”;初始化加載行為選擇“Startup”。

20140710003

?

二、連接 Excel

我們編寫COM加載項就是要在Excel里面做點什么,如果用一個變量來保存Excel對象的話,我們基本上就能任意把Excel捏圓捏扁。變量的作用域是作為模塊級的還是全局的就看你的實際情況,為了方便,這里定義為全局變量。添加一個模塊“mduMain”,在模塊中定義變量:

Public gExcelApp As Excel.Application

Public gExcelApp As Excel.Application

?連接Excel對象

  • 雙擊設(shè)計器“Connect”,按“F7”進入代碼編輯窗口,把除了“Option Explicit”之外的代碼都刪除。在“對象框”中選擇“AddinInstance”,“過程/事件框”中選擇“OnConnection”。

20140710004

即出現(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

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 = ApplicationEnd Sub

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

Public WithEvents Button As Office.CommandBarButton

如果事先知道有多少個按鈕的話,可以用類數(shù)組。為了更好的擴展性,這里用一個集合類“ButtonEventCol”來管理“ButtonEvent”類。

添加一個類“ButtonEventCol”,“ButtonEventCol”類的代碼:

Option ExplicitPrivate mCol As Collection '集合,用來存放“ButtonEvent”類。Private Sub Class_Initialize()    Set mCol = New Collection '類實例化時實例化集合End SubPrivate Sub Class_Terminate()    Set mCol = Nothing '類銷毀時銷毀集合End SubPublic 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 = NothingEnd Sub

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 = ApplicationEnd Sub

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

'定義一個變量用于存放“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 = NothingEnd Sub

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

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) 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 SelectEnd 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

RegSvr32.exe 工具欄連接.dll

另存為,保存類型選“所有文件”,文件名“安裝.BAT”,保存到生成的DLL文件目錄中。

打開“記事本”,輸入

RegSvr32.exe 工具欄連接.dll /U

RegSvr32.exe 工具欄連接.dll /U

另存為,保存類型選“所有文件”,文件名“卸載.BAT”,保存到生成的DLL文件目錄中。

打開“WinRAR”,定位到生成的DLL文件的目錄。選中要DLL文件、安裝和卸載兩個BAT文件、被工程引用項目的文件等。按“添加”。

20140710005

在壓縮參數(shù)對話框中的“常規(guī)”選項卡中,勾選“創(chuàng)建自解壓格式壓縮文件”。

20140710006

切換到“高級”選項卡,按“自解壓選項”。

20140710007

在“高級自解壓選項”對話框中,解壓路徑中填入“工具欄連接”,選中“在 Program Files 中創(chuàng)建”,不勾選“保存并恢復(fù)路徑”,“解壓后運行”中填入“安裝.BAT”。全部確定后生成的“工具欄連接.exe”就是安裝文件了。

20140710008

?

1文件名稱1下載鏈接
COMAddin.ziphttp://pan.baidu.com/s/1kTojK6j

Excel整體界面趨于平面化,顯得清新簡潔。流暢的動畫和平滑的過渡,帶來不同以往的使用體驗。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 灵丘县| 班戈县| 大埔县| 蓝田县| 合作市| 公主岭市| 洪雅县| 修文县| 蒲江县| 金塔县| 类乌齐县| 驻马店市| 兰坪| 玛曲县| 淮南市| 东城区| 平乐县| 淳安县| 宝鸡市| 互助| 聊城市| 西宁市| 尖扎县| 凌源市| 麻城市| 错那县| 敦化市| 泌阳县| 浠水县| 安庆市| 临西县| 尚义县| 绿春县| 石阡县| 临海市| 辽中县| 盐池县| 石台县| 眉山市| 榆树市| 溆浦县|