プロが教える店舗&オフィスのセキュリティ対策術

現在EXCELVBAでプリンターに出力された納品書を毎日50社ぐらいの顧客に手動FAXにて送っています。
通信費削減のために、ファイルをPDF化してEMAIL送信出来るようにしたいと思っています。
添付するファイルがEXCEL BOOKのままであれば以下のコードで出来るのですが、PDF化するやり方が分かりません。
ActiveWorkbook.SendMail Recipients:="email@*****.co.jp", _
Subject:="test"

10万円程度であれば、Adobe Acrobatなどのソフト購入してでも実現させたいと思っています。
又、ユーザーの操作はメーラーの「送信」ボタンをクリックする程度に留めたいです。

よきアドバイスよろしくお願いいたします。

A 回答 (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
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
記載いただいたコードを基になんとか出来そうな感じです。来月の生活費がかかっている(笑)ので頑張ってみます。

お礼日時:2005/05/30 11:07

もうご存知でしょうが


アドビ、低価格PDF作成ソフト「Acrobat 7.0 Elements」が最近発売されています。
http://pc.watch.impress.co.jp/docs/2005/0406/ado …
http://www.amazon.co.jp/exec/obidos/ASIN/B00097C …
’-----
上記ソフトを導入すると、Word/Excelからのワンボタン変換ができるようです。
しかしこの操作(手作業)をエクセルVBAから自動的に行うのは難しいでしょう。それはマイクロソフト社がその気にならないとできないでしょうが、利害対抗関係・特許関係などから実現はむつかしい問題ではないでしょうか(この点自信なし)。
ツールバー(?)ボタンを押す操作を研究してVBAでプログラムで実現しても、ファイル名を与える場面などで行き詰まるとおもいます。
一般にすべてマイクロソフト社のソフトとその他社ソフトの連携という点で難しい問題です。
’----
むしろアドビ社のAcrobatのカタログなどで、エクセルファイルをe-mail送信で便利な機能がないか検討(カスタマーインフォーメーションに聞くとか)してみてはどうでしょう。(手元に量販店で手に入れたAcrobatの宣伝パンフがありますが、それらしい機能は載ってないようですが。またPro版は5万7千円ですが。)
    • good
    • 0
この回答へのお礼

そうですね。EXCELにあるAdobeのワンボタンがクリック出来たらいいなと思っていました。
もうAdobe関係の情報も少し調べてみます。

お礼日時:2005/05/30 11:02

全体はわからないけど、PDF化するだけならAdbeはいらない。

安い「いきなりPDF」とか「瞬間PDF」、フリーの「クセロPDF」で十分できる。
「クセロPDF」はバナー広告がでちゃうのでちょっと向かないとは思うけど、試しにやってみるには十分でしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
この辺りの低価格のソフトで出来れば、助かります。
クロセPDFにはメール添付機能があるようですね。これで宛先やタイトルVisualBasicから指定が出来ば言うことはないのですが・・・

お礼日時:2005/05/29 08:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています