XL2003:更改ThisWorkbook.Windows()。Workbook_BeforeClose事件期间的可见属性阻止工作簿关闭

时间:2013-02-13 12:51:39

标签: events excel-vba excel-2003 visible excel vba

作为标题。这让我很生气,我无法在网络上的任何其他地方找到它。

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

0 个答案:

没有答案