Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA Excel:在关闭时调用宏,但不从工作簿\u BeforeClose函数调用宏?_Excel_Vba - Fatal编程技术网

VBA Excel:在关闭时调用宏,但不从工作簿\u BeforeClose函数调用宏?

VBA Excel:在关闭时调用宏,但不从工作簿\u BeforeClose函数调用宏?,excel,vba,Excel,Vba,简单地说,我想在工作簿关闭之前调用宏。你可能会说,为什么不把它放在这个工作簿部分呢?原因是我在最初创建书籍时通过VBA上传了一个代码模块。所以基本上有两种解决方法,我就是想不出来 在本书结束之前,调用标准模块中的sub 找到一种方法,在创建书籍时,使用VBA过程将代码子部分上载到ThisWorkbook部分 有什么建议吗 假设在运行时我们插入一个模块,并在该模块中放置一个Public子模块: 然后在工作簿代码区域中: Private Sub Workbook_BeforeClose(Cance

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

  • 在本书结束之前,调用标准模块中的sub
  • 找到一种方法,在创建书籍时,使用VBA过程将代码子部分上载到ThisWorkbook部分

  • 有什么建议吗

    假设在运行时我们插入一个模块,并在该模块中放置一个Public子模块:

    然后在工作簿代码区域中:

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

    我同意Gary的观点,使用模板可能是最好的选择,但在任何情况下,这里都是一个使用VBA向现有VBModule添加代码以及使用代码添加新标准模块的示例

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

    注意您需要启用应用程序以信任访问VBA项目对象模型(文件>选项>信任中心>信任中心设置>宏设置>信任访问VBA项目对象模型)


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

    但是如何将此代码插入到使用VBA创建的新工作簿中?@codecamp可能最好不要劫持其他人的答案/问题。如果您有自己的问题,请提出自己的问题:)您需要阅读有关VBE编程的内容,开始:)而不是创建一个全新的工作簿,打开一个部分完整的模板,其中工作簿代码已经存在……然后使用VBA插入模块(&public)sub@DavidZemens看看他的#2点,这不是他想要的吗?我会问一个不同的问题,但它将不同于这个问题或我在评论中提出的问题。如何将模块插入另一个工作簿?@codecamp我提供选项#3是否可以添加VBComponent?例如具有类似进程的模块或类?@codecamp是。请参考我之前提供的链接。a好的-我明白-你写字符串不是很好,但它会做-谢谢你-嘿,代码也需要一个tweekRight。这不太好,但会奏效的。你需要什么样的调整?哦,抱歉,虽然我已经发布了这篇文章-所以在关闭之前,请使用准确的代码并添加子工作簿(取消为布尔值)-这很好-干杯大卫!
    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