#vba #outlook
#vba #outlook
Вопрос:
Я использую код VBA, который загружает любое вложение в почте Outlook в определенную папку.
Я вызываю код в правиле Outlook «запустить сценарий», где я определил, для какой почты это должно работать.
Код работает от нового к старому, предоставляя мне самое старое вложение, а не самое новое вложение. Это для вложений с одинаковыми именами в каждом письме.
Что мне добавить к приведенному ниже коду, чтобы он перемещался из старого в новый, загружая новые вложения, чтобы переопределить старые вложения с тем же именем.
Public Sub saveAttachtoDisk(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim saveFolder As String
saveFolder = "E:ProjectsTakedaDataZipped Incremental dataincremental"
For Each objAtt In itm.Attachments
objAtt.SaveAsFile saveFolder amp; "" amp; objAtt.DisplayName
Set objAtt = Nothing
Next
End Sub
Комментарии:
1. Правило будет обрабатывать элементы по мере их получения. Вложение в самом последнем полученном элементе будет последним сохраненным. Я считаю, что проблема, описанная в вопросе, не может возникнуть. Как вы обрабатываете элементы в обратном хронологическом порядке? Вы также запускаете код в папке с уже полученными элементами?
2. Если элемент имеет несколько вложений с одинаковым именем, найдите файл с измененной датой
Ответ №1:
Взглянув на коллекцию itm's
вложений, у нее есть count
свойство, которое содержит количество вложений. Вы можете получить количество, а затем в цикле for выполнить обратный шаг по количеству. Внутри вашего цикла for просто обратитесь к объекту attachments, используя индекс, чтобы ссылаться на отдельные элементы вложений в объекте attachments:
Dim attachmentCount as integer
Dim saveFolder As String
saveFolder = "E:ProjectsTakedaDataZipped Incremental dataincremental"
attachmentCounter = itm.Attachments.count
For i = attachmentCounter to 1 Step -1
itm.Attachments(i).SaveAsFile saveFolder amp; "" amp; itm.Attachments(i).DisplayName
Next