2015-06-29 3 views
1

Недавно я закончил книгу 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() не решить эту проблему.

+0

Какой код у вас есть в событии «Workbook_BeforeClose»? – Rory

+0

@Rory Я отправил код - есть ли отдельное событие для BeforeClose, или это то же самое, что и близко? – Shoeheart

+0

В Excel нет события «Workbook_Close». Я предположил, что это была опечатка с вашей стороны. Код, который у вас есть, не должен ** запускаться **, если он не вызван каким-либо другим кодом. – Rory

ответ

0

Я нашел источник своей проблемы, которая заключается в том, как я защищаю книгу. В моем коде VBA я установил свойство «Windows» для функции Workbook.Protect равным True; Я не уверен, что это предназначенные для Excel функции или нет, но независимо от того, что это сделало так, что текущая рабочая книга не может быть закрыта, если какая-либо другая книга также была открыта. Изменение этого свойства на False устранило проблему, и я могу закрыть книгу, как обычно ожидалось.

Итак, я предлагаю избегать когда-либо устанавливать свойство «Windows» на «Истина», если это абсолютно необходимо, и вы полностью понимаете его фактическую функцию.

0

Похоже, что вы что-то делаете с этой книгой, например, «редактируете ячейку», которая препятствует ее закрытию (другие вещи, такие как вскрытие всплывающих окон, также будут делать это).

Пытается выбрать книгу, нажав ESC, а затем вручную закрыв ее. Если это работает, найдите место в вашем коде, где вы «редактируете ячейку» или что-то подобное.

+0

Этот метод ничего не изменил, к сожалению. Я не уверен, связано ли это напрямую с редактированием ячейки, потому что проблема возникает только при открытии другой книги. Когда этот лист является единственным открытым, его можно закрыть так же, как обычно. – Shoeheart

+0

Чтобы быть понятным, вы попробовали ESC на «другой книге»? Это то, что, вероятно, мешает вам закрыться. – Charlie

+0

Нажатие кнопки на обеих или обеих книгах, а затем попытка закрыть одно из них не имеет никакого эффекта. – Shoeheart

Смежные вопросы