关闭任何打开的用户表单

时间:2018-02-01 12:35:09

标签: excel vba excel-vba userform

经过一次良好的搜索和一些(过度)的思考,我得出的结论是,我对一个简单的问题没有答案。

我有一个excel文档,其中包含许多(20+)个用户表单。如果您按下一个按钮(不是在用户窗体中,而只是在Excel工作表上)重新开始,它应该关闭当时打开的任何用户窗体。

我尝试使用unload me但当然没有任何打开的用户表单时出现错误。 然后我尝试添加on error resume next,如果没有用户形式,它会跳过该行,因此没有给出错误,只是继续我想要它做的事情。 (打开一个新的用户表单)。

它确实不再给我错误,但它也没有关闭任何打开的用户形式(当有一个打开时)。

所以我在这里,希望有人可以帮助我,因为我不知道该怎么做。我可以列出我想的所有用户表单,但我认为应该可以更快更快地自动化?

更多信息:永远不可能同时打开多个用户窗体。 //我想要创建的按钮会关闭所有用户形式(如果有)并将用户引导回主菜单。

提前致谢! KawaRu

2 个答案:

答案 0 :(得分:2)

如果要卸载所有表单,请尝试调用以下内容

Sub UnloadAllForms(Optional dummyVariable As Byte)
'Unloads all open user forms
    Dim i As Long
    For i = VBA.UserForms.Count - 1 To 0 Step -1
        Unload VBA.UserForms(i)
    Next
End Sub

答案 1 :(得分:0)

这有望成为我在过去5年中编写的最糟糕的代码,但它将关闭您可能拥有的任何呼吸形式(并将杀死任何变量等):

Public Sub CloseAll()
    End
End Sub

谨慎使用!

From the MSDN End Statement:

  • End语句突然停止代码执行,而不调用UnloadQueryUnloadTerminate事件或任何其他Visual Basic代码。

  • 您未放置UnloadQueryUnloadTerminate个事件和类模块的代码。

  • 销毁从类模块创建的对象,关闭使用Open语句打开的文件,并释放程序使用的内存。

  • 其他程序持有的对象引用无效。

  • End语句提供了一种强制程序停止的方法。对于Visual Basic程序的正常终止,您应该卸载所有表单。

  • 只要没有其他程序保存对从公共类模块创建的对象的引用而没有代码执行,程序就会关闭。