受信したメールの添付ファイルを印刷し、メールを移動するマクロ


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


添付ファイルの保存は出来ました。ありがとうございました。
保存後、保存した添付ファイル(エクセル形式の注文書)の印刷も行いたいのですが、
方法がわかりません。(VBAはこれから勉強を始めるところです。)教えて頂けないでしょうか?

追加の質問です。
印刷後印刷済みファイルは別フォルダへ移動の方法も教えてもらえると助かります。
ほとんど無知の状態なのですが、急遽社内でその様な仕組みを作る必要があり質問させてもらっています。
お客様から受けた注文メールの処理です。



受信したメールの添付ファイルの印刷処理などは以前公開していますが、これから勉強を始めるとのことなので、なかなか難しいかもしれません。
また、追加の質問についてですが、印刷済みのファイルを移動するなら最初からそのフォルダーに保存して印刷すればよいので、印刷したファイルが添付されているメールということでしょうか?
とりあえず、処理済みのメールを移動するというマクロにしてみました。
マクロは以下の通りです。全てのメールを印刷すると大変なことになると思うので、メールの件名に「注文メール」が含まれているものだけ印刷して移動します。

' ここをトリプルクリックでマクロ全体を選択できます。
' 以下はソースの先頭に記載する必要があります。
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" And objItem.Subject Like "*注文メール*" Then '条件はここで指定
        PrintAndMoveMessage objItem
    End If
End Sub
'
Private Sub PrintAndMoveMessage(ByVal objItem As MailItem)
    Const SAVE_PATH = "c:\attachments\" ' 添付ファイルを保存するフォルダー
    Const FOLDER_NAME = "処理済み" ' メッセージの移動先となる受信トレイのサブフォルダー
    Dim objFSO 'As FileSystemObject
    Dim objAttach As Attachment
    Dim strFileName As String
    Dim c As Integer
    Dim fldSave As Folder
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    ' 添付ファイルの処理
    If objItem.Attachments.Count > 0 Then
        '  添付ファイルを取得
        Set objAttach = objItem.Attachments.Item(1)
        With objAttach
        '  所定の場所に保存
            strFileName = SAVE_PATH & .FileName
            While objFSO.FileExists(strFileName)
                strFileName = SAVE_PATH & Left(.FileName, InStrRev(.FileName, ".") - 1) _
                    & "-" & c & Mid(.FileName, InStrRev(.FileName, "."))
                c = c + 1
            Wend
        End With
        '
        objAttach.SaveAsFile strFileName
        '    保存したファイルを印刷する
        ShellExecute 0, "print", strFileName, 0, ATTACH_PATH, 0
    End If
    ' メッセージを移動
    Set fldSave = Session.GetDefaultFolder(olFolderInbox).Folders(FOLDER_NAME)
    objItem.Move fldSave
End Sub

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

広告

受信したメールの添付ファイルを印刷し、メールを移動するマクロ」への2件のフィードバック

  1. はじめまして。色々と拝見させていただきました。
    マクロは始めたばかり無知の状態です。今回このマクロの説明を見て自分が行いたい内容に合っていたので
    コピペをして実行しようとしたのですがエラーが出て実行できません。エラーの内容は以下のような内容です。
    「コンパイルエラー
    このプロジェクトのコードは、64ビットシステムで使用するために更新する必要があります。Declareステートメントの確認および更新を行い、次にDeclareステートメントにPtrSafe属性を設定してください。」
    このようなエラーメッセージが出てしまいます。どのようにしたらよろしいでしょうか?

    • Office も 64 ビット版を使用されているのですね。
      特別な理由がない限り 32 ビット版を使用することをお勧めしたいところですが、64 ビット版で使用する場合は以下のようにコードを修正する必要があります。

      変更前:
      Private Declare Function ShellExecute Lib “shell32.dll” Alias “ShellExecuteA” _

      変更後:
      Private Declare PtrSafe Function ShellExecute Lib “shell32.dll” Alias “ShellExecuteA” _

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中