Events XL2003:更改ThisWorkbook.Windows()。工作簿关闭前事件期间的Visible属性会阻止工作簿关闭

Events XL2003:更改ThisWorkbook.Windows()。工作簿关闭前事件期间的Visible属性会阻止工作簿关闭,events,excel,excel-2003,visible,vba,Events,Excel,Excel 2003,Visible,Vba,作为标题。这让我抓狂,我在网上其他任何地方都找不到它的任何参考资料 我有一个加载VBA的工作簿,该工作簿通常通过以下方式隐藏: ThisWorkbook.Windows(1).Visible = False 但是,当工作簿关闭时,我需要它恢复到默认状态,即其窗口可见,并显示指示用户启用宏的“特殊”工作表。这是为了在下一个用户在禁用宏的情况下打开工作簿时提供指导。在启用宏的情况下打开工作簿时,工作簿\u Open事件将再次隐藏此消息,此时正常操作将继续 我的问题是,当我从工作簿的_BeforeC

作为标题。这让我抓狂,我在网上其他任何地方都找不到它的任何参考资料

我有一个加载VBA的工作簿,该工作簿通常通过以下方式隐藏:

ThisWorkbook.Windows(1).Visible = False
但是,当工作簿关闭时,我需要它恢复到默认状态,即其窗口可见,并显示指示用户启用宏的“特殊”工作表。这是为了在下一个用户在禁用宏的情况下打开工作簿时提供指导。在启用宏的情况下打开工作簿时,工作簿\u Open事件将再次隐藏此消息,此时正常操作将继续

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

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

我还尝试过不以任何方式更改窗口的可见性,希望随后在禁用宏的情况下打开工作簿会导致忽略该属性,但事实并非如此

我能做的唯一一件事就是将
ThisWorkbook.Close
作为\u BeforeClose事件本身的最后一行,但这会导致不稳定,表现为Excel退出后偶尔出现“Excel意外关闭,是否要恢复/重新启动?”消息

感谢您的帮助/指点。我无法访问更高版本的Excel

我的代码:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    Application.ScreenUpdating = False

    Call cleanUp

    Application.ScreenUpdating = True

End Sub

Private子清理()
将s设置为工作表
shtZNM.Visible=xl可见
对于此工作簿中的每个工作表
如果s不是shtZNM,则s.可见=XLSHEETSHIDDED
下一个s
使用此工作簿。Windows(1)
.DisplayWorkbookTabs=False
.DisplayHorizontalScrollBar=False
.DisplayVerticalScrollBar=False

.Visible=True“运行隐藏的excel实例或尝试在没有UI的情况下运行它通常会带来麻烦。。。您好,詹姆斯,谢谢您的回复。实际上,我并没有隐藏Excel或试图删除其UI—我只是在Excel中隐藏工作簿窗口。很抱歉,如果我的问题不清楚这一点。顺便提一下,其中一个选项是,如果更改visible属性,则应取消关闭事件并重新安排它(可能使用ontime将执行延迟一秒钟以完成)。我没有代码,或者我会把它作为答案发布。我的错是,很明显我只是有点难以思考。虽然一般来说,在宏和事件中隐藏这些东西还是很麻烦的,你会发现。是的,多年来我对它有一些经验,我已经到了厌倦它的阶段。如果工作簿是我重新设计的,我会以某种方式取消该要求,但这不是一个选项。关于OnTime:它可以在许多情况下起到救援作用,即使它确实让事情变得有点混乱,但在这种情况下,我不能使用它。由于有问题的工作簿是隐藏的,用户通常只有退出Excel才能关闭它。因此,任何实时解决方案都必须以编程方式退出Excel,这是我绝对希望避免的。
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