任何其他工作簿打开时,启用VBA的Excel 2010工作簿将不会closures

我最近完成了一个使用相当数量的VBA的Excel工作簿。 电子表格始终能够执行所有预期的function,并且在Excel中打开的唯一工作簿时不存在任何问题。 但是,当其他工作簿打开时(包括不相关的文件),工作簿将不会closures。 点击右上angular的红色“x”就不会做任何事情,也不会显示错误消息。 为了closures它,所有其他Excel窗口必须事先closures。

虽然这不会影响工作簿本身的function,但是有足够多的人会使用它,以避免在closures此工作簿之前closures其他任何工作簿带来的不便。

那么,有没有人有什么想法造成这种情况发生? 我确实有Workbook_Close()事件的代码,但是它被指定为private,并且只位于此电子表格的ThisWorkbook部分中。 我很困惑,为什么另一张没有涉及VBA的表格阻止了这个closures。 请让我知道,如果有什么我可以澄清,谢谢。

编辑 – 这是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 

我应该注意到,在Workbook_BeforeClose()事件中注释掉对PrepareWorkbook()的调用并没有解决问题。

听起来像你正在做的工作,像“编辑一个单元格”,这是防止它closures(其他事情像打开格式化popup窗口也会这样做)。

尝试select工作簿,按ESC,然后手动closures它。 如果这样做的话,那么在代码中你要“编辑一个单元格”或类似的地方寻找这个地方。

我发现我的问题的来源,这就是我如何保护工作簿。 在我的VBA代码中,我将Workbook.Protect函数的“Windows”属性设置为True; 我不确定这是否是Excel的预期function,但不pipe如何,这使得当前的工作簿不能closures,如果任何其他工作簿也打开。 将此属性更改为False可以解决问题,并且可以像通常所期望的那样closures工作簿。

所以,我build议避免将“Windows”属性设置为True,除非绝对必要,并且您完全掌握了它的实际function。