Редактировать Макрос был отредактирован для запуска из Excel, а не из Outlook.Он использует раннее связывание, поэтому вам нужно будет установить ссылку на библиотеку объектов Outlook (VBE >> Инструменты >> Ссылки >> и выбрать библиотеку объектов Microsoft Outlook).
Фильтр первого макроса следующего фильтраэлементы из папки «Входящие» на основе указанного имени отправителя затем сортируют их по полученному времени и в порядке убывания, а затем получают первый элемент из отфильтрованного и отсортированного списка.Наконец, он сохраняет указанное вложение, если оно существует.Обратите внимание, что если файл с таким же именем, что и вложение, уже существует, существующий файл будет перезаписан.Измените сохранение в папку, имя отправителя и имя вложения, где указано.
Option Explicit
Sub GetLatestReport()
'Set a reference to Outlook's object library (Visual Basic >> Tools >> References >> check/select Microsoft Outlook Object Library)
Dim outlookApp As Outlook.Application
Dim outlookInbox As Outlook.MAPIFolder
Dim outlookRestrictItems As Outlook.Items
Dim outlookLatestItem As Outlook.MailItem
Dim outlookAttachment As Outlook.Attachment
Dim attachmentFound As Boolean
Const saveToFolder As String = "C:\Users\Domenic\Desktop" 'change the save to folder accordingly
Const senderName As String = "SenderName" 'change the sender name accordingly
Const attachmentName As String = "AttachmentName" 'change the attachment name accordingly
'Create an instance of Outlook
Set outlookApp = New Outlook.Application
'Get the inbox from Outlook
Set outlookInbox = outlookApp.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
'Filter the items from the inbox based on the sender
Set outlookRestrictItems = outlookInbox.Items.Restrict("[SenderName] = '" & senderName & "'")
'Check whether any items were found
If outlookRestrictItems.Count = 0 Then
MsgBox "No items were found from " & senderName & "!", vbExclamation
Exit Sub
End If
'Sort the filtered items by received time and in descending order
outlookRestrictItems.Sort Property:="[ReceivedTime]", Descending:=True
'Get the latest item from the filtered and sorted items
Set outlookLatestItem = outlookRestrictItems(1)
'Loop through each attachment from the latest item until specified file is found
attachmentFound = False
For Each outlookAttachment In outlookLatestItem.Attachments
If Left(UCase(outlookAttachment.Filename), Len(attachmentName)) = UCase(attachmentName) Then
outlookAttachment.SaveAsFile saveToFolder & "\" & outlookAttachment.DisplayName
attachmentFound = True
Exit For
End If
Next outlookAttachment
If attachmentFound Then
MsgBox "The attachment was found and saved to '" & saveToFolder & "'!", vbInformation
Else
MsgBox "No attachment was found!", vbExclamation
End If
End Sub