我最近完成了一个使用大量VBA的Excel工作簿。电子表格始终能够执行所有预期的功能,并且只有在Excel中打开的唯一工作簿时才会出现问题。但是,当任何其他工作簿打开(包括不相关的文件)时,工作簿将不会关闭。点击红色" x"在右上角根本不做任何事情,并且不显示任何错误消息。要关闭它,必须事先关闭所有其他Excel窗口。
虽然这并没有减损工作簿本身的功能,但是有足够多的人会使用它,我希望避免在关闭这个工作簿之前不必关闭任何其他工作簿的不便。< / p>
那么,有没有人对导致这种情况发生的原因有任何想法?我确实有Workbook_Close()事件的代码,但这被指定为私有,只位于此电子表格的ThisWorkbook部分。我很困惑为什么另一张没有VBA的纸张会阻止这张纸张关闭。如果有任何我可以澄清的内容,请告诉我。谢谢。
编辑 - 以下是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()的调用并没有解决问题。
答案 0 :(得分:0)
听起来你正在对该工作簿做一些事情,例如“编辑一个单元格”,这会阻止它关闭(其他诸如打开格式化弹出窗口也会这样做)。
尝试选择工作簿,按ESC键,然后手动关闭它。如果可行,则在代码中查找“编辑单元格”或类似内容的位置。
答案 1 :(得分:0)
我找到了问题的根源,这是我保护工作簿的方式。在我的VBA代码中,我将Workbook.Protect函数的“Windows”属性设置为True;我不确定这是否是Excel的预期功能,但无论如何,这使得如果任何其他工作簿也打开,则无法关闭当前工作簿。将此属性更改为False可以解决问题,我可以像通常预期的那样关闭工作簿。
所以,我建议避免将“Windows”属性设置为True,除非绝对必要,并且您完全掌握其实际功能。