从第二个宏卸载Userform

时间:2017-08-22 07:51:05

标签: vba excel-vba word-vba userform excel

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

我的第二个宏,我并不需要Userform中的信息,所以我使用以下代码来Unload已经隐藏的Userform。

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

这不起作用。我不知道如何从第二个宏正确卸载表单,还有另一种方法吗?

2 个答案:

答案 0 :(得分:1)

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

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

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语句检查您用于表单的公共变量是否正在使用中,如果是,则表示该表单正在使用中。它卸载它,并清除引用(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

答案 1 :(得分:1)

如果您在UserForm中使用代码,则可以使用Me对象来引用该UserForm

Unload Me

但是,当在单独模块中的sub中时,您可以简单地通过其名称引用任何UserForm

' General
Unload UserForm1
' Your case
Unload Cemealistfinal