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