使用Unload Me关闭用户窗体无效。

24

当用户单击提交按钮并完成操作时,我需要使用VBA关闭Excel用户窗体。

如何从用户窗体本身关闭一个用户窗体?

我已经尝试过这个方法,但它返回一个361错误。

Unload Me

2
需要更多信息。DoCmd是MS-Access命令,而不是MS-Excel命令。您是否正在尝试从Access关闭Excel用户窗体? - Siddharth Rout
@SiddharthRout 我在做研究时也是这么想的 - 只是在许多论坛上都建议这样做。 - Kian
1
你能详细解释一下你究竟想要做什么吗? - Siddharth Rout
1
如果您是在Excel用户窗体中执行此操作,则“Unload Me”是正确的方法。一定有其他原因。您能否分享btnSubmit_Click的完整代码? - Siddharth Rout
1
请不要将答案编辑到问题中。相反,请在下面发表一个单独的答案并接受它。 - Matt
显示剩余4条评论
4个回答

24

如置顶答案所述,我在按钮控件的代码后面使用了以下内容。

Private Sub btnClose_Click()
    Unload Me
End Sub

在这样做时,它不会尝试卸载控件,而是卸载包含按钮控件的用户窗体。"Me"关键字指的是用户窗体对象,即使从用户窗体上的控件调用也是如此。如果您使用此技术时遇到错误,可能有几个可能的原因。

  1. 您可能将代码输入到了错误的位置(例如单独的模块)

  2. 您可能正在使用旧版本的Office。我正在使用Office 2013。我注意到VBA随着时间而改变。

从我的经验来看,DoCmd.... 方法更具体地适用于MS Access中的宏功能,但在Excel VBA中并不常用。

在正常(开箱即用)条件下,上述代码应该能够正常工作。


推荐阅读文章UserForm1.Show?,解释为什么使用Unload Me(以及UserForm的默认实例:-)不是最好的选择。 - T.M.

11

没有看到您的完整代码,无法确定地回答。通常在尝试卸载控件而不是窗体时会出现错误。

请确保您没有在括号中使用"me"。

此外,如果您可以发布用户窗体的完整代码,则会极大地帮助。


但是我也发了一篇帖子,指出代码“Unload Me”返回了361错误。 - Kian
1
嗨Kian,那不是用户窗体的完整代码,那只是提交按钮的代码 - 你有类级别的声明等等...你能发布包括无法工作的Unload me在内的用户窗体的完整代码吗? - SWa
没有任何类级别的声明或其他内容;但它突然开始工作了,所以我不知道问题出在哪里。 - Kian
1
啊,好的,最好不要声明全局变量,除非你真的需要,在我的经验中,它们可能会引起更多问题,而且通常是不必要的 :) - SWa
1
我知道这是一个旧答案,但我在括号中加了Me,它从未起作用。我读了这个并把它拿出来了,现在它可以工作了。为什么会这样?我以为函数/过程可以带或不带括号输入,那么为什么会有这种差异呢? - Mike
显示剩余5条评论

4

Unload Me只有在从用户窗体自身调用时才起作用。如果您想要从另一个模块代码(或用户窗体)关闭窗体,则需要使用Unload函数+要关闭的用户窗体名称。

希望这有所帮助。


1
它从用户窗体中调用。 - Kian
1
你能否解释一下为什么它不起作用?因为我已经知道Unload Me只有在从要关闭的用户窗体中调用时才起作用。 - Kian
1
Kian,例如卸载Userform1怎么办? - Tomamais
https://dev59.com/LGkx5IYBdhLWcg3wA_1S#lT0DoYgBc1ULPQZFl1Qq - Kian

-1

需要注意的是,如果您在用户表单上将按钮分组在一起,即使您打算点击的按钮不同,它也可以链接到组中的另一个按钮。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接