vba在卸载时以子用户窗体卸载所有用户窗体

vba在卸载时以子用户窗体卸载所有用户窗体,vba,Vba,我有一个userform,它加载另一个userform Private Sub CommandButtonAddRule_Click() UserFormAddRule.Show End Sub 如果UserFormAddRule使用“x”或带有 Unload Me 代码在.show命令之后返回,但随后也关闭第一个userform。这是绝对不能发生的。如何防止第一个userform也关闭?Dim UForm as Object Dim UForm As Object Dim i A

我有一个userform,它加载另一个userform

Private Sub CommandButtonAddRule_Click()
    UserFormAddRule.Show 
End Sub
如果
UserFormAddRule
使用“x”或带有

Unload Me
代码在.show命令之后返回,但随后也关闭第一个userform。这是绝对不能发生的。如何防止第一个userform也关闭?

Dim UForm as Object
Dim UForm As Object
Dim i As Integer
i = 0
For Each UForm In VBA.UserForms
    Debug.Print UForm.Name
    If UForm.Name <> "FormNameThatMustBeLeftOpen"
        UForm.Hide
        Unload VBA.UserForms(i)
        i = i + 1
    End If
Next
作为整数的Dim i i=0 对于VBA.UserForms中的每个UForm Debug.Print UForm.Name 如果是UForm.Name“formnamethastbeleftopen” 隐匿 卸载VBA.UserForms(i) i=i+1 如果结束 下一个
您好,以上已经过尝试和测试,应该可以正常工作。控件结构可以是if语句、select case或do while。逻辑没有区别。如果您需要使用不同控制结构或完整示例的相同实现,请告诉我

或者你可以

Dim i As Long
For i = VBA.UserForms.Count - 1 To 0 Step -1
    If UForm.Name <> "FormNameThatMustBeLeftOpen"
        Unload VBA.UserForms(i)
    End If
Next i
Dim i尽可能长
对于i=VBA.UserForms.Count-1到0步骤-1
如果是UForm.Name“formnamethastbeleftopen”
卸载VBA.UserForms(i)
如果结束
接下来我

在打开或不打开VB编辑器的情况下显示和卸载子项

在父窗体中,若要创建子项,并假设子项是模态的,因此在子项可见(默认情况下)时无法与父项交互,请使用:

将frm变为frm儿童

设置frm=新frmChild

。。。然后调用frmChild的公共方法来初始化它从父窗体需要的任何变量,以便执行父窗体委托给子窗体的任何任务

在子窗体中,init方法的最后一行应该是:

给我看

然后在子对象中使用:

我,藏起来

。。。当你在孩子体内完成时

然后在父窗体中,在调用初始化并显示子级的子级公共方法后,立即使用以下行卸载子级并释放内存:

设置frm=无


父窗体将保持打开状态。

它不应该这样做。在干净的2个用户窗体上尝试它。