一、 DLL基本概念
(一)概念
DLL即動態鏈接庫(Dynamic Link Library),是由可被其它程序調用的函數集合組成的可執行文件模塊。DLL不是應用程序的組成部分,而是運行時鏈接到應用程序中。
(二)主要優點:
1、多個應用程序可以共享一個DLL,而且當多個應用程序調用庫的同一個函數時,可執行文件中裝入的只是該函數的內存地址,從而節省內存和磁盤空間;
2、使用動態鏈接庫易於我們維護用戶程序,即使對動態鏈接庫進行修改也不會影響用戶程序;
3、從ACCESS角度而言,還可以更好的確保核心代碼的安全。
二、 用VB封裝VBA代碼,構建自定義的DLL動態鏈接庫
(一)ACCESS中實例代碼
下面是一個“快速獲取數字(Acc).mdb”實例(該實例在文件包中),單擊“提取結果”按鈕,將文本框中的數字在彈出消息顯示出來。
我將就這個實例演示如何將該實例VBA代碼封裝成爲DLL。
?按鈕單擊事件代碼如下:
Private Sub CmdFindnumber_Click()
Dim strM As String '初始字符串
Dim strOut As String '輸出字符串變量
Dim I
strM = Me.Text1
'從第一個字符向最後一個字符循環,以提取每個字符
For I = 1 To Len(strM)
'判斷是否爲0到9字符,是則賦值輸出
If Mid(strM, I, 1) Like "[0-9]" Then
strOut = strOut & Mid(strM, I, 1)
End If
Next I
'用MsgBox函數進行輸出測試
MsgBox strOut
End Sub
M以上代碼還不能直接用於封裝,須將其修改成爲公用函數(過程)
(二)VB封裝實例中VBA代碼
步驟一:在VB編輯窗中,點菜單【文件】-【新建工程】,打開新建工程窗口
步驟二:修改工程名,這即生成的DLL庫名
1、修改工程名爲:我的動態庫 |
步驟三:修改類名
1、改類名爲:提取數字 |
步驟四:在代碼窗口輸入如下代碼。將ACCESS中的單擊事件代碼,略做修改成爲一個公用函數,然後複製到VB代碼編輯窗口
?代碼如下
'將這前的ACCESS代碼改成一個公用函數
'輸入:strPutString字符串變量,需分離數字的字符串
'輸出:fFindNumber字符串變量,得到的數字字符
Public Function fFindNumber(strPutString As String) As String
Dim strOut As String '輸出字符串變量
Dim I
'從第一個字符向最後一個字符循環,以提取每個字符
For I = 1 To Len(strPutString)
'判斷是否爲0到9字符,是則賦值輸出
If Mid(strPutString, I, 1) Like "[0-9]" Then
strOut = strOut & Mid(strPutString, I, 1)
End If
Next I
'數字輸出
fFindNumber = strOut
End Function
步驟五:編譯DLL,點菜單【文件】-【生成我的動態庫.dll】,VBA代碼封裝DLL就完成了。
三、 在mdb中調用自定義DLL動態鏈接庫
(一)新建數據庫及窗體
新建【快速提取數字(DLL)實例.mdb】數據庫,新建一個窗體【frmMain】,在窗體添文本框【text0】,按鈕【CmdFindNum】,Caption屬性:“提取數字”(見下圖)
(二)引用【我的動態庫.dll】庫
按【Alt+F11】打開VBE窗口,點菜單【工具】-【引用】,打開引用對話框,完成對我們自己編譯的DLL的引用。
(三)在【CmdFindNum】按鈕單擊事件中加入如下代碼。
Private Sub CmdFindNum_Click()
'申明自定義類
Dim MyFindNum As提取數字
Dim strOut As String
'實例化"提取數字類"對象
Set MyFindNum = New提取數字
'將函數輸出結果賦值給自定義字符串變量
strOut = MyFindNum.fFindNumber(Text0)
'在消息框中顯示
MsgBox "你提取的數字爲:" & strOut, vbInformation, "江羽提示:"
End Sub
點擊保存後,你就可以運行一下窗體測試你的成果了
M本文實例見實例包,下載測試如果提示錯誤,請重新對自定義類庫進行引用。
本文只是通過一個簡單的實例演示了,如何通過VB封裝一般的VBA中代碼,因爲該代碼中並未涉及到ACCESS應用程序對象,所以在VB中沒有對ACCESS對象類庫進行引用,另外實例中只是簡單演示了,如何手動實現對DLL的註冊引用,在後續文章中我將就如何實現DLL與ACCESS應用程序對接及DLL的自動註冊及引用結合實例進行講解。