如何从自定义模块使用Workbook_BeforeClose

时间:2016-01-27 10:22:25

标签: excel vba excel-vba

我试图在用户试图关闭像这样的工作簿时提示用户

Private Sub Workbook_BeforeClose(Cancel as Boolean) 
 MsgBox "Changes has been detected. Do you want to export the data ?"
End Sub

我知道此代码需要放在ThisWorkbook模块中。 有没有办法从我的自定义模块做到这一点?我需要将此功能添加到我的客户端使用的多个工作簿中作为升级的一部分,这通常通过用新模块替换旧模块来完成。

2 个答案:

答案 0 :(得分:0)

有一种方法可以导入 ThisWorkbook模块。很久以前我为此编写了一些代码。

那它是如何运作的。

  1. 首先,您必须导出 ThisWorkbook模块。右键单击Module and Export。
  2. ThisWorkbook.cls 保存在您拥有其他模块的服务器上,或者将其与模块一起发送(就像升级其他模块一样)
  3. 使用编辑器打开 ThisWorkbook.cls 文件(如Notepad ++) 并删除第一行。他们看起来像这样。

    VERSION 1.0 CLASS

    <强> BEGIN

    MultiUse = -1'True

    <强> END

  4. 执行 UpdateThisDocument Subrutine。

    唯一的问题如何回答你自己是如何执行代码^^(我写了extern Updater执行代码)

    Sub UpdateThisDocument()
      Dim ModuleName As String
      ModuleName = "DieseArbeitsmappe"
      Dim aDoc As Workbook
      Set aDoc = ThisWorkbook
      Dim strPath As String
      'Put here the Path to the Folder where the cls File of This Workbook is.
      strPath = "C:\Users\z002mkvy\Desktop\"
      With aDoc          
         If ModuleExists(ModuleName) = True Then
           Call clsLoeschen
         End If
        '
    
        With ThisWorkbook.VBProject
          .VBComponents(ModuleName).CodeModule.AddFromFile _
            strPath & "\DieseArbeitsmappe.cls"
      Fehler:
          End With
      End With
      End Sub
    
    
    
    Private Function ModuleExists(ModuleName As String) _
      As Boolean
      On Error Resume Next
      ModuleExists = Len(ThisWorkbook.VBProject _
      .VBComponents(ModuleName).Name) <> 0
    End Function
    
    Private Sub clsLoeschen()
      Dim modcls
      Dim awcl As Integer
      On Error Resume Next
      Set modcls = ThisWorkbook.VBProject.VBComponents.Item("DieseArbeitsmappe")
      awcl = modcls.CodeModule.CountOfLines
      modcls.CodeModule.DeleteLines 1, awcl
      Set modcls = Nothing
    End Sub
    
  5. 我希望这可以帮到你

答案 1 :(得分:0)

您可以使用Application.VBE对象和Workbook.VBProject来修改文件的VBA。但请注意,它要求执行升级的Excel必须设置“信任访问VBA项目”设置(可以在信任中心的“宏设置”选项卡下找到)。当不再需要时,出于安全原因,这是最好的选择。