Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1884to1888
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Outlooktermin mit HTML-Body erzeugen

Outlooktermin mit HTML-Body erzeugen
19.06.2022 22:06:03
Kalle
Guten Abend zusammen,
wie man eine Email aus Excel mit Tabellen und Bildern exportiert, habe ich bereits verstanden in einigen Projekten implementiert. Nun würde ich gerne einen Outlook-Termin erzeugen, der im .body HTML-Tags erkennt. Meinen bisherigen Recherchen zufolge scheint das alles andere als einfach via VBA umsetzbar zu sein, wenngleich man Bilder und Formatierungen "händisch" in jeden Termin via Outlook-Frontend einfügen kann. Hier mein Code und die stark verschlankte Datei:

Sub Termin_Export()
Dim myDictAllEmail, myDictSendEmail As Object
Dim DictKey As Variant
Dim TempFilePath, xHTMLBody, emailList As String
Dim xRg, rng, myCell, rngAusbilder As Range
Dim lastRow, i, foundEmails As Long
Set myDictAllEmail = CreateObject("Scripting.Dictionary")
Set myDictSendEmail = CreateObject("Scripting.Dictionary")
Set rngAusbilder = Nothing
On Error Resume Next
'Email-Verteiler erzeugen
With ActiveSheet
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
If lastRow " _
& "

" _ & "Liebe Kolleginnen und Kollegen,
" _ & "
" _ & "[PLATZHALTER FÜR INFOTEXT TESTLEITUNG]" _ & "
" _ & "" _ & "
Freundliche Grüße
" .Start = Format((Date + 1), "dd.mm.yyyy") & " 09:00" .Duration = "60" .Subject = "Betreff" .body = HTMLBody .Location = "Ort" .Recipients.Add (emailList) .Attachments.Add TempFilePath & "Testplanung.jpg", olByValue .ReminderPlaySound = True .ReminderSet = True .Display End With End Sub


Sub createJpg( SheetName As String, xRgAddrss As String, nameFile As String)
Dim xRgPic As Range
Dim xShape As Shape
'    Call FreigabeAusschalten
ThisWorkbook.Activate
Worksheets(SheetName).Activate
Set xRgPic = ThisWorkbook.Worksheets(SheetName).Range(xRgAddrss)
xRgPic.CopyPicture
With ThisWorkbook.Worksheets(SheetName).ChartObjects.Add(xRgPic.Left, xRgPic.Top, xRgPic.Width, xRgPic.Height)
.Activate
For Each xShape In ActiveSheet.Shapes
xShape.Line.Visible = msoFalse
Next
.Chart.Paste
.Chart.export Environ$("temp") & "\" & nameFile & ".jpg", "JPG"
End With
Worksheets(SheetName).ChartObjects(Worksheets(SheetName).ChartObjects.Count).Delete
Set xRgPic = Nothing
'    Call FreigabeEinschalten
End Sub
Datein: https://www.herber.de/bbs/user/153654.xlsm
Es werden eine Grafik der Testplanung und ein passender Email-Verteiler erzeugt (warum immer 1 user unknow bleibt, keine Ahnung). Beides soll zukünftig nicht als Email sondern gleich als Testtermin vesendet werden können.
Hoffe, Ihr könnt mir erneut weiterhelfen.
LG Kalle

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Outlooktermin mit HTML-Body erzeugen
20.06.2022 09:49:25
MCO
Moin, Kalle!
Ich hab einfach mal meinen Aufruf kopiert.
Alles ist benannt, daher solltest du das leich umwandeln können.

Public Sub Excel_Termin_nach_Outlook()
Dim OutApp As Object, apptOutApp As Object
Dim antw, datum As Range, rng_Tag As Range
Set OutApp = CreateObject("Outlook.Application")
Set apptOutApp = OutApp.CreateItem(1) 'olAppointmentItem)
Set rng_Tag = Rows(ActiveCell.Row).Find("x", , xlValues, xlWhole)
Set datum = Cells(1, rng_Tag.Column)
If IsDate(datum) Then
antw = vbYes
If datum 
Viel Erfolg!
AW: Outlooktermin mit HTML-Body erzeugen
20.06.2022 11:32:34
Kalle
Moin MCO,
Danke für Deine Lösung. Im Grunde ähneln sich die Strukturen der Termin-Ausgabe, aber: ich kann in Deinem Code nicht erkennen, wie Du die Angaben hinter /im ".body" quasi HTML-fähig machst? Das ganze soll später mal so aussehen:
Userbild
... momentan (mit meiner Lösung) sieht es leider noch so aus:
Userbild
Vielleicht ist es jetzt etwas anschaulicher?
LG Kalle
Anzeige
AW: Outlooktermin mit HTML-Body erzeugen
20.06.2022 22:09:02
Alwin
Hallo Kalle,
du erzeugst ein Terminelement. Mir ist kein Weg via VBA bekannt, mit dem man .Body als .HTMLBody formatieren kann.
Was du ohne html machen kannst ist dies:

HTMLBody = "Liebe Kolleginnen und Kollegen" _
& vbCrLf & vbCrLf _
& "[PLATZHALTER FÜR INFOTEXT TESTLEITUNG]" _
& vbCrLf & vbCrLf _
& "Freundliche Grüße"
Da ich mich wenig mit bis kaum mit Outlook abgebe, ist diese Info auf wackligen Füßen. Vielleicht kann da jemand anders tiefgründiger helfen.
Gruß Uwe
AW: Outlooktermin mit HTML-Body erzeugen
22.06.2022 16:07:04
Kalle
Hallo Uwe,
bitte entschuldige die verzögerte Antwort und Danke für Deinen Hinweis. Das Prinzip ist gut, löst aber nicht mein Problem. Ich bin in einem englischsprachigen VBA-Forum auf eine Lösung gestoßen, die bei mir aber leider nicht funktioniert. Entweder habe ich nicht die notwendige Objekt-Bibliothek oder Excel-Version dafür.
Link: https://stackoverflow.com/questions/52300231/how-to-include-formatted-text-in-the-body-of-an-outlook-invite-from-excel
Die Idee scheint aber ganz pfiffig zu sein - wenn es denn reproduzierbar wäre. Vielleicht können die anderen Experten was dazu sagen.
Ich bin doch nicht der erste Mensch, der diese Funktion wünscht/braucht? Zumal sie via Excel-Frontend problemlos möglich ist.
Viele Grüße
Kalle
Anzeige
AW: Outlooktermin mit HTML-Body erzeugen
22.06.2022 16:59:22
Oberschlumpf
Hi Kalle,
jep, ich kann bestätigen, dass dein gefundener Link funzt - und zwar so was von! :-)
Ein paar Änderungen im Code sind aber erforderlich:
1. Füg im VBE den Verweis zur MS-Outlook-Bibliothek hinzu (oder änder den Codeaufbau von jetzt Early Binding auf Late Binding; ob das Ganze aber auch mit Late Binding funktioniert, weiß ich nicht, da ich es nicht getestet hab (ich wollt ja nur wissen, ob es grundsätzlich funktioniert))
2. Kopier den HTML-Bsp-Code aus dem Link und füg diesen in Zelle A1 ein (es werden dann automatisch die Zellen A1:A12 belegt)
3. Änder diesen Code...

m.HTMLBody = Range("A1").Value
...um in...

Dim i As Integer
For i = 1 To 12
m.HTMLBody = m.HTMLBody & Range("A" & i).Value 'sample HTML stored in a cell
Next
Die Dim-Zeile kannst du auch zu den anderen Dim-Zeilen verschieben.
Und nun starte es - bei mir wurde ein Outlook-Termin mit dem gewünschten Text in HTML eingetragen :-)
Hilfts?
Ciao
Thorsten
Anzeige
AW: Outlooktermin mit HTML-Body erzeugen
22.06.2022 22:02:32
Kalle
Guten Abend Thorsten,
sehr interessant! Du kanntest diesen Ansatz also schon? Deinen Vorschlag habe ich eben zu Hause auf 365 ausprobiert - leider ohne Erfolg:
Userbild
Es scheint, als ob ein PlugIn oder eine Bibliothek nicht ansprechbar ist. Der Fehler wird direkt bei

