如题。这让我发疯,我在网络上的其他任何地方都找不到任何参考。
我有一个加载 VBA 的工作簿,通常通过以下方式隐藏:
ThisWorkbook.Windows(1).Visible = False
但是,当工作簿关闭时,我需要它恢复到默认状态,即它的窗口是可见的,并显示一个指示用户启用宏的“特殊”工作表。这是为了在下一个用户打开禁用宏的工作簿时提供指导。在启用宏的情况下打开工作簿时,Workbook_Open 事件负责再次隐藏此消息,此时正常操作继续进行。
我的问题是,当我.Windows().Visible
从工作簿的 _BeforeClose 事件(仅在 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