- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
5#
發表於 2012-10-24 15:37
| 只看該作者
回復 3# a703130
VBA封裝為Dll的例子、方法與總結
製作DLL時,ThisWorkBook中的代碼封裝方法如下:
1、打開VB6,新建ActiveX DLL。修改「工程」名稱和「類模塊」名稱為需要的名稱。本例中,工程修改為TestDLL,類模塊修改為Test。
2、建立引用。一般需要引用Microsoft Office 11.0 Object Library和Microsoft Excel 11.0 Object Library。如果VBA代碼中還有其他引用,在VB中也要對他們引用。
3、這一步就是具體封裝代碼了。
在剛才建立好的TestDLL中,將代碼放入Test類模塊中。
如封裝ThisWorkBook中的Open事件:
Sub wbk_open(EApp As Excel.Application, wb As Excel.Workbook, sh As Excel.Worksheet)
'--VBA中需要封裝的主體代碼
End Sub
其中VBA中的代碼為事先做好的要封裝的代碼,如下面這個例子:
'打開工作薄後在當前的工作表A1中輸入Test
Private Sub workbook_open()
Cells(1, 1) = "Test"
End Sub
封裝為DLL的代碼為:
Sub wbk_open(EApp As Excel.Application, wb As Excel.Workbook, sh As Excel.Worksheet)
Cells(1, 1) = "Test"
End sub
現在在VB6中生成Dll,到此就完成封裝了。
4、在VBA中使用封裝的代碼
首先,在VBA中要引用剛才生成的TestDll.dll。
然後新建一個模塊,在其中定義這樣一個變量T:
Public T As New TestDll.Test
然後在ThisWorkBook的Open中引用TestDll中的Test,代碼如下:
Private Sub workbook_open()
On Error Resume Next
T.wbk_open Application, ThisWorkbook, ActiveSheet
End Sub
這樣每次打開Excel後,就在Sheet1的Cells(1,1)中輸入「Test」。
當然,如果你想在第2張工作表的A1中輸入Test,那麼可以這樣用:
Private Sub workbook_open()
On Error Resume Next
T.wbk_open Application, ThisWorkbook, Sheets(2)
End Sub
以上就是代碼封裝的全過程,需要注意的是變量的傳遞要互相對應。
上面示例中的封裝代碼是用3個變量傳遞的,如果只用1個變量傳遞,代碼如下:
'封裝為DLL的代碼為:
Sub wbk_open(sh As Excel.Worksheet)
Cells(1, 1) = "Test"
End sub
'ThisWorkBook中使用Dll的代碼為
Private Sub workbook_open()
On Error Resume Next
T.wbk_open ActiveSheet
End Sub
Dll文件和Test文件,測試時請重新引用TestDll.dll |
|