我对用户表单的实例有疑问。
当通过模块中的对象构造用户窗体时(例如set frm = new Userform2),即使子程序运行到最后,我也可以通过show方法将其隐藏并还原吗?
让我们说:
当在模块级别或用户窗体代码上使用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
经常说应该避免使用全局变量。这里有可能吗?我想念什么吗?
答案 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