1

Workbook_BeforeCloseThis Workbook插件的“”中,当我在同一个 excel 实例中打开多个工作簿并尝试关闭每个工作簿时,Workbook_BeforeClose不会为实例中打开的每个此类工作簿调用,而仅针对最终工作簿调用。

无论如何都需要Workbook_BeforeClose调用excel实例中的所有工作簿,我需要在每个工作簿关闭时执行任务?

4

2 回答 2

3

有几个步骤可以遵循。

  1. 在 Excel IDE/VBA 环境中创建类模块。在其中一个工作簿中执行此操作,该工作簿将一直打开到最后。

  2. 将类模块名称更改为AppClass

  3. 把这段代码放在里面AppClass module

    Public WithEvents EXL As Application
    Private Sub EXL_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
        'sample msgbox
        MsgBox "You are about to close Workbook: " & Wb.Name
        'here your code
    End Sub
    
  4. 在任何标准模块中,例如Module1,插入以下代码:

    Public appEXL As New AppClass
    Sub Required_Initialization()
        'run it once or run it when this workbook is opened
        Set appEXL.EXL = Application
    End Sub
    
  5. 运行在第 4 步中创建的子程序

  6. 做一些测试:a)创建新的空工作簿,然后尝试关闭它。您将收到 MsgBox 调用您即将关闭的工作簿的名称。

  7. 根据需要进行调整。

重要的!类是 VBA 编程中相当困难的部分。为了更好地理解,请尝试在网络上搜索任何其他信息。

于 2013-06-01T13:00:46.073 回答
0

KazJaw 的回答是个好主意。

我有一个应用程序范围的插件,使用他概述的技术,其中包含以下代码:

Private Sub xlApp_WorkbookOpen(ByVal Wb As Excel.Workbook)

    On Error GoTo NoBookOpen:
        If Application.Calculation = xlCalculationManual And LCase(Left(ActiveWorkbook.Name, 6)) <> "export" Then
            If MsgBox("Calculation is set to Manual!" & vbCrLf & _
            "It will now be put back to Automatic", vbYesNo, "CALCULATION") = vbYes Then
                  Application.Calculation = xlCalculationAutomatic
            End If
        End If
NoBookOpen:

End Sub

此插件存在于我所有的 Excel 实例中,但您可以使用 Kazjaw 的想法,仅将插件加载到特定的 Excel 实例中。

于 2013-06-01T18:18:52.047 回答