- ベストアンサー
エクセルでシートを指定してメールで送信したい
エクセル2016で、数枚のシートのブックがありそのうちの1枚のシートだけがリンクで作成される結果報告書になっており、このシートの報告書の部分だけをPDFにしてメールで送付しているのですが、この報告書の1枚だけエクセルから直接メールで送信する方法はないのでしょうか? メールソフトはOUTLOOKです。 少し調べてみたらVBAで送る方法が種々あるのですが、当方VBAはほとんど出来ないので、いろんな機能は不要なので、できるだけ簡単なコードで実現したいので質問させていただきます。 ファイルが添付されて送信メールが起動してくれば、メアドは自動でなくてもOKです。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
すみません、Outlook2010を設定して確認しました。 Windows7(64) Outlook2010 ですが送信確認できました。 以下訂正お願いします。 .Attachments.Add FileName ⇒ .Attachments.Add FilePath Kill FileName ⇒ Kill FilePath Sub Test() Dim FilePath As String Dim OutlookApp As Object Dim OutlookMail As Object On Error Resume Next FilePath = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\結果報告書.pdf" Worksheets("結果報告書").ExportAsFixedFormat Type:=xlTypePDF, Filename:=FilePath Set OutlookApp = CreateObject("Outlook.Application") Set OutlookMail = OutlookApp.CreateItem(0) With OutlookMail .To = "***.ne.jp" 'メール宛先" .CC = "" 'メールのCC .BCC = "" 'メールのBCC .Subject = "メールの件名" 'メールの件名 .Body = "メールの本文" 'メールの本文 .Attachments.Add FilePath '添付ファイル .Send End With 'PDFファイルを削除 Kill FilePath Set OutlookMail = Nothing Set OutlookApp = Nothing MsgBox "送信完了" End Sub
その他の回答 (7)
- watabe007
- ベストアンサー率62% (476/760)
>FilePath = CreateObject("WScript.Shell").SpecialFolders("\\ABC\123.あいう") & "\結果報告書.pdf" FilePath = "\\ABC\123.あいう" & "\結果報告書.pdf" <下の4行を削除> 'PDFファイルを削除 ←不要 Kill FilePath ←不要 Set OutlookMail = Nothing ←必要 Set OutlookApp = Nothing ←必要
お礼
本当にありがとうございました。 動作確認するのに時間がかかり、返事が遅れ申し訳ありません。 当初の目的は十分に達成できましたので、マクロの実行をエクセルシート上にボタンにしてワンクリックで送れるようにして使い始めようと思います。 メールを保管する場合はファイルは都度削除も出来ますので他への横展開も出来そうです。 わざわざOutLookまで入れていただき感謝しながらありがたく使わせて頂きます。
補足
お世話になります。 先週よりバタバタして時間が無く、早くお礼をしないとと気になっていました。 午後一で確認して1つ致命的な欠点に気付いたのですが、このコードのまま実行すると、所定フォルダ内で上書きされてしまい記録として残らないことが分かりました。(質問の内容にないので当方の無知のせいです) そこでとりあえずは、ファイル消去の部分だけ削除して、デスクトップにできたpdfファイルを手で所定のフォルダに移動させるか、送信メールを所定の専用フォルダ(メールBOX)に移動し保管=ファイル名をいじらないで済むのでこれが一番現実的と思いつきました。 都度日付等でファイル名を作成することもwatabe007さんならできそうですが、私の能力からしたら上記の動作で十分なレベルなので一旦これで使わせてもらいます。
- FEX2053
- ベストアンサー率37% (7991/21372)
とりあえず、うちはこれで動いていますが? Sub test99() Dim oApp As Object 'アプリケーションオブジェクトの指定 Dim objMAIL As Object 'メールオブジェクトの指定 strTo = Range("B15").Value 'セルB15に宛先を書いておく strSub = Range("B13").Value 'セルB13に件名を書いておく Range("B1:B11").Select '送信する表をB1:B11に作る ActiveWorkbook.EnvelopeVisible = True '送信設定開始 With ActiveSheet.MailEnvelope .Item.To = strTo .Item.Subject = strSub .Item.Send End With '内容は自動的に発信される End Sub
お礼
確かにこれで当方でも一発で動きました。(素晴らしい!!) 簡単明瞭なコードで私にも分かりやすく非常に気に入りました。 しかし今回は#No3さんの、PDFファイルの作成から指定フォルダーへの保存までできてしまうようなのでこのコードは別の用途で使わせていただきます。 エクセルの表の一部をメールにC&Pして、まさにこのような使い方もしていますので。 非常に参考になりました。
- chayamati
- ベストアンサー率41% (260/624)
こんにちは、色々と思考さくご試行錯誤しているうちに日数がとられました 以下のコーディングリストには 1.処理前に最新のファイルを上書き保存 2.添付しないSheetを削除 3.送信ボタン削除 4.BookをOutobookに添付 5.送信後Bookを保存せずに閉じる 削除したsheetのまま上書きしない為 尚、Outlookを開いてファイル添付迄で 件名、メールアドレス入力、送信は自動化していません 3つのVBAが有りますが実行は Sub Outlookに添付()だけです Sub 送信しないシート削除()はSub Outlookに添付()のサブVBA Sub 送信ボタン削除() は 送信しないシート削除()のサブVBA Sub Outlookに添付()の起動用ボタンは 規定値が印字対象外となっておりますのでどのシートでもsheet配置可能です ------------------------------------------- Option Explicit Sub Outlookに添付() 送信しないシート削除 Application.Dialogs(xlDialogSendMail).Show ThisWorkbook.Close SaveChanges:=False End Sub Sub 送信しないシート削除() ActiveWorkbook.Save Sheets(Array("昼食", "夕食")).Select ActiveWindow.SelectedSheets.Delete 送信ボタン削除 End Sub Sub 送信ボタン削除() ActiveSheet.Shapes.Range(Array("Button 1")).Select Selection.Delete End Sub
お礼
ありがとうございました。 大変ご丁寧な回答に感謝!
補足
お世話になります。 これはアクティブシートだけを送信するVBAですね。 最初はこれが目的だったのですが、簡単にPDFまで作れて、所定のフォルダーにファイルを保管するまで出来てしまうので#No3さんのコードを使いたいと思います。 元々一旦PDFファイルを作って、所定のフォルダーに保管したものをメールで送っていたのでまさに完全自動化の感じなので。 ただし、PDFではなく受信者がそのデータを使用する場合もあるので、このコードも是非試してみたいと思っています。 ただしすでにご察しの通り、当方の場合一発でうまくいくとは思えない実力ですのでおそらく第2弾、3弾の質問もさせていただくことになると思いますので何卒よろしくお願い致します。
- HohoPapa
- ベストアンサー率65% (455/693)
No.3をちょっと直し Option Explicit Sub Test() Dim FilePath As String Dim OutlookApp As Object Dim OutlookMail As Object On Error Resume Next FilePath = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\結果報告書.pdf" Worksheets("結果報告書").ExportAsFixedFormat Type:=xlTypePDF, Filename:=FilePath Set OutlookApp = CreateObject("Outlook.Application") Set OutlookMail = OutlookApp.CreateItem(0) With OutlookMail .To = "yamada-hanako@hogehoge.co.jp 'メール宛先" .CC = "" 'メールのCC .BCC = "" 'メールのBCC .Subject = "メールの件名" 'メールの件名 .Body = "メールの本文" 'メールの本文 .Attachments.Add FilePath '添付ファイル .Send End With 'PDFファイルを削除 Kill FilePath Set OutlookMail = Nothing Set OutlookApp = Nothing MsgBox "送信完了" End Sub とすれば機能すると思います。
お礼
いつもありがとうございます。 今回も何とか解決できました。
補足
3連休に時間が無く、また試行錯誤していて遅くなりましたがまずは質問の希望通り動きました事のご報告とお礼です。 うまく動くと更に欲が出ての質問で恐縮ですが、宜しくお願い致します。 DESKTOPにいったんpdfを作成するなら、これを削除せずに指定のフォルダーに保存してやろうと、ファイルパスを入れたのですが、ファイルが添付されなくなり指定のフォルダーに保存もされません。 非常に基本的な質問ですが、ファイルパスの記述はどのようにすれば良いのでしょう? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <下の4行を削除> 'PDFファイルを削除 Kill FilePath Set OutlookMail = Nothing Set OutlookApp = Nothing ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 下記のパスをファイル名の右クリックから「パスをコピー」で張り付けてみたのですが。。。 \は実際のコードでは¥で表記されています。 FilePath = CreateObject("WScript.Shell").SpecialFolders("\\ABC\123.あいう") & "\結果報告書.pdf"
- watabe007
- ベストアンサー率62% (476/760)
一旦デスクトップにPDFファイルを出力し送信後PDFファイルは削除しています。 こちらOUTLOOKは使っておらずなく送信確認はしておりません。 Sub Test Dim FilePath As String Dim OutlookApp As Object Dim OutlookMail As Object On Error Resume Next FilePath = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\結果報告書.pdf" Worksheets("結果報告書").ExportAsFixedFormat Type:=xlTypePDF, FileName:=FilePath Set OutlookApp = CreateObject("Outlook.Application") Set OutlookMail = OutlookApp.CreateItem(0) With OutlookMail .To = "MailAddress@xx.xx" 'メール宛先 .CC = "" 'メールのCC .BCC = "" 'メールのBCC .Subject = "メールの件名" 'メールの件名 .Body = "メールの本文" 'メールの本文 .Attachments.Add FileName '添付ファイル .Send End With 'PDFファイルを削除 Kill FileName Set OutlookMail = Nothing Set OutlookApp = Nothing MsgBox "送信完了" End Sub
お礼
すみません。 何も起こらなかったのではなく、メールの送信BOXにとどまっていました。 ただし送信はされ無いようです。 また肝心のシートが添付されていないのですが。
補足
ご回答ありがとうございます。 試してみたのですが、実行すると瞬時に「送信完了」のメッセージが出て終了するのですが何も作業しているようではなく、実際にメールも送信、受信されません。 OLをお使いではないとのことなのと、当方の知識不足から何を質問すれば良いのか分かりませんがもしアドバイスあればお手数をおかけしますがよろしくお願いします。
- FEX2053
- ベストアンサー率37% (7991/21372)
どぞ。ExcelからOutlookを呼び出してメールを送る方法2つです。 1.outlookを呼び出す方法 http://www.ken3.org/vba/backno/vba055.html 2.excelの中から送信しちゃう方法 https://www.helpforest.com/excel/emv_sample/ex100008.htm いずれにせよ、シートではなく「選択した範囲を文字列として送信 する」か「シートをブックとして吐き出し添付ファイルとして送る」 かのどちらかになります。
お礼
ご回答ありがとうございます。 1.2.ともに当方のやりたいことと少し違っているか、当方には難しいようです。 が、教えていただいた内容は参考になりました。
- aokii
- ベストアンサー率23% (5210/22062)
報告書の1枚だけエクセルから直接メールで送信する方法はないです。 シートの報告書の部分だけをPDFにするか、シートの報告書の部分だけを何かのファイルにするしか方法はないはずです。ファイルができれば、そのファイルのアイコンを右クリックして、送る→メール受信者で、メール送信できることはご存知だと思います。
お礼
いつもお世話になっております。 早々のご回答ありがとうございます。 やはり難しいですか。 現在はご指摘の方法で送っているのですが、最近送付頻度が上がってきたのでPDFを選択して場合によってはフォルダーを選択して、ファイル名をつけて、保存してそのファイルを選択、右クリックしてメール受信者でアドレス選択して・・・が面倒なってきて、調べてみたらPDFファイルにして直接送信できるようなので何とか1枚だけ指定できれば、と思い質問させてただ来ました。
補足
わざわざOutlook2010を入れてご確認いただいたとのこと、恐縮です。 3連休に時間が無く、また試行錯誤していて遅くなりましたがまずは質問の希望通り動きました事のご報告とお礼です。 うまく動くと更に欲が出ての質問で恐縮ですが、宜しくお願い致します。 DESKTOPにいったんpdfを作成するなら、これを削除せずに指定のフォルダーに保存してやろうと、ファイルパスを入れたのですが、ファイルが添付されなくなり指定のフォルダーに保存もされません。 非常に基本的な質問ですが、ファイルパスの記述はどのようにすれば良いのでしょう? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <下の4行を削除> 'PDFファイルを削除 Kill FilePath Set OutlookMail = Nothing Set OutlookApp = Nothing ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 下記のパスをファイル名の右クリックから「パスをコピー」で張り付けてみたのですが。。。 \は実際のコードでは¥で表記されています。 FilePath = CreateObject("WScript.Shell").SpecialFolders("\\ABC\123.あいう") & "\結果報告書.pdf"