メッセージを受信したら自動返信し、メール本文と添付ファイルを印刷するマクロ


コメントにて以下のご要望をいただきました。

outlook2010でマクロを実装したく勉強中です。当方の環境で以下のようなフローのマクロを作っているところです。


1.メールを受信したら,そのメールの表題に管理番号を付ける。
2.そのメールに対して自動返信。
3.その自動返信にはccに所定の社内メンバーを入れる。
4.受信メール内のメッセージを印刷する。
5.添付されているPDFファイルをメールの表題と同じ管理番号を付け,所定の場所に保存し,印刷する。

過去の履歴から,添付ファイルが指定されていないと各アプリケーションで動作が異なるという事が分かりましたので,まずはpdfファイルだけでも対応しようと考えています。
1,2はOKです。それ以外がno ideaです。アドバイスお願いできますでしょうか。よろしくお願い致します。



一つ一つの処理はわかってしまえば何のことはないのですが、検索などではなかなか見つけられないのかもしれませんね。
1 と 2 は OK ということですが、それも含めて実装してみました。
なお、印刷方法は添付ファイルの種類ごとに違うと以前コメントに返信していたのですが、PDF の印刷方法を調べていたらたいていの添付ファイルで利用可能な印刷方法が見つかったので、そちらで実装しました。
マクロは以下の通りです。

' ここをトリプルクリックでマクロ全体を選択できます。
' 以下はソースの先頭に記載する必要があります。
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
                (ByVal hwnd As Long, ByVal lpszOp 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 Object
    Set objItem = Session.GetItemFromID(EntryIDCollection)
    If TypeName(objItem) = "MailItem" Then
        ReplyAndPrintMessage objItem
    End If
End Sub
'
Private Sub ReplyAndPrintMessage(ByVal objItem As MailItem)
    Const CC_ADDRESS = "cc@example.com" ' cc で追加する受信者のアドレス
    Const ATTACH_PATH = "c:\attachments" ' 添付ファイルを保存するフォルダー
    Dim iSeqNum As Integer
    Dim objReply As MailItem
    Dim objRec As Recipient
    Dim objAttach As Attachment
    Dim strFileName As String
    ' 1. メールの表題に管理番号をつける。
    '    管理番号取得 (レジストリ HKEY_CURRENT_USER\Software\VB and VBA Program Settings 配下より)
    iSeqNum = CInt(GetSetting("OutlookLab", "ReplyAndPrintMessage", "SeqNumber", 1))
    '    件名に管理番号を付与
    objItem.Subject = "[管理番号:" & iSeqNum & "]" & objItem
    objItem.Save
    ' 2. そのメールに対して自動返信する。
    Set objReply = objItem.ReplyAll
    '    返信メッセージの本文設定
    objReply.Body = "メールを受け付けました。" & vbCrLf & objReply.Body
    ' 3. 自動返信にはccに所定の社内メンバーを入れる
    Set objRec = objReply.Recipients.Add(CC_ADDRESS)
    objRec.Type = olCC
    objRec.Resolve
    '    返信メールを送信。
    objReply.Send
    ' 4. 受信メール内のメッセージを印刷する。
    objItem.PrintOut
    ' 添付ファイルがある場合の処理
    If objItem.Attachments.Count > 0 Then
        ' 5. 添付されている PDF ファイルをメールの表題と同じ管理番号をつけ、所定の場所に保存し、印刷する。
        '    添付ファイルを取得
        Set objAttach = objItem.Attachments.Item(1)
        '    所定の場所に管理番号を付けて保存
        strFileName = ATTACH_PATH & "\管理番号 " & iSeqNum & "-" & objAttach.FileName
        objAttach.SaveAsFile strFileName
        '    保存したファイルを印刷する
        ShellExecute 0, "print", strFileName, 0, ATTACH_PATH, 0
    End If
    ' 管理番号を更新
    iSeqNum = iSeqNum + 1
    SaveSetting "OutlookLab", "ReplyAndPrintMessage", "SeqNumber", iSeqNum
End Sub

マクロの登録方法やメニューへの追加について

広告

メッセージを受信したら自動返信し、メール本文と添付ファイルを印刷するマクロ」への10件のフィードバック

  1. ご連絡ありがとうございました。大変助かります。
    ただ,1つ連絡が忘れがありました事をお詫び致します。当方の環境は64ビットです。色々調べた所,最初の部分にPtrSafe を足せばOKだと分かりました。

    超初歩的な質問をさせて頂きます。
    このままマクロをコピペして,実行しようにも実行するマクロが選択できない事になります。Private declareの前に適当なsub auto()など足せば良いのかと思いましたが,実際それでは動作いたしませんでした。
    こちらの過去ログから適当なマクロをコピペして実行しましたが,その時はうまく動作いたしましたので,管理人殿のスクリプトには問題ないと思っております。ただ,現時点で上記マクロが動作致しませんので,何卒もう一声アドバイスを頂けると助かるのですが,いかがでしょうか。
    お忙しいところ恐縮ですが,よろしくお願い致します。

  2. ご連絡ありがとうございました。連絡遅くなり,申し訳ありません。
    メール受信時に本マクロが動作する事は確認できました。
    現時点で下記問題が発生しております。
    (1) 4番の,受信メール内のメッセージが印刷出来ません。現時点で出来ているのは差出人,送信日時,宛先,件名のみです。
    (2) 添付ファイルが保存されません。
    色々なWebを参照して改善を試みていますが,上記2件うまくいきません(よって返事が遅れてしまいました)。
    アドバイスお願いできませんでしょうか?
    お忙しいところ,恐縮ですが何卒よろしくお願い致します。

    • メールの本文が印刷できないとのことですが、マクロではなく自分自身でメールを開いて印刷した場合は印刷できるのでしょうか?
      もしそれでも印刷できなければ、印刷設定などに問題があると思われます。
      また、添付ファイルが保存できない点については、添付ファイル保存用のフォルダー (上記マクロで c:\attachments と指定しているフォルダー) は存在しますでしょうか?

  3. お忙しいところ,回答ありがとうございます。
    自分自身でメールを開いて印刷すると,きちんと印刷出来ます。なお,別に問い合わせのあった内容を参照しましたが(こちらの環境は2010ですが),メールはhtml,テキスト両方共印刷出来ません(自分で印刷すると印刷は可能です)。
    添付も同様で,Cルートディレクトリに設定していますが,添付が保存・印刷されません。

    念のためお伝え致しますが,当方の環境は,
    window7 proの英語版を日本語入力IMEを使っております。
    プリンターは社内ネットワーク接続です。

    プリンターをローカル設定(USB接続)にしても,メッセージが受信出来ません。

    また,添付の保存・印刷に関しても,ShellExecute 0, “print”, strFileName, 0, ATTACH_PATH, 0 から引数をかっこでくくっても(ググると然様にしている参照が多いため),保存・印刷が出来ません。

    何かアドバイスありましたらお願いできますでしょうか。
    よろしくお願い致します。

    • サーバーとして IMAP サーバーをご使用でしょうか?
      その場合、受信時のマクロで処理するタイミングでは本文や添付ファイルがダウンロードされていないため、このマクロが適切に動作しないことを確認しました。
      IMAPということであれば、IMAP対応を検討します。

  4. 早速の返信ありがとうございます。
    仰るとおり,IMAPを使用しております。
    最初にこの内容をお伝えすべきだったかも知れません。申し訳ありませんでした。
    よろしくお願いいたします。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中