【问题标题】:Can I write the UserForm code in a module?我可以在模块中编写用户窗体代码吗?
【发布时间】:2013-07-05 17:11:36
【问题描述】:

有没有办法可以在模块中编写我的用户表单代码?

我之所以问这个问题是因为我有一个多页用户表单,其背后的代码量越来越大。出于组织目的,我希望能够将代码分隔在不同的模块中。但我不知道这是否可以用于用户表单(除了从用户表单事件调用子程序)。

有没有办法在模块中编写用户表单代码而无需从用户表单代码中调用子例程?

【问题讨论】:

    标签: excel vba module userform


    【解决方案1】:

    其实很简单。您的表单模块中的代码可以调用其他模块中的子例程。因此,只需为特定例程剪切代码并将其粘贴到另一个模块中,适当地命名它,然后在表单模块中放置例程的名称以调用它。唯一的问题是,当代码位于单独的模块中时,您不能使用 Me 关键字。如果您在代码中使用它,则将表单作为参数传递,并将 Me 替换为您的变量。一个简单的例子:假设你原本有

    Sub OK_Click()
        If Me.txtName<>"" then
              MsgBox "Ok",vbOkOnly,"It Worked"
        End If
    End Sub
    

    然后您可以在单独的模块中创建以下内容:

    Sub DoOkClick( f as UserForm)
       if f.txtname<>"" then
           MsgBox "Ok",vbOkOnly,"It Worked"
       End If
    End Sub
    

    然后将按钮点击代码替换为

    Sub Ok_Click
      DoOkClick Me
    end sub
    

    【讨论】:

      【解决方案2】:

      一种方法是outlined here,它涉及定义一个类并将控件动态添加到表单中,然后与该类的事件相关联。

      不过,从您的描述来看,您的 UserForm 似乎做得太多了。我建议您考虑创建其他表单,而不是尝试从单个表单完成所有操作。您也许可以创建一个类来存储您可能创建的两个或三个表单共有的属性(和行为)。在打开第一个(主)表单时实例化该类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-03
        • 1970-01-01
        • 2020-06-15
        • 2021-01-02
        • 2022-08-17
        • 2018-07-26
        • 2023-03-07
        • 2011-06-23
        相关资源
        最近更新 更多