PDA

Vollständige Version anzeigen : Signatur wird bei Outlook 2016 überschrieben


Macanudo
27.11.2017, 07:49
Guten Morgen in die Runde,

folgendes Problem stellt sich mit diesem Code dar. ich erstelle mit diesem Code aus Excel viele Mails mit Anhängen. Lass ich mir diese Mails erst anzeigen(.display) bevor ich sie dann händisch in Outlook sende, dann nimmt er brav die Signatur mit in die Mail hinein. Wähle ich aber gleich senden (.send), dann sendet er die Mails, aber ohne Signatur. Wo befindet sich der Fehler im Makro? Die Signatur ist in Outlook und auch in der Vorlage gespeichert.

Was muss denn da geändert werden? Leider konnte ich in der Suche nichts genaues finden, oder ich habe einfach keine Ahnung.

Vielen Dank.

Viele Grüße

Uwe


Sub MailMG()

Application.ScreenUpdating = False

Sheets("Serienmail").Select
Dim oOL As Object
Dim oOLMsg As Object
Dim oOLRecip As Object
Dim oOLAttach As Object
Dim iRow As Integer, iCounter As Integer
Dim sFile, sRec As String, sSub As String
Dim sBody As String
Dim bln, S
Application.ScreenUpdating = False
iRow = Cells(Rows.Count, 1).End(xlUp).Row
Set oOL = CreateObject("Outlook.Application")
For iCounter = 1 To iRow
sRec = Cells(iCounter, 1) 'An
sFile = Split(Cells(iCounter, 7), ";") 'Anlage
sSub = Cells(iCounter, 2) 'Betreff
sBody = Cells(iCounter, 3) & vbLf & vbLf & Cells(iCounter, 4) & vbLf & vbLf & Cells(iCounter, 5) 'Text
Set oOLMsg = oOL.CreateItemFromTemplate("C:/Users/ritte/Videos/Hotel/Hotel allgemein/bH.oft")
With oOLMsg
Set oOLRecip = .Recipients.Add(sRec)
.Subject = sSub
.Body = sBody
For S = 0 To UBound(sFile)
.Attachments.Add sFile(S)
Next S
.Display
'.send
End With
oOLRecip.Resolve
Next iCounter
Set oOL = Nothing
Application.ScreenUpdating = True
End Sub

mumpel
27.11.2017, 08:27
Hallo!

Du musst den Body zwischenspeichern. http://www.rholtz-office.de/outlook/email_erstellen_teil1

Gruß, René

Macanudo
27.11.2017, 09:16
Hallo René,

ich habe mir jetzt den Link angeschaut und bin verwirrt. Den Body zwischenspeichern? Geht das mit "olOldbody = .htmlBody"? Das Lesen von den Codes ist mir noch nicht so geläufig. Muss man dieses "olOldbody" dann wieder anhängen?

Ich habe jetzt ".body stehen. Muss das dann in ".htmlbody" umgewandelt werden?

Fragen über Fragen.

Vielen Dank.

Viele Grüße
Uwe

mumpel
27.11.2017, 10:30
(...) Geht das mit "olOldbody = .htmlBody"? (...)
Genau.


Muss das dann in ".htmlbody" umgewandelt werden?

Wenn Du Nur-Text-Mail nutzen möchtest kannst Du auch .body nehmen. Aber zwischenspeichern und später wieder anhängen musst Du.

Macanudo
27.11.2017, 10:55
ah, okay. Dann werde ich mal sehen, ob ich das in meinen Code hineingearbeitet bekomme.

Vielen Dank bis hierher. Ich melde mich auf jedenfall noch einmal hier.

Viele Grüße
Uwe

Macanudo
28.11.2017, 09:32
Guten Morgen mumpel,

ich habe es an einem Code probiert, den du 2014 mal gepostet hast. Diesen habe ich gestern noch gefunden. http://www.ms-office-forum.net/forum/showthread.php?t=305611

