[英]Excel VBA error - Workbook does not respond when code runs with other macro-enabled workbooks open
[英]VBA-enabled Excel 2010 workbook will not close when any other workbook is open
我最近完成了一个使用大量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()的调用并不能解决问题。
听起来您正在对该工作簿执行某些操作,例如“编辑单元格”,这会阻止它关闭(打开格式弹出窗口等其他操作也可以做到这一点)。
尝试选择工作簿,按ESC,然后手动将其关闭。 如果可行,则在代码中寻找“编辑单元格”或类似内容的位置。
我发现了问题的根源,这就是我保护工作簿的方式。 在我的VBA代码中,将Workbook.Protect函数的“ Windows”属性设置为True; 我不确定这是否是Excel的预期功能,但是无论如何,这样做是否可以在其他工作簿也打开的情况下无法关闭当前工作簿。 将此属性更改为False可以解决此问题,并且我可以按通常的预期关闭工作簿。
因此,除非绝对必要,否则我建议避免将“ Windows”属性设置为True,除非您完全了解其实际功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.