olapp As Outlook.Application
ausgelöst.
Wie Du siehst, habe ich lediglich die Quelle der html-Probezeilen etwas angepasst, was ja nichts an der Architektur der Sub ändert.
Morgen probiere ich die Datei samt Ansatz auf Arbeit unter 2016 aus ... mal sehen, was dann passiert.
LG Kalle
Anzeige
AW: Outlooktermin mit HTML-Body erzeugen
22.06.2022 22:20:09
Kalle
... ich nochmal: habe die Lösung eben gefunden und lag richtig, denn es war tatsächlich die Outlook Bibliothek nicht geladen.
Userbild
Nun läuft der Code und ich kann weiter am passenden Output basteln.
Trotzdem ist für mich nicht nachvollziehbar, warum MS bei Email-Export/Automatisierung txt, rtf und html quasi barrierefrei unter vba ermöglicht und bei Terminen diese Umwege erforderlich sind.
Frage: Werden diese Bibliotheken in der Datei hinterlegt oder muss jeder Nutzer diese auch erst freischalten - so wie ich eben?
Schönen Abend erstmal
VG Kalle
Anzeige
AW: Outlooktermin mit HTML-Body erzeugen
22.06.2022 23:00:36
Oberschlumpf
Hi Kalle,
a) nein, ich kannte diesen Ansatz nicht.
Hab das Problem "HTML mit VBA in Outlook-Termin" erst durch deine Anfrage kennengelernt - und auch dein Hinweis auf den englischen Link brachte mich eben zu dem Link, den ich vorher nicht kannte.
b) als ich den Code getestet hab, hatte ich denselben Fehler genauso in der von dir erwähnten Zeile.
Im Unterschied zu dir wusste ich aber sofort, dass eben zur Outlook-Bibliothek der Verweis gesetzt werden muss - dazu mein Hinweis wegen Early bzw Late Binding - google danach, dann wirst du den Unterschied kennenlernen.
c) ja, ich weiß, dass auf deinem Computer die OL-Bibliothek - nicht - geladen war....deswegen hatte ich dich ja genau darauf hingewiesen in meiner letzten Antwort.
d) das, was du als "...diese Umwege erforderlich sind." bezeichnest (wenn du mit Umweg den Verweis zur OL-Bibliothek meinst), hat das gar nix mit Mail oder Termin zu tun.
Wenn, wie im Code angewendet - Early Binding - zum Einsatz kommt, ist der Verweis zur Bibliothek erforderlich.
Wenn du aber Late Binding verwendest, ist der Verweis nicht erforderlich.
e) diese Bibliotheken sind auf jedem Computer, auf dem MS Office installiert ist, verfügbar....eben in der jeweil installierten Office-Version.
Und ja, es is ok, wenn z Bsp dein Computer ne andere Version als z Bsp n Kollege hat (Version sollte nicht älter als 2007 sein). Der hier für Termin verwendete Code ist Standardcode. Der Verweis ist nur (bei Early...) erforderlich, um zu anderen Office-Programmen, hier Outlook, eine Verbindung herzustellen.
Ciao
Thorsten
Anzeige
AW: Outlooktermin mit HTML-Body erzeugen
22.06.2022 23:40:40
Kalle
Guten Abend Thorsten,
Danke für Deine ausführlichen Erläuterungen. Ich habe Deine Warnung mit Late und Early Binding nicht auf Anhieb zuordnen können; aber der Fehler hat mich stutzig werden lassen und Google tat das dann Übrige. Rein von der Ursprungsfrage ausgehend bin ich dank Deiner Impulse nun am Ziel:
Userbild
Aber ... der Email-Verteiler spuckt mir bei der Übernahme der Terminempfänger einen zusätzlich "UNKNOWN" aus (vielleicht der string "emailList" selbst?), was ich nicht nachvollziehen kann. Dieser Fehler passiert bereits in der Demo-Datei, die im ersten Thread verlinkt ist (bin gerade zu faul, eine schlanke, datenschutzkonforme Version zu erstellen). Vielleicht ist das noch einen prüfenden Expertenblick von Dir Wert, mache aber auch morgen gerne dazu einen neuen Beitrag auf.
Viele Grüße und 1000 Dank!
Kalle
Anzeige
AW: Outlooktermin mit HTML-Body erzeugen
22.06.2022 23:46:30
Oberschlumpf
Hi Kalle,
über eine aktualisierte Datei von dir würd ich mich freuen - denn sonst müsste ja erst ich deine "alte" Datei mit allem so anpassen, damit ich dann eben auch bei dem Fehler mit "unknown"usw hängenbleibe - na ja..und dazu hab ich keine Lust...auch für mich is ja schon spät...
Wenn du weiter keine Lust hast, ein Datei-Update per Upload zu zeigen, wünsch ich dir viel Erfolg im neuen Beitrag ab morgen.
Ciao
Thorsten
AW: Outlooktermin mit HTML-Body erzeugen
22.06.2022 23:57:37
Kalle
Ok, überzeugt ... warum eigentlich nicht; gute DInge entstehen meist ohnehin nicht in der Komfortzone.
https://www.herber.de/bbs/user/153725.zip
Der aktuelle Stand (datentechnisch in der Light-Version).
Viele Grüße
Kalle
Anzeige
AW: Outlooktermin mit HTML-Body erzeugen
23.06.2022 01:35:17
Oberschlumpf
Hi Kalle,
danke, hab die Datei gestartet, ohne Änderungen von mir kam das hier raus.
Userbild
Ich kann Handlungsbedarf nicht erkennen, da ich keinen Eintrag "UNKNOWN" bei den Mailempfängern sehe.
Hat sich dein diesbzgl Problem mit Hilfe/Erstellung deiner Bsp-Update-Datei vielleicht erledigt? :-)
Ciao
Thorsten
AW: Outlooktermin mit HTML-Body erzeugen
23.06.2022 07:29:57
Kalle
Moin Thorsten,
krass, hast es gestern halb 2 noch geprüft oder ist der SQL-Timer von herber.de immer auf Winterzeit? Es kann gut sein, dass der "Unknown"-Fehler bei mir zu Hause auf 365 erscheint, weil ich hier nicht die ganzen Dienstadressen im Kontaktverzeichnis zu stehen habe und er quasi ein unbekanntes oder grundsätzlich fehlendes Register bemängelt. Die Adressen aus der Zuordnungsschleife werden aber alle korrekt eingetragen:
Userbild
Ich gucke mir das nachher im Büro an - kann gut sein, dass sich das dann wie von Dir vermutet von selbst erledigt.
Bis dahin noch eine andere Frage:
Den img src-Link (Modul 1) habe ich in die html-Loop (Reiter "Quellverweise") rein"improvisiert".