Jetzt habe ich es ausprobiert und es setzt die Signatur ein und verschickt auch die Mail. Nehme ich .htmlbody, dann wird auch das Bild in der Signatur eingefügt, aber das Anschreiben wird hintereinander geschrieben, ohne Leerzeilen. Obwohl ich "& vbLf & vbLf &" einfüge. Nehme ich stattdessen .body, schreibt er mir den Text richtig, aber er fügt mir nicht das Bild in die Signatur ein.

Kann man den text irgendwie formatieren. Habe es versucht, aber da scheitere ich.

Vielen Dank.

Viele Grüße
Uwe

Sub mail_test()
Sheets("Tabelle1").Select

Dim olApp As Object
Dim iRow As Integer
Dim iCounter As Integer
Dim olOldbody As String

Application.ScreenUpdating = True

iRow = Cells(Rows.Count, 1).End(xlUp).Row

Set olApp = CreateObject("Outlook.Application")

For iCounter = 1 To iRow

With olApp.CreateItem(0) '

With .GetInspector
.Display

End With
olOldbody = .htmlBody

.To = Cells(iCounter, 1).Value
.Subject = Cells(iCounter, 2).Value
.htmlBody = Cells(iCounter, 3).Value & vbLf & vbLf & Cells(iCounter, 4).Value & vbLf & vbLf & Cells(iCounter, 5).Value & vbLf & vbLf & olOldbody
.Attachments.Add Cells(iCounter, 7).Value
'.send
.Display
End With
Next iCounter

End Sub

markusxy
28.11.2017, 09:52
htmlBody bedeutet, dass du HTML Anweisungen übermittelst.
Alles was du übergibst muss also einer HTML Anweisung entsprechen.
vblf ist nicht html.

Für einen Zeilenwechsel kannst du z.B. "div" verwenden.
Wenn ich hier die Anweisung korrekt schreibe, dann kannst du sie nicht sehen, da das eine Website ist.


Siehe: http://wiki.selfhtml.org/wiki/HTML/Textstrukturierung

Macanudo
28.11.2017, 10:01
Guten Morgen markusxy,

vielen Dank für den Hinweis. Ich sage ja, dass ich keine Ahnung habe. Ich werde es gleich ausprobieren.

Vielen Dank.

Viele Grüße

Uwe

mumpel
28.11.2017, 10:08
Die Zeilenumbruchanweisung in HTML lautet <br>, so wie Du es auch in meinem Workshop (siehe Link von gestern) sehen kannst. Die Zeilenumbruchanweisung muss dabei in Anführungszeichen stehen.

Macanudo
28.11.2017, 15:24
Hallo mumpel,

ich habe Deinen Code jetzt geändert und siehe da, er macht auch die Absätze wieder hinein.

Vielen Dank.

Nun hat sich ein weiteres Problem geöffnet. Vielleicht kannst du mir dabei helfen.

Ich verschicke mit der Mail auch Anhänge. Dabei bekommen die Leute eine unterschiedliche Anzahl. Bei meinem alten Code (siehe ganz oben) konnte ich mehrere Anhänge verschicken, in dem ich den Pfad durch ein ";" in der Zelle der jeweiligen Spalte getrennt habe. Das geht nun aber nicht mehr. Da gibt er mir eine Fehlermeldung. Ich kann nur noch einen Pfad eingeben, diesen Anhang nimmt er dann.

Habe auch schon versucht, ein weiteres ".Attachments.Add" mit einer anderen Spalte zu nehmen. Dann meckert er, wenn die Spalte leer ist.

Gibt es da eine Möglichkeit, dass er auch mehrere Anlagen verschickt?

Vielen Dank.

Viele Grüße
Uwe


Sub mail_test()
Sheets("Tabelle1").Select

Dim olApp As Object
Dim iRow As Integer
Dim iCounter As Integer
Dim olOldbody As String

Application.ScreenUpdating = True

iRow = Cells(Rows.Count, 1).End(xlUp).Row

Set olApp = CreateObject("Outlook.Application")

For iCounter = 1 To iRow

With olApp.CreateItem(0)

With .GetInspector
.Display
End With
olOldbody = .htmlBody

.To = Cells(iCounter, 1).Value
.Subject = Cells(iCounter, 2).Value
.htmlBody = Cells(iCounter, 3).Value & "<br><br>" & Cells(iCounter, 4).Value & "<br><br>" & Cells(iCounter, 5).Value & "<br><br>" & olOldbody
.Attachments.Add Cells(iCounter, 7).Value

'.send
.Display
End With
Next iCounter

End Sub

ich sehe gerade, dass das "br" aus dem Code herausgenommen wurde. Es sind nur noch die "" da.

Macanudo
30.11.2017, 07:36
Guten Morgen,

ich melde mich noch einmal, weil mein Problem weiterhin besteht. ich habe jetzt probiert, aber leider war es nicht von Erfolg gekrönt.

Über "Attachments.Add Cells(iCounter, 7).Value" werden aus der Spalte 7 die jeweiligen Pfade bereitgestellt, wo die Datei zufinden ist, die angehängt werden soll. So lange da nur ein Pfad in der jeweiligen Zelle der Spalte 7, dann geht das. Sind zwei oder mehr Pfade in der Zelle, die ich immer durch ein ";" getrennt habe vorhanden, dann geht es nicht.

In meinem vorigen Code funktionierte das, leider kann ich den nicht nutzen, weil ich zu blöd bin, da die Funktionen für die Signatur einzufügen. Anbei mal ein Beispiel für einen Pfad aus einer Zelle.

Ich hoffe, mir kann bitte hier noch mal jemand helfen.

Auch das nochmalige einfügen einer weiteren "Attachments.Add Cells(iCounter, 8).Value" z. B. geht nicht immer, da er meckert, wenn in Spalte 8 dann kein Pfad vorhanden ist.

Vielen Dank.

Viele Grüße
Uwe

""C:/Users/h1504uz/Test/Rechnungen/Mail/Rechnungen 2017/November 2017/2-11-17 0018 Test25.pdf;C:/Users/h1504uz/Test/Rechnungen/Mail/Rechnungen 2017/November 2017/3-11-17 0018 Test26.pdf""

mumpel
30.11.2017, 09:13
Du musst Deine Schleife für die Anhänge natürlich so einbauen wie in Deinem Code, also mit "For-Next".

Macanudo
30.11.2017, 10:47
Hallo mumpel,

es geht wahrscheinlich um diesen Part? Oder gehört da noch etwas dazu?

For S = 0 To UBound(sFile)
.Attachments.Add sFile(S)
Next S

Ich habe den gesamten Code damals mir aus dem Netz geholt und kenne mich leider mit VBA nicht so aus.

Deshalb stehe ich jetzt wie ein Ochs vorm Berg und weiß nicht, wo der hingehört, was dazugehört und wie er abgewandelt werden muss, damit die Schleife in Deinem Code funktioniert.

Wäre es möglich mir dabei zu helfen, diese Schleife anzupassen, damit das klappt.

Vielen Dank.

Viele Grüße
Uwe

mumpel
04.12.2017, 11:20
Ungetestet:

