有没有可能从“类模块”中调用位于“UserForm”中的公共子程序? 我想在表单模块中放置一个回调,但似乎无法公开它。这是VBA中“UserForms”的基本限制吗?
它在“UserForm”代码模块中被公开,我可以在“Me”对象的智能感应中看到它,但是似乎无法从表单模块外部访问它。
Option Explicit
Dim mName As String
Property Let instName(n As String)
mName = n
End Property
Property Get instName() As String
If Len(mName) = 0 Then mName = Me.Name
instName = mName
End Property
Public WithEvents controlName As MSForms.ControlType
...在一个类模块中。
继承于标准接口的方法中包括一个名为 Show 的方法。
你可以使用 UserForm1.Show
来创建一个窗体的实例,但这非常令人困惑和误导。对我来说,它暗示着你正在显示名为 UserForm1 的对象,但事实并非如此。我不知道为什么你要使用这个方法,因为除了令人困惑之外,它没有提供任何直接引用所创建的对象的方式。这有点像 Dim v as New Type
,只是更糟糕,因为没有引用变量。
你可以像创建自定义类对象一样实例化窗体类,然后使用 show 方法来部署它...
Dim f As UserForm1
Set f = New UserForm1
f.Show
对我来说,这是首选的方法。您可以向UserForm1类添加自定义属性和控件,并在创建时为其指定有意义的名称,但是您也可以使用标准的UserForm界面引用它。
例如
'In a Class Module
Dim mForm as UserForm1
Property let Form(f as MSForms.UserForm)
Set mForm = f
End Property
在理解了以上内容后,关于UserForms的所有疑惑和无法找到良好参考资料的挫败感都消失了。我只需要将它们视为类模块,就可以轻松应对。
要访问类模块(如用户窗体)中的公共子程序,您需要实例化该类,然后调用该方法。
Dim uf1 As UserForm1
Set uf1 = New UserForm1
Uf1.MyPublicSub