2

如题。这让我发疯,我在网络上的其他任何地方都找不到任何参考。

我有一个加载 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
4

0 回答 0