<pre style='border:thin solid #FF8000; padding:12px 24px; margin-left:12px; color:#000000'><span style='color:#0000EE'>Sub</span> MailMG() <span style='color:#0000EE'>Dim</span> olApp <span style='color:#0000EE'>As</span> <span style='color:#0000EE'>Object</span> <span style='color:#0000EE'>Dim</span> strOldBody <span style='color:#0000EE'>As</span> <span style='color:#0000EE'>String</span> <span style='color:#0000EE'>Dim</span> lngLastCell <span style='color:#0000EE'>As</span> <span style='color:#0000EE'>Long</span> <span style='color:#0000EE'>Dim</span> lngMailCount <span style='color:#0000EE'>As</span> <span style='color:#0000EE'>Long</span> <span style='color:#0000EE'>Dim</span> varAttachCount <span style='color:#0000EE'>As</span> <span style='color:#0000EE'>Variant</span> <span style='color:#0000EE'>Dim</span> lngAddAttach <span style='color:#0000EE'>As</span> <span style='color:#0000EE'>Long</span> Application.ScreenUpdating = <span style='color:#0000EE'>False</span> lngLastCell = Sheets(<span style='color:#FF0000'>&quot;Serienmail&quot;</span>).Cells(Rows.Count, <span style='color:#DDAA00'>1</span>).End(xlUp).Row <span style='color:#0000EE'>Set</span> olApp = CreateObject(<span style='color:#FF0000'>&quot;Outlook.Application&quot;</span>) <span style='color:#0000EE'>For</span> lngMailCount = <span style='color:#DDAA00'>1</span> <span style='color:#0000EE'>To</span> lngLastCell varAttachCount = Split(Sheets(<span style='color:#FF0000'>&quot;Serienmail&quot;</span>).Cells(lngMailCount, <span style='color:#DDAA00'>7</span>), <span style='color:#FF0000'>&quot;;&quot;</span>) <span style='color:#008000'>'Anlage </span> <span style='color:#0000EE'>With</span> olApp.CreateItemFromTemplate(<span style='color:#FF0000'>&quot;C:/Users/ritte/Videos/Hotel/Hotel allgemein/bH.oft&quot;</span>) .GetInspector.Display strOldBody = .htmlBody .To = Sheets(<span style='color:#FF0000'>&quot;Serienmail&quot;</span>).Cells(lngMailCount, <span style='color:#DDAA00'>1</span>) <span style='color:#008000'>'An </span> .Subject = Sheets(<span style='color:#FF0000'>&quot;Serienmail&quot;</span>).Cells(lngMailCount, <span style='color:#DDAA00'>2</span>) <span style='color:#008000'>'Betreff </span> .htmlBody = Sheets(<span style='color:#FF0000'>&quot;Serienmail&quot;</span>).Cells(lngMailCount, <span style='color:#DDAA00'>3</span>) & <span style='color:#FF0000'>&quot;&lt;br&gt;&lt;br&gt;&quot;</span> & _ Sheets(<span style='color:#FF0000'>&quot;Serienmail&quot;</span>).Cells(lngMailCount, <span style='color:#DDAA00'>4</span>) & _ <span style='color:#FF0000'>&quot;&lt;br&gt;&lt;br&gt;&quot;</span> & _ Sheets(<span style='color:#FF0000'>&quot;Serienmail&quot;</span>).Cells(lngMailCount, <span style='color:#DDAA00'>5</span>) & _ <span style='color:#FF0000'>&quot;&lt;br&gt;&lt;br&gt;&quot;</span> & strOldBody <span style='color:#0000EE'>For</span> lngAddAttach = <span style='color:#DDAA00'>0</span> <span style='color:#0000EE'>To</span> <span style='color:#0000EE'>Ubound</span>(varAttachCount) .Attachments.Add varAttachCount(lngAddAttach) <span style='color:#0000EE'>Next</span> lngAddAttach <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>With</span> <span style='color:#0000EE'>Next</span> lngMailCount Application.ScreenUpdating = <span style='color:#0000EE'>True</span> <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>Sub</span><br><br><hr style='color: #FF8000; background-color:#FF8000; height:1px; border:none;' /><p style='font-size:9px; font-family: Verdana; text-align: left; '><a href='http://www.rholtz-office.de/vba-html' target='_blank'>VBA/HTML-CodeConverter</a>, AddIn f&uuml;r Office 2002-2016 - in VBA geschrieben von <a href='http://www.office-loesung.de/viewprofile19265.php'>Lukas Mosimann</a>. Projektbetreuung:<a href='http://www.rholtz-office.de'>RMH Software & Media</a></p><p style='font-size:11px; font-weight:bold; color:#0000FF; font-family:Verdana; text-align:left;'>Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0</p></pre>

Macanudo
04.12.2017, 18:28
Hallo mumpel,

ich muss sagen, dass ich total begeistert bin. Es funktioniert wunderbar.

Eine Frage habe ich noch. ? In meinem Outlook ist "Calibri 11" als Standardschriftart eingestellt. Wenn er jetzt die Mail erstellt, dann schreibt er alles, was aus Excel kommt in "Calibri 10". Nur die Signatur bleibt so, wie ich sie erstellt habe. ? Woher nimmt denn das Makro diese Schriftart? Es geht zwar nur um 1 Größenordnung, aber ich möchte es gerne verstehen. Kann man das noch irgendwo abändern?

