Недавно я закончил книгу Excel, в которой используется большое количество VBA. Электронная таблица всегда может выполнять все намеченные функции, и нет проблем, когда она является единственной книгой, открытой в Excel. Однако, когда какая-либо другая рабочая книга открыта (несвязанные файлы включены), рабочая книга не будет закрыта. Нажатие на красный «x» в верхнем правом углу просто ничего не делает, и никаких сообщений об ошибках не отображается. Чтобы закрыть его, все другие окна Excel должны быть закрыты заранее.Рабочая книга Excel 2010 с поддержкой VBA не закрывается при открытии любой другой книги
Хотя это не умаляет функциональности самой книги, достаточно людей будет использовать ее, поэтому я хочу избежать неудобств, связанных с закрытием любых других книг, которые они открыли, прежде чем они смогут закрыть эту книгу.
Итак, есть ли у кого-нибудь идеи относительно того, что вызывает это? У меня есть код для события Workbook_Close(), но он обозначается как закрытый и находится только в части ThisWorkbook этой таблицы. Я смущен, почему другой лист без участия VBA не позволяет этому закрыться. Пожалуйста, дайте мне знать, если есть что-нибудь, что я могу прояснить, спасибо.
EDIT - Вот код для события Workbook_BeforeClose():
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Me.Saved = False Then Me.Save
Call PrepareWorkbook
End Sub
Sub PrepareWorkbook()
Application.ScreenUpdating = False
Call UnprotectWorkbook
Dim masterSheet As Worksheet
Set masterSheet = ActiveWorkbook.Worksheets("PLANNING")
For Each sheet In ActiveWorkbook.Worksheets
If Not (sheet.Name = "README" Or sheet.Name = "PLANNING" Or sheet.Name = "PREV") Then
sheet.Visible = xlSheetVeryHidden
End If
If (sheet.Name = "README" Or sheet.Name = "PLANNING" Or sheet.Name = "PREV" Or sheet.Name = "ADMIN") Then
Call ProtectSheet(ActiveWorkbook.Worksheets(sheet.Name))
Else
Call ProtectPlannerSheet(ActiveWorkbook.Worksheets(sheet.Name))
End If
Next
If ActiveWorkbook.ActiveSheet.Name <> "PLANNING" Then
masterSheet.Select
End If
Call ProtectWorkbook
Application.ScreenUpdating = True
End Sub
Я хотел бы отметить, что закомментировать вызов PrepareWorkbook() в случае Workbook_BeforeClose() не решить эту проблему.
Какой код у вас есть в событии «Workbook_BeforeClose»? – Rory
@Rory Я отправил код - есть ли отдельное событие для BeforeClose, или это то же самое, что и близко? – Shoeheart
В Excel нет события «Workbook_Close». Я предположил, что это была опечатка с вашей стороны. Код, который у вас есть, не должен ** запускаться **, если он не вызван каким-либо другим кодом. – Rory