Как добавить подпись по умолчанию в Outlook - PullRequest
43 голосов
/ 25 января 2012

Я пишу сценарий VBA в Access, который создает и автоматически заполняет несколько десятков писем.Пока это было гладкое кодирование, но я новичок в Outlook.После создания объекта mailitem, как добавить подпись по умолчанию к электронному письму ?

  1. Это будет подпись по умолчанию, которая автоматически добавляется при создании нового письма.

  2. В идеале я хотел бы просто использовать ObjMail.GetDefaultSignature, но ничего подобного не могу найти.

  3. В настоящее времяЯ использую функцию ниже (найдено в другом месте в Интернете) и ссылаюсь на точный путь и имя файла htm.Но это будет использоваться несколькими людьми, и они могут иметь другое имя для своего файла подписи htm по умолчанию.Так что это работает, но не идеально:

    Function GetBoiler(ByVal sFile As String) As String
    'Dick Kusleika
    Dim fso As Object
    Dim ts As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2)
    GetBoiler = ts.readall
    ts.Close
    End Function
    

    (Вызывается с getboiler(SigString = "C:\Users\" & Environ("username") & "\AppData\Roaming\Microsoft\Signatures\Mysig.txt"))

Редактировать

Благодаря JP (см. Комментарии), Я понимаю, что сначала появляется подпись по умолчанию, но она исчезает, когда я использую HTMLBody для добавления таблицы в электронное письмо.Итак, я думаю, что мой вопрос сейчас: Как я могу отобразить подпись по умолчанию и по-прежнему отображать HTML-таблицу?

Sub X()
    Dim OlApp As Outlook.Application
    Dim ObjMail As Outlook.MailItem

    Set OlApp = Outlook.Application
    Set ObjMail = OlApp.CreateItem(olMailItem)

    ObjMail.BodyFormat = olFormatHTML
    ObjMail.Subject = "Subject goes here"
    ObjMail.Recipients.Add "Email goes here"

    ObjMail.HTMLBody = ObjMail.Body & "HTML Table goes here"
    ObjMail.Display

End Sub

Ответы [ 11 ]

0 голосов
/ 18 мая 2017

Часто этот вопрос задают в контексте функции RangeToHTML Рона де Брейна, которая создает HTML PublishObject из Excel.Range, извлекает его через FSO и вставляет полученный поток HTML в * 1004 сообщения электронной почты. *. При этом удаляется подпись по умолчанию (функция RangeToHTML имеет вспомогательную функцию GetBoiler, которая пытается вставить подпись по умолчанию).

К сожалению, плохо документированный метод Application.CommandBars недоступен через Outlook:

wdDoc.Application.CommandBars.ExecuteMso "PasteExcelTableSourceFormatting"

Это повысит время выполнения 6158:

enter image description here

Но мы все еще можем использовать Word.Document, который доступен с помощью метода MailItem.GetInspector, мы можем сделать что-то вроде этого, чтобы скопировать и вставить выбор из Excel в тело письма Outlook, сохранив вашу подпись по умолчанию (если есть один).

Dim rng as Range
Set rng = Range("A1:F10") 'Modify as needed

With OutMail
    .To = "xxxxx@xxxxx.com"
    .BCC = ""
    .Subject = "Subject"
    .Display
    Dim wdDoc As Object     '## Word.Document
    Dim wdRange As Object   '## Word.Range
    Set wdDoc = OutMail.GetInspector.WordEditor
    Set wdRange = wdDoc.Range(0, 0)
    wdRange.InsertAfter vbCrLf & vbCrLf
    'Copy the range in-place
    rng.Copy
    wdRange.Paste
End With

Обратите внимание, что в некоторых случаях это может не полностью сохранить ширину столбца или в некоторых случаях высоту строки, и хотя он также будет копировать фигуры и другие объекты в диапазоне Excel, это также может вызвать некоторые проблемы с выравниванием, но для простые таблицы и диапазоны Excel, это очень хорошо:

enter image description here

...