有没有办法在模块中编写Userform代码?
我之所以这么问,是因为我有一个多页的用户表单,后面有越来越多的代码。出于组织目的,我希望能够在不同的模块中分隔代码。但我不知道是否可以对userform执行此操作(除了从userform事件调用子例程之外)。
有没有一种方法可以在模块中编写UserForm代码,而不必从UserForm代码调用子例程?
实际上它很简单。表单模块中的代码可以调用其他模块中的子例程。因此,只需将特定例程的代码剪切并粘贴到另一个模块中,适当地命名它,然后在表单模块中放置例程的名称来调用它。唯一的问题是,当代码位于单独的模块中时,不能使用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
这里概述了一种方法,包括定义一个类并动态地向表单添加控件,然后将这些控件与该类的事件相关联。
不过,根据您的描述,听起来您的UserForm做得太多了。我建议您考虑创建其他表单,而不是尝试从一个表单中执行所有操作。也许,您可以创建一个类来存储您可能创建的两三个表单所共有的属性(和行为)。在打开第一个(主)窗体时实例化类。