【问题标题】:Outlook VBA how to save MailItem in custom object propertyOutlook VBA如何将MailItem保存在自定义对象属性中
【发布时间】:2017-08-16 18:59:10
【问题描述】:

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

Run-time error '91': Object variable or With block variable not set

这是我的 Class1:

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 = ...

Public Sub test()
    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"
    var.prop3 = objsourcefolder.Items.Item(objsourcefolder.Items.count)

    Debug.Print var.prop1
    Debug.Print var.prop2
    Debug.Print var.prop3
    Debug.Print var.prop3.Subject
End Sub

非常感谢任何帮助!

【问题讨论】:

    标签: vba class outlook mailitem


    【解决方案1】:

    由于MailItemobject,您必须通过Set 关键字设置任何引用它的变量并将Property Let(与非object 类型属性相关联)更改为Property Set (关联到object 类型属性)

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

    以上所有结果:


    类代码

    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 了,但是在这里你在不到一天的时间内就发送了一个漂亮的答案!这让我很开心;谢谢你,善良的陌生人:)
    • 不客气。非常感谢您可以通过单击答案旁边的复选标记将其从灰色切换为已填充来接受我的答案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2010-12-24
    • 2023-03-26
    相关资源
    最近更新 更多