Я сделал этот ответ вики-сообщества, потому что я не смог бы создать его без исследований PowerUser и помощи в предыдущих комментариях.
Я взял PowerUser's Sub X
и добавил
Debug.Print "n------" 'with different values for n
Debug.Print ObjMail.HTMLBody
после каждого утверждения. Из этого я обнаружил, что подпись находится не в пределах .HTMLBody
до тех пор, пока не наступит ObjMail.Display
, и только в том случае, если я ничего не добавил в тело.
Я вернулся к более раннему решению PowerUser, которое использовало C:\Users\" & Environ("username") & "\AppData\Roaming\Microsoft\Signatures\Mysig.txt")
. PowerUser был недоволен этим, потому что хотел, чтобы его решение работало для тех, у кого другие подписи.
Моя подпись находится в той же папке, и я не могу найти никакой опции, чтобы изменить эту папку. У меня только одна подпись, поэтому, прочитав единственный HTM-файл в этой папке, я получил свою подпись only / default.
Я создал HTML-таблицу и вставил ее в подпись, следующую сразу за элементом , и установил в html-теле результат. Я отправил электронное письмо самому себе, и результат был вполне приемлемым, если вам понравилось мое форматирование, которое я включил, чтобы проверить, что я могу.
Моя измененная подпрограмма:
Sub X()
Dim OlApp As Outlook.Application
Dim ObjMail As Outlook.MailItem
Dim BodyHtml As String
Dim DirSig As String
Dim FileNameHTMSig As String
Dim Pos1 As Long
Dim Pos2 As Long
Dim SigHtm As String
DirSig = "C:\Users\" & Environ("username") & _
"\AppData\Roaming\Microsoft\Signatures"
FileNameHTMSig = Dir$(DirSig & "\*.htm")
' Code to handle there being no htm signature or there being more than one
SigHtm = GetBoiler(DirSig & "\" & FileNameHTMSig)
Pos1 = InStr(1, LCase(SigHtm), "<body")
' Code to handle there being no body
Pos2 = InStr(Pos1, LCase(SigHtm), ">")
' Code to handle there being no closing > for the body element
BodyHtml = "<table border=0 width=""100%"" style=""Color: #0000FF""" & _
" bgColor=#F0F0F0><tr><td align= ""center"">HTML table</td>" & _
"</tr></table><br>"
BodyHtml = Mid(SigHtm, 1, Pos2 + 1) & BodyHtml & Mid(SigHtm, Pos2 + 2)
Set OlApp = Outlook.Application
Set ObjMail = OlApp.CreateItem(olMailItem)
ObjMail.BodyFormat = olFormatHTML
ObjMail.Subject = "Subject goes here"
ObjMail.Recipients.Add "my email address"
ObjMail.Display
End Sub
Поскольку и PowerUser, и я нашли наши подписи в C:\Users\" & Environ("username") & "\AppData\Roaming\Microsoft\Signatures
, я полагаю, что это стандартное расположение для любой установки Outlook. Можно ли изменить это значение по умолчанию? Я не могу найти что-либо, чтобы предположить, что это может. Приведенный выше код явно нуждается в некоторой разработке, но он действительно достигает цели PowerUser по созданию тела электронной почты, содержащего таблицу HTML над подписью.