Solved

Outlook VBA to open attachment

Posted on 2011-02-21
7
767 Views
Last Modified: 2012-05-11
Dear Experts,

My company has a dedicated PC hooked up to a TV Screen. I have set up outlook on this machine with a email address to which our BI system will automatically send an Excel attachment every day.

What I would like is for some sort of VBA code in either Excel or Outlook that will check once a day at a certain time if outlook has received a mail from a specific recipient and with a specific subject (which is my automated email and hence there will be multiple instances of the "same" email - just from different dates).

When it has found this email, it should open the Excel document and switch to Excel and turn Excel to Fullscreen (Excel 2007).

The next time the macro runs, it will close the current open excel file and do the same thing again with the latest received email (which adheres to the sender/subject conditions).

Your assistance is much appreciated, as always!
0
Comment
Question by:hendrkle
  • 4
  • 3
7 Comments
 
LVL 10

Expert Comment

by:shahzadbux
ID: 34944133
Can you not get your BI system to save the excel report in a shared directory?
0
 

Author Comment

by:hendrkle
ID: 34944217
I wish, for a number of vague reasons my company has disabled this feature, and to be honest, it's not going to happen...

Perhaps, a possible solution to that would be another macro for Outlook to save the incoming attachment locally, then another in Excel to fetch the latest version stored in that folder,by creation date?

I'm just making assumptions here, I wouldn't know how to achieve this....
0
 
LVL 10

Expert Comment

by:shahzadbux
ID: 34944446
Ok, just asking the question as that would eliminate one extra step and hence point of failure.

I have attached code which will save attachments to a specified directory, you'll need to copy\paste this into 'this outlooksession' - do you know where to do this?

Next, create a rule specifying the the sender\subject you want the macro to fire and then on the next step where you say what to happen select run a script (near the bottom) and you'll see this macro name - select it and test, you should see the file saved to your directory..

give this a go and see if it works for you, if it does then all we'll need to do is tell the macro to open the attachment - not sure about full screen but shouldn't be too difficult...
Sub RunAScriptRuleRoutine(MyMail As MailItem)
    Dim strID As String
    Dim olNS As Outlook.NameSpace
    Dim olMail As Outlook.MailItem
    
    strID = MyMail.EntryID
    Set olNS = Application.GetNamespace("MAPI")
    Set olMail = olNS.GetItemFromID(strID)
    
'change this to  your directory and include the \ at the end
    sPathName = "c:\attachments\"
        
    With olMail.Attachments
    iAttachCnt = .Count
    If iAttachCnt > 0 Then
        For iCtr = 1 To iAttachCnt
            .Item(iCtr).SaveAsFile sPathName & .Item(iCtr).FileName
        Next iCtr
    End If
End With
    
    
    Set olMail = Nothing
    Set olNS = Nothing
End Sub

Open in new window

0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 

Author Comment

by:hendrkle
ID: 34944558
Thank your  for your quick reply! I'm afraid I'll have to come back to you a bit later before I can test it, but definitely will soon, thank tyou again!
0
 
LVL 10

Expert Comment

by:shahzadbux
ID: 34944614
Use the code below to test, it should also open the excel file

you will need to add a reference to excel - open vba editor, tools, reference...
Sub RunAScriptRuleRoutine(MyMail As MailItem)
    Dim strID As String
    Dim olNS As Outlook.NameSpace
    Dim olMail As Outlook.MailItem
    Dim oExcel As Excel.Application
    Dim oWB As Workbook
    Set oExcel = New Excel.Application

    strID = MyMail.EntryID
    Set olNS = Application.GetNamespace("MAPI")
    Set olMail = olNS.GetItemFromID(strID)
    
    'change to your path and keep the \ at the end
    sPathName = "c:\attachments\"
        
    With olMail.Attachments
    iAttachCnt = .Count
    If iAttachCnt > 0 Then
        For iCtr = 1 To iAttachCnt
            .Item(iCtr).SaveAsFile sPathName & .Item(iCtr).FileName
            MsgBox sPathName & .Item(iCtr).FileName
        Set oWB = oExcel.Workbooks.Open(sPathName & .Item(iCtr).FileName)
        oExcel.Windows(.Item(iCtr).FileName).Activate
        oExcel.Visible = True
        Next iCtr
    End If

End With
    
    Set olMail = Nothing
    Set olNS = Nothing
End Sub

Open in new window

0
 
LVL 10

Accepted Solution

by:
shahzadbux earned 500 total points
ID: 34944642
This will now open the workbook in full screen mode!

Let me know if you get stuck with any of the steps...
Sub RunAScriptRuleRoutine(MyMail As MailItem)
    Dim strID As String
    Dim olNS As Outlook.NameSpace
    Dim olMail As Outlook.MailItem
    Dim oExcel As Excel.Application
    Dim oWB As Workbook
    Set oExcel = New Excel.Application

    strID = MyMail.EntryID
    Set olNS = Application.GetNamespace("MAPI")
    Set olMail = olNS.GetItemFromID(strID)
    
    'change to your path and keep the \ at the end
    sPathName = "c:\attachments\"
        
    With olMail.Attachments
    iAttachCnt = .Count
    If iAttachCnt > 0 Then
        For iCtr = 1 To iAttachCnt
            .Item(iCtr).SaveAsFile sPathName & .Item(iCtr).FileName
        Set oWB = oExcel.Workbooks.Open(sPathName & .Item(iCtr).FileName)
        oExcel.Windows(.Item(iCtr).FileName).Activate
        oExcel.DisplayFullScreen = True
        oExcel.Visible = True
        Next iCtr
    End If

End With
    
    Set olMail = Nothing
    Set olNS = Nothing
End Sub

Open in new window

0
 

Author Comment

by:hendrkle
ID: 34944703
At the speed of light!

I will test as soon as I can!
0

Featured Post

Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Suggested Solutions

A little background as to how I came to I design this code: Around 5 years ago I designed an add-in that formatted Excel files to a corporate standard, applying different cell colours and font type depending on whether the cells contained inputs,…
Workbook link problems after copying tabs to a new workbook? David Miller (dlmille) Intro Have you either copied sheets to a new workbook, and after having saved and opened that workbook, you find that there are links back to the original sou…
This Micro Tutorial will demonstrate how to use a scrolling table in Microsoft Excel using the INDEX function.
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…

758 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

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now