我在我的插件的“Workbook_BeforeClose
”中有This Workbook
,当我在同一个excel实例中打开多个工作簿并尝试关闭其中的每个工作簿时,Workbook_BeforeClose
无法获取要求每个这样的工作簿在实例中打开,但仅限于最终的工作簿。
是否有人要求Workbook_BeforeClose
调用excel实例中的所有工作簿,我需要在每个工作簿中执行任务?
答案 0 :(得分:3)
要遵循的步骤很少。
在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编程中比较困难的一部分。为了更好地理解,请尝试在网络中搜索任何其他信息。
答案 1 :(得分: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实例中。