VBA MS Excel:我可以在模块中编写用户窗体代码吗?

时间:2013-07-05 17:11:37

标签: excel vba module userform

快速提问,

有没有办法在模块中编写Userform代码?

我问这个的原因是因为我有一个多页用户表单,其后面有越来越多的代码。出于组织目的,我希望能够将代码分散到不同的模块中。但是我不知道是否可以对userforms进行此操作(除了从userform事件调用子例程)。

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

谢谢,

2 个答案:

答案 0 :(得分:2)

实际上很简单。表单模块中的代码可以调用其他模块中的子例程。因此,只需剪切特定例程的代码并将其粘贴到另一个模块中,对其进行适当命名,然后在表单模块中放置例程的名称来调用它。唯一的问题是,当代码处于单独的模块中时,您无法使用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

答案 1 :(得分:0)

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

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