作为标题。这让我很生气,我无法在网络上的任何其他地方找到它。
我有一个载有VBA的工作簿,通常使用以下内容隐藏:
ThisWorkbook.Windows(1).Visible = False
但是,当工作簿关闭时,我需要它恢复到默认状态,从而显示其窗口,并显示指示用户启用宏的“特殊”工作表。这是为了在下一个用户打开禁用宏的工作簿时提供指导。在启用宏的情况下打开工作簿时,Workbook_Open事件会再次隐藏此消息,此时正常操作将继续进行。
我的问题是,当我从工作簿的_BeforeClose事件更改.Windows().Visible
属性时(仅在Excel退出时才会发生),工作簿将保留在屏幕上。我已经确认它肯定会设置导致此行为的.Windows().Visible
属性。
我尝试使用ThisWorkbook.IsAddin
属性,因为这与从用户视图中“隐藏”工作簿具有相同的效果,但这会导致完全相同的行为。
我也尝试过不会以任何方式更改窗口的可见性,希望随后打开禁用宏的工作簿将导致属性被忽略,但事实并非如此。
我能做的唯一一件事就是将ThisWorkbook.Close
作为_BeforeClose事件本身的最后一行,但这会导致不稳定,这表现为偶尔“Excel已意外关闭,是吗?想恢复/重启?“ 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