簡體   English   中英

VBA Excel:關閉但不是從Workbook_BeforeClose函數調用宏?

[英]VBA Excel: call a macro on close but not from the Workbook_BeforeClose function?

簡單地說,我想在工作簿關閉之前調用一個宏。 您可能會說為什么不將它放入ThisWorkbook部分? 原因是我在最初創建本書時通過VBA上傳代碼模塊。 所以基本上有兩個解決方案,我只是想不出來

  1. 在本書結束之前調用基於標准模塊的子
  2. 在創建工作簿時,找到一種使用VBA過程將代碼子上載到ThisWorkbook部分的方法

有什么建議嗎?

我同意加里(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM