Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

Phil A.

Moderator emeritus
Original poster
Apr 2, 2006
5,800
3,100
Shropshire, UK
I know that 4.2 will bring AirPrint with it, but I'm not sure how long it will be before my Kodak Printer is supported, and I'm impatient anyway, so I thought I'd have a go at setting up printing from my shiny new iPad. This method uses functionality within Outlook (not Outlook Express), so I'm afraid it's for Windows users only (although it may be translatable to the new Mac Office Outlook if it supports the VBA object model). It is based on some code I found here (German site) with a few minor tweaks


What you need to do first of all is alter the trust centre settings of your outlook to allow unsigned macros to run (this may be a security concern for some people - if it is then get yourself a code signing certificate or else set the level to warn and allow it each time outlook starts).

Then, open up VBA by pressing Alt-F11, expand Project1, Microsoft Outlook Objects and double click on ThisOutlookSession.

Now, paste the following code into the code window:


Code:
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

Private WithEvents Items As Outlook.Items

Private Sub Application_Startup()
  Dim Ns As Outlook.NameSpace
  Dim Folder As Outlook.MAPIFolder

  Set Ns = Application.GetNamespace("MAPI")
  Set Folder = Ns.GetDefaultFolder(olFolderInbox)
  
  Set Items = Folder.Items
End Sub

Private Sub Items_ItemAdd(ByVal Item As Object)
  If TypeOf Item Is Outlook.MailItem Then
    Dim mail As Outlook.MailItem
    Set mail = Item
    If InStr(LCase(mail.Subject), "print me") <> 0 Then
        PrintAttachments Item
    End If
  End If
End Sub

Private Sub PrintAttachments(oMail As Outlook.MailItem)
  On Error Resume Next
  Dim colAtts As Outlook.Attachments
  Dim oAtt As Outlook.Attachment
  Dim sFile As String
  Dim sDirectory As String
  Dim sFileType As String

  sDirectory = "C:\Attachments\"

  Set colAtts = oMail.Attachments

  If colAtts.Count Then
    For Each oAtt In colAtts

      sFileType = LCase$(Right$(oAtt.FileName, 4))

      Select Case sFileType
      Case "xlsx", "docx", ".pdf", ".doc", ".xls", ".ppt", "pptx", ".txt"
        sFile = sDirectory & oAtt.FileName
        oAtt.SaveAsFile sFile
        ShellExecute 0, "print", sFile, vbNullString, vbNullString, 0
      End Select
    Next
  End If
End Sub

Finally, close the VBA window and restart Outlook. You will need to create a folder called C:\attachments (or else rename the folder in the code). If you change the folder, make sure you include the trailing \ at the end of the path

What happens now is that whenever a mail arrives in your inbox with "Print Me" in the subject line, all attachments will be saved to the attachments folder and then printed out on your default printer (you can change the attachment types that are printed by changing the code line that starts Case "xlsx". Note that you will have to have applications installed on your machine that support the file types you are trying to print.
You can also change the trigger phrase within the code (make sure you use lower case in the code as it changes the case of the subject before doing a compare)

Now, from your iPad all you have to do is mail a document to yourself with "Print Me" in the subject line and it will be printed out (as long as outlook is running on your PC): This can be done from within most apps such as Pages, Docs to Go, etc.

The code as it stands will only work against the default inbox (i.e. not IMAP folders), but I'm sure it could be modified to work on IMAP accounts.

This can be tailored in a number of ways (for example, I had a spare machine so I've setup a separate exchange account for printing and execute without the subject line check so that it keeps printed mail away from my main mail and also means I don't have to worry about setting the subject line. I've also setup a scheduled job to periodically clear out the attachments folder), but hopefully it will prove useful for someone else out there!
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.