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/