Outlook VBA如何在自定义对象属性中保存邮件项

Outlook VBA如何在自定义对象属性中保存邮件项,vba,class,outlook,mailitem,Vba,Class,Outlook,Mailitem,我试图将MailItem对象存储在自定义对象的属性中,以便稍后调用,但出现以下错误: Run-time error '91': Object variable or With block variable not set 这是我的课程1: Private vprop1 As String Private vprop2 As String Private vprop3 As MailItem Property Get prop1() As String prop1 = vprop1 E

我试图将MailItem对象存储在自定义对象的属性中,以便稍后调用,但出现以下错误:

Run-time error '91': Object variable or With block variable not set
这是我的课程1:

Private vprop1 As String
Private vprop2 As String
Private vprop3 As MailItem

Property Get prop1() As String
    prop1 = vprop1
End Property

Property Let prop1(aValue As String)
    vprop1 = aValue
End Property

Property Get prop2() As String
    prop2 = vprop2
End Property

Property Let prop2(aValue As String)
    vprop2 = aValue
End Property

Property Get prop3() As MailItem
    prop3 = vprop3
End Property

Property Let prop3(aValue As MailItem)
    vprop3 = aValue
End Property
这是我的测试。错误正在引用第三个属性赋值:var.prop3=

非常感谢您的帮助

由于MailItem是一个对象,因此必须通过set关键字设置引用它的任何变量,并将要关联到非对象类型属性的Property Let更改为与对象类型属性关联的Property set

最后,您不能使用Debug.Print var.prop3,因为您的Class1类型的prop3对象成员没有任何默认属性

所有这些都会导致:

类别代码

Private vprop1 As String '<--| vprop1 is declared as of 'String' type, i.e. NOT as an 'object'
Private vprop2 As String '<--| vprop2 is declared as of 'String' type, i.e. NOT as an 'object'
Private vprop3 As MailItem '<--| vprop3 is declared as of 'MailItem' type, i.e. as an 'object'

Property Get prop1() As String
    prop1 = vprop1
End Property

Property Let prop1(aValue As String)
    vprop1 = aValue
End Property

Property Get prop2() As String
    prop2 = vprop2
End Property

Property Let prop2(aValue As String)
    vprop2 = aValue
End Property

Property Get prop3() As MailItem
    Set prop3 = vprop3 '<--| use 'Se't keyword
End Property

Property Set prop3(aValue As MailItem) '<--| use 'Property Set' instead of 'Property Let'
    Set vprop3 = aValue '<--| use 'Set' keyword
End Property
测试子代码

Public Sub test()
    Dim objsourcefolder As Folder
    Set objsourcefolder = Application.Session.GetDefaultFolder(olFolderInbox)

    Dim var As Class1
    Set var = New Class1

    var.prop1 = "\folder\sub\12345"
    var.prop2 = "Email subject regarding 12345"
    Set var.prop3 = objsourcefolder.Items.Item(objsourcefolder.Items.Count)

    Debug.Print var.prop1
    Debug.Print var.prop2
'    Debug.Print var.prop3 '<--| this would result in an 438 error
    Debug.Print var.prop3.Subject
End Sub

它起作用了!我学到了一些东西!我曾在其他几个网站上询问过,我开始对互联网上的任何人都不再了解vba失去希望,但在这里,您在不到一天的时间内发送了一个漂亮的答案!这让我很开心;谢谢你,善良的陌生人:不客气。如果您能通过单击答案旁边的复选标记将答案从灰色切换为已填写,我将不胜感激。非常感谢。
Public Sub test()
    Dim objsourcefolder As Folder
    Set objsourcefolder = Application.Session.GetDefaultFolder(olFolderInbox)

    Dim var As Class1
    Set var = New Class1

    var.prop1 = "\folder\sub\12345"
    var.prop2 = "Email subject regarding 12345"
    Set var.prop3 = objsourcefolder.Items.Item(objsourcefolder.Items.Count)

    Debug.Print var.prop1
    Debug.Print var.prop2
'    Debug.Print var.prop3 '<--| this would result in an 438 error
    Debug.Print var.prop3.Subject
End Sub