gpt4 book ai didi

excel - VBA Excel : call a macro on close but not from the Workbook_BeforeClose function?

转载 作者:行者123 更新时间:2023-12-03 00:10:47 25 4
gpt4 key购买 nike

简单地说,我想在工作簿关闭之前调用宏。你可能会说为什么不把它放到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

<强> HERE 是有关 VBE 编程的一些很好的引用 Material 。

关于excel - VBA Excel : call a macro on close but not from the Workbook_BeforeClose function?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28239540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com