Me-Object 和 UserFormName-Object 有什么区别?
What is the difference between Me-Object and UserFormName-Object?
我刚刚发现 Me-Object 和 UserFormName 不是同一个对象。这是我的例子:
我有两个自定义 类 FilterLine 和 FilterModel。您只需要知道 FitlerModel 有一个 属性 N,如果更新,它会设置为 =。还有一个名为 frmFilter 的用户窗体。
Sub testFilter()
Dim Filterm As FilterModel
Set Filterm = New FilterModel
With New frmFilter
Set .Model = Filterm
.ExampleSub ' This is the interesting part
.Show
End With
End Sub
这里是 Userform frmFilter 的 ExampleSub:
Public Sub ExampleSub()
Debug.Print Me.Model.N ' gives a 0
Debug.Print frmFilter.Model.N ' gives an error "Object not Found"
End Sub
我觉得这很有趣,这是怎么回事?它们为什么不同,它们有什么不同?
只有在显式创建用户窗体(使用插入 -> 用户窗体)并显示在项目资源管理器树中时,您才能使用 UserForm.Object
。
如果用户窗体未显示在项目资源管理器树中,则使用 UserForm.Object
时将出现错误 "Object not Found"
它们指的是不同的对象。用户窗体只是一个 Class,它有一个默认实例,一个在您按名称调用 class 时创建的自由对象。
Me.Model.N
引用您实例化的对象。
frmFilter.Model.N
指用户窗体的默认实例,它没有与之关联的模型。
此处关于此问题的精彩报道:https://rubberduckvba.wordpress.com/2017/10/25/userform1-show/
我刚刚发现 Me-Object 和 UserFormName 不是同一个对象。这是我的例子:
我有两个自定义 类 FilterLine 和 FilterModel。您只需要知道 FitlerModel 有一个 属性 N,如果更新,它会设置为 =。还有一个名为 frmFilter 的用户窗体。
Sub testFilter()
Dim Filterm As FilterModel
Set Filterm = New FilterModel
With New frmFilter
Set .Model = Filterm
.ExampleSub ' This is the interesting part
.Show
End With
End Sub
这里是 Userform frmFilter 的 ExampleSub:
Public Sub ExampleSub()
Debug.Print Me.Model.N ' gives a 0
Debug.Print frmFilter.Model.N ' gives an error "Object not Found"
End Sub
我觉得这很有趣,这是怎么回事?它们为什么不同,它们有什么不同?
只有在显式创建用户窗体(使用插入 -> 用户窗体)并显示在项目资源管理器树中时,您才能使用 UserForm.Object
。
如果用户窗体未显示在项目资源管理器树中,则使用 UserForm.Object
它们指的是不同的对象。用户窗体只是一个 Class,它有一个默认实例,一个在您按名称调用 class 时创建的自由对象。
Me.Model.N
引用您实例化的对象。
frmFilter.Model.N
指用户窗体的默认实例,它没有与之关联的模型。
此处关于此问题的精彩报道:https://rubberduckvba.wordpress.com/2017/10/25/userform1-show/