【发布时间】: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