我有一个带有_BeforeClose事件的工作簿,它工作正常。当用户手动更新工作簿上的项目并关闭它时,该事件将启动一个消息框以及一个IE网页,以提示用户更新SharePoint列表上的相应项目。那里没有问题。
但是,我也通过外接程序访问文件。外接程序通过UserForm接受输入,然后通过_BeforeClose事件(通过标准Workbook.Open,Workbook.Range.Value和Workbook.Close方法)将结果写入工作簿。在这些情况下,我不希望该事件启动IE页面或MsgBox。
我尝试使用外接程序项目中的全局布尔标志来执行此操作,请在感兴趣的工作簿中引用外接程序项目,并在事件期间检查该标志。但是,在事件调用期间,变量始终为空,因此我不能正确设置全局关系。 (另外,如果可能的话,我宁愿不引用其他项目也可以这样做。)
有什么想法吗?以下是相关代码:
附加项目:
Public bCallingFromProcedure As Boolean
Private Sub buttonUpdateEntry_Click() 'code runs when UserForm 'Update' is clicked
'code that reads values of UserForm controls
bCallingFromProcedure = True
Dim inputBook As Workbook: Set inputBook = Workbooks.Open("path\Workbook With Event.xlsm")
' code that writes to Workbook With Event
inputBook.Close SaveChanges:=True
bCallingFromProcedure = False
End Sub
带有事件的工作簿:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If bCallingFromProcedure Then
Exit Sub ' don't load the IE page if this file is open from a calling procedure (i.e. only load when manually closing)
End If
' code continues for launching IE page
End Sub