我有三本工作簿,一个父簿,一个库簿和一个日志簿。
父簿打开一个库,然后关闭该库。巧合的是,库簿中有一个功能,当它被打开或关闭时,在打开和关闭之前向日志簿写入内容。
我的问题是,当从父簿以编程方式打开库时,关闭前打开日志簿的代码被跳过。我没有收到任何错误提示,只是简单地计算了该行并没有产生任何结果。
代码:
从我的父簿中,我运行以下代码:
问题在于当代码执行到这一行时:
父簿打开一个库,然后关闭该库。巧合的是,库簿中有一个功能,当它被打开或关闭时,在打开和关闭之前向日志簿写入内容。
我的问题是,当从父簿以编程方式打开库时,关闭前打开日志簿的代码被跳过。我没有收到任何错误提示,只是简单地计算了该行并没有产生任何结果。
代码:
从我的父簿中,我运行以下代码:
...
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事件,情况就不同了。如果我从书本本身关闭它,宏将正常运行并成功打开日志书。
我尝试了一个来自父书本的with语句,例如
With library.xlsx
.RunAutoMacros xlAutoClose
.Close
End With
但是如果有相同的结果,它会评估该行然后跳过它。
您有什么想法?