, 1 min read
Saving Attachments in Outlook via VBA
Task at hand: You receive daily reports with attachments, which you need to analyze programmatically. Therefore you want those attachments in your filesystem. You need an Outlook macro, which saves all those attachments to a directory. Outlook VBA to the rescue.
Below macro processes all e-mails which are selected in Outlook. It stores them in C:\temp
. You have to adapt handling for checking the e-mail subject, whether the e-mail in question is actually you expect to contain the report. VBA function InStr()
comes in handy here.
Sub saveAttachment()
Dim oAttachment As Outlook.Attachment
Dim mItem As Outlook.MailItem
Dim sSaveFolder As String, dateFormat As String, partOfFilename As String
Dim i As Long, nSelectedMsg As Long
sSaveFolder = "C:\temp\"
Set oExplorer = Application.ActiveExplorer
If oExplorer Is Nothing Then
MsgBox "No active explorer", vbOKOnly
Exit Sub
End If
nSelectedMsg = oExplorer.Selection.Count
For i = 1 To nSelectedMsg
Set mItem = oExplorer.Selection.Item(i)
dateFormat = Format(mItem.ReceivedTime, "yymmdd")
' Fiddle with subject-line of e-mail to get parts of filename
If InStr(mItem.Subject, "...abc") > 0 Then
partOfFilename = "...uvw"
Else
MsgBox "Macro applied to wrong e-mail", vbCritical
Exit Sub
End If
For Each oAttachment In mItem.Attachments
FileName = "DAILY_REPORT_" & partOfFilename & "_" & dateFormat & ".txt"
' oAttachment.DisplayName not needed, as we make our own filename
' MsgBox "filename=" & FileName, vbOKOnly
oAttachment.SaveAsFile sSaveFolder & FileName
Next
Next
End Sub
SaveAsFile
saves the attachment with date and time as of date of receipt of e-mail. It also overwrites any file with same name.