我Workbook_BeforeClose
在This Workbook
插件的“”中,当我在同一个 excel 实例中打开多个工作簿并尝试关闭每个工作簿时,Workbook_BeforeClose
不会为实例中打开的每个此类工作簿调用,而仅针对最终工作簿调用。
无论如何都需要Workbook_BeforeClose
调用excel实例中的所有工作簿,我需要在每个工作簿关闭时执行任务?
有几个步骤可以遵循。
在 Excel IDE/VBA 环境中创建类模块。在其中一个工作簿中执行此操作,该工作簿将一直打开到最后。
将类模块名称更改为AppClass
把这段代码放在里面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
在任何标准模块中,例如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
运行在第 4 步中创建的子程序
做一些测试:a)创建新的空工作簿,然后尝试关闭它。您将收到 MsgBox 调用您即将关闭的工作簿的名称。
根据需要进行调整。
重要的!类是 VBA 编程中相当困难的部分。为了更好地理解,请尝试在网络上搜索任何其他信息。
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 实例中。