• ベストアンサー

マクロにてメール送信

よろしくお願いします。 上記のマクロを組みましたが、うまく作動するPCとエラーを起こすPCが発生しております。 closeのマクロに以下の内容で組み込んでます。 Dim myrecipients myrecipients = Array("メールアドレス(1)", "メールアドレス(2)") ActiveWorkbook.SendMail Recipients:=myrecipients, Subject:="ブック名", returnreceipt:=True なにか落ち度がありますか? ※XPで作動するPCとエラー発生するPCが出ております。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 >ちなみに、2000で早速コピペしてみて行ってみると、新規bookが作成されてしまいます。何故でしょうか? # ActiveWindow.SelectedSheets.Copy そういう設定をしました。人に送るときは、新規ブックから送信という形にするのがふつうなのですね。不要なら、それを取り去ってください。しかし、ActiveWorkbook が、自ブックですと、マクロ付きになってしまいます。なるべく、何も入れてないブックで送信するのが、ベストです。 97 でも、コード的には問題ないはずですが、本当の問題は、どうやら別の所にあるようです。一旦、メーラーを立ち上げるだけでは解決しないようです。 なお、コードは、そのままテキストを貼り付けるか、VBEditor で、コードをエキスポートして、97でインポートしたほうがトラブルが少ないです。2000で作ったブックをそのまま97には使わないほうがよいです。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。Wendy02です。 昨日の発言は撤回します。 今、コードを作って、何度も試して調べてみましたが、私の予想とはだいぶ違いました。Excelがハングするのは、何かのタイミングでメーラーとのつながりが良くないということで、特に、コード自体の問題ではないようです。実際、私などのVBAを作るものは、こういうコードは滅多に書かないのです。別のコンポーネントを使って送信しています。 私の試したサンプルコード Sub MailingTest()   Dim myRecipients As Variant   Dim BookName As String   myRecipients = Array("******@****", "*****@***.**")   If IsNull(Application.MailSession) Then Application.MailLogon   With ActiveWorkbook    BookName = .Name    ActiveWindow.SelectedSheets.Copy    .SendMail Recipients:=myRecipients, Subject:=BookName, ReturnReceipt:=False    Application.MailLogoff   End With End Sub 以下のサイトにあるようなコンポーネントとコードを使います。

参考URL:
http://www.hi-ho.ne.jp/babaq/vbtips.html
tomtom0628
質問者

補足

丁寧なご指導ありがとうございます。 しかし、重大なミスに気がつきました・・・ エクセルプログラムを作成しているのは2000なのですが、実際に使用しようとしているのは97でした・・・ 97でも、Wendy02の用意していただいたモノが作動すればよいのですが・・・ ちなみに、2000で早速コピペしてみて行ってみると、新規bookが作成されてしまいます。何故でしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 >なにか落ち度がありますか? 分りませんね。いくつか推理するだけです。 コードは論理的には間違っていませんね。 >closeのマクロに以下の内容で組み込んでます。 Close って、Auto_Close のことでしょうか? たぶん、ThisWorkbook_BeforeClose よりは、安全かと思いますが。 後は、Recipients:=myrecipients のほうの配列をやめて、For Each ~ In /Next のループにしてみるとか? DoEvents を置いてみるとか。 Wait や Sleep を置いてみるとか。 そのぐらいかしらね。 それと、PCによってエラーが出るのは、そのIEのインターネットオプションのプログラムの設定には関係ないでしょうか?

tomtom0628
質問者

補足

