通过VBA打开/关闭工作簿时,防止Workbook_BeforeClose事件

时间:2018-11-29 19:56:03

标签: excel vba

我有一个带有_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

0 个答案:

没有答案