2017-02-20 14 views
1

電子メールと受信者名を取得してテーブルを繰り返し処理する大量メールマクロをまとめようとしています。ブランディング目的のために、署名付きのメールを送信したいと思います。Access-Outlookマクロを使用した電子メールの自動署名

私はMailItemオブジェクトを使用しようとしているが、私は2つの問題に実行しておいてください。

  1. .displayが新しいOutlookの電子メールを作成し、デフォルトの署名を移入します。ただし、.bodyはstrMessageのテキスト文字列で署名を消去します。私は同じ電子メールオブジェクトにテーブル(画像などを含む)と文字列の両方を持つことができないので、私はそれを推測していますか?

  2. 私はMicrosoft Outlook 15と16 Object Libraryの両方で.sendと.bodyメソッドを試しました。両方とも16で動作しますが、どちらも15に存在しないようです。私はいつも「アプリケーション定義またはオブジェクト定義のエラー」を与えられています。私はOutlook 15ライブラリに関するドキュメントを見つけることができません。どのようなメソッド15が.sendと.bodyに相当するのか知っていますか?

    Dim OApp As Object, OMail As Object, signature As String 
    Set OApp = CreateObject("Outlook.Application") 
    Set OMail = OApp.CreateItem(0) 
    
    Dim rs As DAO.Recordset 
    Dim db As Database 
    Dim strSQL As String, strFirstName As String, strLastName As String, strFullName As String, strSubject As String, strMessage As String 
    
    Set db = CurrentDb 
    
    strSQL = "SELECT Email, FirstName, LastName FROM PersonsT WHERE [PersonsT]![Attended]=True" 
    
    Set rs = db.OpenRecordset(strSQL) 
    
    Do While Not rs.EOF 
    strFirstName = rs.Fields("FirstName") 
    strLastName = rs.Fields("LastName") 
    strFullName = rs.Fields("FirstName") & " " & rs.Fields("LastName") 
    
    strSubject = "Greetings" 
    strMessage = "Hello " & strFullName & vbNewLine & vbCrLf & " Let me be the first to congratulate you on registering in this program" 
    
    With OMail 
    .Display 
    End With 
    
    With OMail   
        .to = rs![Email] 
        .Subject = strSubject 
        .body = strMessage 
        .send  
    End With 
    
    rs.MoveNext 
        Loop 
    
         Set OMail = Nothing 
         Set OApp = Nothing 
    
         rs.Close 
         Set rs = Nothing 
    
+0

'.body = strMessage&のvbCrLf&Outlookの中から選択するために、複数の署名ファイルがある場合は、' oWordApp.EmailOptions.EmailSignature.NewMessageSignature = '変更するために使用する、Wordのアプリケーションを作成し、 –

+0

を.body'試してみてくださいオリジナルのものを復元することができます。送信するOutlook Appが、テーブルなどにイメージやコンテンツを持つことができるhtmlシグネチャを使用する前にこれを行います。 – PatricK

+0

@TimWilliams私は.bodyを分離しようとしましたが、アプリケーション定義またはオブジェクト定義のエラーも発生しています。 – enmasse

答えて

1

事前に署名テキストを取得し、メッセージ本文に連結するMailItemのGetInspector()プロパティを使用することを検討してください。

... 
Dim signature As String 

oMail.GetInspector 
signature = oMail.Body 

With OMail   
    .Recipients.Add rs![Email] 
    .Subject = strSubject 
    .Body = strMessage & signature 
    .Display  
End With 
+0

こんにちは。このコードはライブラリ16のマシンで動作しますが、15ではアプリケーション定義またはオブジェクト定義のエラーが発生します。 – enmasse

+0

Outlook 2013はバージョン15に対応し、Outlook 2016はバージョン16に対応します。両方のOutlookバージョンがデュアルインストールされていますか?私は2013がインストールされているので、15で動作することを保証します。 – Parfait

+0

Office 2016を別のマシンにインストールし、Office 2013でメインマシンと並行してコードをテストしています。マシンですか? – enmasse

0

これは見通しの味のすべての種類で動作し、バージョン/参照は問題ではありませんので、遅延バインディング使用しています:レンダリングはそう両方のラインに.Bodyオーバー.HTMLBodyを試し異なる場合があります。

Dim OutApp   As Object 
Dim OutMail   As Object 
Dim signature  As String 

Set OutApp = CreateObject("Outlook.Application") 
OutApp.Session.Logon 
Set OutMail = OutApp.CreateItem(0) 
On Error Resume Next 
With OutMail        ' This creates a blank email and captures the users default signature. 
    .BodyFormat = 2      'olFormatHTML 
    .Display 
End With 

signature = OutMail.HTMLBody 
+0

遅く返事を申し訳ありませんが、私はこの回答を完全に逃しました。私は以前のバージョンのこのマクロでOutlookアプリケーションを使用していましたが、.body(これは普通のテキストで入力されます)を設定すると署名が消去されることがわかりました。署名にはテーブルが入っているからだと思います。 – enmasse

関連する問題