ありがとうございます! しかし、高度すぎて素人の僕にはわかりません・・・ こんなふうに!と、作り変えていただけたら嬉しいです。 要求ばかりで申し訳ないです。。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ワードのマクロで「メール送付」を組みたいです

    ワード上でコマンドボタンをつくり、そこに 「このファイルを添付してメールを送る」という意味をこめて以下のような記述をしました。 Private Sub CommandButton2_Click() Dim strAddress As String strAddress = "●●@●●●.com" ActiveWorkbook.SendMail Recipients:=strAddress End Sub しかし、「オブジェクトが必要です」というエラーが出てしまいます。 エクセルではこれで問題なかったのですが、どうしたら正しい記述になりますでしょうか。 ご教示よろしくお願いします。

  • EXCELマクロで複数のEMAIL宛先を指定

    WIN XP, EXCEL2002, メーラーはOUTLOOK2002を使っています。 EXCELマクロで複数のEMAIL宛先を指定することはできますか? ActiveWorkbook.SendMail Recipients:="email@*****.co.jp", Subject:="test" にてひとつの宛先の場合はちゃんと送信できましたが、複数の宛先を指定する方法が分かりません。 よろしくお願いいたします。

  • エクセルのマクロについて教えてください。

    現在エクセルで作ったファイルを14人に回覧で送信しようとしています。 それをマクロを使ってボタン一つで14人に送信します。 それぞれのアドレスはセルの【q12~q25】に入っています。 そのファイルデータは14人の共有サーバーに有り、14人誰でもそのボタン一つでファイルを更新したら14人に送信するようにマクロをくもとしているのですが上手くいきません。 メール送信のBSMTP.DLLなどは出来るだけ使いたくありません。 下記のがマクロです。 質問をまとめますと (1)マクロはどこがおかしいのでしょうか? (2)どのPCでもBSMTP.DLLなどは使用せず送信マクロを使えるように出来るのでしょうか?以前似たようなマクロ組んだら他のPCではメール送信出来ませんでした。 マクロは ***************************************** ActiveWorkbook.HasRoutingSlip = True With ActiveWorkbook.RoutingSlip .Recipients = Array(Union(Range("q12"), Range("q13"), Range("q14"), Range("q15"), Range("q16"), Range("q17"), Range("q18"), Range("q19"), Range("q20"), Range("q21"), Range("q22"), Range("q23"), Range("q24"), Range("q25"))) .Subject = "掲示板更新のお知らせ" .Message = "掲示板ファイルが更新されましたので確認してください。" .Delivery = xlOneAfterAnother .ReturnWhenDone = True .TrackStatus = True End With ActiveWorkbook.Route End Sub ***************************************** です。 宜しくお願いいたします。

  • エクセルマクロの実行とステップイン

    皆様はじめまして、マクロ初心者です。 エクセルを添付ファイルとしてメールで自動送信するマクロを書きたくて、このOkWaveを参考に以下のようなマクロを書きました。 ActiveWorkbook.SendMail Recipients:="xxxx@xxxx", Subject:="test" ステップインで実行すると、メールを自動送信しようとしているというダイアローグが現れて、OKをクリックするとうまくいきますが、通常に実行すると実行されません。ポインタが砂時計のまま応答なしになってしまいます。 以前にアクセスではこれと同様な質問があり、オブジェクトを途中に入れるといいなどと回答がありましたが、初心者なので、この意味もよくわかりません。 恐れいりますがご教示をお願いします。

  • Excelマクロでメールを送る時

    いつもお世話になっております。 EXCELで、ワークシートのある部分に"MAILADDRESS"という名前を付け、 そこにメールアドレスを入れます。 同じブック内の別ワークシートをcsv形式で保存して、"MAILADDRESS"に入力されている メールアドレスにおくるというVBAの命令を書いて下記の通りとしてみました。 プログラムはエラーの表示がされず終わるのですが、メールを送ってくれません。 何故でしょうか?教えて下さい。 MAILADDRESSのセルはデータの最後に"EOL"という文字列を入力しています。 Dim R As Range For Each R In Range("MAILADDRESS") If R.Value <> "EOL" Then ActiveWorkbook.SendMail Recipients:=R.Value End If Next R Excelのバージョンは2002 SP3です。

  • Outlookのメールを送信するマクロ

    お世話になっております。 Microsoft Outlook2003使用で メール送信のマクロを見様見真似で作ってみたのですが、本文部分がうまくいきません(Best regardsしか表示されません)。 どうすれば正しく反映されるでしょうか? シートのB1にToアドレスを記入していてTo_addressと名前付 以下、Cc_addressとSubjectも同様にしています。 本文の文章は何行かあり、途中で空白行も入れたいのですが、そこまでまだ手がつけられていません。 本文の文章が3行あるとすると、このマクロではComment1、Comment2、Comment3と名前付しています。 Sub SendEmail() Dim OlApp As Outlook.Application Dim mItem As Outlook.MailItem Dim cell As Range Dim Subj As String Dim EmailAddr As String Dim Recipient As String Dim Msg As String Dim Message As String Dim Sender As String Dim Comments As String Dim Comments2 As String Dim report As String Worksheets("Sheet1").Activate 'Create Outlook object  Set OutlookApp = New Outlook.Application 'Get the data Subj = Range("Subject") EmailAddr = Range("To_address") CCAddr = Range("Cc_address") Body = Range("Comment1") & ("Comment2") & ("Comment3") 'Compose message Msg = Msg & Comment1 & vbCrLf & vbCrLf Msg = Msg & Comment2 & vbCrLf & vbCrLf Msg = Msg & "Best regards," & vbCrLf & vbCrLf 'Create Mail Item Set mItem = OutlookApp.CreateItem(olMailItem) With mItem .To = EmailAddr .CC = CCAddr .BCC = BCCAddr .Subject = Subj .Body = Msg .Display End With End Sub 宜しくお願い致します。

  • excel2007でエラーになるマクロ

    Excel2003では問題なく動いていた以下のマクロですが、これはボタンにマクロを貼り付けてあり、それを2007で実行すると、「問題が発生したため、Microsoft Office Excelを終了します」となり、強制終了になってしまいます。 でも、VBEの方で実行すると、ワークシートはちゃんと保存されて正しく閉じます。 (その場合、VBE自体は終了にならず、起動したままです) また、マクロを表示させてマクロ名を選択し、実行をクリックすると、正常に動作します。 新しく別の図形を作成し、そこにマクロを貼り付けるとやはり強制終了になります。 Excel2007で、リソースの診断などしても問題は見つかりません。 Windowsは、SP2でだめだったので、SP3にしてみましたが、現象は同じで何ら変化はありませんでした。 エラーを出さなくするにはどうすればよいのでしょうか。 --------マクロ--------- Sub ファイル名を変えて保存して閉じる() Dim nnen As String Dim kcode As String Dim kcode2 As String Dim cname As String Dim dno As String Dim dno2 As String Dim myPath As String nnen = ActiveWorkbook.Worksheets("inputform").Range("O5") kcode = ActiveWorkbook.Worksheets("inputform").Range("R3") kcode2 = Format(kcode, "000") cname = ActiveWorkbook.Worksheets("inputform").Range("C7") dno = ActiveWorkbook.Worksheets("inputform").Range("H26") dno2 = Format(dno, "00000") myPath = ThisWorkbook.Path & "\" On Error Resume Next 'エラーが発生しても処理を続行する ActiveWorkbook.SaveAs Filename:=myPath & "様式5_" & nnen & kcode2 & "【" & cname & dno2 & "】" _ , CreateBackup:=False On Error GoTo 0 'エラー処理ルーチンを無効にする ActiveWorkbook.Close End Sub

  • メールを送信しました。と出るのにメールが届きません。

    下記のように設定したのですが、どこがいけないのでしょうか? $SENDMAIL = '/usr/sbin/sendmail'; $MAILTO = '<自分のメールアドレス>'; if($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; } # フォームデータの復元 foreach $pair (split(/&/, $query)) { ($key, $value) = split(/=/, $pair); # 文字のデコード $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg; $FORM{$key} = $value; } # MIMEエンコード $mail_to = mimeencode($MAILTO); $mail_from = mimeencode($FORM{'name'}); $mail_subject = mimeencode($FORM{'subject'}); # 文字コードの変換 $body = jcode::jis($FORM{'msg'}); # メールヘッダーの生成 $header = <<END; To: $mail_to From: $mail_from<$FORM{'email'}> Subject: $mail_subject Mime-Version: 1.0 Content-Type: text/html; charset=ISO-2022-JP END # メールの送信 open(MAILTO, "| $SENDMAIL -i -t -f $FORM{'email'}") or die("エラー:sendmailへのパイプが開けません"); print MAIL "$header, $body"; close MAIL; # サーバー出力 print <<END;

    • 締切済み
    • CGI
  • sendmailで送信すると、迷惑メールになります

    フォームに入力された内容をperlでsendmailを使って送信すると、ウイルス対策ソフトの判定で、迷惑メールに入ってしまいます。 ▼プログラム $subject = 'テストメール'; $msg = "------------------------------------------------------------------ [名前] $name [住所] $address ------------------------------------------------------------------"; # subjectをBase64エンコード jcode::convert(\$subject, 'euc'); jcode::convert(\$subject, 'jis', 'euc', 'z'); $subject = '=?ISO-2022-JP?B?' . encode_base64($subject, '') . '?='; # 本文をJISに変換 jcode::convert(\$msg, 'jis'); &mail($to_mail, $from_mail, $subject, $msg); ▼サブルーチン sub mail{ my($to_mail, $from_mail, $subject, $msg) = @_; # sendmailによるメール発信 my $sendmail = '/usr/lib/sendmail'; # sendmailパス open(MAIL,"| $sendmail -t") || &error("メール送信に失敗しました"); print MAIL "To: $to_mail\n"; print MAIL "From: $from_mail\n"; print MAIL "Subject: $subject\n"; print MAIL "X-Mailer: Mail Form Sendmail\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "Content-type: text/plain; charset=\"iso-2022-jp\"\n"; print MAIL "MIME-Version: 1.0\n\n"; print MAIL "$msg"; close(MAIL); } print MAIL "Content-type: text/plain; charset=\"iso-2022-jp\"\n"; を print MAIL "Content-type: text/plain;\n"; にすれば迷惑メールにならずに済むのですが、一部の利用者(特にMacユーザー)で、送信されたメールが文字化けしているようですので、何とかcharsetの指定も入れたいと思っています。 上記のプログラムで、おかしいところがあるでしょうか? どうか、ご教示いただけますよう、よろしくお願いします。

    • ベストアンサー
    • CGI
  • Mail::Sendmailの使い方

    お世話になっております。 先日よりsendmailの調子がおかしくていろいろ調べているのですが煮詰まってしまったので詳しい方々にご教授頂きたいと思います。 先日よりMovable Type(CMS)でのメール送信のシステムが機能しなくなり、いろいろ調べているとサーバーのsendmailはきちんと機能しているのですが、perlのモジュールMail::Sendmailがうまく作動していないようなのです。 perlでは、 open (SENDMAIL, "/usr/lib/sendmail -t -i"); (中省略) close(SENDMAIL); という原始的な方法ではメールが送信されるのですが、 use Mail::Sendmail;という使い方では、エラーにはなりませんがずっと読み込み中…状態が続いてメールが送信されませんでした。 Movable TypeでもMail::Sendmailが利用されていますのでここが原因かと思いますが、Mail::Sendmailを使用するにあたって注意すべきこと、または設定すべきことはどのようなことがあるでしょうか?さしあたりどこをチェックしてよいのかわからなくて困っています。 よろしくお願いします。 Mail::Sendmailを利用して作成したスクリプトは以下のようなものです。 #!/usr/bin/perl use strict; use warnings; use Mail::Sendmail; use Encode; use utf8; my $subject = "テスト"; my $message = "テストです。ほげほげ。"; $subject = encode("MIME-Header-ISO_2022_JP", $subject); $message = encode("iso-2022-jp", $message); my %mail = ( "Content-Type" => 'text/plain; charset="iso-2022-jp"', To => 'to@example.com', From => 'from@example.com', Subject => $subject, Message => $message, ); sendmail(%mail); exit;

    • ベストアンサー
    • Perl

専門家に質問してみよう