Я сделал ответ Community Wiki, потому что я не мог создать его без исследований PowerUser и помощи в более ранних комментариях.
Я взял PowerUser 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-файл в этой папке, я получил мою единственную / стандартную подпись.
Я создал таблицу HTML и вставил ее в подпись сразу же после & lt; body & gt; и установите тело 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-таблицу над сигнатурой.