Thursday, November 1, 2012

Oops... forgot to attach

Here's a quick and easy way to avoid forgetting that attachment when sending an e-mail in Outlook.

(Adapted slightly from Mark Bird's blog.)

In Outlook 2010:
  • Click on File > Options > Trust Center > Trust Center Settings > Macro Settings > Enable all macros (read the warning first)
  • Click OK twice to save options
  • Press Alt-F11
  • Expand the project tree on the left, and double-click "ThisOutlookSession"
  • Click in the right-hand pane, and paste in the code below
  • Restart Outlook again (saving changes when prompted)
You'll now get a polite message if you mention "attach" or any variation in an e-mail, but forget to attach. It's clever enough to ignore the e-mail trail.

 
Here's the code to paste in:
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim m As Variant
Dim strBody As String
Dim intIn As Long
Dim intAttachCount As Integer, intStandardAttachCount As Integer

On Error GoTo handleError

'Edit the following line if you have a signature on your email that includes images or other files. Make intStandardAttachCount equal the number of files in your signature.
intStandardAttachCount = 0

strBody = LCase(Item.Body)

' text-only reply?
intIn = InStr(1, strBody, "original message")
If intIn = 0 Then

    ' html reply?
    intIn = InStr(1, strBody, "from: ")
    If intIn = 0 Then intIn = Len(strBody)

Else
    intIn = Len(strBody)
End If

intIn = InStr(1, Left(strBody, intIn), "attach")

intAttachCount = Item.Attachments.Count

If intIn > 0 And intAttachCount <= intStandardAttachCount Then
    
    m = MsgBox("It appears that you mean to send an attachment," & vbCrLf & "but there is no attachment to this message." & vbCrLf & vbCrLf & "Do you still want to send?", vbQuestion + vbYesNo + vbMsgBoxSetForeground)

    If m = vbNo Then Cancel = True
    
End If

handleError:

If Err.Number <> 0 Then
    MsgBox "Outlook Attachment Reminder Error: " & Err.Description, vbExclamation, "Outlook Attachment Reminder Error"
End If

End Sub