Sheets("Quellverweise").Cells(8, 12).Value = "[Platzhalter Pfad, weil Herber html hier nicht darstellt]""
Gibt es vlt. eine etwas galantere Lösung, den String aus der TempFilePath Variablen dorthin zu übergeben?
Als Demo einfach die Datei von gestern Abend nehmen.
Bis später
VG Kalle
Anzeige
AW: Outlooktermin mit HTML-Body erzeugen
23.06.2022 08:11:11
Oberschlumpf
Hi Kalle,
die Uhr von Herber.de ist ok.
Ich verstehe deine letzte Frage nicht.
Du musst eine Bilddatei erzeugen, diese als Datei speichern.
Das erreichst du ja, in dem du die Grafik in Tabelle als ein Diagramm einfügst und dieses dann zuerst als JPG speicherst und es dann aus Tabelle wieder löschst.
Wenn deine Frage jetzt bedeutet "ich will das Diagramm nicht in die bestehende Tabelle einfügen", dann ...
...füg der Datei doch zuerst ein neues, leeres Tabellenblatt hinzu
...starte jetzt dein JPG-Create-Makro
...füg das durch xRgPic.CopyPicture entstehende Bild in die leere Tabelle ein, um dies dann als JPG-Datei speichern zu können
Anstelle von Environ$("temp") könntest du auch ThisWorkBook.Path & "\" verwenden (speichert die JPG-Datei im selben Verzeichnis wo auch die Excel-Datei gespeichert ist.
Und wenn alles erledigt ist, dann löschst du sowohl das neue Tabellenblatt als auch die gerade erzeugte JPG-Datei (es sei denn, du brauchst die Grafikdateien (glaub ich aber nich, da diese ja im Temp-Ordner gespeichert werden))
Ciao
Thorsten
AW: Outlooktermin mit HTML-Body erzeugen
23.06.2022 10:18:48
Kalle
Hallo Thorsten,
melde Erfolg - auf Arbeit unter 2016 verschwindet der Unknown-Bug. Vielleicht doch so ein 365-Ding?
Für den ThisWorkBook.Path & "\" Tipp bin ich Dir sehr dankbar. Habe es jetzt so geregelt, dass die Bild-Datei im Termin grafisch eingebettet und sofort nach Terminerstellung gelöscht wird. Das ist deshalb wichtig, dass bei ggf. zeitgleicher Planung durch mehrere Mitarbeiter identische Plan-Charts nicht im Termin landen.

    'Plan-Chart erzeugen
