Jak dodać domyślny podpis w Outlooku

Piszę skrypt VBA w Access, który tworzy i automatycznie zapełnia kilkadziesiąt maili. Do tej pory było płynne kodowanie, ale jestem nowy w Outlooku. Po utworzeniu obiektu mailitem, Jak dodać domyślny podpis do wiadomości e-mail ?

  1. Będzie to domyślny podpis, który jest automatycznie dodawany podczas tworzenia nowej wiadomości e-mail.

  2. Najlepiej użyć ObjMail.GetDefaultSignature, ale nie mogę znaleźć czegoś takiego.

  3. Obecnie używam funkcja poniżej (znaleziona gdzie indziej w Internecie) i odwołująca się do dokładnej ścieżki i nazwy pliku htm. Ale to będzie używane przez kilka osób i mogą mieć inną nazwę dla ich domyślnego pliku podpisu htm. Więc to działa, ale nie jest idealne:

    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
    

    (wywołane przez getboiler(SigString = "C:\Users\" & Environ("username") & "\AppData\Roaming\Microsoft\Signatures\Mysig.txt"))

Edytuj

Dzięki JP (Zobacz komentarze), zdaję sobie sprawę, że domyślna sygnatura pojawia się na początku, ale znika, gdy używam HTMLBody, aby dodać tabelę na e-mail. Więc moje pytanie brzmi teraz: Jak wyświetlić domyślny podpis i nadal wyświetlać tabelę 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
Author: PowerUser, 2012-01-25

11 answers

Poniższy kod utworzy wiadomość programu outlook i zachowa podpis automatyczny

Dim OApp As Object, OMail As Object, signature As String
Set OApp = CreateObject("Outlook.Application")
Set OMail = OApp.CreateItem(0)
    With OMail
    .Display
    End With
        signature = OMail.body
    With OMail
    '.To = "[email protected]"
    '.Subject = "Type your email subject here"
    '.Attachments.Add
    .body = "Add body text here" & vbNewLine & signature
    '.Send
    End With
Set OMail = Nothing
Set OApp = Nothing
 44
Author: Julia Jones,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-01 15:52:59

Moim rozwiązaniem jest najpierw wyświetlenie pustej wiadomości (z domyślnym podpisem!) i wstawić zamierzony strHTMLBody do istniejącego HTMLBody.

Jeśli, podobnie jak w Stanach PowerUser, podpis zostanie wymazany podczas edycji HTMLBody, możesz rozważyć przechowywanie zawartości ObjMail.HTMLBody do zmiennej strTemp bezpośrednio po ObjMail.Display i dodać strTemp później, ale nie powinno to być konieczne.

Sub X(strTo as string, strSubject as string, strHTMLBody as string)

   Dim OlApp As Outlook.Application   
   Dim ObjMail As Outlook.MailItem 

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

   ObjMail.To = strTo
   ObjMail.Subject = strSubject   
   ObjMail.Display
   'You now have the default signature within ObjMail.HTMLBody.
   'Add this after adding strHTMLBody
   ObjMail.HTMLBody = strHTMLBody & ObjMail.HTMLBody

   'ObjMail.Send 'send immediately or 
   'ObjMail.close olSave 'save as draft
   'Set OlApp = Nothing

End sub
 14
Author: Rick van Dam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-21 00:27:19
Dim OutApp As Object, OutMail As Object, LogFile As String
Dim cell As Range, S As String, WMBody As String, lFile As Long

S = Environ("appdata") & "\Microsoft\Signatures\"
If Dir(S, vbDirectory) <> vbNullString Then S = S & Dir$(S & "*.htm") Else S = ""
S = CreateObject("Scripting.FileSystemObject").GetFile(S).OpenAsTextStream(1,  -2).ReadAll

WMBody = "<br>Hi All,<br><br>" & _
         "Last line,<br><br>" & S 'Add the Signature to end of HTML Body
Pomyślałem, że podzielę się tym, jak to osiągnę. Nie jestem pewien, czy jest poprawny w sensie definiowania zmiennych, ale jest mały i łatwy do odczytania, co lubię.

Dołączam WMBody do .HTMLBody wewnątrz obiektu Outlook.Zastosowanie OLE.

Mam nadzieję, że to komuś pomoże.

Dzięki, Wes.

 6
Author: Wesley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-16 12:48:09

Outlook dodaje sygnaturę do nowych niezmodyfikowanych wiadomości (wcześniej nie należy modyfikować treści), gdy wywołujesz MailItem.Display (co powoduje wyświetlenie wiadomości na ekranie) lub gdy uzyskujesz dostęp do Właściwości MailItem.GetInspector - nie musisz nic robić ze zwracanym obiektem Inspektora, ale Outlook wypełni treść wiadomości podpisem.

Po dodaniu podpisu przeczytaj Właściwość HTMLBody i połącz ją z łańcuchem HTML, który próbujesz ustawić. Zauważ, że nie można po prostu połączyć dwóch łańcuchów HTML - łańcuchy muszą być połączone. Np. jeśli chcesz wstawić swój łańcuch na górze ciała HTML, poszukaj fragmentu "<body", a następnie znajdź następne wystąpienie ">" (dotyczy to elementu <body> z atrybutami), a następnie Wstaw swój łańcuch HTML za tym">".

Model obiektowy programu Outlook w ogóle nie ujawnia podpisów.

Ogólnie rzecz biorąc, nazwa podpisu jest przechowywana w danych profilu konta dostępnych za pośrednictwem rozszerzony interfejs MAPI IOlkAccountManager. Ponieważ interfejs ten jest rozszerzony MAPI, dostęp do niego można uzyskać tylko za pomocą C++ lub Delphi. Możesz zobaczyć interfejs i jego dane w OutlookSpy Po kliknięciu przycisku IOlkAccountManager.
Po uzyskaniu nazwy podpisu można odczytać plik HTML z systemu plików (należy pamiętać, że nazwa folderu (podpisy w języku angielskim) jest zlokalizowana.
Należy również pamiętać, że jeśli podpis zawiera obrazy, należy je również dodać do wiadomości jako załączniki i znaczniki <img> w treści podpisu/wiadomości dostosowane tak, aby wskazywały atrybut src na załączniki, a nie na podfolder folderu Signatures, w którym przechowywane są obrazy.
Twoim obowiązkiem będzie również scalenie stylów HTML z pliku HTML podpisu ze stylami samej wiadomości.

Jeśli jest dostępna opcja Redemption , możesz użyć obiektu RDOAccount (dostępnego w dowolnym języku, w tym VBA). Nowe nazwa podpisu wiadomości jest przechowywana we właściwości 0x0016001F, podpis odpowiedzi znajduje się w 0x0017001F. Możesz również użyć RDOAccount.ReplySignature i NewSignature właściwości.
Odkupienie ujawnia również RDOSignature.ApplyTo metoda, która pobiera wskaźnik do obiektu RDOMail i wstawia podpis w podanym miejscu poprawnie łącząc obrazy i style:

set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = Application.Session.MAPIOBJECT
set Drafts = Session.GetDefaultFolder(olFolderDrafts)
set   Msg = Drafts.Items.Add
Msg.To =   "[email protected]"
Msg.Subject =   "testing signatures"
Msg.HTMLBody =   "<html><body>some <b>bold</b> message text</body></html>"
set Account = Session.Accounts.GetOrder(2).Item(1)   'first mail account
if  Not (Account  Is  Nothing)  Then
   set Signature = Account.NewMessageSignature
   if  Not (Signature  Is  Nothing)  Then
    Signature.ApplyTo Msg,  false   'apply at the bottom
   End If
End If
Msg.Send

EDIT: od lipca 2017 r., MailItem.GetInspector w programie Outlook 2016 nie wstawia już podpisu. Tylko Tak.

 5
Author: Dmitry Streblechenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-13 16:48:44

Zrobiłem z tego odpowiedź Wiki społeczności, ponieważ nie mogłem stworzyć go bez badań Powerusera i pomocy we wcześniejszych komentarzach.

Wziąłem Powerusera Sub X i dodałem

Debug.Print "n------"    'with different values for n
Debug.Print ObjMail.HTMLBody
Po każdym oświadczeniu. Z tego odkryłem, że sygnatura nie jest wewnątrz .HTMLBody aż do ObjMail.Display i tylko wtedy, gdy nie dodałem nic do ciała.

Wróciłem do wcześniejszego rozwiązania Powerusera, które używało C:\Users\" & Environ("username") & "\AppData\Roaming\Microsoft\Signatures\Mysig.txt"). PowerUser był z tego niezadowolony, ponieważ chciał, aby jego rozwiązanie do pracy dla innych, którzy mają różne podpisy.

Mój podpis znajduje się w tym samym folderze i nie mogę znaleźć żadnej opcji zmiany tego folderu. Mam tylko jeden podpis, więc czytając jedyny plik HTM w tym folderze, uzyskałem mój jedyny/domyślny podpis.

Utworzyłem tabelę HTML i wstawiłem ją do podpisu bezpośrednio po elemencie

i ustawiłem treść html na wynik. Wysłałem maila do siebie i wynik był całkowicie akceptowalny pod warunkiem, że podoba Ci się moje formatowanie, które zawarłem, aby sprawdzić, czy mogę.

Mój zmodyfikowany podprogram to:

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

Ponieważ zarówno PowerUser, jak I ja znaleźliśmy nasze sygnatury w C:\Users\" & Environ("username") & "\AppData\Roaming\Microsoft\Signatures sugeruję, że jest to standardowa lokalizacja dla każdej instalacji Outlooka. Czy można zmienić tę wartość domyślną? Nie mogę znaleźć niczego, co by sugerowało, że może. Powyższy kod wyraźnie wymaga trochę rozwoju, ale nie osiągnąć PowerUser ' S cel tworzenia ciała e-mail zawierający tabelę HTML powyżej podpisu.

 3
Author: Tony Dallimore,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-27 21:32:47

Wymyśliłem sposób, ale to może być zbyt niechlujne dla większości. Mam prosty Db i chcę, aby był w stanie generować e-maile dla mnie, więc oto dół i brudne rozwiązanie użyłem:

Odkryłem, że początek tekstu jest jedynym miejscem, w którym widzę "<div class=WordSection1>" w HTMLBody nowego e-maila, więc po prostu zrobiłem prostą zamianę, zastępując

"<div class=WordSection1><p class=MsoNormal><o:p>"

Z

"<div class=WordSection1><p class=MsoNormal><o:p>" & sBody

Gdzie sBody jest zawartością ciała, którą chcę wstawić. Wydaje się działać tak daleko.

.HTMLBody = Replace(oEmail.HTMLBody, "<div class=WordSection1><p class=MsoNormal><o:p>", "<div class=WordSection1><p class=MsoNormal><o:p>" & sBody)
 3
Author: Eliot K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-20 14:54:48

Skonstruowałem to podejście, szukając sposobu wysyłania wiadomości w cyklicznym harmonogramie. Znalazłem podejście, w którym odwołujesz się do Właściwości Inspektora utworzonej wiadomości, nie dodałem podpisu, którego chciałem (mam więcej niż jedno konto skonfigurowane w programie Outlook, z oddzielnymi podpisami.)

Podejście poniżej jest dość elastyczne i wciąż proste.

    Private Sub Add_Signature(ByVal addy as String, ByVal subj as String, ByVal body as String)
       Dim oMsg As MailItem
       Set oMsg = Application.CreateItem(olMailItem)
       oMsg.To = addy
       oMsg.Subject = subj
       oMsg.Body = body
       Dim sig As String
       ' Mysig is the name you gave your signature in the OL Options dialog 
       sig = ReadSignature("Mysig.htm")
       oMsg.HTMLBody = Item.Body & "<p><BR/><BR/></p>" & sig ' oMsg.HTMLBody
       oMsg.Send
       Set oMsg = Nothing
    End Sub

    Private Function ReadSignature(sigName As String) As String
       Dim oFSO, oTextStream, oSig As Object
       Dim appDataDir, sig, sigPath, fileName As String
       appDataDir = Environ("APPDATA") & "\Microsoft\Signatures"
       sigPath = appDataDir & "\" & sigName

       Set oFSO = CreateObject("Scripting.FileSystemObject")
       Set oTextStream = oFSO.OpenTextFile(sigPath)
       sig = oTextStream.ReadAll
       ' fix relative references to images, etc. in sig
       ' by making them absolute paths, OL will find the image
       fileName = Replace(sigName, ".htm", "") & "_files/"
       sig = Replace(sig, fileName, appDataDir & "\" & fileName)
       ReadSignature = sig
    End Function
 3
Author: Mozzis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-27 00:31:11

Potrzebuję 50 rep, aby dodać komentarz do opcji podpisu, którą uznałem za najbardziej pomocną, jednak miałem problem z obrazami nie pokazującymi się poprawnie, więc musiałem znaleźć pracę. To jest moje rozwiązanie:

Using @ Morris Maynard ' s answer as a base https://stackoverflow.com/a/18455148/2337102 potem musiałem przejść przez:

Przypisy:
cofnij się .plik htm przed uruchomieniem skopiuj i wklej do folderu pomocniczego

  1. Będziesz pracować zarówno z SignatureName.htm i SignatureName_files Folder

  2. Nie potrzebujesz doświadczenia HTML, pliki zostaną otwarte w programie do edycji, takim jak Notatnik lub Notepad++ lub określony program HTML

  3. Przejdź do lokalizacji pliku podpisu (standard powinien być C:\Users\"username"\AppData\Roaming\Microsoft\Signatures)

  4. Otwórz plik SignatureName.htm w edytorze tekstu / htm (kliknij prawym przyciskiem myszy na pliku, "edytuj z programem")

  5. Użyj Ctrl+F i wpisz .png; .jpg lub jeśli nie znasz swojego typu obrazu, użyj image001 Zobaczysz coś w rodzaju: src="signaturename_files/image001.png"

  6. Musisz zmienić to na cały adres lokalizacji obrazu C:\Users\YourName\AppData\Roaming\Microsoft\Signatures\SignatureNameFolder_files\image001
    lub
    src="E:\location\Signatures\SignatureNameFolder_files\image001.png"

  7. Zapisz swój plik (zastąp go, oczywiście masz kopię zapasową oryginału)

  8. Wróć do programu Outlook i otwórz nowy element poczty, dodaj swój podpis. Otrzymałem ostrzeżenie, że pliki zostały zmienione, kliknąłem ok, musiałem to zrobić dwa razy, a następnie raz w "menu Edycja podpisów".

    Some of the files in this webpage aren't in the expected location. Do you want to download them anyway? If you're sure the Web page is from a trusted source, click Yes."

  9. Uruchom swoje Zdarzenie Makro, obrazy powinny być teraz wyświetlane.

Kredyt
MrExcel - VBA code Signature code failure: http://bit.ly/1gap9jY

 2
Author: MrsAdmin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:50

Większość innych odpowiedzi po prostu łączy swoje ciało HTML z podpisem HTML. Jednak nie działa to z obrazami i okazuje się, że istnieje bardziej "standardowy" sposób na to.1

Microsoft Outlook pre-2007, który jest skonfigurowany z wordeditor jako edytor, a Microsoft Outlook 2007 i nowsze, użyj nieco wyciętej wersji edytora Word do edycji wiadomości e-mail. Oznacza to, że możemy użyć modelu obiektowego dokumentu Microsoft Word do wprowadzania zmian w e-mail.

Set objMsg = Application.CreateItem(olMailItem)
objMsg.GetInspector.Display 'Displaying an empty email will populate the default signature
Set objSigDoc = objMsg.GetInspector.WordEditor
Set objSel = objSigDoc.Windows(1).Selection
With objSel
   .Collapse wdCollapseStart
   .MoveEnd WdUnits.wdStory, 1
   .Copy 'This will copy the signature
End With
objMsg.HTMLBody = "<p>OUR HTML STUFF HERE</p>"
With objSel
   .Move WdUnits.wdStory, 1 'Move to the end of our new message
   .PasteAndFormat wdFormatOriginalFormatting 'Paste the copied signature
End With 
'I am not a VB programmer, wrote this originally in another language so if it does not
'compile it is because this is my first VB method :P

Microsoft Outlook 2007 Programming (S. Mosher) > Rozdział 17, praca z elementami: praca z podpisami programu Outlook

 2
Author: Birdie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-21 03:37:00

Podoba mi się odpowiedźMozzi , ale okazało się, że nie zachowuje domyślnych czcionek, które są specyficzne dla użytkownika. Tekst był wyświetlany czcionką systemową jako zwykły tekst. Poniższy kod zachowuje ulubione czcionki użytkownika, czyniąc je tylko trochę dłuższymi. Jest on oparty na podejściu Mozzi , używa wyrażenia regularnego, aby zastąpić domyślny tekst ciała i umieszcza wybrany tekst ciała użytkownika, Gdzie należy za pomocą GetInspector.WordEditor. Znalazłem, że wezwanie do GetInspector zrobił nie wypełniaj HTMLbody jakoDimitry streblechenko mówi powyżej w tym wątku, przynajmniej nie w Office 2010, więc obiekt jest nadal wyświetlany w moim kodzie. Na marginesie, należy pamiętać, że ważne jest, aby MailItem był tworzony jako obiekt, a nie jako zwykły MailItem-Zobacz tutaj Po Więcej informacji. (Och, i przepraszam tych o różnych gustach, ale wolę dłuższe opisowe nazwy zmiennych tak, że mogę znaleźć procedury!)

Public Function GetSignedMailItemAsObject(ByVal ToAddress As String, _
                      ByVal Subject As String, _
                      ByVal Body As String, _
                      SignatureName As String) As Object
'================================================================================================================='Creates a new MailItem in HTML format as an Object.
'Body, if provided, replaces all text in the default message.
'A Signature is appended at the end of the message.
'If SignatureName is invalid any existing default signature is left in place.
'=================================================================================================================
' REQUIRED REFERENCES
' VBScript regular expressions (5.5)
' Microsoft Scripting Runtime
'=================================================================================================================
Dim OlM As Object               'Do not define this as Outlook.MailItem.  If you do, some things will work and some won't (i.e. SendUsingAccount)
Dim Signature As String
Dim Doc As Word.Document
Dim Regex As New VBScript_RegExp_55.RegExp       '(can also use use Object if VBScript is not Referenced)

Set OlM = Application.CreateItem(olMailItem)
With OlM
    .To = ToAddress
    .Subject = Subject
    'SignatureName is the exactname that you gave your signature in the Message>Insert>Signature Dialog
    Signature = GetSignature(SignatureName)
    If Signature <> vbNullString Then
'        Should really strip the terminal </body tag out of signature by removing all characters from the start of the tag
'        but Outlook seems to handle this OK if you don't bother.
        .Display                                'Needed.  Without it, there is no existing HTMLbody available to work with.
        Set Doc = OlM.GetInspector.WordEditor   'Get any existing body with the WordEditor and delete all of it
        Doc.Range(Doc.Content.Start, Doc.Content.End) = vbNullString 'Delete all existing content - we don't want any default signature
        'Preserve all local email formatting by placing any new body text, followed by the Signature, into the empty HTMLbody.
        With Regex
            .IgnoreCase = True                  'Case insensitive
            .Global = False                     'Regex finds only the first match
            .MultiLine = True                   'In case there are stray EndOfLines (there shouldn't be in HTML but Word exports of HTML can be dire)
            .Pattern = "(<body.*)(?=<\/body)"   'Look for the whole HTMLbody but do NOT include the terminal </body tag in the value returned
            OlM.HTMLbody = .Replace(OlM.HTMLbody, "$1" & Signature)
        End With ' Regex
        Doc.Range(Doc.Content.Start, Doc.Content.Start) = Body 'Place the required Body before the signature (it will get the default style)
        .Close olSave                           'Close the Displayed MailItem (actually Object) and Save it.  If it is left open some later updates may fail.
    End If ' Signature <> vbNullString
End With ' OlM
Set GetSignedMailItemAsObject = OlM
End Function

Private Function GetSignature(sigName As String) As String
Dim oTextStream As Scripting.TextStream
Dim oSig As Object
Dim appDataDir, Signature, sigPath, fileName As String
Dim FileSys As Scripting.FileSystemObject        'Requires Microsoft Scripting Runtime to be available
    appDataDir = Environ("APPDATA") & "\Microsoft\Signatures"
    sigPath = appDataDir & "\" & sigName & ".htm"
    Set FileSys = CreateObject("Scripting.FileSystemObject")
    Set oTextStream = FileSys.OpenTextFile(sigPath)
    Signature = oTextStream.ReadAll
    ' fix relative references to images, etc. in Signature
    ' by making them absolute paths, OL will find the image
    fileName = Replace(sigName, ".htm", "") & "_files/"
    Signature = Replace(Signature, fileName, appDataDir & "\" & fileName)
    GetSignature = Signature
End Function
 1
Author: Neil Dunlop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:16

Często to pytanie jest zadawane w kontekście funkcji Rona De Bruina RangeToHTML, która tworzy HTML PublishObject z Excel.Range, wyciąga to za pośrednictwem FSO i wstawia wynikowy strumień HTML do wiadomości e-mail HTMLBody. W ten sposób usuwa się domyślny podpis (Funkcja RangeToHTML posiada funkcję pomocniczą GetBoiler, która próbuje wstawić domyślny podpis).

Niestety, słabo udokumentowana metoda Application.CommandBars nie jest dostępna w Outlooku:

wdDoc.Application.CommandBars.ExecuteMso "PasteExcelTableSourceFormatting"

Podniesie runtime 6158:

Tutaj wpisz opis obrazka

Ale nadal możemy wykorzystać Word.Document, który jest dostępny za pomocą metody MailItem.GetInspector, możemy zrobić coś takiego, aby skopiować i wkleić wybór z programu Excel do treści wiadomości e-mail programu Outlook, zachowując domyślny podpis (jeśli taki istnieje).

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

With OutMail
    .To = "[email protected]"
    .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

Zauważ, że w niektórych przypadkach może to nie zachować idealnie szerokości kolumn, a w niektórych przypadkach wysokości wierszy, i chociaż będzie również kopiować kształty i inne obiekty w zakresie programu Excel, może to powoduje to również pewne problemy z wyrównaniem, ale dla prostych tabel i zakresów Excela jest to bardzo dobre: {]}

Tutaj wpisz opis obrazka

 0
Author: David Zemens,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-18 15:05:02