2017-01-09 113 views
1

我想保存附件中具有特定文件擴展名的特定發件人的附件。我在循環的If部分遇到問題。我收到運行時錯誤438:對象不支持此屬性或方法。爲什麼我的Object不支持mailitem屬性SenderEmailAddress?

Sub GetAttachments() 

    Dim ns As NameSpace 
    Dim folder As Outlook.MAPIFolder 
    Dim Item As Object 
    Dim Atmt As Attachment 
    Dim FileName As String 
    Dim i As Integer 
    Set ns = GetNamespace("MAPI") 
    Set Inbox = ns.GetDefaultFolder(olFolderInbox) 
    i = 0 

    If Inbox.Items.Count = 0 Then 
     MsgBox "There are no messages in the Inbox.", vbInformation, _ 
       "Nothing Found" 
     Exit Sub 
    End If 

    For Each Item In Inbox.Items 

     If Item.SenderEmailAddress = "[email protected]" Then 
      For Each Atmt In Item.Attachments 
       ' This path must exist! Change folder name as necessary. 
       If Right(Atmt.FileName, 3) = ".py" Then 
        FileName = "C:\Users\bill\Desktop\TEST\" & Atmt.FileName 
        Atmt.SaveAsFile FileName 
        i = i + 1 
       End If 
      Next Atmt 
     End If 
    Next Item 

    If i > 0 Then 
     MsgBox "I found " & i & " attached files." _ 
     & vbCrLf & "I have saved them into the C:\Users\bill\Desktop\TEST folder." _ 
     & vbCrLf & vbCrLf & "Have a nice day.", vbInformation, "Finished!" 
    Else 
     MsgBox "I didn't find any attached files in your mail." , vbInformation, "Finished!" 
    End If 

GetAttachments_exit: 
    Set Atmt = Nothing 
    Set Item = Nothing 
    Set ns = Nothing 
    Exit Sub 

GetAttachments_err: 
    MsgBox "An unexpected error has occurred." _ 
     & vbCrLf & "Please note and report the following information." _ 
     & vbCrLf & "Macro Name: GetAttachments" _ 
     & vbCrLf & "Error Number: " & Err.Number _ 
     & vbCrLf & "Error Description: " & Err.Description _ 
     , vbCritical, "Error!" 
    Resume GetAttachments_exit 
End Sub 
+0

https://msdn.microsoft.com/en-us/library/office/ff868262.aspx如果mpfInbox.Items(ⅰ)。類= olMail然後 – niton

+0

哪'if'? 'Item.Sender'或'如果atmt'? – 0m3r

+0

如果'Item.Sender' – Chris

回答

-2

參見本實施例中

Filter = "[SenderEmailAddress] = '[email protected]'" 
    Set Items = Inbox.Items.Restrict(Filter) 

    ii = 0 

    For i = Items.Count To 1 Step -1 
     Set Item = Items.Item(i) 

     For Each Atmt In Item.Attachments 
      ' This path must exist! Change folder name as necessary. 
      If Right(Atmt.FileName, 3) = ".py" Then 
       FilePath = "C:\Temp\" 
       FileName = Atmt.FileName 
       Atmt.SaveAsFile FilePath & FileName 
       ii = ii + 1 
      End If 
     Next Atmt 
    Next 
2

的文件夾可以包含不同類型的項目。其中一些不提供SenderEmailAddress財產。嘗試首先檢查項目類別(或MessageCLass)。

如果您從其他應用程序自動執行Outlook,則可能會出現安全問題。見Outlook "Object Model Guard" Security Issues for Developers

不要interate該文件夾中的所有項目:

For Each Item In Inbox.Items 
    If Item.SenderEmailAddress = "[email protected]" Then 

您可以使用項目類的Find/FindNextRestrict方法,而不是。瞭解更多關於這些方法在下面的文章:

而且您可能會發現應用程序類有用的AdvancedSearch方法。在Outlook中使用的填寫AdvancedSearch方法的主要優點是:

  • 搜索是在另一個線程執行。由於AdvancedSearch方法在後臺自動運行,因此不需要手動運行其他線程。
  • 可以在任何位置搜索任何物品類型:郵件,約會,日曆,便籤等,即超出某個文件夾的範圍。 Restrict和Find/FindNext方法可以應用於特定的Items集合(請參閱Outlook中的Folder類的Items屬性)。
  • 對DASL查詢的全面支持(自定義屬性也可用於搜索)。您可以在MSDN的Filtering文章中閱讀更多關於此的信息。爲了提高搜索性能,如果爲商店啓用了即時搜索,則可以使用即時搜索關鍵字(請參閱Store類的IsInstantSearchEnabled屬性)。
  • 您可以隨時使用Search類的Stop方法停止搜索過程。

查看Advanced search in Outlook programmatically: C#, VB.NET瞭解更多信息。

+0

我刪除了「Item」。從「Item.SenderEmailAddress」。如下所示:'對於Inbox.Items中的每個項目 如果SenderEmailAddress =「[email protected]」Then'並且刪除了錯誤消息,但沒有找到滿足該條件的任何內容。 – Chris

+1

沒有必要刪除'項目'部分。如果沒有物體,物業就沒有任何意義。 –

相關問題