Vielen Dank für Deine Geduld mit mir.

Vielen Dank für diesen tollen Code.

Viele Grüße
Uwe

mumpel
04.12.2017, 18:41
Woher das Makro die Schriftgröße nimmt weiss ich nicht. Die Schriftgröße der Signatur bleibt erhalten weil sie so in der Variable "strOldBody" gespeichert wird.

Abändern kann man das durchaus. Ungetestet wie folgt.

<pre style='border:thin solid #FF8000; padding:12px 24px; margin-left:12px; color:#000000'><span style='color:#0000EE'>Public</span> <span style='color:#0000EE'>Sub</span> Email_Erstellen_Formatiert() <span style='color:#0000EE'>Dim</span> olApp <span style='color:#0000EE'>As</span> <span style='color:#0000EE'>Object</span> <span style='color:#0000EE'>Dim</span> strOldBody <span style='color:#0000EE'>As</span> <span style='color:#0000EE'>String</span> <span style='color:#0000EE'>Dim</span> lngLastCell <span style='color:#0000EE'>As</span> <span style='color:#0000EE'>Long</span> <span style='color:#0000EE'>Dim</span> lngMailCount <span style='color:#0000EE'>As</span> <span style='color:#0000EE'>Long</span> <span style='color:#0000EE'>Dim</span> varAttachCount <span style='color:#0000EE'>As</span> <span style='color:#0000EE'>Variant</span> <span style='color:#0000EE'>Dim</span> lngAddAttach <span style='color:#0000EE'>As</span> <span style='color:#0000EE'>Long</span> <span style='color:#0000EE'>Dim</span> wdApp <span style='color:#0000EE'>As</span> <span style='color:#0000EE'>Object</span> <span style='color:#0000EE'>Dim</span> wdDoc <span style='color:#0000EE'>As</span> <span style='color:#0000EE'>Object</span> <span style='color:#0000EE'>Dim</span> wdRange <span style='color:#0000EE'>As</span> <span style='color:#0000EE'>Object</span> Application.ScreenUpdating = <span style='color:#0000EE'>False</span> lngLastCell = Sheets(<span style='color:#FF0000'>&quot;Serienmail&quot;</span>).Cells(Rows.Count, <span style='color:#DDAA00'>1</span>).End(xlUp).Row <span style='color:#0000EE'>Set</span> olApp = CreateObject(<span style='color:#FF0000'>&quot;Outlook.Application&quot;</span>) <span style='color:#0000EE'>For</span> lngMailCount = <span style='color:#DDAA00'>1</span> <span style='color:#0000EE'>To</span> lngLastCell varAttachCount = Split(Sheets(<span style='color:#FF0000'>&quot;Serienmail&quot;</span>).Cells(lngMailCount, <span style='color:#DDAA00'>7</span>), <span style='color:#FF0000'>&quot;;&quot;</span>) <span style='color:#008000'>'Anlage </span> <span style='color:#0000EE'>With</span> olApp.CreateItemFromTemplate(<span style='color:#FF0000'>&quot;C:/Users/ritte/Videos/Hotel/Hotel allgemein/bH.oft&quot;</span>) .GetInspector.Display strOldBody = .htmlBody .To = Sheets(<span style='color:#FF0000'>&quot;Serienmail&quot;</span>).Cells(lngMailCount, <span style='color:#DDAA00'>1</span>) <span style='color:#008000'>'An </span> .Subject = Sheets(<span style='color:#FF0000'>&quot;Serienmail&quot;</span>).Cells(lngMailCount, <span style='color:#DDAA00'>2</span>) <span style='color:#008000'>'Betreff </span> .htmlBody = Sheets(<span style='color:#FF0000'>&quot;Serienmail&quot;</span>).Cells(lngMailCount, <span style='color:#DDAA00'>3</span>) & <span style='color:#FF0000'>&quot;&lt;br&gt;&lt;br&gt;&quot;</span> & _ Sheets(<span style='color:#FF0000'>&quot;Serienmail&quot;</span>).Cells(lngMailCount, <span style='color:#DDAA00'>4</span>) & _ <span style='color:#FF0000'>&quot;&lt;br&gt;&lt;br&gt;&quot;</span> & _ Sheets(<span style='color:#FF0000'>&quot;Serienmail&quot;</span>).Cells(lngMailCount, <span style='color:#DDAA00'>5</span>) <span style='color:#0000EE'>Set</span> wdApp = .GetInspector <span style='color:#0000EE'>Set</span> wdDoc = wdApp.WordEditor <span style='color:#0000EE'>Set</span> wdRange = wdDoc.Range wdRange.WholeStory <span style='color:#0000EE'>With</span> wdRange .Font.Name = <span style='color:#FF0000'>&quot;Calibri&quot;</span> .Font.Size = <span style='color:#DDAA00'>11</span> <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>With</span> <span style='color:#0000EE'>Set</span> wdRange = <span style='color:#0000EE'>Nothing</span> <span style='color:#0000EE'>Set</span> wdDoc = <span style='color:#0000EE'>Nothing</span> <span style='color:#0000EE'>Set</span> wdApp = <span style='color:#0000EE'>Nothing</span> .htmlBody = .htmlBody & <span style='color:#FF0000'>&quot;&lt;br&gt;&lt;br&gt;&quot;</span> & strOldBody <span style='color:#0000EE'>For</span> lngAddAttach = <span style='color:#DDAA00'>0</span> <span style='color:#0000EE'>To</span> <span style='color:#0000EE'>Ubound</span>(varAttachCount) .Attachments.Add varAttachCount(lngAddAttach) <span style='color:#0000EE'>Next</span> lngAddAttach <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>With</span> <span style='color:#0000EE'>Next</span> lngMailCount Application.ScreenUpdating = <span style='color:#0000EE'>True</span> <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>Sub</span><br><br><hr style='color: #FF8000; background-color:#FF8000; height:1px; border:none;' /><p style='font-size:9px; font-family: Verdana; text-align: left; '><a href='http://www.rholtz-office.de/vba-html' target='_blank'>VBA/HTML-CodeConverter</a>, AddIn f&uuml;r Office 2002-2016 - in VBA geschrieben von <a href='http://www.office-loesung.de/viewprofile19265.php'>Lukas Mosimann</a>. Projektbetreuung:<a href='http://www.rholtz-office.de'>RMH Software & Media</a></p><p style='font-size:11px; font-weight:bold; color:#0000EE; font-family:Verdana; text-align:left;'>Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0</p></pre>