If xRg Is Nothing Then Exit Sub
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Call createJpg(ActiveSheet.Name, xRg.Address, "Testplanung")
TempFilePath = Environ$("temp") & "\"
Sheets("Quellverweise").Cells(8, 12).Value = ""
'Terminvorlage erstellen
appt.Start = Format((Date + 1), "dd.mm.yyyy") & " 09:00"
appt.Duration = "60"
appt.Subject = "TESTUNG"
appt.Location = "Ort"
appt.Recipients.Add (emailList)
appt.attachments.Add TempFilePath & "Testplanung.jpg", olByValue
appt.ReminderPlaySound = True
appt.ReminderSet = True
appt.Display
m.BodyFormat = olFormatHTML
For i = 4 To 9
m.HTMLBody = m.HTMLBody & Sheets("Quellverweise").Range("L" & i).Value
Next
m.GetInspector().WordEditor.Range.FormattedText.Copy
appt.GetInspector().WordEditor.Range.FormattedText.Paste
m.Close False
m.Delete
Kill ThisWorkbook.Path & "\Testplanung.jpg"
Damit sind alle Fragen geklärt und das Tool um eine wichtige Funktion reicher. Immer wieder toll, was Excel alles kann.
Dankeschön und viele Grüße aus der sonnigen Hauptstadt
Kalle
AW: Outlooktermin mit HTML-Body erzeugen
23.06.2022 10:28:42
Oberschlumpf
äähhh?
Hi Kalle,
mich wundert aber schon, dass der Kill - Befehl nich zu nem Fehler führt!
- zuerst haste - weiterhin! - mit TempFilePath = Environ$("temp") & "\" dein Temp-Verz als Dateiziel festgelegt
- mit appt.attach...usw wird dann genau aus dem Temp-Verz die JPG-Datei als Anhang dem Termin hinzugefügt
- eine Dateispeicherung in ThisWorkbook.Path seh ich nicht
- und trotzdem folgt am Ende der Kill-Befehl im falschen? Verz
SAUBER programmiert is DAS aber nich :-)
Ciao
Thorsten
Grüße zurück AUS DER Stadt mit dem TOR ZUR WELT! :-))
AW: Outlooktermin mit HTML-Body erzeugen
23.06.2022 14:10:34
Kalle
Hi Thorsten,
ja, das war noch nicht ganz sauber; anbei die verbesserte Demo inkl. Fortschrittsbalken: https://www.herber.de/bbs/user/153735.xlsm
Beim Versuch, das erzeugte Bild im Termin via html dynamisch an der Fenstergröße zu skalieren, scheitere ich. Was übersehe ich nur?
Viele Grüße nach HH
Kalle
AW: Outlooktermin mit HTML-Body erzeugen
23.06.2022 15:45:14
Oberschlumpf
Hi Kalle,
da bin ich jetzt raus.
Du stellst eine weitere Frage nach der anderen.
Ja, ich weiß, alle Fragen beziehen sich auf die Datei, die du hier in diesem Beitrag vorgestellt hast.
Aber...vllt ist es dir nich aufgefallen....ich bin mittlerweile der Einzige, der immer + immer wieder antwortet.
Ein Forum is doch für alle da!
Also gilt diese Formel:
neue Frage = neuer Beitrag
Ciao
Thorsten
AW: Outlooktermin mit HTML-Body erzeugen
23.06.2022 16:27:23
Kalle
Hallo Thorsten,
Dein Hinweis ist angekommen; die Folgeproblematik hielt ich noch für hinreichend themenbezogen, aber ok. Ich widme die Frage an anderer Stelle wieder an alle, damit die Forenkultur nicht weiter leidet. Nochmal Danke für´s Helfen. Läuft ja im Prinzip jetzt SAUBER durch.
Viele Grüße
Kalle
AW: Outlooktermin mit HTML-Body erzeugen
23.06.2022 16:31:27
Oberschlumpf
Hi,
Läuft ja im Prinzip jetzt...
Siehste, und genau deswegen mag ich nich mehr - wünsch aber natürlich trotzdem weiter viel Erfolg!
Ciao
ach ja...
22.06.2022 17:01:08
Oberschlumpf
...ich nutze, genau wie du, Office 2016

10 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige