2015-12-23 4 views
3

Я уже несколько секунд стучал головой об этом.Подпись не отображается в excel Автоматическая электронная почта

Создал рутину для отправки электронных писем на конец дня клиентам с несколькими вложениями PDF. Все это работает, но почему-то подпись не появляется автоматически, как обычно. Я попытался захватить его, установив подпись = outMail.body и добавив его в свой стандартный элемент позже, но это, похоже, не работает. Если я открою электронное письмо обычным способом, подпись будет автоматически появляться автоматически. Заранее спасибо.

** В дополнительном «корпусе», используемом в линии .body, есть только строка var, которая содержит текст для тела письма.

'Initial signature capture 
     With outMail 
      .Display 
     End With 

     signature = outMail.body 

     With outMail 
      .To = firmEmail 
      .Subject = ****** 
      .body = body & vbNewLine & vbNewLine & signature 

      Do While continue = True 

       'Get attachments 
       If reportsByFirm.Cells(row_counter, firmcol) = cFirm Or reportsByFirm.Cells(row_counter, firmcol) = iFirm Then 
        pdfLocation = getPDFs(cFirm, iFirm, row_counter, reportsByFirm, trMaster, trSeparate, trName, reportDate) 
        .Attachments.Add (pdfLocation) 
        row_counter = row_counter + 1 

       ElseIf row_counter < lRowReportsByFirm Then 
        row_counter = row_counter + 1 

       ElseIf row_counter >= lRowReportsByFirm Then 
        continue = False 
       End If 
      Loop 
      .Display 
     End With 
+2

'.body = body & vbNewLine & vbNewLine & signature' Что такое' body'? Вы имеете в виду '.body'? – findwindow

+0

@findwindow должен был, вероятно, включить этот lol. просто названный строковым переменным телом, который содержит маленький стандартизованный текст для тела. – StormsEdge

+0

Итак, вы устанавливаете подпись, прежде чем вы установите '.body', поэтому подпись должна быть пустой? Почему бы вам не установить строку подписи, как вы делали на теле? – findwindow

ответ

2

Я подозреваю, что подпись первоначально не добавляется к новой электронной почте, а потом шаг в Outlook, а затем добавляет его к электронной почте. Таким образом, ваш код просто создает элемент электронной почты с пустым телом.

Я использовал эти две процедуры для получения Подписи из .html-файла, в который он содержится, и затем добавьте это в электронную почту, сделанную как html, поэтому я использую .HTMLBody вместо .Body.

Private Sub btnGenerateEmail_Click() 

Dim OutApp As Outlook.Application 
Dim OutMail As Outlook.MailItem 
Dim nRow As Integer 
Dim tblEmailTo As ListObject 
Dim tblEmailCC As ListObject 
Dim sToEmail As String 
Dim sCCEmail As String 
Dim sSalutation As String 
Dim dteEffectiveDate As Date 
Dim sSignature As String 

On Error GoTo EH 

Set OutApp = CreateObject("Outlook.Application") 

Set OutMail = OutApp.CreateItem(olMailItem) 

Set tblEmailTo = ThisWorkbook.Sheets("Ref").ListObjects("TblEmailTo") 
Set tblEmailCC = ThisWorkbook.Sheets("Ref").ListObjects("TblEmailCC") 

For nRow = 1 To tblEmailTo.ListRows.Count 
    sToEmail = sToEmail & tblEmailTo.DataBodyRange(nRow, 1).Value & "; " 
Next nRow 

If tblEmailTo.ListRows.Count = 1 Then 
    sSalutation = "Hi " & Mid(sToEmail, 1, InStr(1, sToEmail, ".") - 1) & "," 
Else 
    sSalutation = "Hi All," 
End If 

For nRow = 1 To tblEmailCC.ListRows.Count 
    sCCEmail = sCCEmail & tblEmailCC.DataBodyRange(nRow, 1).Value & "; " 
Next nRow 

dteEffectiveDate = Range("C" & mnDataStartRow).Value 

sSignature = GetCorpEmailSig() 

OutMail.To = sToEmail 
OutMail.CC = sCCEmail 
OutMail.Subject = "My Email Subject as at " & Format(dteEffectiveDate, "mmmm dd yyyy") 
OutMail.HTMLBody = "<BODY style=font-size:11pt;font-family:Calibri>" & sSalutation & _ 
              "<br><br>My main email body text<br><br>Regards," & _ 
              "<br>" & Mid(Application.UserName, InStr(1, Application.UserName, ",") + 2) & "</BODY>" & sSignature 

If Dir(GetOutputPath) <> "" Then 
    OutMail.Attachments.Add (GetOutputPath) 
End If 

OutMail.Display 

Set OutMail = Nothing 
Set OutApp = Nothing 

Exit Sub 

Private Function GetCorpEmailSig() As String 

Dim sSigFilename As String 
Dim fso As Object 
Dim ts As Object 

sSigFilename = Environ("appdata") & "\Microsoft\Signatures\My Company Name.htm" 

Set fso = CreateObject("Scripting.FileSystemObject") 
Set ts = fso.GetFile(sSigFilename).OpenAsTextStream(1, -2) 
GetCorpEmailSig = ts.ReadAll 
ts.Close 

End Function 
+2

просто FYI, нет необходимости получать html-файл, содержащий подпись. Исходный код OP должен работать, если вместо '.body' используется' .htmlbody'. Просто подумал, что это стоит поделиться, потому что я использовал этот метод, пока не узнал о методе, который использует OP (но с htmlbody). Это намного чище и проще :) –

+0

@ScottHoltzman ваше решение сработало! Огромное спасибо. Быстрый вопрос для вас. Теперь, когда я это сделал .HTMLBody мой текст выглядит немного напуганным. Первая строка, которая приветствует, выглядит как размер или два больших и полужирный. Остальное немного мало. Я не парень. Как я могу это исправить? – StormsEdge

+0

@StormsEdge - Рад, что это сработало. Посмотрите в ответе, предоставленном Симоном Wray, где он обертывает текст в '' в конце. –