Macro to print & move selected emails?

Status
Not open for further replies.

Scott@Atlas

New Member
Outlook version
Email Account
Exchange Server
Hi All,

The accounting staff in my office receive all manner of emails containing attachments from a multitude of vendors & have need to print a hard copy of each for auditing purposes - I've been attempting to build a custom button into the 32 bit version of Outlook 2007 to fire a script that would print one or more selected emails and any attachments contained therein, and then move that message to a specific folder within a local .pst file. I've tried cobbling it together from excerpts from http://www.slipstick.com/developer/macro-move-aged-mail/#case and http://www.slipstick.com/developer/working-vba-nondefault-outlook-folders, along side numerous other forum entries, but it's become very clear to me that my limited experience with VBA isn't cutting it for this purpose. I'm hoping some kind soul has either a suggestion or a link to some prior article that might point me in the right direction.
 
Where are you running into problems? As problems go, this one is fairly easy to do, especially since there are a lot of code samples that do it. Basically, move it and then call the print macro (or print, then move). The one problem you might have is the button - Outlook 2007 supports buttons in the main window but not in opened messages.

Do you need to print the mail and the attachment or just the attachment?
Print attachments: http://www.slipstick.com/developer/print-attachments-as-they-arrive/
 
I have it mostly assembled from assorted posts, although I have hit one snag I haven't been able to rectify. It'll print the selected emails, save a copy of any present attachments and print them, move it to a separate folder, and play a ridiculous noise to identify it's completed. The issue is that it'll print all of the emails, and then all of the attachments, which is apparently an aggravation in that the printouts must then be sorted to match back up the message with the attachment. Is there a way to iterate through the macro by having it print the email, print the attachment, and then move on to the next message in the active selections? Here's the whole of it so far:

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 Declare Function sndPlaySound32 _
Lib "winmm.dll" _
Alias "sndPlaySoundA" ( _
ByVal lpszSoundName As String, _
ByVal uFlags As Long) As Long

Function GetFolderPath(ByVal FolderPath As String) As Outlook.Folder
Dim oFolder As Outlook.Folder
Dim FoldersArray As Variant
Dim i As Integer

On Error GoTo GetFolderPath_Error
If Left(FolderPath, 2) = "\\" Then
FolderPath = Right(FolderPath, Len(FolderPath) - 2)
End If

'Convert folder path to array
FoldersArray = Split(FolderPath, "\")
Set oFolder = Application.Session.Folders.Item(FoldersArray(0))
If Not oFolder Is Nothing Then
For i = 1 To UBound(FoldersArray, 1)
Dim SubFolders As Outlook.Folders
Set SubFolders = oFolder.Folders
Set oFolder = SubFolders.Item(FoldersArray(i))
If oFolder Is Nothing Then
Set GetFolderPath = Nothing
End If
Next
End If

'Return the oFolder
Set GetFolderPath = oFolder
Exit Function

GetFolderPath_Error:
Set GetFolderPath = Nothing
Exit Function
End Function

Sub Accounting()

For Each itm In ActiveExplorer.Selection
itm.PrintOut
Next

Dim oMail As Outlook.MailItem
Dim obj As Object
For Each obj In ActiveExplorer.Selection
Set oMail = obj
Dim colAtts As Outlook.Attachments
Dim oAtt As Outlook.Attachment
Dim sFile As String
Dim sDirectory As String
Dim sFileType As String
'Define where to save a copy of the email attachment before printing
sDirectory = "C:\Users\test\Downloads\"
Set colAtts = oMail.Attachments
If colAtts.Count Then
For Each oAtt In colAtts
'This code looks at the last 4 characters in a filename
sFileType = LCase$(Right$(oAtt.FileName, 4))
Select Case sFileType
'Print these file types if they are saved as attachments on incoming emails.
'Add any additional file types below:
Case ".pdf", ".xls", "xlsx", "xlsm", ".doc", "docx", ".txt"
sFile = sDirectory & oAtt.FileName
oAtt.SaveAsFile sFile
ShellExecute 0, "print", sFile, vbNullString, vbNullString, 0
End Select
Next
End If

Next

'Define the path to whatever sound to play when the macro completes
sndPlaySound32 "C:\Users\test\Desktop\duck_quack.wav", 0&

On Error Resume Next

Dim ns As Outlook.NameSpace
Dim moveToFolder As Outlook.MAPIFolder
Dim objItem As Outlook.MailItem

Set ns = Application.GetNamespace("MAPI")

'Define path to the destination folder in some other .pst file
Set moveToFolder = GetFolderPath("Archive\Reviewed")

If Application.ActiveExplorer.Selection.Count = 0 Then
MsgBox ("No item selected")
Exit Sub
End If

If moveToFolder Is Nothing Then
MsgBox "Target folder not found!", vbOKOnly + vbExclamation, "Move Macro Error"
End If

For Each objItem In Application.ActiveExplorer.Selection
If moveToFolder.DefaultItemType = olMailItem Then
If objItem.Class = olMail Then
objItem.Move moveToFolder
End If
End If
Next

Set objItem = Nothing
Set moveToFolder = Nothing
Set ns = Nothing

End Sub
 
Sorry I missed this before... this problem:

The issue is that it'll print all of the emails, and then all of the attachments, which is apparently an aggravation in that the printouts must then be sorted to match back up the message with the attachment. Is there a way to iterate through the macro by having it print the email, print the attachment, and then move on to the next message in the active selections?

is due in part to the time it takes outlook to process the attachments - try adding a delay after each loop so there is time for the attachments to render.

Mike Sperry (of Sperry Software) explained this problem to me once - I'll see if i can find his comments.
 
Status
Not open for further replies.
Similar threads
Thread starter Title Forum Replies Date
D VBA Macro to Print and Save email to network location Outlook VBA and Custom Forms 1
D Print Attachments only in selected emails using a macro Outlook VBA and Custom Forms 3
D Print Macro with Page Range? Using Outlook 9
P Possible to write a macro to print all attachments with specific . Outlook VBA and Custom Forms 1
X Custom icon (not from Office 365) for a macro in Outlook Outlook VBA and Custom Forms 1
X Run macro automatically when a mail appears in the sent folder Using Outlook 5
mrrobski68 Issue with Find messages in a conversation macro Outlook VBA and Custom Forms 1
G Creating Macro to scrape emails from calendar invite body Outlook VBA and Custom Forms 6
M Use Macro to change account settings Outlook VBA and Custom Forms 0
J Macro to Reply to Emails w/ Template Outlook VBA and Custom Forms 3
C Outlook - Macro to block senders domain - Macro Fix Outlook VBA and Custom Forms 1
Witzker Outlook 2019 Macro to seach in all contact Folders for marked Email Adress Outlook VBA and Custom Forms 1
S macro error 4605 Outlook VBA and Custom Forms 0
A Macro Mail Alert Using Outlook 4
J Outlook 365 Outlook Macro to Sort emails by column "Received" to view the latest email received Outlook VBA and Custom Forms 0
J Macro to send email as alias Outlook VBA and Custom Forms 0
M Outlook Macro to save as Email with a file name format : Date_Timestamp_Sender initial_Email subject Outlook VBA and Custom Forms 0
Witzker Outlook 2019 Macro GoTo user defined search folder Outlook VBA and Custom Forms 6
D Outlook 2016 Creating an outlook Macro to select and approve Outlook VBA and Custom Forms 0
Witzker Outlook 2019 Macro to send an Email Template from User Defined Contact Form Outlook VBA and Custom Forms 0
Witzker Outlook 2019 Macro to check Cursor & Focus position Outlook VBA and Custom Forms 8
V Macro to mark email with a Category Outlook VBA and Custom Forms 4
M Outlook 2019 Macro not working Outlook VBA and Custom Forms 0
S Outlook 365 Help me create a Macro to make some received emails into tasks? Outlook VBA and Custom Forms 1
Geldner Send / Receive a particular group via macro or single keypress Using Outlook 1
D Auto Remove [EXTERNAL] from subject - Issue with Macro Using Outlook 21
V Macro to count flagged messages? Using Outlook 2
sophievldn Looking for a macro that moves completed items from subfolders to other subfolder Outlook VBA and Custom Forms 7
S Outlook Macro for [Date][Subject] Using Outlook 1
E Outlook - Macro - send list of Tasks which are not finished Outlook VBA and Custom Forms 3
E Macro to block senders domain Outlook VBA and Custom Forms 1
N VBA Macro To Save Emails Outlook VBA and Custom Forms 1
N Line to move origEmail to subfolder within a reply macro Outlook VBA and Custom Forms 0
Witzker Outlook 2019 Macro to answer a mail with attachments Outlook VBA and Custom Forms 2
A Outlook 2016 Macro to Reply, ReplyAll, or Forward(but with composing new email) Outlook VBA and Custom Forms 0
J Macro to Insert a Calendar Outlook VBA and Custom Forms 8
W Macro to Filter Based on Latest Email Outlook VBA and Custom Forms 6
T Macro to move reply and original message to folder Outlook VBA and Custom Forms 6
D Autosort macro for items in a view Outlook VBA and Custom Forms 2
S HTML to Plain Text Macro - Help Outlook VBA and Custom Forms 1
A Macro to file emails into subfolder based on subject line Outlook VBA and Custom Forms 1
N Help creating a VBA macro with conditional formatting to change the font color of all external emails to red Outlook VBA and Custom Forms 5
S Visual indicator of a certain property or to show a macro toggle Outlook VBA and Custom Forms 2
L Modifying VBA script to delay running macro Outlook VBA and Custom Forms 3
S Macro to extract and modify links from emails Outlook VBA and Custom Forms 3
M Replyall macro with template and auto insert receptens Outlook VBA and Custom Forms 1
L Macro to add Date & Time etc to "drag to save" e-mails Outlook VBA and Custom Forms 17
S Macro for Loop through outlook unread emails Outlook VBA and Custom Forms 2
Globalforester ItemAdd Macro - multiple emails Outlook VBA and Custom Forms 3
S Macro to extract email addresses of recipients in current drafted email and put into clipboard Outlook VBA and Custom Forms 2

Similar threads

Back
Top