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

eir*_*ude 7 forms excel vba 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
Run Code Online (Sandbox Code Playgroud)

然后我在表单中有以下代码

Private Sub cmdAvbryt_Click()
    Unload Me
End Sub
Run Code Online (Sandbox Code Playgroud)

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

ome*_*pes 3

实际上,frm声明为在用户窗体卸载后ufNyA3不会变成。Nothing尝试使用以下IsUserFormLoaded()函数来检查用户表单是否已加载:

Sub lag_ny_a3()

    Dim frm As ufNyA3

    Set frm = New ufNyA3
    frm.Show

    If IsUserFormLoaded("ufNyA3") Then
        MsgBox ("Doing stuff")
        Unload frm
    Else
        MsgBox ("Unloaded")
    End If

End Sub

Function IsUserFormLoaded(UserFormName As String) As Boolean

    Dim frm

    For Each frm In UserForms
        IsUserFormLoaded = LCase(frm.Name) = LCase(UserFormName)
        If IsUserFormLoaded Then Exit For
    Next

End Function
Run Code Online (Sandbox Code Playgroud)