エクセルで作成している請求書を自動でPDF形式(電子取引データ)にしてOutlookからメール送信(下書き)するVBA

ExcelVBA

・きっかけ

「電子帳簿保存法の義務化に伴い、我が社も業務効率を上げたい!」けど、どうしたらよいか分からないし、今までの方法もあまり変えたくないという相談をいただきました。テレビで広告している企業様に相談してみてはいかがでしょうか?と提案しましたが、「そんなお金もないし、担当するスキルがある人がいないよ(笑)」と回答がありましたので、手始めに、現状エクセルで管理している請求書をVBAでPDF化してメール送信(下書き)するVBAを作成してみました。

・今回のVBAではこんなことができます

・ボタンクリックで印刷(出力)したいエクセルファイルが自動でPDF化され、メールで送信(下書き)できます。

・こんな方におすすめです

・エクセルで作成した書類を毎度、紙で印刷して印刷機器を経由してPDF化している方。

・エクセルで作成した書類(PDFファイル出力)を作成完了と同時にメール送信(Outlook)したい方。

・今回使用するコードの説明

ファイルのPDF化
Range(“開始セル:終了セル”).ExportAsFixedFormat Type:=xlTypePDF, Filename:=”保存したいフォルダ名\ファイル名.pdf”, openafterpublish:=True

指定範囲、開始セル(例:A1)から終了セル(例:C28)に対してPDF形式(xlTypePDF)にしてFilenameで保存したい場所とファイル名を指定します。openafterpublish:=Trueは保存後にファイルを開いて表示します。

メールの送信(又は下書き)に必要なコード
①Dim 変数名① As New Outlook.Application
 インスタンスを生成します。
②Dim 変数名② As Outlook.MailItem
 Outlookのメールであることを表す変数。
③Set 変数名② = 変数名①.CreateItem(olMailItem)
 メールを生成
④変数名②.SendUsingAccount = Session.Accounts(“●●●@gmail.com”)
 差出人を指定します(自分のアドレス等)
⑤変数名②.To = Range(“宛先が入力されているセル”)
 宛先を指定します。
⑥変数名②.Subject = “メールの件名”
 件名を入力します。
⑦変数名②.Attachments.Add Source:=”フォルダ名\ファイル名.pdf”
 メールに添付したいファイルを指定します。
⑧変数名②.Body = “メール本文”
 メール本文を入力します。
⑨変数名②.BodyFormat = olFormatPlain
 メールの本文をプレーンテキスト形式として設定します。
⑩変数名②.Save
 送信(送信せずに下書きしたい場合は.Save、送信したいときは「Send」)

・事前の設定

Outlook(メール)を操作する事前の設定として参照設定を行います。
Excelタブの「開発」→「Visual Basic」→Visual Basicタブの「ツール」→「参照設定」→「Microsoft Outlook ×× Object Library」(××はインストールされているバージョンによって変わります)をチェックしOKをクリックし設定します。

・請求書シートの用意(これはサンプル請求書シートです)

ボタンを配置します。「開発」→「挿入」→「ActiveX」→「コマンドボタン」をクリックして好きな場所に配置して、プロパティから「メール下書き」としております。セルの「N2」には送り先のアドレスを入力しておきます。

・入力例「メール下書き」ボタンの動作

Private Sub CommandButton1_Click()
    Dim myOutLook As New Outlook.Application
    Dim myEmail As Outlook.MailItem
    Dim sendEmail As String
    
    'ThisWorkbook.Path部分は保存したい場所に指定します
    Range("A1:M28").ExportAsFixedFormat Type:=xlTypePDF, _
    Filename:=ThisWorkbook.Path & "\請求書.pdf", _
    openafterpublish:=True
    
    'メールの下書き
    Set myEmail = myOutLook.CreateItem(olMailItem)
    With myEmail
        '差出人(自分のアドレス)
        .SendUsingAccount = Session.Accounts("●●●@gmail.com")
        '宛先
        .To = Range("n2")
        '件名
        .Subject = "請求書をお送りいたします。"
        '添付ファイル
        .Attachments.Add Source:=ThisWorkbook.Path & "\請求書.pdf"
        'メール本文
        .Body = "いつも大変お世話になっております。" & vbCrLf & vbCrLf & "請求書をお送りいたしますのでご確認いただけますと幸いです。" & sendEmail
        'プレーンテキスト形式設定
        .BodyFormat = olFormatPlain
        '送信(送信せずに下書きしたい場合は.Save、送信したいときは「Send」)
        .Save
    End With
    Set myEmail = Nothing
    myOutLook.Quit: Set myOutLook = Nothing
    
End Sub

・まとめ

電子帳簿保存法は今の手作業なり不便な部分をデジタル化して業務を助けるものとは思いますが、やり方によっては逆に不便になる可能性もあるかと思います。便利にするためには現状をきちんと把握し問題点を見つけることが大切と思います、決まった視点だけではなく、いろんな角度からたくさんの意見(否定しないこと)を聞くことによって新しい発見があるのではないかと思っております。
※あくまで個人の意見です。
最後にですが、この記事を通して新しいアイディアが生まれたり、VBAに興味を持っていただけたら幸いです。
ここまでご覧いただき、誠にありがとうございます。

・ご注意

・掲載されている内容には細心の注意をしてるつもりですが、
間違いやご指摘等がありましたら、「お問い合わせ」からご連絡をいただけますと幸いです。
・掲載されている入力VBAコード等は動作を保証するものではなく、あくまでサンプルとして掲載しております。
・掲載されている入力VBAコード等は自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
・対応バージョン
 Excel2021、2019、2016

コメント