Outlook Kalender ics per VBA Script automatisch per Email verschicken
Hallo zusammen,
leider hat Microsoft das veröffentlichen seid April eingestellt.
Ich würde gerne meinen Outlook Kalender mit einem geplanten Task automatisch als *ics Datei verschicken.
Kann mir bitte einer beim VBA Script behilflich sein.
Wenn möglich sollen die schon einmal versendeten Kalendereinträge nicht doppelt verschickt werden.
Geht sowas?
Vielen Dank
Dirk
leider hat Microsoft das veröffentlichen seid April eingestellt.
Ich würde gerne meinen Outlook Kalender mit einem geplanten Task automatisch als *ics Datei verschicken.
Kann mir bitte einer beim VBA Script behilflich sein.
Wenn möglich sollen die schon einmal versendeten Kalendereinträge nicht doppelt verschickt werden.
Geht sowas?
Vielen Dank
Dirk
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 245884
Url: https://administrator.de/contentid/245884
Ausgedruckt am: 22.11.2024 um 09:11 Uhr
43 Kommentare
Neuester Kommentar
Hallo Dirk, Willkommen auf Administrator.de!
Kein Problem. Mit folgendem VBS-Script kannst du dieses Ziel erreichen. In diesem Beispiel gehe ich einfach mal davon aus, dass du jede Woche einmal die Termine verschickst und die ICS-Datei dann die Termine für diese Woche enthält. Start- und Enddatum lassen sich in Zeile 6 und 7 festlegen. In Zeile 9 trägst du noch deine E-Mail-Adresse ein, feddich.
Grüße Uwe
Kein Problem. Mit folgendem VBS-Script kannst du dieses Ziel erreichen. In diesem Beispiel gehe ich einfach mal davon aus, dass du jede Woche einmal die Termine verschickst und die ICS-Datei dann die Termine für diese Woche enthält. Start- und Enddatum lassen sich in Zeile 6 und 7 festlegen. In Zeile 9 trägst du noch deine E-Mail-Adresse ein, feddich.
Outlook-Kalender als ICS-Datei via Mail verschicken (VBS)
On Error Resume Next
Dim objCal, objOL, objMail
Set objOL = GetObject(, "Outlook.Application")
If Err.Number <> 0 then
Set objOL = CreateObject("Outlook.Application")
End if
Set objCal = objOL.GetNamespace("MAPI").GetDefaultFolder(9).GetCalendarExporter 'Standardkalender Exporter holen
With objCal
.CalendarDetail = 2 'FullDetails
.StartDate = Date
.EndDate = Date + 6
Set objMail = .ForwardAsICal(1) 'Als Ereignisliste darstellen
objMail.To = "mail@domain.de"
objMail.Subject = "Termine vom " & .StartDate & " bis " & .EndDate
objMail.Send
End With
Set objCal = Nothing
Set objMail = Nothing
Set objOL = Nothing
Zitat von @fliegerx11:
Hallo Uwe,
erst mal vielen Dank das Du mir so schnell geholfen hast.
Gerade fällt mir aber auf, das sobald ich dieses mehrfach starte jedes mal die Termine doppelt im Kalender vorkommen.
Kann man da auch noch was dran machen?
Ich hatte ja oben geschrieben das du es in Zeitabständen aufrufen musst. Im Moment exportiert es ja die kommenden 6 Tage (Aufrufdatum +6 Tage) du musst also den gewünschten Export-Zeitraum an das Aufrufintervall anpassen !Hallo Uwe,
erst mal vielen Dank das Du mir so schnell geholfen hast.
Gerade fällt mir aber auf, das sobald ich dieses mehrfach starte jedes mal die Termine doppelt im Kalender vorkommen.
Kann man da auch noch was dran machen?
In dem Beispiel müsste der Taskplaner also alle 7 Tage das Script aufrufen.
Möglich ist hier leider nur die Angabe von Zeiträumen und nicht expliziter Termine!
Ansonsten kann man es nur manuell mit eigener Herstellung einer ICS-Datei und einem GUID Abgleich der Termine machen, was einen nicht unerheblichen Aufwand bedeutet !! Machbar ist das, aber von mit nicht mehr kostenlos zu haben
Zitat von @fliegerx11:.
Aber wenn ich dich richtig verstanden habe muß ich ja jedes mal im Script händisch den Datumsbereich eintragen oder ?
falsch verstanden, wenn du das Zeitinterval des Scriptaufrufes an das Interval im Script anpasst nicht !Aber wenn ich dich richtig verstanden habe muß ich ja jedes mal im Script händisch den Datumsbereich eintragen oder ?
Was würde das denn ungefähr kosten?
Außerdem, wie willst du mit ICS-Dateien Terminlöschungen handhaben, wenn nur nicht schon verschickte Termine übertragen werden sollen ?? Da stimmt was an deinem Konzept nicht.
Viele Grüße Uwe
Hallo
Ich muss was ähnliches machen.
Ich muss täglich von einem Freigegebenen Kalender die Termine meinem Team per Mail mitteilen.
Sind keider zu faul selber im Kalender nachzuschauen.
Bis jetzt habe ich immer die termine per Hand abgetippt, bis ich heute auf die Möglichkeit gestossen bin, den Kalender per
Mail versenden zu können.
Is es ev. sogar möglich jeden Arbeitstag automatisch um 7.30 den aktuellen Tag per Mail an eine Gruppe zu vesenden?
Besten Dank
Ich muss was ähnliches machen.
Ich muss täglich von einem Freigegebenen Kalender die Termine meinem Team per Mail mitteilen.
Sind keider zu faul selber im Kalender nachzuschauen.
Bis jetzt habe ich immer die termine per Hand abgetippt, bis ich heute auf die Möglichkeit gestossen bin, den Kalender per
Mail versenden zu können.
Is es ev. sogar möglich jeden Arbeitstag automatisch um 7.30 den aktuellen Tag per Mail an eine Gruppe zu vesenden?
Besten Dank
Moin yemmiburn, Willkommen auf Administrator.de!
Wie die Referenz zum Kalender auszusehen hat, kommt darauf an wo genau der Kalender liegt (Öffentlicher Ordner / Shared Mailbox /etc.). Wenn du hier etwas konkreter wirst kann ich dir Morgen ein Beispiel liefern.
Das ganze Script dann als VBS in den Taskplaner gepackt und zur gewünschten Zeit ausführen lassen.
Grüße Uwe
Zitat von @yemmiburn:
Is es ev. sogar möglich jeden Arbeitstag automatisch um 7.30 den aktuellen Tag per Mail an eine Gruppe zu vesenden?
Sicher, Zeile 4 die entsprechende Referenz zum Kalender herstellen und in Zeile 7 das + 6 entfernen, E-Mail-Adresse der Gruppe in Zeile 9 einsetzen, feddich.Is es ev. sogar möglich jeden Arbeitstag automatisch um 7.30 den aktuellen Tag per Mail an eine Gruppe zu vesenden?
Wie die Referenz zum Kalender auszusehen hat, kommt darauf an wo genau der Kalender liegt (Öffentlicher Ordner / Shared Mailbox /etc.). Wenn du hier etwas konkreter wirst kann ich dir Morgen ein Beispiel liefern.
Das ganze Script dann als VBS in den Taskplaner gepackt und zur gewünschten Zeit ausführen lassen.
Grüße Uwe
Hey das geht aber schnell hier.
Hoffe ich bekomme das umgesetzt.
Der betreffende Kalender wird im Outlook als freigegebener Kalender angezeigt mit dem Namen "Technik Bürki".
Wo kann ich nachschauen wo der Kalender liegt, wegen der Referenz?
Als Empfänger kann ich entweder eine Gruppe (Infomail) machen, oder die 5-6 Adressen im VBS Code reinschreiben.
Mir wäre es lieber in den Code Zeile 9 zu schreiben. Muss ich da per Semikolon trennen oder jeweils eine neue Zeile machen?
Gruss Tom
Hoffe ich bekomme das umgesetzt.
Der betreffende Kalender wird im Outlook als freigegebener Kalender angezeigt mit dem Namen "Technik Bürki".
Wo kann ich nachschauen wo der Kalender liegt, wegen der Referenz?
Als Empfänger kann ich entweder eine Gruppe (Infomail) machen, oder die 5-6 Adressen im VBS Code reinschreiben.
Mir wäre es lieber in den Code Zeile 9 zu schreiben. Muss ich da per Semikolon trennen oder jeweils eine neue Zeile machen?
Gruss Tom
Hi Tom,
dann kannst du es mal hiermit versuchen:
(E-Mail-Adressen wie du richtig erkannt hast lassen sich mit Semikolon voneinander trennen)
Grüße Uwe
dann kannst du es mal hiermit versuchen:
(E-Mail-Adressen wie du richtig erkannt hast lassen sich mit Semikolon voneinander trennen)
On Error Resume Next
Dim objCal, objOL, objMail, objNS, objCalRec
Set objOL = GetObject(, "Outlook.Application")
If Err.Number <> 0 then
Set objOL = CreateObject("Outlook.Application")
End if
Set objNS = objOL.GetNamespace("MAPI")
Set objCalRec = objNS.CreateRecipient("Technik Bürki")
objCalRec.Resolve
If objCalRec.Resolved then
Set objCal = objNS.GetSharedDefaultFolder(objCalRec, 9).GetCalendarExporter
Else
msgbox "Kontakt des Freigegebenen Kalenders wurde nicht gefunden!", vbExclamation
wscript.quit
End if
With objCal
.CalendarDetail = 2 'FullDetails
.StartDate = Date
.EndDate = Date
Set objMail = .ForwardAsICal(1) 'Als Ereignisliste darstellen
objMail.To = "mail@domain.de;mail2@domain.de"
objMail.Subject = "Termine vom " & .StartDate
objMail.Send
msgbox "Mail wurde gesendet!", vbInformation
End With
Set objCal = Nothing
Set objMail = Nothing
Set objOL = Nothing
Set objNS = Nothing
Hallo Uwe
Supper, vielen Dank.
Habs per Remote auf dem Server getestet, funktioniert per Doppelklick auf die vbs Datei.
Kommen zwar noch 2 Abfragen ob der zugriff auf das Outlook gewollt ist oder nicht.
Dies ist weil ich ev. auf dem Remoteserver bin.
Werde es noch versuchen in den Aufgabenplaner meines Arbeitsrechners zu übernehmen,
aber schon so ist es eine sehr gute Erleichterung.
Die vbs Datei kann ja so auch mal mein Stellvertreter Doppelklicken.
Nun aber ab ins Bett muss morgen früh raus.
Tom
Supper, vielen Dank.
Habs per Remote auf dem Server getestet, funktioniert per Doppelklick auf die vbs Datei.
Kommen zwar noch 2 Abfragen ob der zugriff auf das Outlook gewollt ist oder nicht.
Dies ist weil ich ev. auf dem Remoteserver bin.
Werde es noch versuchen in den Aufgabenplaner meines Arbeitsrechners zu übernehmen,
aber schon so ist es eine sehr gute Erleichterung.
Die vbs Datei kann ja so auch mal mein Stellvertreter Doppelklicken.
Nun aber ab ins Bett muss morgen früh raus.
Tom
Zitat von @yemmiburn:
Habs per Remote auf dem Server getestet, funktioniert per Doppelklick auf die vbs Datei.
Kommen zwar noch 2 Abfragen ob der zugriff auf das Outlook gewollt ist oder nicht.
Die kannst du eliminieren (mind. Outlook 2007 benötigt) indem du Outlook mal als Administrator startest und dann im Sicherheitscenter(Trust-Center) von Outlook unter Programmgesteuerter Zugriff die Option "Bei verdächtigen Aktionen nie Warnungen anzeigen" aktivierst.Habs per Remote auf dem Server getestet, funktioniert per Doppelklick auf die vbs Datei.
Kommen zwar noch 2 Abfragen ob der zugriff auf das Outlook gewollt ist oder nicht.
Gut's Nächtle
Uwe
OK, habs auf dem Arbeitsrechner getestet, da mommt die Abfage nicht und geht ohne Probleme.
Die Probleme kommen dann aber von unserem Exchange Server.
Da wir ein gebastel in der Firma haben, und die Mails nicht vom Exchange Server hohlen, sondern von pop im Internet.
Versucht nun der Server die Mailadressen im Scribt intern zu versenden, was leider nicht geht.
Wir haben dann sogar noch eine extra Mail Adresse eingerichtet und dort Weiterlitungen auf die 8 Team Empfänger geregelt.
Aber auch das geht nicht, der will einfach nicht rausmailen.
Das was aber geht, ist wenn ich meine Private Mailadresse nehme und dort eine Regel einricht uns es wieder in die Firma sende.
Dabei gibts aber ein anderes Problem das mein Webmail keien 8 Weiterleitungs-adressen händeln kann. (mit 2 gehts noch)
Bin nun am überlegen ob ich einfach 4 Adressen eröffne (habe ja unlimited) und dann jeweisls auf je 2 Mails weiterleite.
Ist zwar ein gebastel aber würde funktionieren.
Gibt es ev. eine Möglichkeit z.B. pop vor die Mailadressen zu schreiben dass es ev. ohne die Umleitung zu mir Privat klappen würde?
Die Probleme kommen dann aber von unserem Exchange Server.
Da wir ein gebastel in der Firma haben, und die Mails nicht vom Exchange Server hohlen, sondern von pop im Internet.
Versucht nun der Server die Mailadressen im Scribt intern zu versenden, was leider nicht geht.
Wir haben dann sogar noch eine extra Mail Adresse eingerichtet und dort Weiterlitungen auf die 8 Team Empfänger geregelt.
Aber auch das geht nicht, der will einfach nicht rausmailen.
Das was aber geht, ist wenn ich meine Private Mailadresse nehme und dort eine Regel einricht uns es wieder in die Firma sende.
Dabei gibts aber ein anderes Problem das mein Webmail keien 8 Weiterleitungs-adressen händeln kann. (mit 2 gehts noch)
Bin nun am überlegen ob ich einfach 4 Adressen eröffne (habe ja unlimited) und dann jeweisls auf je 2 Mails weiterleite.
Ist zwar ein gebastel aber würde funktionieren.
Gibt es ev. eine Möglichkeit z.B. pop vor die Mailadressen zu schreiben dass es ev. ohne die Umleitung zu mir Privat klappen würde?
Zitat von @yemmiburn:
Da wir ein gebastel in der Firma haben, und die Mails nicht vom Exchange Server hohlen, sondern von pop im Internet.
Was soll das mit dem Versenden zu tun haben ? Sendet Ihr über Smarthost oder stellt der Exchange die Mails selber zu ?Da wir ein gebastel in der Firma haben, und die Mails nicht vom Exchange Server hohlen, sondern von pop im Internet.
Gibt es ev. eine Möglichkeit z.B. pop vor die Mailadressen zu schreiben dass es ev. ohne die Umleitung zu mir Privat klappen
würde?
Exchange vernünftig einrichten lautet die Devise !würde?
Wir wir genau versenden, kann ich Dir nicht sagen, weiss nur dass es nicht sauber eingerichtet ist.
Ich kann z.B. nicht das Globale Adressbuch benützen, muss ein eigense anlegen.
Auch das versenden per Remote zu Firmenadressen ist nicht möglich, diese Mails kommen nie an.
Habe schon oft Beispiele aufgezählt wie es andernorts geht, leider kriegt es auch eine externe Firme nicht hin
das sauber einzustellen. Somit muss ich mir mit dem Behelfen was ich habe.
Ich kann z.B. nicht das Globale Adressbuch benützen, muss ein eigense anlegen.
Auch das versenden per Remote zu Firmenadressen ist nicht möglich, diese Mails kommen nie an.
Habe schon oft Beispiele aufgezählt wie es andernorts geht, leider kriegt es auch eine externe Firme nicht hin
das sauber einzustellen. Somit muss ich mir mit dem Behelfen was ich habe.
@colinardo
Kannst Du mir bitte noch eine Meldung einbauen, dass das Mail gesendet wurde.
Denn ich versende es meisten per Doppelklick und nicht als Aufgabe.
Danke
Kannst Du mir bitte noch eine Meldung einbauen, dass das Mail gesendet wurde.
Denn ich versende es meisten per Doppelklick und nicht als Aufgabe.
Danke
Zitat von @yemmiburn:
@colinardo
Kannst Du mir bitte noch eine Meldung einbauen, dass das Mail gesendet wurde.
Denn ich versende es meisten per Doppelklick und nicht als Aufgabe.
s.o. Zeile 25@colinardo
Kannst Du mir bitte noch eine Meldung einbauen, dass das Mail gesendet wurde.
Denn ich versende es meisten per Doppelklick und nicht als Aufgabe.
Grüße Uwe
Wie bereits erwähnt ist dies nur durch schreiben einer benutzerdefinierten Routine zu implementieren die die ICS Dateien selber erzeugen und über alle Termine Buch führen muss die bereits verschickt wurden.
Denk mal über ein hosted Exchange Konto nach !!! Dann ist Synchronisierung bald ein Fremdwort für dich ...
Denk mal über ein hosted Exchange Konto nach !!! Dann ist Synchronisierung bald ein Fremdwort für dich ...
Dann sollte diese Behörde mal darüber nachdenken Ihren Mitarbeitern die Möglichkeit anzubieten, OWA oder Exchange Anywhere zu nutzen (mach doch mal den Vorschlag, das hat heutzutage fast jede Firma). Aber ich kenn die Tuppen dort, Behörden sind da meistens vollkommen Rückständig was moderne Technik anbelangt . Sei froh das du nicht noch mit einer Schreibmaschine abgefertigt wirst
Grüße Uwe
Grüße Uwe
So,
hatte diesen Sonntag mal etwas Zeit und habe dir folgenden Code gebastelt. Er exportiert nur neue oder seit dem letzten Export geänderten Termine als ICS und verschickt diese per Mail. Was dir klar sein sollte ist, das Terminlöschungen natürlich nicht mit ICS funktionieren !! Die Information ob und wann ein Termin bereits exportiert wurde, wird in einer benutzerdefinierten Eigenschaft des Termins gespeichert, für den User sind diese Infos aber unsichtbar. Anhand dieser Infos entscheidet der Code ob ein Termin per Mail verschickt wird oder nicht.
Den Zeitraum in Tagen bis zu dem Termine vom aktuellen Datum aus exportiert werden gibt man in Zeile 3 an, und die Empfänger-Mailadresse in Zeile 5.
Im jetzigen Zustand werden die Termine aus dem Outlook-Standard-Kalender exportiert.
Support gibts nur gegen Bares
Grüße Uwe
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
hatte diesen Sonntag mal etwas Zeit und habe dir folgenden Code gebastelt. Er exportiert nur neue oder seit dem letzten Export geänderten Termine als ICS und verschickt diese per Mail. Was dir klar sein sollte ist, das Terminlöschungen natürlich nicht mit ICS funktionieren !! Die Information ob und wann ein Termin bereits exportiert wurde, wird in einer benutzerdefinierten Eigenschaft des Termins gespeichert, für den User sind diese Infos aber unsichtbar. Anhand dieser Infos entscheidet der Code ob ein Termin per Mail verschickt wird oder nicht.
Den Zeitraum in Tagen bis zu dem Termine vom aktuellen Datum aus exportiert werden gibt man in Zeile 3 an, und die Empfänger-Mailadresse in Zeile 5.
Im jetzigen Zustand werden die Termine aus dem Outlook-Standard-Kalender exportiert.
Dim dic, dateStart, dateEnd, app, folderCalendar, prop, objOL, intNumDays, objMail, strEmail, objShell, fso
'definiert den Zeitraum in Tagen von Heute an, aus welchem Termine exportiert werden
intNumDays = 90
'E-Mail-Adresse des Empfängers
strEmail = "user@domain.de"
'-------------------------------------------------
On Error Resume Next
Set dic = CreateObject("Scripting.Dictionary")
Set fso = CreateObject("Scripting.FilesystemObject")
Set objOL = GetObject(, "Outlook.Application")
If objOL Is Nothing Then
Set objOL = CreateObject("Outlook.Application")
End If
Set objShell = CreateObject("Wscript.Shell")
strTempDir = objShell.ExpandEnvironmentStrings("%temp%")
'Startdatum für den Terminexport
dateStart = Date
'Enddatum für den Terminexport
dateEnd = DateAdd("d", intNumDays, dateStart)
Set folderCalendar = objOL.GetNamespace("MAPI").GetDefaultFolder(9)
'Termine auf den angegebenen Zeitraum beschränken und Serientermine ausschließen (sind im iCal-Format nicht möglich)
For Each app In folderCalendar.items.Restrict("[Start] >= '" & FormatDateTime(dateStart,2) & " " & FormatDateTime(dateStart,4) & "' AND [Start] <= '" & FormatDateTime(dateEnd,2) & " " & FormatDateTime(dateEnd,4) & "' AND [IsRecurring] = False")
'benutzerdefinierte Eigenschaft suchen
Set prop = app.UserProperties.Find("googlecalexport")
If Not prop Is Nothing Then
'wenn sie gefunden wurde vergleiche das Datum der Eigenschaft mit dem Datum der letzten Modifikation
'wurde Termin seit dem letzen Export geändert, exportiere ihn erneut
If prop.Value < app.LastModificationTime Then
dic.Add app,""
app.UserProperties("googlecalexport").Value = DateAdd("s", 10, Now())
app.Save
End If
Else ' benutzerdefinierte Eigenschaft wurde nicht gefunden, Termin ist also neu
dic.Add app,""
Set prop = app.UserProperties.add("googlecalexport", 5)
prop.Value = DateAdd("s", 10, Now())
app.Save
End If
Next
If dic.Count > 0 Then 'wenn Termine für den Export vorhanden sind erstelle eine neue Mail mit dem ICS-Kalender als Attachment
ExportAppointmentCollectionAsICal dic, strTempDir & "\termine.ics"
Set objMail = objOL.CreateItem(0)
objMail.Subject = "Termine von " & dateStart & " bis " & dateEnd
objMail.To = strEmail
objMail.Body = "Anbei finden sie die Termine im iCal-Format"
objMail.Attachments.Add strTempDir & "\termine.ics"
'objMail.Display
Mail senden
objMail.Send
objShell.Popup "Es wurden " & dic.Count & " Termin(e) als Kalender verschickt",2,"Termin-Mailer",64
Else 'keine neuen Termine vorhanden
objShell.Popup "Keine aktuellen Termine zu verschicken",1,"Termin-Mailer",48
End If
Set fso = Nothing
Set objShell = Nothing
Set objOL = Nothing
Set dic = Nothing
Sub ExportAppointmentCollectionAsICal(colApp,strOutPath)
Dim strDateNow, app, strOut
'Regex um das Event aus dem File zu extrahieren
Set regex = CreateObject("vbscript.regexp")
regex.IgnoreCase = True
regex.MultiLine = True
regex.pattern = "^BEGIN:VEVENT[\s\S]*^END:VEVENT"
'Ausgabedatei löschen falls sie exisitiert
If fso.FileExists(strOutPath) Then fso.DeleteFile strOutPath,True
'ics header schreiben
strOut = "BEGIN:VCALENDAR" & vbNewLine & _
"PRODID:-//Microsoft Corporation//Outlook 14.0 MIMEDIR//EN" & vbNewLine & _
"VERSION:2.0" & vbNewLine & _
"METHOD:PUBLISH" & vbNewLine & _
"BEGIN:VTIMEZONE" & vbNewLine & _
"TZID:W. Europe Standard Time" & vbNewline & _
"BEGIN:STANDARD" & vbNewline & _
"DTSTART:16011028T030000" & vbNewline & _
"RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10" & vbNewline & _
"TZOFFSETFROM:+0200" & vbNewline & _
"TZOFFSETTO:+0100" & vbNewline & _
"END:STANDARD" & vbNewline & _
"BEGIN:DAYLIGHT" & vbNewline & _
"DTSTART:16010325T020000" & vbNewline & _
"RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3" & vbNewline & _
"TZOFFSETFROM:+0100" & vbNewline & _
"TZOFFSETTO:+0200" & vbNewline & _
"END:DAYLIGHT" & vbNewline & _
"END:VTIMEZONE" & vbNewLine
' exportiere jedes Event in ein temporäres ics und extrahiere dieses aus dem File
keys = colApp.Keys()
For i = 0 To colApp.Count -1
Dim objTempMail, strEventContents, matches, strEvent
Set objTempMail = keys(i).ForwardAsVcal()
strFileEvent = strTempDir & "\event.vcs"
If fso.FileExists(strFileEvent) Then fso.DeleteFile strFileEvent, True
objTempMail.Attachments.Item(1).SaveAsFile strFileEvent
strEventContents = fso.OpenTextFile(strFileEvent, 1).ReadAll()
Set matches = regex.Execute(strEventContents)
If Not matches Is Nothing Then
strEvent = matches(0)
End If
strOut = strOut & strEvent & vbNewLine
fso.DeleteFile strFileEvent, True
Set objTempMail = Nothing
Next
strOut = strOut & "END:VCALENDAR" & vbNewLine
With CreateObject("ADODB.Stream")
.Type = 2 : .Charset = "UTF-8" : .Open
.WriteText strOut
.SaveToFile strOutPath, 2
.Close
End With
Set regex = Nothing
End Sub
Grüße Uwe
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
Zitat von @NiteCrow:
Moin Uwe, vielen Dank für dein Skript. Funktioniert prima. Ich persönlich würde noch gerne private Termine beim
verschicken ausschließen. Am liebsten nur solche, die ich mir selber in den Kalender gemacht habe, sprich ohne weitere Teilnehmer. Geht sowas einfach umzusetzen?!
Hallo NiteCrow,Moin Uwe, vielen Dank für dein Skript. Funktioniert prima. Ich persönlich würde noch gerne private Termine beim
verschicken ausschließen. Am liebsten nur solche, die ich mir selber in den Kalender gemacht habe, sprich ohne weitere Teilnehmer. Geht sowas einfach umzusetzen?!
welches Script meinst du von den obigen ? Das ist soweit kein Problem.
Wenn als Privat markierte Termine ausgeschlossen werden sollen muss einfach zur Restrict-Anweisung noch eine Regel hinzugefügt werden die so lautet:
"[SENSITIVITY] = 0"
Für das letzte Script in diesem Post wäre dann die Zeile 24 folgendermaßen abzuändern:
For Each app In folderCalendar.items.Restrict("[Start] >= '" & FormatDateTime(dateStart,2) & " " & FormatDateTime(dateStart,4) & "' AND [Start] <= '" & FormatDateTime(dateEnd,2) & " " & FormatDateTime(dateEnd,4) & "' AND [IsRecurring] = False AND [SENSITIVITY] = 0")
Zitat von @NiteCrow:
Nur da wüsste ich jetzt leider nicht wie man das hinzufügen kann. Kannst du mir das ggf. umändern? Wäre dir
sehr dankbar!
Das geht mit dieser Variante leider nicht. Nur mit der letzten vom 08.09.2014 um 10:39 Uhr ...Nur da wüsste ich jetzt leider nicht wie man das hinzufügen kann. Kannst du mir das ggf. umändern? Wäre dir
sehr dankbar!
Grüße Uwe
Hi,
ich würde gerne die gefilterten Kalenderinformationen in eine DB exportieren, also z.B. das ics in ein weiter verabeitbare csv mit den wichtigsten Feldern wie Startzeit, Thema, Dauer, Änderung usw. umwandeln. Dazu müsste man aber erst die ics aus dem Postfach abholen, extrahieren, umwandeln und wieder ablegen ....
Grüsse
ich würde gerne die gefilterten Kalenderinformationen in eine DB exportieren, also z.B. das ics in ein weiter verabeitbare csv mit den wichtigsten Feldern wie Startzeit, Thema, Dauer, Änderung usw. umwandeln. Dazu müsste man aber erst die ics aus dem Postfach abholen, extrahieren, umwandeln und wieder ablegen ....
Grüsse
Hallo Graudon, Willkommen auf Administrator.de!
Das ist ja problemlos machbar, mit VBA kannst du direkt in Access/SQL/MSSQL/MySQL etc. Daten über ADO/DAO wegschreiben...
Eine Wandlung in ICS war ja nur für den Versand gedacht.
Für persönliche Anpassungen können wir gerne via PM einen Preis ausmachen...
Grüße Uwe
p.s. Das nächste mal bitte keine alten Threads reaktivieren, schon im Interesse des TO. Danke!
ich würde gerne die gefilterten Kalenderinformationen in eine DB exportieren, also z.B. das ics in ein weiter verabeitbare csv mit den wichtigsten Feldern wie Startzeit, Thema, Dauer, Änderung usw. umwandeln.
OK und wo ist jetzt die Frage ?Das ist ja problemlos machbar, mit VBA kannst du direkt in Access/SQL/MSSQL/MySQL etc. Daten über ADO/DAO wegschreiben...
Dazu müsste man aber erst die ics aus dem Postfach abholen, extrahieren, umwandeln und wieder ablegen ....
Nö, wieso ?? Man kann jeden einzelnen ausgefilterten Termin direkt in die DB schreiben, siehst du ja an der FOR EACH Schleife!Eine Wandlung in ICS war ja nur für den Versand gedacht.
Für persönliche Anpassungen können wir gerne via PM einen Preis ausmachen...
Grüße Uwe
p.s. Das nächste mal bitte keine alten Threads reaktivieren, schon im Interesse des TO. Danke!
Hallo Uwe,
entschuldige bitte die verspätete Antwort (ich hoffe ich bekomme dennoch eine Antwort auf meine Frage). Das Makro als solches scheint bei mir (& Outlook 2007) zu funktionieren, die Mail wird erstellt. Allerdings ist diese leer. Kein Anhang, keine ics oder ical. Habe ich etwas falsch gemacht? Die beiden Subs liegen in "ThisOutlook Session".
Danke im Voraus!
entschuldige bitte die verspätete Antwort (ich hoffe ich bekomme dennoch eine Antwort auf meine Frage). Das Makro als solches scheint bei mir (& Outlook 2007) zu funktionieren, die Mail wird erstellt. Allerdings ist diese leer. Kein Anhang, keine ics oder ical. Habe ich etwas falsch gemacht? Die beiden Subs liegen in "ThisOutlook Session".
Danke im Voraus!
Hey Uwe,
mag den Thread jetzt nicht hacken, magst Du mal bei meinem Problem noch einmal schauen und deinen Senf dazu geben?
Exchange 365 Kalender nach ics exportieren - länger als ein Jahr
Danke dir
Christoph
mag den Thread jetzt nicht hacken, magst Du mal bei meinem Problem noch einmal schauen und deinen Senf dazu geben?
Exchange 365 Kalender nach ics exportieren - länger als ein Jahr
Danke dir
Christoph
Zitat von @cbk882:
Hey Uwe,
mag den Thread jetzt nicht hacken, magst Du mal bei meinem Problem noch einmal schauen und deinen Senf dazu geben?
Exchange 365 Kalender nach ics exportieren - länger als ein Jahr
Der Inhalt ist korrekt (da QuotedPrintable), der Fehler war hier nur das das File nicht UTF-8 kodiert gespeichert wurde, ist oben im Ursprünglichen Beitrag korrigiert.Hey Uwe,
mag den Thread jetzt nicht hacken, magst Du mal bei meinem Problem noch einmal schauen und deinen Senf dazu geben?
Exchange 365 Kalender nach ics exportieren - länger als ein Jahr
Falls dein Client es noch immer nicht schluckt, ist nicht meine Schuld .
Grüße Uwe
Hallo,
ich habe folgendes Problem. Ich habe den ersten Quellcode aus diesem Topic genommen und drauflos probiert, leider ohne Erfolg. Wenn ich die ".StarDate =" und ".EndDate =" Felder leer lasse kriege ich die Informationen für den aktuellen Tag zugeschickt. Wenn ich die beiden Felder wie folgt ausfülle, dann bekomme ich im Betreff der Mail "Termine vom 00:00:00 bis 05.01.1900" und die Termine der Monate Dezember 1899 und Januar 1900.
Ich benutze MS Outlook 2010 und habe an dem Quellcode, außer den E-Mail und Daten Feldern, nichts geändert. Ich hoffe mir kann weitergeholfen werden.
Sub Test()
On Error Resume Next
Dim objCal, objOL, objMail
Set objOL = GetObject(, "Outlook.Application")
If Err.Number <> 0 Then
Set objOL = CreateObject("Outlook.Application")
End If
Set objCal = objOL.GetNamespace("MAPI").GetDefaultFolder(9).GetCalendarExporter 'Standardkalender Exporter holen
With objCal
.CalendarDetail = 2 'FullDetails
.StartDate = 8 / 24 / 2018
.EndDate = 8 / 31 / 2018 + 6
Set objMail = .ForwardAsICal(1) 'Als Ereignisliste darstellen
objMail.To = "mail@domain.de"
objMail.Subject = "Termine vom " & .StartDate & " bis " & .EndDate
objMail.Send
End With
Set objCal = Nothing
Set objMail = Nothing
Set objOL = Nothing
End Sub
Mit freundlichen Grüßen
Sensibe
ich habe folgendes Problem. Ich habe den ersten Quellcode aus diesem Topic genommen und drauflos probiert, leider ohne Erfolg. Wenn ich die ".StarDate =" und ".EndDate =" Felder leer lasse kriege ich die Informationen für den aktuellen Tag zugeschickt. Wenn ich die beiden Felder wie folgt ausfülle, dann bekomme ich im Betreff der Mail "Termine vom 00:00:00 bis 05.01.1900" und die Termine der Monate Dezember 1899 und Januar 1900.
Ich benutze MS Outlook 2010 und habe an dem Quellcode, außer den E-Mail und Daten Feldern, nichts geändert. Ich hoffe mir kann weitergeholfen werden.
Sub Test()
On Error Resume Next
Dim objCal, objOL, objMail
Set objOL = GetObject(, "Outlook.Application")
If Err.Number <> 0 Then
Set objOL = CreateObject("Outlook.Application")
End If
Set objCal = objOL.GetNamespace("MAPI").GetDefaultFolder(9).GetCalendarExporter 'Standardkalender Exporter holen
With objCal
.CalendarDetail = 2 'FullDetails
.StartDate = 8 / 24 / 2018
.EndDate = 8 / 31 / 2018 + 6
Set objMail = .ForwardAsICal(1) 'Als Ereignisliste darstellen
objMail.To = "mail@domain.de"
objMail.Subject = "Termine vom " & .StartDate & " bis " & .EndDate
objMail.Send
End With
Set objCal = Nothing
Set objMail = Nothing
Set objOL = Nothing
End Sub
Mit freundlichen Grüßen
Sensibe
Zitat von @cbk882:
Hi,
da scheint das Datumsformat nicht zu stimmen. Probier mal mit der deutschen Schreibweise, das ist bei mir im deutschen Outlook die Variante, die er bei "date" ausgibt.
Das geht so nicht, VBA würde die Punkte als Dezimaltrenner interpretierenHi,
da scheint das Datumsformat nicht zu stimmen. Probier mal mit der deutschen Schreibweise, das ist bei mir im deutschen Outlook die Variante, die er bei "date" ausgibt.
> .StartDate = 24.08.2018
> .EndDate = 31.08.2018 + 6
>
.StartDate = CDate("24.08.2018")
.EndDate = DateAdd("d",6, CDate("31.08.2018"))
Hi, ich musste die Daten etwas modifizieren. aber es klappt super. Gibt es vielleicht noch eine Möglichkeit, dass ich nicht jedes Mal das Datum anpassen muss sondern, dass er mir direkt ohne irgendwelche Angaben die kommenden 7 Tage schickt?
Das ist der aktuelle Code:
Vielen Dank im voraus.
Das ist der aktuelle Code:
Sub ErinnerungKalender()
On Error Resume Next
Dim objCal, objOL, objMail
Set objOL = GetObject(, "Outlook.Application")
If Err.Number <> 0 Then
Set objOL = CreateObject("Outlook.Application")
End If
Set objCal = objOL.GetNamespace("MAPI").GetDefaultFolder(9).GetCalendarExporter 'Standardkalender Exporter holen
With objCal
.CalendarDetail = 2 'FullDetails
.StartDate = CDate("24.08.2018")
.EndDate = DateAdd("d", 0, CDate("31.08.2018"))
Set objMail = .ForwardAsICal(1) 'Als Ereignisliste darstellen
objMail.To = "anil.suer@gmx.de"
objMail.Subject = "Termine vom " & .StartDate & " bis " & .EndDate
objMail.Send
End With
Set objCal = Nothing
Set objMail = Nothing
Set objOL = Nothing
End Sub
Vielen Dank im voraus.
Gibt es vielleicht noch eine Möglichkeit, dass ich nicht jedes Mal das Datum anpassen muss sondern, dass er mir direkt ohne irgendwelche Angaben die kommenden 7 Tage schickt?
Das steht doch alles schon oben im ersten Post wenn man sich mal alles durchlesen würde !.StartDate = Date
.EndDate = Date + 6
DateAdd
machst.EndDate = DateAdd("d", 6, Date)
p.s. Bitte auch mal die Diskussionsrichtlinien lesen:
Keine Takeovers. Versuche nicht, Beiträge anderer Autoren mit Ihren Fragen zu anderen Themen zu übernehmen. Eröffne lieber einen neuen eigenen Beitrag.
Hallo zusammen,
würde gerne eine andere Herangehensweise wählen:
Ich markiere in meinem Kalender einen oder mehrere Termine im Outlook-Kalender und möchte diese dann (im Idealfall per Tastenkombination oder Button) per Mail an zwei bestimmte Adresse (hartcodiert) schicken.
Hat jemand eine Idee?
LG Basti
würde gerne eine andere Herangehensweise wählen:
Ich markiere in meinem Kalender einen oder mehrere Termine im Outlook-Kalender und möchte diese dann (im Idealfall per Tastenkombination oder Button) per Mail an zwei bestimmte Adresse (hartcodiert) schicken.
Hat jemand eine Idee?
LG Basti