- ベストアンサー
エクセルVBAでメール送信
エクセルのワークシートから、メニューの、「ファイル」、「送信」、「あて先」で現在のシート記載事項をメール本文として送信できますが、その際、ワークシート上のオブジェクトを自動で削除するためにはどうしたらよいでしょうか? やりたいことは、ワークシート上のドロップダウン等で選んだ定型の文言(ドロップダウン操作により、自動的にシート上に表示されます。)だけを任意のアドレスにメール送信したいということです。現状ではドロップダウン自体やボタンまでメールに添付され、手動で削除しなくてはなりません。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>「ファイル」、「送信」、「あて先」で現在のシート記載事項をメール本文 > として送信すると同じように... 参考URL: http://oshiete1.goo.ne.jp/kotaeru.php3?q=1546306 参考URLのスレによると、この機能が使えるかどうかは環境依存するようです。 ご自分の PC でだけ使用する前提ですか? 消極的な逃げの手段になりますが、こんな感じでは?..... Sub Sample() If Application.MailSystem <> xlMAPI Then MsgBox "この機能を使用するためには MAPI対応のメーラーが必要です。", vbCritical Else ' Copy 完了後 Activesheet は新規ブックの方に変わります ActiveSheet.Copy ' ここで不要なものを削除するなど必要な処理を行う With ActiveSheet ' コントロールやシェープ等の削除 .DrawingObjects.Delete ' 入力規則の削除 .Cells.Validation.Delete ' A 列の削除 .Columns(1).Delete End With ' 念のため ActiveWindow.Activate ' 逃げの一手... [メール宛先] ショートカットキー送信 SendKeys "%FDM", True End If End Sub 調べた限り、VBA からこの機能を呼び出すことはできないみたいです。
その他の回答 (4)
- KenKen_SP
- ベストアンサー率62% (785/1258)
遅くなりました。 > 最初に教えていただいた、ブック添付の方は「件名」を指定でき > ましたが、こっちのやりかたでは多分これも無理ですね? PostMessage でなんとか件名を送信する方法がないか、あれこれ 試してみましたが、件名を入力するコントロールがどうしても捉まえ られず断念しました... (´・ω・`) Excel に準備されている「メールの宛先」機能を使う以上、無理そう ですね。 もともと、この機能自体が環境依存するので、汎用性がないです。 OUTLOOK やメール送信の外部コンポーネントを利用する方法を考えて みて下さい。 Excel から Outlook を使って HTMLメールを送信するサンプルなら WEB 検索でヒットします。
お礼
ありがとうございました。 おなじエクセルもOutLookも同じOfficeのソフトなので可能かなあと思いましたが、VBAの方法は断念いたします。
- KenKen_SP
- ベストアンサー率62% (785/1258)
あ、、#3 の方法じゃダメですね。。 それと別に新規ブックでなくても、ThisWorkbook 内に複製しても良かったかも? ただ、この一時的な作業シート(ブック)はユーザーの送信等の操作があって から削除を行う必要があるわけですから、「選択範囲を送信」ボタンのクリック を検知しなければなりません。 VBA では難しいですね。。 Excel のツールバーに表示されるメール送信機能を使う以上は、恐らく、不可能 だと思います。
お礼
VBAでは無理ということですね。 わかりました、あきらめます。 あと、最初に教えていただいた、ブック添付の方は「件名」を指定できましたが、こっちのやりかたでは多分これも無理ですね?
- KenKen_SP
- ベストアンサー率62% (785/1258)
> これを自動削除する方法はないでしょうか? ん? merlionXX さんならできると思います。こんな感じのコードを付け足す だけですよ。 Application.DisplayAlerts = False ActiveWorkbook.Close Application.DisplayAlerts = True ThisWorkbook.Activate っていうか、、苦し紛れの SendKeys で逃げて済みません。m(__;)m
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。KenKen_SP です。 Excel の SendMail メソッドを使って? 同一ブックでやろうとすると難しいかもしれません。 ドロップダウンが入力規則なのかコントロールか分かりませんが、 1. シートを複製 2. 複製されたシート上で不要なモノを削除 3. 添付できるように保存 3. SendMail メソッドで送信 4. 3.で保存されたものが不要なら削除 といった流れでできると思います。 Option Explicit Sub Sample() Dim strDir As String Dim strSubject As String Dim strTo As String Dim strFilename As String strSubject = "送信テスト" strTo = "宛先メールアドレス" ' Activesheet を複製 --> 新規ブックに複製されます ActiveSheet.Copy ' 新規ブックの複製されたシートが現在アクティブになってます ' --> ThisWorkbook ではない ' ここで不要なものを削除するなど必要な処理を行う With ActiveSheet ' コントロールやシェープ等の削除 .DrawingObjects.Delete ' 入力規則の削除 .Cells.Validation.Delete ' A 列の削除 .Columns(1).Delete End With ' 適切なファイル名を生成 strFilename = ThisWorkbook.Path & "\" _ & Format$(Now(), "yymmddhhmmss_") & ThisWorkbook.Name With ActiveWorkbook ' メール送信できるように保存 .SaveAs strFilename ' メール送信 .SendMail Recipients:=strTo, Subject:=strSubject End With ' 必要なら一時ファイルを削除(アラートは適当に処理) ActiveWorkbook.Close Kill (strFilename) End Sub Outlook を使う場合も、その他のメール送信コンポーネントを使用する 場合でも、基本的な流れは一緒です。
お礼
さそくありがとうございます。 SendMail メソッドというのですか、はじめて知りました。(メール送信はマクロの記録ではとれないので) それで、ご教示のではエクセルのブックが添付ファイルになっていますが、実現したいのは、エクセルのワークシートから、メニューの、「ファイル」、「送信」、「あて先」で現在のシート記載事項をメール本文として送信するときと同じように、画面上部に送信先入力欄がでて、メール本文にシートの文言が転記されるようにしたいのです。 無理なのでしょうか?
お礼
いつもお世話になります。 ありがとうございます、やりたいことが実現できました。 ただ、メール送信後にActiveSheet.Copyで出来たあたらしいbookが残ってしまうのですが、これを自動削除する方法はないでしょうか?手動で保存せずに終了すればいいだけのことなのですが、せっかくここまでできたら欲がでてしまいます。(^^;;