VBA Excel 用户表单,显示,隐藏
VBA Excel Userforms, Show, Hide
我有一个关于用户表单实例的问题。
当通过模块中的对象构造用户窗体时(例如 set frm = new Userform2),我可以隐藏它并通过 show 方法恢复它,即使 sub 是 运行 直到结束吗?
假设:
- 用户表单由 sub1 创建
- 正在向用户表单输入值
- 使用 sub2 隐藏用户表单
- 通过 sub3 使用 show 方法恢复用户表单的所有值
在模块级别或用户窗体代码上使用显示和隐藏方法测试代码时,我遇到了非常奇怪的行为,但我最终开始工作的是在标准模块中使用全局变量和以下代码:
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
人们常说应该避免使用全局变量。在这里甚至可能吗?我错过了什么吗?
我真正想要的是隐藏用户窗体,但保持实例具有之前设置的所有值。这是我的原始代码,我现在意识到我把事情搞混了,犯了错误。我有一个 "end" 的情况,这迫使 UF 不显示 resp。杀死所有实例。
@Chronocidal:
事实上,我隐藏在用户窗体中的代码中。这是将设置数据从 UF 传输到 sheet 的按钮的一部分。但我认为躲在哪里并不重要?
现在它正在按我的预期工作。感谢大家
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
我有一个关于用户表单实例的问题。
当通过模块中的对象构造用户窗体时(例如 set frm = new Userform2),我可以隐藏它并通过 show 方法恢复它,即使 sub 是 运行 直到结束吗?
假设:
- 用户表单由 sub1 创建
- 正在向用户表单输入值
- 使用 sub2 隐藏用户表单
- 通过 sub3 使用 show 方法恢复用户表单的所有值
在模块级别或用户窗体代码上使用显示和隐藏方法测试代码时,我遇到了非常奇怪的行为,但我最终开始工作的是在标准模块中使用全局变量和以下代码:
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
人们常说应该避免使用全局变量。在这里甚至可能吗?我错过了什么吗?
我真正想要的是隐藏用户窗体,但保持实例具有之前设置的所有值。这是我的原始代码,我现在意识到我把事情搞混了,犯了错误。我有一个 "end" 的情况,这迫使 UF 不显示 resp。杀死所有实例。 @Chronocidal: 事实上,我隐藏在用户窗体中的代码中。这是将设置数据从 UF 传输到 sheet 的按钮的一部分。但我认为躲在哪里并不重要? 现在它正在按我的预期工作。感谢大家
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