关闭任何打开的用户表单

Closing any open userform

经过仔细搜索和一些(过度)思考后,我得出结论,我无法回答这个看似简单的问题。

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

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

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

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

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

提前致谢! KawaRu

当您要卸载所有表单时尝试调用以下命令

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

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

Public Sub CloseAll()
    End
End Sub

慎用!

From the MSDN End Statement:

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

  • 您放置在表单和 class 模块的 UnloadQueryUnloadTerminate 事件中的代码不会执行。

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

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

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

  • 只要没有其他程序持有对从您的 public class 模块创建的对象的引用并且没有代码执行,您的程序就会关闭。