vba工作簿closures跳过打开命令之前

我有三本练习册,一本父母的书,一本图书书和一本日志。

父书打开一个图书馆,然后closures图书馆。 巧合的是,图书馆在开放和closures事件之前在工作簿中都有规定,只要打开或closures,就可以写入日志。

我的问题是,当从父本以编程方式打开库时,跳过closures之前打开日志的代码将被跳过。 我没有得到任何的错误,只是简单地评估这条线而不产生任何结果。

码:

从我的父母书我运行这一行:

... Workbooks(parts_library_name).Close savechanges:=True ... 

它在图书馆书籍中运行这个代码:

 Private Sub Workbook_BeforeClose(Cancel As Boolean) Set libwkb = ThisWorkbook 'last call to backup usage sheet backup_exit_size 'exit End Sub Sub backup_exit_size() Dim bypass_close_usage_library As Boolean Application.DisplayAlerts = False file_size_at_close = FileLen(ThisWorkbook.Path & "\" & ThisWorkbook.Name) For Each Workbook In Workbooks If Workbook.Name = "usage_library.xlsx" Then bypass_close_usage_library = True Next Application.ScreenUpdating = False If bypass_close_usage_library = False Then Workbooks.Open "somepath\usage_library.xlsx" End If Workbooks("usage_library.xlsx").Worksheets("usage").Cells(next_row_usage_library, 3) = file_size_at_close Workbooks("usage_library.xlsx").Close savechanges:=True Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub 

问题是,当它到达这一行:

  Workbooks.Open "somepath\usage_library.xlsx" 

编译器只需跳过该命令。

但是,只有这样的情况下,如果我到另一本书发起的beforeClose事件。 如果我从自己closures这本书,macros运行良好,打开日志很好。

我已经试过了父母的书,像

 With library.xlsx .RunAutoMacros xlAutoClose .Close End With 

但具有相同的结果,它评估线路,然后跳过它。

思考?

我看到了同样的行为。 我甚至尝试使用WithEvents

作为解决方法,您可以在新的Excel实例中打开新的工作簿:

 Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim xlapp As New Excel.Application Dim wb As Workbook Set wb = xlapp.Workbooks.Open("\\...\test.xlsb") xlapp.Visible = True 'This line just proves that it works and can be removed' 'do stuff xlapp.Quit Set wb = Nothing Set xlapp = Nothing End Sub 

这是我现在的解决scheme:

 ... Application.Run (parts_library_name & "!backup_exit_size") Workbooks(parts_library_name).Close savechanges:=True ... 

这有效,但可能不理想。

我已经确定这个问题是与application.screenupdating = false固有的。 如果在工作簿打开命令之前closures此function,则工作得很好。