現在EXCELVBAでプリンターに出力された納品書を毎日50社ぐらいの顧客に手動FAXにて送っています。
通信費削減のために、ファイルをPDF化してEMAIL送信出来るようにしたいと思っています。
添付するファイルがEXCEL BOOKのままであれば以下のコードで出来るのですが、PDF化するやり方が分かりません。
ActiveWorkbook.SendMail Recipients:="email@*****.co.jp", _
Subject:="test"
10万円程度であれば、Adobe Acrobatなどのソフト購入してでも実現させたいと思っています。
又、ユーザーの操作はメーラーの「送信」ボタンをクリックする程度に留めたいです。
よきアドバイスよろしくお願いいたします。
No.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
ご回答ありがとうございます。
記載いただいたコードを基になんとか出来そうな感じです。来月の生活費がかかっている(笑)ので頑張ってみます。
No.2
- 回答日時:
もうご存知でしょうが
アドビ、低価格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千円ですが。)
そうですね。EXCELにあるAdobeのワンボタンがクリック出来たらいいなと思っていました。
もうAdobe関係の情報も少し調べてみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PDF 保存したPDFファイルが開けなくなり、困っています 1 2022/09/15 21:08
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- PDF PDFファイルを分割するマクロの作り方を教えてください。 2 2022/06/24 11:09
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- PDF PDFを自動添付したメールを送信してくれるツールを探しています。 2 2023/02/07 15:19
- ハッキング・フィッシング詐欺 社用メールから個人メールへ資料送信してしまいました... 4 2023/03/19 13:24
- その他(Microsoft Office) officeのWordで作成した文章をメール添付してしたい 3 2023/08/07 07:12
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) Outlook VBAについて 1 2023/07/10 12:41
- その他(メールソフト・メールサービス) Gメールについて質問 6 2023/06/14 18:02
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
VBAでPDFファイルをメールに添付する
その他(プログラミング・Web制作)
-
VBAを使ってエクセルシートをFAXで送信したい。
Visual Basic(VBA)
-
マクロ・VBA 教えてください エクセルをPDFにしてメールに添付するコードを教えてください 条件と
Excel(エクセル)
-
-
4
FAX送信させたい
Visual Basic(VBA)
-
5
エクセルをPDFで保存し、ファイル名はA1セルを参照するVBAの記述を教えてください。
Excel(エクセル)
-
6
エクセルvbaでdocuworksprinterの出力先を設定
Visual Basic(VBA)
-
7
文字の色も参照 VLOOKUP
Access(アクセス)
-
8
E列のセルに数値が入れば(空白でなければ)B列の同じ行のセルに色がつく
その他(Microsoft Office)
-
9
excelシートのfax送信
Excel(エクセル)
-
10
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
11
エクセル内のメールアドレスをメール送信先に一斉に移す方法
Windows Vista・XP
-
12
エクセルの画面にユーザーフォームでテンキーを表示させたい
Excel(エクセル)
-
13
Excel VBAでアクティブシートをメール送信したい
Excel(エクセル)
-
14
VBA PDFで保存するマクロで実行時エラー 1004
Visual Basic(VBA)
-
15
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
16
【Excel】指定したセルの名前でPDFを保存する【VBA】
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
送ったメールが「送信済み」に...
-
Thunderbird 「後で送信」の設...
-
サンダーバードのアドレス帳へ...
-
Outlookが送信不可
-
【サンダーバード】”下書き”や”...
-
メール誤送信の防止 / Ctl+Ente...
-
未送信メールが見当たらない。
-
チャイナユニコムSIMでSMS送信...
-
Wordから「PDF」に変えると,み...
-
「あとで送信」が知らないうち...
-
IPMessengerの不具合について
-
添付ファイルを制限可能なメー...
-
Thunderbirdの送信トレイについて
-
筆ぐるめで送信履歴の出し方
-
EXCEL VBAで→PDF化→自動メール送信
-
パワポで曲がった両矢印の簡単...
-
パワーポイントで作図した図を...
-
タイムカードの氏名所属などプ...
-
MS-Word段落番号とそのあとの文...
-
【ワード】図の書式設定-線と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Thunderbird 「後で送信」の設...
-
Outlookが送信不可
-
送ったメールが「送信済み」に...
-
サンダーバードのアドレス帳へ...
-
Thunderbirdの送信トレイについて
-
未送信メールが見当たらない。
-
EXCEL VBAで→PDF化→自動メール送信
-
メールが、入力中に送信してい...
-
【サンダーバード】”下書き”や”...
-
「あとで送信」が知らないうち...
-
送信エラーで送ったメールが消...
-
Notes 送信ボックスに何も入り...
-
シリアルの送信完了を待つ方法
-
iTunesの誤ったCDDB情報を修正...
-
Outlookでメールを送信ができま...
-
「Mail Distributor」について
-
バーコードの読み取りだけでメ...
-
メール誤送信の防止 / Ctl+Ente...
-
Becky!ver.2の送信エラーについて
-
Thunderbirdの未送信メッセージ...
おすすめ情報