mumpel
04.12.2017, 18:50
Man könnte das aber auch mit HTML-Anweisungen lösen (ich bevorzuge dabei das Span-Tag). Aber für einen Anfänger wäre das m.E. fürs Erste zuviel. ;)

Macanudo
04.12.2017, 19:05
jetzt schreibt er mir den Text in Calibri 11. Wunderbar! Dafür nimmt er jetzt in der Signatur das Bild nicht mehr. Er zeigt nur ein Kästchen an. "Das Bild kann nicht angezeigt werden"

Zu schön um alles wahr zu sein.

:bawling:

mumpel
04.12.2017, 19:12
Lass mal die Zeile ".htmlBody = .htmlBody & "&lt;br>&lt;br>" & strOldBody" weg, und häng "strOldBody" wieder an das erste ".htmlBody".

mumpel
04.12.2017, 19:34
http://www.ms-office-forum.net/forum/showpost.php?p=1707708&postcount=7

Da hast Du noch eine Möglichkeit per HTML. Da musst Du aber die "Windows Schriftgröße" in Pixel umrechnen.

Macanudo
04.12.2017, 20:24
ich habe die Zeile herausgenommen und "strOldBody" an das erste .htmlBody angehängt.

Es klappt. Vielen Dank für Deine Hilfe und Deine Geduld.

Damit ist das erledigt.

Viele Grüße

Uwe