为什么我的表格仍在记忆中

时间:2018-05-28 07:16:03

标签: excel vba forms excel-vba excel-2016

我有以下代码打开表单,然后做一些事情。

Sub lag_ny_a3()
    Dim frm As ufNyA3

    Set frm = New ufNyA3
    frm.Show

    If Not frm Is Nothing Then
        MsgBox("Doing stuff")
        Unload frm
    End If
End Sub

然后我的表格中有以下代码

Private Sub cmdAvbryt_Click()
    Unload Me
End Sub

但是,即使在表单中单击cmdAvbryt按钮,第一个代码段也会输入if语句,就好像表单没有被卸载一样。为什么会这样,如果按下cmdAvbryt按钮,如何防止执行if语句中的代码?

2 个答案:

答案 0 :(得分:4)

即使您的frm变量不是Nothing,表单也会被卸载。在frm.Show

之前和之后添加一点检查
Debug.Print VBA.UserForms.Count
frm.Show
Debug.Print VBA.UserForms.Count

并且您将看到它不在已加载表单的列表中。如果将对象变量设置为Nothing,则不会执行"做东西"

答案 1 :(得分:3)

实际上,在用户表单卸载后,声明为frm的{​​{1}}不会变为ufNyA3。尝试使用以下Nothing函数来检查是否已加载用户表单:

IsUserFormLoaded()