繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM