【问题标题】:EXCEL VBA regarding functions & userformsEXCEL VBA 关于功能和用户表单
【发布时间】:2012-12-06 09:48:55
【问题描述】:

我是 Excel VBA 编程的新手,因此在我自己的项目中遇到了一些困难。

长话短说,我在每个用户窗体中有 10 个用户窗体和 10 个文本框,它们的文本框名称相同。

我是否可以创建一个可以在每个用户窗体中调用它的函数,这样我就不必为每个用户窗体手动编写代码。关于该功能,它将重置TextBox的值,并将其恢复到“初始”状态。

这就是我的问题。任何帮助将不胜感激。在此先感谢。

【问题讨论】:

    标签: vba excel userform


    【解决方案1】:

    谭,

    您应该考虑使用类模块。实际上我最近才了解它们,它们是一种非常有效的方式来管理具有类似构造控件的多个用户表单。

    去这里:VBA USERFORM: PREVENT COMBOBOX ESCAPE ON KEYDOWN

    或在这里:EXCEL VBA: dblClick, Repetitive Code Improvement

    这些类模块如何工作的基本原理是您创建自己的对象,为它编写代码,并将所需的用户窗体控件分配为该对象类型(类)。例如,如果您有 20 个以相同方式执行的文本框(它们重新启动自己的值),您只需在类模块部分编写相同的代码。砰!差不多就是这样(您还必须编写一段代码来循环并分配您想要此功能的文本框)。

    可能需要一段时间才能理解,但它会显着改善您的项目。

    【讨论】:

      【解决方案2】:

      在您从每个表单调用的Module 中创建一个Sub

      例如

      Sub TextBoxInit(tb As MSForms.TextBox)
          tb.Text = ""
      End Sub
      

      在你认为合适的时候在每个UserForm 中调用它

      例如

      Private Sub Userform_Initialize()
          Module1.TextBoxInit TextBox1
      End Sub
      

      【讨论】:

      • 嗨,克里斯,感谢您的快速回复。基本上我想要 Userform_Initialize() 上的 TextBox.value = ""。这可能吗?
      • 使用这种方法确实非常有效。非常感谢克里斯。非常感谢。
      • 此外,如果要初始化表单上的所有文本框,可以循环遍历它们: Private Sub Userform_Initialize() Dim crtl As MSForms.Control For Each crtl In Me.Controls If TypeName(crtl) = "TextBox" Then Module1.TextBoxInit crtl End If Next crtl End Sub
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      • 2013-07-09
      相关资源
      最近更新 更多