2017-03-24 12 views
0

Ich versuche, ein MailItem Objekt in der Eigenschaft meines benutzerdefinierten Objekts zu speichern, später zurückgerufen werden, aber ich bin immer folgende Fehlermeldung:Outlook VBA wie MailItem in benutzerdefinierter Objekteigenschaft speichern

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

Das ist meine Klasse1:

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 

Das ist mein Test. Der Fehler verweist auf die dritte Eigenschaftszuweisung: 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 

Jede Hilfe wird sehr geschätzt!

Antwort

1

seit MailItem ist ein object, Sie jede Variable Referenzierung auf sie durch das Set Schlüsselwort gesetzt und ändern Property Let (assoziiert werden object Typeigenschaften NOT-) zu Property Set (assoziiert object Typeigenschaften)

Schließlich können Sie nicht Debug.Print var.prop3 verwenden, da Ihre Class1 Typ keine Standard Eigenschaft für seine prop3object Mitglied hat

alles, was obigen Ergebnisse in:


Klassencode

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 

Testuntercode

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 
+0

es funktioniert! und ich habe etwas gelernt! Ich habe auf einigen anderen Seiten gefragt, und ich begann die Hoffnung zu verlieren, dass jemand im Internet wusste über VBA mehr, aber hier senden Sie eine schöne Antwort in weniger als einem Tag! das hat meinen Tag gemacht; danke, nette Fremde :) –

+1

Gern geschehen. Ich würde es begrüßen, wenn Sie meine Antwort akzeptieren könnten, indem Sie auf das Häkchen neben der Antwort klicken, um es von grau auf ausgefüllt umzuschalten. Danke! – user3598756

Verwandte Themen