- ベストアンサー
EXCEL VBAで→PDF化→自動メール送信
現在EXCELVBAでプリンターに出力された納品書を毎日50社ぐらいの顧客に手動FAXにて送っています。 通信費削減のために、ファイルをPDF化してEMAIL送信出来るようにしたいと思っています。 添付するファイルがEXCEL BOOKのままであれば以下のコードで出来るのですが、PDF化するやり方が分かりません。 ActiveWorkbook.SendMail Recipients:="email@*****.co.jp", _ Subject:="test" 10万円程度であれば、Adobe Acrobatなどのソフト購入してでも実現させたいと思っています。 又、ユーザーの操作はメーラーの「送信」ボタンをクリックする程度に留めたいです。 よきアドバイスよろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Wordドキュメント → PDF への変換なら、以前VBのメーリングリストでコードを見たことがあり、それを元に作成した経験があります。(2003年の8月頃?) ExcelにもWorkbook.PrintOutメソッドはあり、PrintToFile が引数で指定できますので、同じようなことはできるはずです。(未確認) 参考までに、Word用のコードを単純化したものを抜粋します。 ※ 下記は、必要最小限の要素を単純化して示したものです。 このままでは汎用性もなく、使い物にはなりません。 ※ インデントは半角スペースに変換のこと。 '**************************************************************** '必要ライブラリ ' 'Microsoft Word 9.0 Object Library C:\Program Files\Microsoft Office\Office\MSWORD9.OLB 'Acrobat Distiller C:\Program Files\Adobe\Acrobat 5.0\Distillr\Acrodist.exe '**************************************************************** ' 'エラーコードの定義 Public Const pErrPrinterNotAvailable As Long = 2212 'プリンタが無効です。 Sub MakePdfSample(ByRef strPrinter As String) 'WordドキュメントのPDF変換 'コードの一部分のみ抜粋。 Dim objWrdApp As Object ' Word.Application Dim objWrdDoc As Object ' Word.Document Dim objAbDist As Object ' ACRODISTXLib.PdfDistiller Dim strDefaultPrinter As String '「Acrobat ・・・」以外のプリンタは使用させない。 If Left$(strPrinter, Len("Acrobat Distiller")) <> "Acrobat Distiller" Then Err.Raise pErrPrinterNotAvailable, _ , _ "このプリンタではPDFファイルは出力できません。" _ & vbCrLf & "Adobe の Acrobat Distiller を選択してください。" End If Set objWrdApp = CreateObject("Word.Application") 'New Word.Application Set objAbDist = CreateObject("PdfDistiller.PdfDistiller.1") 'New ACRODISTXLib.PdfDistiller '通常使用するプリンタの情報を退避。(処理の完了後、または実行時エラー発生時に元に戻す) strDefaultPrinter = objWrdApp.ActivePrinter 'objWrdApp.ActivePrinter = "Acrobat Distiller on LPT1:" objWrdApp.ActivePrinter = strPrinter Set objWrdDoc = objWrdApp.Documents.Open("C:\Test.doc") objWrdDoc.PrintOut _ Background:=False, _ PrintToFile:=True, _ OutputFileName:="C:\Test.ps" objAbDist.FileToPDF _ "C:\Test.ps", _ "C:\Test.pdf", _ vbNullString objWrdDoc.Close False objWrdApp.ActivePrinter = strDefaultPrinter objWrdApp.Quit End Sub Option Explicit '**************************************************************** '必要ライブラリ ' 'Microsoft ActiveX Data Objects 2.5 Library '他のバージョンでの動作は未確認。(2.1での動作は×) 'Microsoft CDO For Exchange 2000 Library '**************************************************************** '引数 ' 'strPath 添付ファイルのフルパス 'strSmtp SMTPサーバー (例 : www.mail.hogehoge.com) 'strFromAddr 送信者アドレス (例 : hogehoge@hogehoge.com) 'strFromName 送信者名 (例 : ××株式会社 〇〇担当) 'strSubject 件名 (例 : 未承諾広告) 'strAddr 送信先アドレス (例 : scott@tiger.com) 'strToName 受信者名 (例 : △△株式会社 ◇◇様) 'strMailBody メール本文 'strCcAddress CCアドレス 'strBccAddress BCCアドレス '**************************************************************** '添付ファイル付きメールの自動送信。 Public Function SendMail( _ ByRef strPath As String, _ ByRef strSmtp As String, _ ByRef strFromAddr As String, _ ByRef strFromName As String, _ ByRef strSubject As String, _ ByRef strAddr As String, _ ByRef strToName As String, _ ByRef strCcAddress As String, _ ByRef strBccAddress As String, _ ByRef strMailBody As String _ ) As Boolean Dim objMessage As CDO.Message Dim objConfiguration As CDO.Configuration Dim objFields As ADODB.Fields SendMail = False ' Configurationオブジェクトを生成 Set objConfiguration = New CDO.Configuration ' Filedsオブジェクトを生成 Set objFields = objConfiguration.Fields ' フィールド情報を設定 With objFields .Item(cdoSendUsingMethod) = cdoSendUsingPort .Item(cdoSMTPServer) = strSmtp ' フィールド情報を更新 .Update End With ' Messageオブジェクトを生成 Set objMessage = New CDO.Message ' メッセージ情報を設定 With objMessage Set .Configuration = objConfiguration .Subject = strSubject .To = """" & strToName & " 様"" <" & strAddr & ">" If Len(strCcAddress) <> 0 Then .CC = strCcAddress If Len(strBccAddress) <> 0 Then .BCC = strBccAddress '複数アドレス指定の場合、変更の必要あり。 .From = """" & strFromName & """ <" & strFromAddr & ">" .TextBody = strMailBody .AddAttachment strPath 'メールを送信 .Send End With SendMail = True Set objMessage = Nothing End Function
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
もうご存知でしょうが アドビ、低価格PDF作成ソフト「Acrobat 7.0 Elements」が最近発売されています。 http://pc.watch.impress.co.jp/docs/2005/0406/adobe.htm http://www.amazon.co.jp/exec/obidos/ASIN/B00097C4X0/249-9552911-3426739 ’----- 上記ソフトを導入すると、Word/Excelからのワンボタン変換ができるようです。 しかしこの操作(手作業)をエクセルVBAから自動的に行うのは難しいでしょう。それはマイクロソフト社がその気にならないとできないでしょうが、利害対抗関係・特許関係などから実現はむつかしい問題ではないでしょうか(この点自信なし)。 ツールバー(?)ボタンを押す操作を研究してVBAでプログラムで実現しても、ファイル名を与える場面などで行き詰まるとおもいます。 一般にすべてマイクロソフト社のソフトとその他社ソフトの連携という点で難しい問題です。 ’---- むしろアドビ社のAcrobatのカタログなどで、エクセルファイルをe-mail送信で便利な機能がないか検討(カスタマーインフォーメーションに聞くとか)してみてはどうでしょう。(手元に量販店で手に入れたAcrobatの宣伝パンフがありますが、それらしい機能は載ってないようですが。またPro版は5万7千円ですが。)
お礼
そうですね。EXCELにあるAdobeのワンボタンがクリック出来たらいいなと思っていました。 もうAdobe関係の情報も少し調べてみます。
- NNori
- ベストアンサー率22% (377/1669)
全体はわからないけど、PDF化するだけならAdbeはいらない。安い「いきなりPDF」とか「瞬間PDF」、フリーの「クセロPDF」で十分できる。 「クセロPDF」はバナー広告がでちゃうのでちょっと向かないとは思うけど、試しにやってみるには十分でしょう。
お礼
回答ありがとうございました。 この辺りの低価格のソフトで出来れば、助かります。 クロセPDFにはメール添付機能があるようですね。これで宛先やタイトルVisualBasicから指定が出来ば言うことはないのですが・・・
お礼
ご回答ありがとうございます。 記載いただいたコードを基になんとか出来そうな感じです。来月の生活費がかかっている(笑)ので頑張ってみます。