• ベストアンサー

エクセル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

  • エクセルVBAでメールの送信

    エクセルVBAで使って、自動メール送信は出来るでしょうか? 名簿一覧のワークシートには氏名とメールアドレスが記入されていますが、VBAによってすべての人にメールを送信することが出来るでしょうか。

  • エクセルのメール送信についてです。

    エクセルのメール送信についてです。 メール送信をしたいのですが、エクセルのシートのデータを そのまま本文に表示してメールが送りたいのですが、 可能でしょうか? 宛先の環境により添付はできません。 また宛先を増やすにはどうしたらいいでしょうか? 全く知識がないのですが、急に仕事として頼まれ土日も考え込んでいます。 以下のURLを参考にさせて頂いています。 http://mailpg.pgtop.net/category/6930424-1.html

  • エクセルVBAで、シートのみを本文として送信する方法

    エクセルのブックを送信する場合は、 ActiveWorkbook.SendMail Recipients:="***@***.com" で出来ますが、シートのみを本文として送信するのは、VBAでは出来ないのでしょうか? メニューからですと、「ファイル」→「送信」→「メールのあて先」で、シートのみを本文として送信出来るのですが…。

  • エクセルからの送信

    エクセルのツールバーにある送信ボタンをクリックすると 作成中のワークシートやブックは送信できますが 本文を入力することができません。 ワークシートはあくまでも添付ファイルとして送りたいのです。 いちいちシートを保存して、メールソフトを立ち上げて、添付して・・・ という作業を省略しつつ 本文(たとえば挨拶文やら連絡文)を書き込む方法を 教えていただければ幸いです。

  • Excelで作業終了時、メールを自動送信したい。

    どなたか教えてください。宜しくお願い致します。 使っているのはExcel2003です。 Excelで、更新作業完了時に、メールを自動送信したいと思っています。 色々調べてみてみて、 http://homepage1.nifty.com/gak/MSTips/sendmail.html にある「WorkbooksオブジェクトのSendMailメソッド」を使ったのですが、これだと、設定したあて先にExcelのワークブックが送られてしまい、ちょっと違うなぁと思いまして…。 http://www.hi-ho.ne.jp/babaq/vbtips.html も参考にしてみたんですが、いまいちよくわからず、こちらに質問してみた次第です。 <やりたいこと> 更新したら「更新ボタン」を押す ↓ 次作業者をTOに、何人かをCCに入れて、件名「作業が終わりました」本文「次の作業をお願いします」と言ったような決まった文言が入れたメールを送りたい。 です。 ToとCcのあて先は毎回一緒です。 どなたか教えてください。 宜しくお願い致します。

  • エクセルでメール作成

    WIN2000 OfficeXpです。 エクセルのマクロを使って、マイクロソフトアウトルックのメールを作成したいのですが、 あるシートの  A1 を件名に  A2:D2 の範囲を本文に貼り付けるマクロはありますか? 宛先入力、送信は手動でできるように設定したいのですが。 よろしくお願いします。

  • エクセル VBAでメール送信について

    エクセルを使用して以下のような条件でメールを送りたいのですがやり方がわかる方は教えてください。 (1)Gmailのアカウントを使用してメール送信  (差出人はGmail⇒設定⇒アカウントとインポート⇒名前⇒メールアドレスを追加で追加したアドレス) (2)以下のようにエクセルでファイルを作成して一括で送信したい。  A列⇒宛先  B列⇒タイトル  C列⇒本文  D列⇒送信時間(送信する内容ごとに送信する時間を変更したい) このようなことができるようでしたらご回答お願いいたします。

  • VBA エクセル+アウトルックで自動メール送信

    エクセル、アウトルックともに2003です。 VBAは初心者でほとんど分からないのですが、下記のようなことはできますか? エクセル、シート1に顧客管理台帳を作りました。 A1セル メールタイトル(共通) A2セル 会社名 A3セル 担当者名 A4セル Eメールアドレス エクセル、シート2には送信する基本文章を入れようと思ってます。 A1セル    会社名が反映されるように A2セル    担当者名が反映されるように A3~A5セル 用件 シート1は50件ほどの顧客リストとなってます。 マクロ(VBA?)で1件ずつ、メールアドレス・タイトル、本文に会社名・担当者・用件が自動で入るようにしたいのですが、このようなことはできるのでしょうか? 送信前に内容を一応チェックしてから送信したいと思ってますので、送信ボタンを押すのは手動にしたいです。

  • エクセルVBAで OutlookExpressで自動的に送信・・・

    とあるエクセルのファイルにボタンを付けて自動的にOutlookExpressで送信したいのですが、 メールアドレスと件名・本文共に固定のもので、使用したいのです。 流れで言えば、 エクセルシートに作ったボタンを押す→自動的に保存される→ OutlookExpressが起動→メールアドレス・件名・本文が自動的に入力されている→ さっきボタンを押したエクセルファイルも添付されている→ メール送信 という感じです。 こういうものは、エクセルで作成可能でしょうか? また、出来るのであれば構文も載せていただけると幸いです。 宜しくお願い致します。

  • EXCEL VBA メール送信でファイル添付

    現在、使用しているVBAを利用したメンバー向け案内メール配信で、ファイルを添付できないかと考えております。 G列に入力したアドレスのファイルを添付して送信できればと思うのですが、ご教授願えませんでしょうか。 現在のVBAは企業名、宛先共に変えられるように下記のような形となっております。 添付ファイルも宛先毎に異なります。 B列:送信先メールアドレス C列:メール件名 D列:送信先所属名 E列:送信先宛名 F列:メール本文 コマンドボタンで一括配信となっております。 【以下記述】 Sub Mail_Send() Dim iMsg As Object Dim iConf As Object Dim strbody As String Dim Flds As Variant Dim i, LastRow As Integer ' CDOオブジェクト初期設定 Set iMsg = CreateObject("CDO.Message") Set iConf = CreateObject("CDO.Configuration") iConf.Load -1 ' CDO Source Defaults Set Flds = iConf.Fields With Flds .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = Worksheets("Sheet1").Range("C2").Value .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = Worksheets("Sheet1").Range("C3").Value .Update End With ' 送信範囲設定 LastRow = Worksheets("Sheet1").Range("B7").End(xlDown).Row ' メール送信ループ For i = 8 To LastRow ' 送信状況メッセージクリア Worksheets("Sheet1").Range("F2").Value = "" ' メール本文作成 strbody = Worksheets("Sheet1").Range("D" & i).Value & vbCrLf & " " & _ Worksheets("Sheet1").Range("E" & i).Value & " 様" & vbCrLf & vbCrLf & _ Worksheets("Sheet1").Range("F" & i).Value ' 改行変換(送信環境によってはここの修正が必要かも) tmpstrbody = Replace(strbody, vbLf, vbCrLf) strbody = Replace(tmpstrbody, vbCr & vbCrLf, vbCrLf) ' メール送信 With iMsg Set .Configuration = iConf .From = Worksheets("Sheet1").Range("C4").Value .To = Worksheets("Sheet1").Range("B" & i).Value .BCC = Worksheets("Sheet1").Range("C5").Value .Subject = Worksheets("Sheet1").Range("C" & i).Value .TextBody = strbody .Send End With ' 送信状況メッセージ更新 Worksheets("Sheet1").Range("F2").Value = Worksheets("Sheet1").Range("B" & i).Value & " まで送信成功!" ' 3秒停止 Application.Wait [ NOW() + "0:00:03" ] Next i End Sub

専門家に質問してみよう