简单地说,我想在工作簿关闭之前调用宏。您可能会说为什么不将它放入ThisWorkbook部分?原因是我在最初创建本书时通过VBA上传代码模块。所以基本上有两个解决方案我就是想不出来
有什么建议吗?
答案 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)
在运行时说我们插入一个模块并在该模块中放置一个公共子:
然后在工作簿代码区:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Call SayGoodby
End Sub