2017-03-24 4 views
0

にMailItemを保存する私は、後でリコールする私のカスタムオブジェクトのプロパティにMailItemオブジェクトを保存しようとしているが、私は次のエラーを取得しています:見通しVBAどのようにカスタムオブジェクトのプロパティ

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

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 

:エラーは、第三プロパティの割り当てを参照しています! MailItem以来

答えて

1

あなたは

Setキーワードを通してそれに任意の変数参照を設定し、Property Setに(objectタイプのプロパティをnot-するために関連していると)(object型プロパティに関連付けられている)Property Letを変更する必要があり、objectですあなたのClass1タイプがそのprop3objectメンバー

のための任意のデフォルトプロパティすべて何をしていないので、最後に、あなたはDebug.Print var.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 
+0

!私は何かを学んだ!私は他のいくつかのサイトで尋ねてきましたが、インターネット上の誰もがvbaについてもう知っていたという希望を失い始めましたが、ここでは1日もかからずに美しい答えを送っています!これは私の一日を作りました。親切な、ありがとう、ありがとう:) –

+1

あなたは大歓迎です。回答の横にあるチェックマークをクリックして回答を受け入れていただければ幸いです。 – user3598756

関連する問題