VBA Excel:关闭但不是从Workbook_BeforeClose函数调用宏?

时间:2015-01-30 15:45:47

标签: excel vba

简单地说,我想在工作簿关闭之前调用宏。您可能会说为什么不将它放入ThisWorkbook部分?原因是我在最初创建本书时通过VBA上传代码模块。所以基本上有两个解决方案我就是想不出来

  1. 在本书结束前调用基于标准模块的子
  2. 找到一种方法,在创建图书时,使用VBA程序将代码子上传到ThisWorkbook部分
  3. 有什么建议吗?

2 个答案:

答案 0 :(得分:4)

我同意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

HERE 是关于VBE编程的一些很好的参考资料。

答案 1 :(得分:3)

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

enter image description here

然后在工作簿代码区:

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