2014/01/31

Outlook メール受信時に自動で添付ファイルを印刷する



こんにちは!承認しまくりのtknriaです!


役職が上がり、承認の権限を持つようになると、もちろん部下から承認依頼があります。

メールや電話で済む承認もありますが、見積書などに押印する承認もあります。


しかし、それ以外の仕事に追われて、部下から催促があるまで忘れてた!というケースもあるかと思います。

メールベースだと未読にしておかないと忘れるし、未読にしていても埋もれてしまうことがありますよね。

それよりかは、押印すべき書類を先に印刷しておけば、まだ管理しやすいのではないでしょうか。



■ 承認依頼内容を印刷しちゃう!


今回想定しているのは、メールの件名に「承認依頼」の文字が含まれていて、そのメールに添付ファイルがある場合です。

そのメールを受信したときに、その添付ファイルを自動で印刷する、という機能を実装します。


' ----- 以下、ソース -----

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
        (ByVal hWnd As Long, ByVal lpsz0p As String, ByVal lpszFile As String, _
         ByVal lpszParams As String, ByVal lpszDir As String, _
         ByVal FsShowCmd As Long) As Long


Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim objItem As Variant
    Set objItem = Session.GetItemFromID(EntryIDCollection)
    If TypeName(objItem) = "MailItem" Then       
        ' ここに、メールを受信したときに行いたい処理を記載
        ' 添付ファイルを自動印刷
        Call PrintAttachments(objItem)
    End If
End Sub


Public Sub PrintAttachments(ByVal objMail As MailItem)
    Const ATTACH_PATH = "C:\temp_attach\"   ' 添付ファイルを保存するフォルダを指定
    Const MyAddress = "tknria@okku.com"   ' 自分のメールアドレス
    Dim objAttach As Attachment
    Dim strFileName As String
   
    If InStr(objMail.Subject, "承認依頼") > 0 Then
        ' 件名に「承認依頼」が入っているかを判定
        If objMail.To = MyAddress Then
            ' 自分宛のメールかどうかを判定
        Else
            Exit Sub
        End If
    Else
        Exit Sub
    End If
   
    If objMail.Attachments.Count > 0 Then
        For Each objAttach In objMail.Attachments
            ' 添付ファイルを指定フォルダに保存
            strFileName = ATTACH_PATH & objAttach.FileName
            objAttach.SaveAsFile (strFileName)
            ' 保存したファイルを印刷する
            Call ShellExecute(0, "print", strFileName, 0, ATTACH_PATH, 0)
        Next
    Else
    End If
   
End Sub

' ----- 以上、ソース -----



■ 億劫なあとがき


これで、部下から恐る恐る「承認まだでしょうか・・・?」などと急かされることはないはず!

もちろん、会社の規模にもよりますが、そもそもそこまで細分化された承認体制が必要か、というところから見直す必要はありますよね。