• ベストアンサー

エクセルVBAでメール送信

エクセルのワークシートから、メニューの、「ファイル」、「送信」、「あて先」で現在のシート記載事項をメール本文として送信できますが、その際、ワークシート上のオブジェクトを自動で削除するためにはどうしたらよいでしょうか? やりたいことは、ワークシート上のドロップダウン等で選んだ定型の文言(ドロップダウン操作により、自動的にシート上に表示されます。)だけを任意のアドレスにメール送信したいということです。現状ではドロップダウン自体やボタンまでメールに添付され、手動で削除しなくてはなりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

>「ファイル」、「送信」、「あて先」で現在のシート記載事項をメール本文 > として送信すると同じように... 参考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 からこの機能を呼び出すことはできないみたいです。

merlionXX
質問者

お礼

いつもお世話になります。 ありがとうございます、やりたいことが実現できました。 ただ、メール送信後にActiveSheet.Copyで出来たあたらしいbookが残ってしまうのですが、これを自動削除する方法はないでしょうか?手動で保存せずに終了すればいいだけのことなのですが、せっかくここまでできたら欲がでてしまいます。(^^;;

その他の回答 (4)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.5

遅くなりました。 > 最初に教えていただいた、ブック添付の方は「件名」を指定でき > ましたが、こっちのやりかたでは多分これも無理ですね? PostMessage でなんとか件名を送信する方法がないか、あれこれ 試してみましたが、件名を入力するコントロールがどうしても捉まえ られず断念しました... (´・ω・`) Excel に準備されている「メールの宛先」機能を使う以上、無理そう ですね。 もともと、この機能自体が環境依存するので、汎用性がないです。 OUTLOOK やメール送信の外部コンポーネントを利用する方法を考えて みて下さい。 Excel から Outlook を使って HTMLメールを送信するサンプルなら WEB 検索でヒットします。

merlionXX
質問者

お礼

ありがとうございました。 おなじエクセルもOutLookも同じOfficeのソフトなので可能かなあと思いましたが、VBAの方法は断念いたします。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

あ、、#3 の方法じゃダメですね。。 それと別に新規ブックでなくても、ThisWorkbook 内に複製しても良かったかも? ただ、この一時的な作業シート(ブック)はユーザーの送信等の操作があって から削除を行う必要があるわけですから、「選択範囲を送信」ボタンのクリック を検知しなければなりません。 VBA では難しいですね。。 Excel のツールバーに表示されるメール送信機能を使う以上は、恐らく、不可能 だと思います。

merlionXX
質問者

お礼

VBAでは無理ということですね。 わかりました、あきらめます。 あと、最初に教えていただいた、ブック添付の方は「件名」を指定できましたが、こっちのやりかたでは多分これも無理ですね?

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

> これを自動削除する方法はないでしょうか? ん? merlionXX さんならできると思います。こんな感じのコードを付け足す だけですよ。 Application.DisplayAlerts = False ActiveWorkbook.Close Application.DisplayAlerts = True ThisWorkbook.Activate っていうか、、苦し紛れの SendKeys で逃げて済みません。m(__;)m

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんにちは。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 を使う場合も、その他のメール送信コンポーネントを使用する 場合でも、基本的な流れは一緒です。

merlionXX
質問者

お礼

さそくありがとうございます。 SendMail メソッドというのですか、はじめて知りました。(メール送信はマクロの記録ではとれないので) それで、ご教示のではエクセルのブックが添付ファイルになっていますが、実現したいのは、エクセルのワークシートから、メニューの、「ファイル」、「送信」、「あて先」で現在のシート記載事項をメール本文として送信するときと同じように、画面上部に送信先入力欄がでて、メール本文にシートの文言が転記されるようにしたいのです。 無理なのでしょうか?

関連するQ&A