VBA Excel:closures而不是从Workbook_BeforeClose函数调用一个macros?

简单地说,我想在工作簿closures之前调用一个macros。 你可以说为什么不把它放到ThisWorkbook部分? 原因是当本书初步创build时,我正通过VBA上传代码模块。 所以基本上有两个解决scheme,我只是无法弄清楚

  1. 在本书closures之前,调用基于标准模块的子部分
  2. 在创build本书时,find一种使用VBA过程将代码子上传到ThisWorkbook部分的方法

任何build议?

我同意Gary最好使用这个模板,但是在任何情况下,这里都是使用VBA向现有的VBModule添加代码,并添加一个新的代码模块的例子。

显然,你要添加的过程越复杂,通过在过程中构buildstring来做到这一点就越困难。 您可以从文件中添加模块(假设您已经导出了这些模块 – 您也可以通过VBA执行这些模块),或者您也可以从打开的工作簿中的现有模块中进行复制等。有关如何执行这些操作的信息,请参阅下面提供的链接。

注意您需要启用应用程序以信任对VBA项目对象模型的访问(文件>选项>信任中心>信任中心设置>macros设置>对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的一些很好的参考资料。

在运行时说我们插入一个模块,并在该模块中放置一个公共子:

在这里输入图像说明

然后在工作簿代码区:

 Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next Call SayGoodby End Sub