エクセルでのメール送信について質問があります。


こちらのサイトさまで公開されている、
エクセルでのメール送信VBAを利用させていただいております。

http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_080.html

添付ファイルを選択した後に、
「メールを送信します。
SMTP,発信者,宛先等は正しいですか?」という
メッセージが表示されますが、
このメッセージが出る前に、
選択したファイルを自動的に開くことは可能でしょうか?
(確認のために表示させたいです・・・)


あと送信数が一定数を超えるとエラーになってしまいます。
(途中でアドレスが途切れてしまう)

これの解消方法ってありますでしょうか?

どうぞよろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/07/10 02:39:30
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:Mook No.1

回答回数1314ベストアンサー獲得回数393

ポイント300pt

とりあえず、最初の質問に対する答えです。

Sub test2()
    Dim MailSmtpServer As String
    Dim MailFrom As String
    Dim MailTo As String
    Dim MailSubject As String
    Dim MailBody As String
    Dim MailAddFile As Variant
    Dim strMSG As String
    Dim apendFile As Variant

    MailAddFile = Application.GetOpenFilename("全てのファイル (*.*),*.*", , _
        "添付ファイルを選択して下さい。", , True)
    For Each apendFile In MailAddFile
        If InStr(UCase(apendFile), ".PDF") > 0 Then
            CreateObject("WScript.Shell").Run "AcroRd32.exe """ & apendFile & """"
        Else
            MsgBox appendFile & "を添付します。"
        End If
    Next
    MailSmtpServer = Cells(1, 2).Text   ' SMTPサーバ
    MailFrom = Cells(2, 2).Text         ' 発信者
    MailTo = Cells(3, 2).Text           ' 宛先
    MailSubject = Cells(4, 2).Text      ' 件名
    MailBody = Cells(5, 2).Text         ' 本文
    ' メール送信(CC,BCCはブランク)
    strMSG = SendMailByCDO(MailSmtpServer, MailFrom, MailTo, "", "", _
        MailSubject, MailBody, MailAddFile)
    ' 文字コードを任意に指定する場合は以下のようにします。
'    strMSG = SendMailByCDO(MailSmtpServer, MailFrom, MailTo, "", "", _
        MailSubject, MailBody, MailAddFile, cdoISO_2022_JP)
    If strMSG <> "OK" Then MsgBox Mid(strMSG, 3)
End Sub

pdf は開くようにしてみました。



2点目は推測ですが、途切れたところまでの文字の数はどのくらいでしょうか。

これが256文字である場合、オブジェクトを利用する上での制限であるかもしれません。

(外れていたらすみません。)


その場合、メールを個別に送るようにすれば回避できるかもしれませんが、

それでも構わないでしょうか。

その場合、

    strMSG = SendMailByCDO(MailSmtpServer, MailFrom, MailTo, "", "", _
        MailSubject, MailBody, MailAddFile)

の部分を

    Dim oneAddress As Variant
    For Each oneAddress In Split(MailTo,",")
        strMSG = SendMailByCDO(MailSmtpServer, MailFrom, CStr(oneAddress), "", "", _
            MailSubject, MailBody, MailAddFile)
    Next

のようにしてどうでしょうか。

id:ohtsu6

Mookさま

どうもありがとうございます。

出来ました。

送信エラーチェックは今後試してみます。

2009/07/10 02:37:54
  • id:Mook
    添付のファイルはどのようなファイルですか?
    ファイルを開くアプリケーションは特定のものでよいのでしょうか。
  • id:ohtsu6
    Mook さま
    ほぼPDFのみです。

    ちなみにCtrlを押しながら2つ選択することもあります・・・。

    どうぞよろしくお願いいたします。
  • id:Mook
    あっ、
      ' 送信確認
      If MsgBox("メールを送信します。" & vbCr & _
        "SMTP,発信者,宛先等は正しいですか?", vbYesNo) <> vbYes Then Exit Sub
    を消してしまった。

    For 文の後ろに戻しておいてください。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません