VBA Excel用户窗体,显示,隐藏

时间:2019-03-01 14:56:28

标签: excel vba userform

我对用户表单的实例有疑问。

当通过模块中的对象构造用户窗体时(例如set frm = new Userform2),即使子程序运行到最后,我也可以通过show方法将其隐藏并还原吗?

让我们说:

  1. 由sub1创建用户表单
  2. 将值输入用户表单
  3. 使用sub2隐藏用户窗体
  4. 使用show方法将sub3的所有值还原为用户窗体

当在模块级别或用户窗体代码上使用show和hide方法测试代码时,我的行为确实很奇怪,但是最终我要使用的是在标准模块中使用全局变量和以下代码:

Global frm As UserForm2
Option Explicit

Sub sub1()
Set frm = New UserForm2
    With frm
        .Show vbModeless
    End With
End Sub

Sub sub2()
    With frm
        .Hide
    End With
End Sub

Sub sub3()
    With frm
        .Show vbModeless
    End With
End Sub

经常说应该避免使用全局变量。这里有可能吗?我想念什么吗?

1 个答案:

答案 0 :(得分:0)

我真正想要的是隐藏用户窗体,但将实例设置为之前设置的所有值。这是我的原始代码,现在我意识到我把事情搞混了并且出错了。我处于“终结”状态,这迫使用友不要表现出回应。杀死所有实例。 @Chronocidal: 实际上,我隐藏在UserForm的代码中。这是按钮的一部分,该按钮将设置数据从UF传输到图纸。但是我认为隐藏在哪里并不重要? 现在它正在按我的预期工作。谢谢大家

Global myfrm As FormFillInformation
Option Explicit

Sub InitUserFormGeneralInformation()
Dim chkfrm As Boolean
chkfrm = CheckFrmIsHidden
If chkfrm = True Then
    myfrm.Show vbModeless
    End '<<<<<========== completely wrong but overseen
Else
    Set myfrm = New FormFillInformation
    myfrm.Show vbModeless

End If

End Sub


Function CheckFrmIsHidden() As Boolean
Dim frm As Object
CheckFrmIsHidden = False
For Each frm In VBA.UserForms
 If frm.Name = "FormFillInformation" Then
    CheckFrmIsHidden = True
 End If
Next
End Function