首頁 > 軟體

教程|一種封裝VBA程式碼的方法

2021-05-18 10:30:16

01

寫在前面

使用程式:

1、MicrosoftOffice Excel 2016

2、MicrosoftVisual Basic 6.0

需求:在工作表的C1單元格得出A1單元格+B1單元格的值。

設計的VBA程式碼:

SubTest()OnError Resume NextRange("C1") = Cells(1, 1) + Cells(1, 2)EndSub

02

使用VB6.0製作DLL檔案

一、 啟動VB6.0,新建一個ActiveX DLL工程:

二、 引用:在VB中對Excel的引用

不同版本的EXCEL在「引用」窗口裡顯示的版本號也不同:

EXCEL2000(MicrosoftOffice 9.0)

EXCEL2002(MicrosoftOffice 10.0),即ExcelXP

EXCEL2003(MicrosoftOffice 11.0)

EXCEL2007(MicrosoftOffice 12.0)

EXCEL2010(MicrosoftOffice 14.0)

EXCEL2013(MicrosoftOffice 15.0)

EXCEL2016(MicrosoftOffice 16.0)

三、 修改ActiveX DLL的工程名稱和類模組名稱

四、編寫程式碼:

在程式碼視窗輸入程式碼,過程名稱為Test:

SubTest()OnError Resume NextDimVBt, YB '定義變數VBtSetVBt = GetObject(,"Excel.Application") '使VBt表示為EXCEL物件SetYB = VBt.ActiveSheet '使YB表示為EXCEL的當前工作表'注意要在物件前加上YB變數以表示是EXCEL當前工作表的物件YB.Range("C1") = YB.Cells(1,1).Value + YB.Cells(1, 2).ValueEndSub

五、設定工程屬性 (為使開發的程式更規範,可以對工程屬性加以描述【非必要設定,可以省略】):

六、儲存工程、測試、生成DLL檔案:

1、儲存工程:儲存本工程以作為將來修改程式碼和升級程式的需要;

2、測試工程:執行快捷工具欄上的「啟動」按鈕,檢查是否存在錯誤;

3、生成DLL檔案:製作DLL檔案。

03

呼叫DLL檔案

一、在VBE中呼叫DLL檔案

呼叫DLL檔案,要分兩步走:先註冊DLL,再引用DLL。

1、 註冊DLL(使之放在可引用的列表上):註冊DLL也可以使用程式碼來做,但那樣比較複雜,也存在很多問題,建議一般使用手工來註冊。

(這裡應該先設計好DLL檔案放在硬碟的位置,因為後面引用DLL檔案的程式碼也應該是指向這個位置的。)  

先開啟EXCEL,再開啟「Visual Basic 編輯器」

2、引用DLL(這樣每次開啟檔案時,就不必再去那個引用列表裡打個勾了)

①DLL檔案放在與EXCEL檔案同一個資料夾內

在ThisWorkbook中新增如下程式碼:

PrivateSub Workbook_Open() '開啟檔案時載入要引用的DLL檔案shell"Regsvr32 /s " & Chr(34) & ThisWorkBook.path &"VBADLL.dll"& Chr(34)EndSubPrivateSub Workbook_BeforeClose(Cancel As Boolean)'關閉檔案之前解除安裝引用的DLL檔案shell"Regsvr32 /s /u " & Chr(34) & ThisWorkBook.path& "VBADLL.dll"& Chr(34)EndSub

'/s參數是防止出現確認視窗;/u參數為取消引用。

②DLL檔案放在固定資料夾內,如果你有多個XLS文件需要使用到同一個DLL檔案,但這些XLS文件又不可能都與DLL檔案放在同一個資料夾,則需要將DLL檔案放置到一個固定資料夾,這樣,只需要將上面的程式碼 ThisWorkBook.path& "VBADLL.dll" 換成一個固定位置即可。

注意:有時間可能出現某些錯誤,如提示「變數類型未定義」等,可能是引用後改變了檔案的位置或改變了檔案的名稱,即使再重新再改回來也可能會出現這些問題,所以,在正確註冊及引用以後,最好不要再去修改這個DLL檔案。如果出現問題,重新註冊一次,保證註冊的DLL檔案的位置正確即可。

二、新建一個模組,輸入呼叫DLL檔案程式的過程

SubDLLtest()DimABC As New VBAtest '定義ABC為新類,即為DLL檔案中的類模組VBAtestABC.Test'呼叫DLL中提供的過程,來完成原來在VBA中的功能,起到隱藏程式碼的效果SetABC = Nothing '釋放類資源EndSub

三、在工作表中運行DLLtest宏即可實現呼叫

04

寫在最後

封裝DLL的主要步驟是①在VB中引用EXCEL;②編輯程式碼(要在物件前面加上定義的EXCEL變數);③在VBE中引用該DLL檔案;

④在VBE的程式碼中呼叫DLL中的過程。

分享、交流

不迷路

THE

END


IT145.com E-mail:sddin#qq.com