XL2003:更改ThisWorkbook.Windows()。Workbook_BeforeClose事件过程中的Visible属性可防止工作簿closures

如题。 这让我发疯,在networking上的其他任何地方我都找不到任何引用。

我有一个VBA-laden工作簿通常隐藏通过使用:

ThisWorkbook.Windows(1).Visible = False 

但是,当工作簿closures时,我需要它恢复到一个默认状态,其窗口是可见的,并显示一个“特殊的”工作表,指示用户启用macros。 这是为下一个用户在禁用macros的情况下打开工作簿提供指导。 当工作簿打开并启用macros时,Workbook_Open事件会负责隐藏此消息,此时正常操作将继续。

我的问题是,当我从工作簿的_BeforeClose事件中更改.Windows().Visible属性(只有在Excel退出时才会发生),工作簿仍保留在屏幕上。 我已经确认,它确实设置了导致这种行为的.Windows().Visible属性。

我已经尝试使用ThisWorkbook.IsAddin属性,因为这与从用户视图中“隐藏”工作簿具有相同的效果,但这会导致完全相同的行为。

我也尝试过不以任何方式更改窗口的可见性,希望随后打开禁用macros的工作簿将导致该属性被忽略,但事实并非如此。

我唯一能做的就是让ThisWorkbook.Close作为_BeforeClose事件本身的最后一行,但这会导致不稳定,这种情况偶尔出现“Excel意外closures,你想恢复/重启?” Excel退出后的错误消息。

任何帮助/指针感激地接受。 我无权访问Excel的更高版本。

我的代码:

 Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.ScreenUpdating = False Call cleanUp Application.ScreenUpdating = True End Sub 

 Private Sub cleanUp() Dim s As Worksheet shtZNM.Visible = xlSheetVisible For Each s In ThisWorkbook.Sheets If Not s Is shtZNM Then s.Visible = xlSheetHidden Next s With ThisWorkbook.Windows(1) .DisplayWorkbookTabs = False .DisplayHorizontalScrollBar = False .DisplayVerticalScrollBar = False .Visible = True '<==REMOVING THIS ALLOWS _BEFORECLOSE TO WORK AS EXPECTED End With On Error Resume Next Application.CommandBars("QCS").Delete Err.Clear Application.CommandBars("Worksheet Menu Bar").Controls("QCS").Delete Me.Save End Sub