返回列表 上一主題 發帖

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

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

如題
現有1個 Test.xls 的檔案,裡面有 a、b、c、d 四個工作頁並且有 w、x、y、z 四個模組巨集

請問是否能夠 將 a 工作頁另存新檔(.xls)的同時將 z 模組存入 a.xls

當執行 a.xls 檔案時,可以運行 z 模組巨集??

請教各位前輩~也謝謝前輩幫忙

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

TOP

回復 2# c_c_lai


抱歉,沒有用過VB

不知道是否能有個範例解說

或是有教學文可以參考??

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

回復 1# a703130
  1. Sub nn()
  2. ThisWorkbook.VBProject.VBComponents("z").Export "D:\z.bas" '匯出模組暫存
  3. Sheet1.Copy '工作表複製到新檔案
  4. With ActiveWorkbook
  5. .VBProject.VBComponents.Import "D:\z.bas" '匯入模組
  6. End With
  7. Kill "D:\z.bas" '刪除暫存模組
  8. End Sub
複製代碼
學海無涯_不恥下問

TOP

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