Auto save an attachment in a designated directory

Posted on 2006-07-24
Last Modified: 2010-08-05
I always receive the same attachment everyday at a certain time which I have to save to a particular directory. In doing so I overwrite the original document that I recived the day before. It is an updated file that we use for our intranet

Is there a way I can use a macro to auto save this attachment to the particular directory and overwriting the original?
Also bear in mind that both documents have diferent names. So in order to overwrite I always had to rename the received attachment to match the original in order for the link on the intranet to work. i.e. the original doc is called DocA.xls and the attachment comes in as DocB.xls, so I have to rename the attachement to DocA.xls and overwritting the original.

Is there a way to automate this process?
Question by:proltdman
  • 5
  • 3
LVL 13

Assisted Solution

stefri earned 62 total points
ID: 17170138
Which version of outlook do you use? If version is 2002 or 2003 and if the mail has always the same subject, you may give a try to this:
in Outlook

'Open VBA (Alt F11)
cut and paste the code below
'-------- start SNIP
' ----- Adjust the value of saveFolder to whatever you want -------
 ----- Adjust the value of theFile to whatever you want -------

Public Sub saveAttachtoDisk (itm As Outlook.MailItem)

Dim objAtt As Outlook.Attachment

Dim saveFolder As String, theFile as String
saveFolder = "c:\temp\"

    For Each objAtt In itm.Attachments
        objAtt.SaveAsFile saveFolder & "\" & theFile
        Set objAtt = Nothing
End Sub
'-------------- end SNIP

1) Set Tools/Macros/Security to Medium
2)Close Outlook:  save the project when asked
3) Restart outlook: accept the Enable Macro Warning to get the macro fired then

4)Create a rule
4.1)check mail when they arrive
4.2)with specific words in the subject
4.3)run a script
4.4)select saveAttachtoDisk from the available macros
4.5)stop processing more rules

Author Comment

ID: 17170266
Ok I wil give this a try and let you know. Thanks!
I use outlook 2003

LVL 76

Expert Comment

by:David Lee
ID: 17172059
Hi, stefri.

I'd recommend a minor change to your code.  It's possible that someone might send a message with same subject that the rule is watching for and the code would save any attachment that message had.  It's also possible that a legitimate message with the correct attachment and one or more additional attachments would arrive and the code would save them all, overwriting the file with the last attachment in line.  Both of these can be avoided by simply testing the attachment name to make sure it's the file proltdman is looking for.  Just a thought.
Microsoft Certification Exam 74-409

Veeam® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.


Author Comment

ID: 17173665
Perhaps I should also mention that the attached file also has the day's date appended to it. i.e DocA 24.07.06.xls, hence it comes as a different file each day, but the SUBJECT field always has the same title.
I'm not sure if this will make it any easier to code.
LVL 76

Accepted Solution

David Lee earned 63 total points
ID: 17191107

Here's the code I'd use to handle this.  It goes in a module, not in ThisOutlookSession.  Follow stefri's instructions for creating a rule to fire the script.  This version adds the checks I described earlier and also marks the message as read once it's processed.

Sub SaveFileToDisk(Item As Outlook.MailItem)
    'Make sure the message has just one attachment
    If Item.Attachments.Count = 1 Then
        'Make sure the one attachment's filename beings with DocB
        If Left(Item.Attachments.Item(1).FileName, 4) = "DocB" Then
            'Change the path on the next line
            Item.Attachments.Item(1).SaveAsFile "C:\eeTesting\DocA.xls"
            Item.UnRead = False
        End If
    End If
End Sub

Author Comment

ID: 17191778
Thanks BDF,
However, as I said earlier, the incoming attachment is date stamped by the sender to reflect the day of sending, hence DocB comes in as DocB 24.07.06 or DocB 25.07.06 etc etc etc!
Can I use a wild card format in the line
 If Left(Item.Attachments.Item(1).FileName, 4) = "DocB" Then
changed to
 If Left(Item.Attachments.Item(1).FileName, 4) = "DocB *" Then

or won't that work?
LVL 76

Expert Comment

by:David Lee
ID: 17197292
I guess I don't see what the problem is with the code as is.  It doesn't matter what comes after "DocB" since I'm only checking the leftmost four characters which will always be DocB.  There's no difference in checking the leftmost four characters and checking the same four characters and anything that follows, is there?  As to the syntax "DocB *" that won't work with the Left function.  It doesn't understand wildcards.

Author Comment

ID: 17199557
Sorry i didn't click on the "Left" function you implemented, I will try it now..

Author Comment

ID: 17221952
Great, it works!

I used the code from BlueDevilFan and set up the rules as suggested by stefri.

Thanks for your efforts guys, I really appareciate it.

I will split the points between you two. I know it's not much but it just shows that I value both of your efforts.


Featured Post

Windows Server 2016: All you need to know

Learn about Hyper-V features that increase functionality and usability of Microsoft Windows Server 2016. Also, throughout this eBook, you’ll find some basic PowerShell examples that will help you leverage the scripts in your environments!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Sometimes Outlook might have problems sending a message. There may be various causes- corrupted PST, AV scanner etc. The message, instead of going to the Sent Items folder, sits in the Outbox indefinitely. To remove it you can use a free tool cal…
MS Outlook is a world-class email client application that is mainly used for e-communication globally.  In this article, we will discuss the basic idea about MS Outlook, its advanced features, and types of MS Outlook File formats.
CodeTwo Sync for iCloud ( automatically synchronizes your Outlook 2016, 2013, 2010 or 2007 folders with iCloud folders available via iCloud Control Panel. This lets you automatically sync them with…
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit If you want to manage em…

778 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question