[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロでメールを送る時のエラー回避』(go-chi)
お世話になります。
Webでマクロでメール送信のコードを見て 参考にして大変便利に使用させて頂いていました。
Sub sendmail() ' ActiveWorkbook.Save '---コード1|outlookを起動する Dim toaddress, ccaddress, bccaddress As String '変数設定:To宛先、cc宛先、bcc宛先 Dim subject, mailBody, credit As String '変数設定:件名、メール本文、クレジット、添付 Dim outlookObj As Outlook.Application 'Outlookで使用するオブジェクト生成 Dim mailItemObj As Outlook.mailItem 'Outlookで使用するオブジェクト生成
'---コード2|差出人、本文、署名を取得する--- toaddress = Range("B2").Value 'To宛先 ccaddress = Range("B3").Value 'cc宛先 bccaddress = Range("B4").Value 'bcc宛先 subject = Range("B5").Value '件名 mailBody = Range("B6").Value 'メール本文 credit = Range("B7").Value 'クレジット
'---コード3|メールを作成して、差出人、本文、署名を入れ込む--- Set outlookObj = CreateObject("Outlook.Application") Set mailItemObj = outlookObj.CreateItem(olMailItem) mailItemObj.BodyFormat = 3 'リッチテキストに変更 mailItemObj.To = toaddress 'to宛先をセット mailItemObj.cc = ccaddress 'cc宛先をセット mailItemObj.BCC = bccaddress 'bcc宛先をセット mailItemObj.subject = subject '件名をセット
'---コード4|メール本文を改行する mailItemObj.Body = mailBody & vbCrLf & vbCrLf & credit 'メール本文 改行 改行 クレジット
'---コード5|自動で添付ファイルを付ける--- Dim attached As String Dim myattachments As Outlook.Attachments 'Outlookで使用するオブジェクト生成 Set myattachments = mailItemObj.Attachments attached = Range("B9").Value '添付ファイル myattachments.Add attached
'---コード6|メールを送信する--- 'mailItemObj.Save '下書き保存 mailItemObj.Display 'メール表示(ここでは誤送信を防ぐために表示だけにして、メール送信はしない)
'---コード7|outlookを閉じる(オブジェクトの解放)--- Set outlookObj = Nothing Set mailItemObj = Nothing
End Sub
ただ、当社でPCが複数あり、両方を使用すると VBEの参照設定が 参照不可!microsoft outlook 14.0 object library 参照不可 となり、マクロが使用できなくなります。 調べてみたら(当り前のことかもしれませんが) 一度15(OUTLOOK 2013)を使用し、保存してから 14(2010)を使用すると、15でチェックが入ってしまうため エラーがででるようです(たぶん) ただ、環境的には複数バージョンを回避できないのですが なにかよい方法はあるでしょうか? (バージョン毎にブックを作成するのも困難です) 回避方法がなければ、特定のPCからのみ使用するしか ありませんが、できれば避けたいのです。 よろしくお願いします。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
参照設定のOUTLOOKは外して、VBA中のDimで >'Outlookで使用するオブジェクト生成 となっているものをすべてObject型にしてはどうか? (ねむねむ) 2018/10/09(火) 11:07
あと >Dim toaddress, ccaddress, bccaddress As String ではbccaddressはString型になるが、toaddress, ccaddressはVariant型になる。 すべてString型にしたい場合は Dim toaddress As String, ccaddress As String, bccaddress As String で。 (ねむねむ) 2018/10/09(火) 11:14
> Dim outlookObj As Outlook.Application 'Outlookで使用するオブジェクト生成 > Dim mailItemObj As Outlook.mailItem 'Outlookで使用するオブジェクト生成
> Dim myattachments As Outlook.Attachments 'Outlookで使用するオブジェクト生成
この3つを、Object型に変更。
> Set mailItemObj = outlookObj.CreateItem(olMailItem)
これは、以下のように変更。
Set mailItemObj = outlookObj.CreateItem(0)
変更後も参照設定のチェックボックスを外せない場合、一旦保存してからExcelを全て終了させ、再度ブックを開き、マクロ実行前に参照設定を操作してみてください。
(???) 2018/10/09(火) 11:17
対応ありがとうございます。 素人なのでわからないので教えていただきたいのですが 「Object型に変更」とは具体的に どうやればいいですか。 お手数をおかけします。m(__)m
(go-chi) 2018/10/09(火) 11:37
Dim outlookObj As Object Dim mailItemObj As Object Dim myattachments As Object と Set mailItemObj = outlookObj.CreateItem(0) でいいのかなぁ… ちょっとやってみます。
(go-chi) 2018/10/09(火) 11:45
やってみました! Dim toaddress As String, ccaddress As String, bccaddress As String と Dim outlookObj As Object Dim mailItemObj As Object Dim myattachments As Object と Set mailItemObj = outlookObj.CreateItem(0) と microsoft outlook 14.0 object library のチェックを外す で無事できました! (複数PCで作業していませんが、チェックを外しても メール作成できているので大丈夫ですね!) ???さん、ねむねむさん、ありがとうございました!
(go-chi) 2018/10/09(火) 12:15
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.