Create a Rule to Open, Print & Exit PDF File in Outlook 2007

Posted on 2008-10-30
Medium Priority
Last Modified: 2010-05-18
i used the code from this question, and it works fine, but i need it to close adobe.

i added this to print the pdf
ShellExecute 0&, "print", objTempFolder & "\" & olkAttachment.FileName, 0&, 0&, 0&

but now i need to exit adobe after it prints. how do i do that?

or is there an easier way?
all i want to to is this
when a email comes in with Bizhub in sender address, open the pdf, print it, then exit adobe program.

Question by:bignadad
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 6
  • 4
LVL 76

Expert Comment

by:David Lee
ID: 22847151
Hi, bignadad.

You can use something like this to terminate Acrobat when the printing is finished.

Author Comment

ID: 22849334
how do i configure that code for adobe acrobat?
LVL 76

Expert Comment

by:David Lee
ID: 22849434
The code doesn't have to be configured.  It just needs to be used.  Add the code to waht you already have in Outlook, then call it per the example on the page.  The command for killing Acrobat Reader is

    KillProcess "acrord32"

acrord32 is the name of the Acrobat executable which can be found by opening Windows Task Manager and looking through the list of processes.

If you're using a different version of Acrobat, e.g. Acrobat Pro, then I don't have Acrobat Pro so I don't know if the executable has the same name or not.

There's a type on this line of the code from that page

serviceame = LCase(Trim(CStr(oService.Name) & ""))

"serviceame" should be "servicename", i.e. the n is missing.  You'll want to fix that.
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!


Author Comment

ID: 22850154
i added that code and the process and nothing happens. its like it closes it before it has time to open or print.
On Error GoTo ErrHandler
         Dim oWMI
         Dim ret
         Dim sService
         Dim oWMIServices
         Dim oWMIService
         Dim oServices
         Dim oService
         Dim servicename
          Set oWMI = GetObject("winmgmts:")
          Set oServices = oWMI.InstancesOf("win32_process")
          For Each oService In oServices
                 servicename = LCase(Trim(CStr(oService.Name) & ""))
                 If InStr(1, servicename, LCase(processName), vbTextCompare) > 0 Then
                    ret = oService.Terminate
                 End If
          Set oServices = Nothing
          Set oWMI = Nothing
End Sub
Private Declare Function ShellExecute Lib "shell32.dll" _
  Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _
  ByVal lpFile As String, ByVal lpParameters As String, _
  ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Public Sub OpenAcrobat(Item As Outlook.MailItem)
    Dim objFSO As Object, _
        objTempFolder As Object, _
        olkAttachment As Outlook.Attachment
    'On Error Resume Next
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTempFolder = objFSO.GetSpecialFolder(2)
    For Each olkAttachment In Item.Attachments
        If LCase(objFSO.GetExtensionName(olkAttachment.FileName)) = "pdf" Then
            olkAttachment.SaveAsFile objTempFolder & "\" & olkAttachment.FileName
            ShellExecute 0&, "open", objTempFolder & "\" & olkAttachment.FileName, 0&, 0&, 0&
            ShellExecute 0&, "print", objTempFolder & "\" & olkAttachment.FileName, 0&, 0&, 0&
            KillProcess "acrobat"
        End If
    Set olkAttachment = Nothing
    Set objTempFolder = Nothing
    Set objFSO = Nothing
End Sub

Open in new window

LVL 76

Expert Comment

by:David Lee
ID: 22850236
Hmmm, I was thinking that ShellExecute paused execution until printing was finished.  Now that you mention this problem I remember that it doesn't.  Let me think about it a bit.

Author Comment

ID: 22853697
is there not a pause i can insert into the code between the print and exit

Author Comment

ID: 22880605
Is there nothing i can do to close the program?
LVL 23

Expert Comment

ID: 22927092
why not just put a wait timer in? Say One Minute...

Author Comment

ID: 22927338
how could i do that?
LVL 76

Accepted Solution

David Lee earned 2000 total points
ID: 22933573
Apologies for being so slow to post.  The problem is that a timer or a pause won't work because you have no idea when Acrobat will finish printing.  Too short a time and the next command will kill Acrobat while it's still processing.  Too long a time and Outlook will be tied up unnecessarily.  The solution needs to know when Acrobat finishes so the closing is appropriately timed.   Adobe's documentation says that the /T switch will close the Acrobat after printing.  Sadly, that appears to be false, at least for version 8.  I found this page which documents the problem and offers a solution.  I haven't tested this, so I don't know that it works.


Author Comment

ID: 22935254
thanks. looks pretty good. i will try tomorrow.

Featured Post

Get 15 Days FREE Full-Featured Trial

Benefit from a mission critical IT monitoring with Monitis Premium or get it FREE for your entry level monitoring needs.
-Over 200,000 users
-More than 300,000 websites monitored
-Used in 197 countries
-Recommended by 98% of users

Question has a verified solution.

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

Large Outlook files lead to various unwanted errors and corruption issues. Furthermore, large outlook files can also make Outlook take longer to start-up, search, navigate, and shut-down. So, In this article, i will discuss a method to make your Out…
This article describes how to import an Outlook PST file to Office 365 using a third party product to avoid Microsoft's Azure command line tool, saving you time.
The viewer will learn how to use the return statement in functions in C++. The video will also teach the user how to pass data to a function and have the function return data back for further processing.
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.
Suggested Courses
Course of the Month10 days, 8 hours left to enroll

765 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