2017-02-20 71 views
1

我正在嘗試放置一個大容量電子郵件宏,它將遍歷表,拉取電子郵件和收件人姓名。爲了品牌的目的,我想發送每個電子郵件簽名。帶有Access-Outlook宏的電子郵件中的自動簽名

我試圖使用的MailItem對象,但我一直運行到2個問題:

  1. 。顯示創建一個新的Outlook電子郵件和默認的簽名進行填充。但是,.body將用strMessage中的文本字符串擦除簽名。我在猜測它是因爲我無法在同一個電子郵件對象中同時使用表格(包括圖片等)和字符串?

  2. 我試過Microsoft Outlook 15和16對象庫中的.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

嘗試'。體= strMessage&vbCrLf&.body' –

+0

如果您的Outlook有多個簽名文件可以選擇,創建的Word應用程序,使用'oWordApp.EmailOptions.EmailSignature.NewMessageSignature = '改變簽名和/或恢復原始簽名。在Outlook應用程序發送之前執行此操作將使用可以在表格中顯示圖像和內容的html簽名。 – PatricK

+0

@TimWilliams沒有運氣。我試着隔離.body,它也產生了一個應用程序定義或對象定義的錯誤。 – enmasse

回答

1

考慮使用的MailItem的GetInspector()財產事先檢索簽名文​​本,然後串聯到郵件正文。渲染可能不同,所以嘗試.HTMLBody超過.Body在兩條線:

... 
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並行測試代碼。是否.send函數適用於您的2013年機器還? – enmasse

0

這適用於各種前景的口味,而使用後期綁定,以便版本/引用不應該是一個問題。

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