Me-Object和UserFormName-Object有什么区别?

时间:2018-10-10 08:09:09

标签: excel vba excel-vba userform

我刚刚发现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

这是用户窗体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

我觉得这很有趣。为什么它们不同,又有什么不同?

2 个答案:

答案 0 :(得分:3)

它们引用不同的对象。 UserForm只是具有默认实例的类,该类是通过按名称调用类时创建的免费对象。

  

Me.Model.N

引用您实例化的对象。

  

frmFilter.Model.N

引用用户表单的默认实例,该实例没有与之关联的模型。

此处有关于此问题的出色文章:https://rubberduckvba.wordpress.com/2017/10/25/userform1-show/

答案 1 :(得分:0)

仅当显式创建UserForm(使用“插入”->“ User Form”)并显示在项目浏览器树中时,才能使用UserForm.Object。 如果用户窗体未显示在项目浏览器树中,则如果使用UserForm.Object

,则会收到错误消息“找不到对象”