从第二个宏中卸载用户窗体

Unload the Userform from second macro

在我的第一个宏中,我显示了一个用户窗体 Cemealistfinal。使用后,我隐藏用户窗体以保留输入信息。

我的第二个宏,我真的不需要用户窗体中的信息所以我使用下面的代码来 Unload 已经隐藏的用户窗体。

Dim UForm As Object
For Each UForm In VBA.UserForms 
    If UForm.Visible = True Then
        UForm.Unload
    End If
Next

这行不通。我不确定如何从第二个宏中正确卸载表单,还有其他方法吗?

您的代码将卸载所有可见的用户表单。您可以通过使用变量来存储对用户表单的引用来更好地控制您正在做的事情。例如:

如果您设置一个 public 变量(在模块中声明的变量,在任何过程之外)来存储对您的用户窗体的引用,那么您可以稍后引用它:

Public oForm As UserForm1    'Public declaration of form

现在加载表单时,创建引用:

Public Sub LoadTheUserForm()
Set oForm = UserForm1
oForm.Show
End Sub

如果您稍后想关闭它,可以从直接引用它的宏中关闭它:

Public Sub CloseUserForm()
If Not (oForm Is Nothing) Then
    Unload oForm
    Set oForm = Nothing
End If
End Sub

if 语句检查用于表单的 public 变量是否正在使用,如果是,则表示表单正在使用。它卸载它,并清除引用 (Set oForm = Nothing)。如果你只想在它可见(或不可见)时关闭它,你可以添加另一个 If 语句。

Public Sub CloseInvisibleUserForm()
If Not (oForm Is Nothing) Then
    if oForm.Visible=false then
        Unload oForm
        Set oForm = Nothing
    End If
End If
End Sub

如果您在用户窗体中使用代码,您可以使用 Me 对象来引用该用户窗体

Unload Me

但是,当在单独模块的子程序中时,您可以简单地通过名称引用任何用户窗体

' General
Unload UserForm1
' Your case
Unload Cemealistfinal