【问题标题】:VBA-enabled Excel 2010 workbook will not close when any other workbook is open打开任何其他工作簿时,启用 VBA 的 Excel 2010 工作簿不会关闭
【发布时间】:2015-09-16 02:18:36
【问题描述】:

我最近完成了一个使用大量 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() 的调用并不能解决问题。

【问题讨论】:

  • Workbook_BeforeClose 事件中有什么代码?
  • @Rory 我发布了代码 - BeforeClose 是否有单独的事件,或者这与关闭相同?
  • Excel 中没有 Workbook_Close 事件。我认为这是你的错字。您拥有的代码不应该永远运行,除非它被其他代码调用。
  • 谢谢,我解决了这个问题,但我原来的问题仍然存在。

标签: excel excel-2010 vba


【解决方案1】:

听起来您正在对该工作簿执行某些操作,例如“编辑单元格”,这会阻止其关闭(其他操作,例如打开格式弹出窗口也会执行此操作)。

尝试选择工作簿,按 ESC,然后手动关闭它。如果可行,则在代码中查找“编辑单元格”或类似内容的位置。

【讨论】:

  • 不幸的是,这种方法没有改变任何东西。我不确定它是否与编辑单元格直接相关,因为只有在打开另一个工作簿时才会出现问题。当此工作表是唯一打开的工作表时,可以正常关闭。
  • 明确地说,您在“另一个工作簿”上尝试了 ESC?那可能是阻止您关闭的原因。
  • 在一个或两个工作簿上按转义键,然后尝试关闭有问题的工作簿没有任何效果。
【解决方案2】:

我找到了问题的根源,这与我保护工作簿的方式有关。在我的 VBA 代码中,我将 Workbook.Protect 函数的“Windows”属性设置为 True;我不确定这是否是 Excel 的预期功能,但无论如何,如果任何其他工作簿也打开,则无法关闭当前工作簿。将此属性更改为 False 解决了问题,并且我可以按照通常预期的方式关闭工作簿。

因此,我建议避免将“Windows”属性设置为 True,除非绝对必要并且您完全掌握了它的实际功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    相关资源
    最近更新 更多