Excel のリストにしたがってファイルを添付して送信するマクロ


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


現在、複数アドレスに、それぞれ異なるPDFファイルを添付して送る作業をしています。アドレスのデータは、outlookのアドレス帳にグループごとにインポートしました。しかし、PDF(ワードの差し込みで、名前とID番号を入れてPDFに作成してあります)の添付と、メール文面を毎回署名から作成する作業に時間がかかります。各グループが40~100件近く、グループ数が12あり、総件数が1000件近くになります。メール文面は、グループごとに異なり、12種類必要です。件名は全グループ同じです。文面は、グループごとに署名として登録し、一通ずつ呼び出して、さらにPDFファイルを毎回添付してから送信しています。outlook2010、windows7を使っていますが、マクロでまとめて作業することはできるでしょうか。

追加の要件:

①PDFファイルは、wordに、3の作業エクセルのA列のメールアドレスの持ち主たちの 1)名前2)申し込みID を差し込んで作ります。
②(送付するPDFファイルは、セミナーの受講票です。申し込んだ人たちそれぞれのIDと名前が入り、申込み者のメアドに送信します。
③そのセミナーのコースが12あり、それぞれコース名が入った文面のOFTファイルをテンプレートとして作成できます。


このような定型作業こそ、マクロの真価が発揮できるものですね。

以下のような流れで実現できるでしょう。

  1. 以下のような Excel ファイルを作成します。(1行目にはヘッダーを入れます。)

    A 列: メールアドレス
    B 列: 名前
    C 列: 申し込み ID
    D 列: PDF ファイル名
    E 列: OFT ファイル名

  2. 上記の Excel ファイルをもとに、Word の差し込み印刷で PDF ファイルを作ります。
  3. OFT ファイルをコースごとに作成します。
  4. 下記のマクロを実行します。

    ' ここをトリプルクリックでマクロ全体を選択できます。
    Public Sub SendPDFbyExcel()
        Const EXCEL_FILE = "c:\temp\list.xlsx" ' このファイル名を 1. の Excel ファイル名の置き換えてください
        Dim iCol As Integer
        Dim objBook As Excel.Workbook
        Dim objSheet As Excel.Worksheet
        Dim objMail As MailItem
        '
        Set objBook = GetObject(EXCEL_FILE)
        Set objSheet = objBook.Sheets(1)
        iCol = 2
        With objSheet
            While .Cells(iCol, 1) <> ""
                Set objMail = Application.CreateItemFromTemplate(.Cells(iCol, 5))
                objMail.Recipients.Add .Cells(iCol, 2) & "様 <" & .Cells(iCol, 1) & ">"
                objMail.Body = Replace(objMail.Body, "%name%", .Cells(iCol, 2))
                objMail.Body = Replace(objMail.Body, "%id%", .Cells(iCol, 3))
                objMail.Attachments.Add .Cells(iCol, 4).Value
                objMail.Send
                iCol = iCol + 1
            Wend
        End With
        objBook.Close
    End Sub

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

広告

Excel のリストにしたがってファイルを添付して送信するマクロ」への4件のフィードバック

  1. 当サイトを重用させてもらっています。いつもありがとうございます。

    https://outlooklab.wordpress.com/2013/08/31/excel-のリストにしたがってファイルを添付して送信/

    こちらのサンプルを利用させていただいてました。ですが、利用環境(Exchange)を2010から2016へアップ後、同じメールが必ず2件ずつ作成されるようになってしまいました。

    追加のアカウントやメールボックスが影響しているのではと思い、削除→再作成、追加は行わない(但し共有ボックスは自動で追加されてしまう)ようにしてみたが、症状は改善しませんでした。

    何か有用な情報をご存知でしたら、ご紹介ください。よろしくお願いします。

    • 経過報告です。

      サンプルの最後から5行目、
      > iCol = iCol + 1

      こちらの部分を下記の用に修正、
      > iCol = iCol + 2

      とりあえず症状は回避できました。
      単純に2回読み込まれていると考えた対応です。

      エクセルのシート上、見た目では1行毎なのですが、
      埋め込みがあるのか、重複して読み込まれているのか、
      未だ判別には至っておりませんので、継続して調べてみます。

      ちなみにアカウントの追加による影響は考慮していません。
      プロファイルの削除まで行い再設定しても、症状発生しましたので…

      • 前のアカウント情報がレジストリに残っており有効なものと判定され誤動作していたみたいでした。レジストリを掃除して正常になりました。

        お騒がせしました。

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中