[[20181009101826]] 『マクロでメールを送る時のエラー回避』(go-chi) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロでメールを送る時のエラー回避』(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

被りましたが、コードではアーリーバインドとレイトバインドが混在しているので、アーリーバインドを止めれば参照設定のチェックを外せるので、以下のような修正を試してみてください。(手元のPCにはOutlookをインストールしていないので、試してはいません)

 >     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 のようにするだけですよ。 他の型と変わりません。
(???) 2018/10/09(火) 11:40

 Dim outlookObj As Object
 Dim mailItemObj As Object
 Dim myattachments As Object
 と
 Set mailItemObj = outlookObj.CreateItem(0)
 でいいのかなぁ…
 ちょっとやってみます。

(go-chi) 2018/10/09(火) 11:45


変更はそれだけですが、参照設定からOutlookを外すのをお忘れなく。 これがあるせいで、2013を使った後にマクロを実行しようとすると、同じ名前のライブラリを2つ同時に使えずに、いろいろ問題が起こっていると思われます。 レイトバインドだけにする事で、自動的に適切な方を使ってくれるようになるはず。
(???) 2018/10/09(火) 11:50

 やってみました!
 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.