vba在子用户窗体中卸载所有用户表单

时间:2016-01-31 21:26:34

标签: vba

我有一个用户窗体加载另一个用户窗体

Private Sub CommandButtonAddRule_Click()
    UserFormAddRule.Show 
End Sub

如果UserFormAddRule使用“x”或带

的按钮
Unload Me

代码在.show命令之后返回,但随后关闭第一个userform。这是不可能发生的事情。如何阻止第一个用户窗体关闭?

2 个答案:

答案 0 :(得分:0)

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

您好上面已经尝试过,经过测试并且应该可行。你的contrl结构可以是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

答案 1 :(得分:0)

使用或不使用VB编辑器显示和卸载子项

在父表单中,要创建子项,并假设子项是模态的,以便在子项可见时无法与父项进行交互(默认情况下),请使用:

dim frm as frmChild

设置frm = new frmChild

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

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

me.show

然后在孩子内部使用:

me.hide

......当你在孩子内部完成时。

然后在父表单中,在调用初始化并显示子项的子公共方法之后,立即使用以下行卸载子项和空闲内存:

设置frm =无

父表格将保持开放状态。