【问题标题】:VBA Excel Userforms, Show, HideVBA Excel 用户窗体,显示,隐藏
【发布时间】:2019-07-23 15:12:15
【问题描述】:

我有一个关于用户表单实例的问题。

当通过模块中的对象(例如 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

人们常说应该避免使用全局变量。这里甚至可能吗?我错过了什么吗?

【问题讨论】:

  • 奇怪的结果是什么?除了像Public/Private f As UserForm1那样在模块级别声明变量之外,我会对其进行类似的编码,并且可能是显示部分的子项以确保一致的“显示”如果表单还检查了@987654325的存在性可能会更好@ 在打开时,所以如果从 F5 运行,并确保 sub2 和 3 有一个对象可以操作。
  • 为什么你.Hideing 在模块级别,而不是作为用户窗体的一部分?另外,如果您只是UserForm2.Show,则可以显示现有实例,而无需在任何时候创建New UserForm2
  • 这是显示/隐藏用户窗体时必须阅读的内容:rubberduckvba.wordpress.com/2017/10/25/userform1-show
  • 感谢 Ricardo Diaz 发布链接。我阅读了这篇文章,但我很难完全理解他更面向 oop 的方法。我把它存起来了,会重复几次。但正如他所写的那样,有时似乎会发生意外行为,具体取决于代码的结构

标签: excel vba userform


【解决方案1】:

我真正想要的是隐藏用户窗体,但保留实例之前设置的所有值。这是我的原始代码,我现在意识到我把事情弄混了,犯了错误。我有一个“结束”的条件,这迫使 UF 不表现出来。杀死所有实例。 @Chronocidal: 事实上,我隐藏在用户窗体内的代码中。这是将设置数据从 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

【讨论】:

    猜你喜欢
    • 2017-06-15
    • 2013-09-06
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多