返回列表 上一主題 發帖

[發問] 另存單一工作頁時能將部分模組存入

回復 1# a703130
如 VB 一樣,將 z 模組巨集轉換成 .dll 模組,
當執行 a.xls 檔案時亦同時將此 .dll 匯入並呼叫 z 模組巨集。

TOP

本帖最後由 c_c_lai 於 2012-10-24 15:34 編輯

http://club.excelhome.net/thread-353961-1-1.html

TOP

回復 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

TOP

回復 3# a703130
Working_with_Array_Functions_and_DLLs_in_Excel_VBA.pdf (110.8 KB)
Working_with_Array_Functions_and_DLLs_in_Excel_VBA.pdf

TOP

        靜思自在 : 對父母要知恩,感恩、報恩。
返回列表 上一主題