[英]VBA Excel: call a macro on close but not from the Workbook_BeforeClose function?
簡單地說,我想在工作簿關閉之前調用一個宏。 您可能會說為什么不將它放入ThisWorkbook部分? 原因是我在最初創建本書時通過VBA上傳代碼模塊。 所以基本上有兩個解決方案,我只是想不出來
有什么建議嗎?
我同意加里(Gary)的觀點,也許最好是使用模板,但是在任何情況下,這里都是使用VBA向現有VBModule添加代碼並添加帶有代碼的新標准模塊的示例。
顯然,您嘗試添加的過程越復雜,通過在過程中構建字符串來實現此操作就越困難。 您可以從文件中添加模塊(假設您已經導出它們 - 您也可以通過VBA執行...)或者您也可以從打開的工作簿中的現有模塊中復制等。有關如何執行這些操作,請參閱以下提供的鏈接。
注意您需要啟用應用程序以信任對VBA項目對象模型的訪問(文件>選項>信任中心>信任中心設置>宏設置>信任訪問VBA項目對象模型)
Option Explicit
Sub AddWorkbookWithCode()
Dim wb As Workbook
Set wb = Workbooks.Add
AddVBCodeToWorkbook wb
End Sub
Sub AddVBCodeToWorkbook(wb As Workbook)
Dim procString$
procString = "Sub Workbook_BeforeClose()"
procString = procString & vbCrLf & vbTab & "On Error Resume Next"
procString = procString & vbCrLf & vbTab & "Call SayGoodby"
procString = procString & vbCrLf & "End Sub"
'## Insert some code to ThisWorkbook module:
With wb.VBProject.VBComponents("ThisWorkbook")
.CodeModule.AddFromString procString
End With
'## Add a new standard module and insert some code there, too:
procString = "Public Sub SayGoodby()"
procString = procString & vbCrLf & vbTab & "MsgBox ""Goodby!"""
procString = procString & vbCrLf & "End Sub"
With wb.VBProject.VBComponents.Add(1)
.Name = "Module1"
.CodeModule.AddFromString procString
End With
End Sub
這是VBE編程的一些很好的參考資料。
假設在運行時我們插入一個模塊,然后在該模塊中放置一個Public子目錄:
然后在工作簿代碼區域中:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Call SayGoodby
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.