Vba 关闭任何打开的用户窗体
经过仔细研究和反复思考,我得出结论,对于一个看似简单的问题,我没有答案 我有一个excel文档,其中有许多(20多个)用户表单。如果您按下一个按钮(该按钮不在userform中,而只是在excel工作表上)重新开始,它将关闭此时打开的任何userform 我尝试使用Vba 关闭任何打开的用户窗体,vba,excel,userform,Vba,Excel,Userform,经过仔细研究和反复思考,我得出结论,对于一个看似简单的问题,我没有答案 我有一个excel文档,其中有许多(20多个)用户表单。如果您按下一个按钮(该按钮不在userform中,而只是在excel工作表上)重新开始,它将关闭此时打开的任何userform 我尝试使用卸载我,但当没有任何打开的用户表单时,我当然会出错。 然后我尝试在错误恢复下一步添加,认为如果没有用户表单,它会跳过这一行,因此不会给出错误,只是继续我希望它做的事情。(打开一个新的用户表单) 它确实不再给我错误,但它也不会关闭任何打
卸载我
,但当没有任何打开的用户表单时,我当然会出错。
然后我尝试在错误恢复下一步添加,
认为如果没有用户表单,它会跳过这一行,因此不会给出错误,只是继续我希望它做的事情。(打开一个新的用户表单)
它确实不再给我错误,但它也不会关闭任何打开的用户表单(当有一个打开时)
所以我在这里,希望这里有人能帮助我,因为我不知道该怎么办。我可以列出我想的所有用户表单,但我想应该可以更快、更自动地完成
更多信息:不可能同时打开多个userform我想创建的按钮会关闭所有的userforms(如果有),并引导用户返回主菜单
提前谢谢!
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
如果要卸载所有表单,请尝试调用以下命令
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中的任何呼吸表单(并将杀死任何变量等): 小心使用
语句突然停止代码执行,而不调用End
、Unload
、或QueryUnload
事件或任何其他Visual Basic代码Terminate
- 您在窗体和类模块的
卸载
、查询加载
和终止
事件中放置的代码不会执行 - 从类模块创建的对象被销毁,使用Open语句打开的文件被关闭,程序使用的内存被释放
- 其他程序持有的对象引用无效
语句提供了一种强制程序停止的方法。对于Visual Basic程序的正常终止,应卸载所有窗体End
- 只要没有其他程序持有对从公共类模块创建的对象的引用,并且没有代码执行,程序就会关闭
语句突然停止代码执行,而不调用End
、Unload
、或QueryUnload
事件或任何其他Visual Basic代码Terminate
- 您在窗体和类模块的
卸载
、查询加载
和终止
事件中放置的代码不会执行 - 从类模块创建的对象被销毁,使用Open语句打开的文件被关闭,程序使用的内存被释放
- 其他程序持有的对象引用无效
语句提供了一种强制程序停止的方法。对于Visual Basic程序的正常终止,应卸载所有窗体End
- 只要没有其他程序持有对从公共类模块创建的对象的引用,并且没有代码执行,程序就会关闭
- 这可能是我在过去5年中编写的最糟糕的代码,但它将关闭Excel中的任何呼吸表单(并将删除任何变量等):
小心使用
end
的概念。它停止并杀死任何东西。有时它很有用,就像用大锤敲碎核桃。它可以工作,但是没有可食用的胡桃。问题是它不想同时执行以下代码。所以这不是一个真正的解决方案,但无论如何,我不知道这一点,所以谢谢:)@KawaRu-你说的“不想要”是什么意思?我的意思是它真的在结尾处停止,而不继续其他代码。@KawaRu-这是end
的概念。它停止并杀死任何东西。有时它很有用,就像用大锤敲碎核桃。它有效,但没有可食用的胡桃。谢谢你,它有效!这是否只计算打开的用户表单?从0开始?这就是为什么要执行VBA.UserForms.Count-1
这只计算打开的用户表单,是的,第一个用户表单将是0谢谢!这是否只计算打开的用户表单?从0开始?这就是为什么要执行VBA.UserForms.Count-1
这只计算打开的用户表单,是的,第一个用户表单将是0Unload Me
将不起作用,因为Me
仅在用户表单的代码模块的范围内。因此,工作表上的按钮无法调用Unload Me
,因为没有Me
要卸载:DUnload Me
将不起作用,因为Me
仅在用户表单的代码模块范围内。因此,工作表上的按钮无法调用Unload Me
,因为没有Me
可卸载:D