Macro to print & move selected emails?

Status
Not open for further replies.

Scott@Atlas

New Member
Outlook version
Outlook 2007
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.
 

Diane Poremsky

Senior Member
Outlook version
Outlook 2016 32 bit
Email Account
Office 365 Exchange
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/
 

Scott@Atlas

New Member
Outlook version
Outlook 2007
Email Account
Exchange Server
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
 

Diane Poremsky

Senior Member
Outlook version
Outlook 2016 32 bit
Email Account
Office 365 Exchange
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.
Thread starter Similar threads Forum Replies Date
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
C Macro to extract sender name & subject line of incoming emails to single txt file Outlook VBA and Custom Forms 3
L Macro/VBA to Reply All, with the original attachments Outlook VBA and Custom Forms 2
S Macro to move “Re:” & “FWD:” email recieved the shared inbox to a subfolder in outlook Outlook VBA and Custom Forms 0
S Outlook Macro to send auto acknowledge mail only to new mails received to a specific shared inbox Outlook VBA and Custom Forms 0
S Outlook Macro to move reply mail based on the key word in the subjectline Outlook VBA and Custom Forms 0
Eike Move mails via macro triggered by the click of a button? Outlook VBA and Custom Forms 0
S Macro or plug-in to see if specific person was included in this email Outlook VBA and Custom Forms 3
U Macro for reminders,tasks,calendar Outlook VBA and Custom Forms 4
V macro runs slower on startup than after Outlook VBA and Custom Forms 3
N Macro to move all recipients to CC while replying Outlook VBA and Custom Forms 0
A VBA macro for 15 second loop in send and received just for 1 specific mailbox Outlook VBA and Custom Forms 1
G VBA Macro Calendar Printing Assistant 4
R Help Revising VBA macro to delete email over different time span Outlook VBA and Custom Forms 0
M Outlook macro to automate search and forward process Outlook VBA and Custom Forms 6
R Macro Schedule every day in Outlook Using Outlook 0
L Moving emails with similar subject and find the timings between the emails using outlook VBA macro Outlook VBA and Custom Forms 1
Healy Consultants Macro to remove inside organization distribution list email address when reply to all recepients Outlook VBA and Custom Forms 0
geofferyh Cannot get Macro to SAVE more than one message attachment??? Outlook VBA and Custom Forms 5
N How can I increase/faster outlook VBA Macro Speed ? Using Outlook 2
4 Macro to set the category of Deleted Item? Outlook VBA and Custom Forms 2
D.Moore Folder view settings by VBA macro Outlook VBA and Custom Forms 57
A Outlook macro to create search folder with mail categories as criteria Outlook VBA and Custom Forms 3
Dave A Run macro on existing appointment when it changes Outlook VBA and Custom Forms 1
V Outlook Macro to show Flagged messages Outlook VBA and Custom Forms 2
O Run macro automatically at sending an email Using Outlook 11
R Retain Original Message When Forwarding With Macro Outlook VBA and Custom Forms 3
C Macro to add multiple recipients to message Outlook VBA and Custom Forms 3
B Reply and replyall macro is not working Outlook VBA and Custom Forms 1
O Macro - paste as plain text Outlook VBA and Custom Forms 2
J Help Please!!! Outlook 2016 - VBA Macro for replying with attachment in meeting invite Outlook VBA and Custom Forms 9
witzker Macro to set contact reminder to next day 9:00 Outlook VBA and Custom Forms 45
M Adding Macro to populate "to" "subject" "body" not deleting email string below. Outlook VBA and Custom Forms 5
E Copying data from e-mail attachement to EXCEL file via macro Outlook VBA and Custom Forms 38
M Macro to add date/time stamp to subject Outlook VBA and Custom Forms 4
R VBA macro - new message Outlook VBA and Custom Forms 3
S Example VBA Macro - To Conditionally Change the From Account and Add a BCC Address on Emails Outlook VBA and Custom Forms 11
S Macro using .SendUsingAccount only works the first time, after starting Outlook Outlook VBA and Custom Forms 4
S VBA Macro - Run-time error '424': object required - Help Please Outlook VBA and Custom Forms 3
B VBA Macro for assigning multiple Categories to an email in my Inbox Outlook VBA and Custom Forms 1
N Macro for attachment saved and combine Outlook VBA and Custom Forms 1
Sabastian Samuel HOW DO I FORWARD AN EMAIL WITH MACRO using an email that in the body of another email Outlook VBA and Custom Forms 3
C Search with Google Macro? Outlook VBA and Custom Forms 4
J Outlook 2013 Extract Flag Completed dates to Excel Macro Outlook VBA and Custom Forms 16
M Slow VBA macro in Outlook Outlook VBA and Custom Forms 5
M Macro for attachments download adjustment Outlook VBA and Custom Forms 3
M VBA macro for Inbox's attachments search Outlook VBA and Custom Forms 0
B Macro to manually move selected emails to network folder Outlook VBA and Custom Forms 1
Similar threads


















































Top