在我的第一个宏中,我显示了一个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
这不起作用。我不知道如何从第二个宏正确卸载表单,还有另一种方法吗?
答案 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