fliegerx11
Goto Top

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

Content-ID: 245884

Url: https://administrator.de/contentid/245884

Ausgedruckt am: 22.11.2024 um 09:11 Uhr

colinardo
colinardo 08.08.2014, aktualisiert am 28.08.2014 um 22:11:58 Uhr
Goto Top
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.
back-to-topOutlook-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
Grüße Uwe
fliegerx11
fliegerx11 08.08.2014 um 21:22:51 Uhr
Goto Top
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?

Gruß
Dirk
colinardo
Lösung colinardo 08.08.2014, aktualisiert am 09.08.2014 um 09:24:46 Uhr
Goto Top
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 !
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 face-wink
colinardo
colinardo 09.08.2014 aktualisiert um 11:20:08 Uhr
Goto Top
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 !

Was würde das denn ungefähr kosten?
vermutlich mehr als das es sich noch für dich lohnen würde. Weiche auf ein hosted Exchange Konto aus, dann hast du alles an einem Ort und nutzt Outlook wofür es geschaffen wurde, zur Zusammenarbeit mit einem Exchange. Dann hast du auf allen Endgeräten immer den selben Datenbestand, und musst nicht mit unzuverlässiger Synchronisierung arbeiten.

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
yemmiburn
yemmiburn 28.08.2014 um 19:38:36 Uhr
Goto Top
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
colinardo
colinardo 28.08.2014 aktualisiert um 21:31:08 Uhr
Goto Top
Moin yemmiburn, Willkommen auf Administrator.de!
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.
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
yemmiburn
yemmiburn 28.08.2014 um 20:41:01 Uhr
Goto Top
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
colinardo
colinardo 28.08.2014, aktualisiert am 03.09.2014 um 08:11:25 Uhr
Goto Top
Hi Tom,
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
Grüße Uwe
yemmiburn
yemmiburn 28.08.2014 um 22:27:10 Uhr
Goto Top
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
colinardo
colinardo 28.08.2014 aktualisiert um 22:32:23 Uhr
Goto Top
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.

Gut's Nächtle face-smile
Uwe
yemmiburn
yemmiburn 29.08.2014 um 17:02:39 Uhr
Goto Top
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?
colinardo
colinardo 29.08.2014 aktualisiert um 17:07:41 Uhr
Goto Top
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 ?
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 !
yemmiburn
yemmiburn 29.08.2014 um 17:30:05 Uhr
Goto Top
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.
colinardo
colinardo 29.08.2014 aktualisiert um 17:36:27 Uhr
Goto Top
Dann bau dir dein eigenes Konto im Profil von Outlook ein, setzt das als Standard-Konto und versende die Mails darüber wenn eure Admins das nicht gebacken kriegen. Sorry, aber ohne mehr Info über das System kann ich hier nicht weiterhelfen.
yemmiburn
yemmiburn 29.08.2014 um 19:45:20 Uhr
Goto Top
Kein Problem, Du hast schon mehr als genug geholfen mit dem Scribt.
Habe nun die Weiterleitung über 2 Private Adressen gemacht, kann für mich so bleiben.

Nochmals Besten Dank.
yemmiburn
yemmiburn 03.09.2014 um 06:30:23 Uhr
Goto Top
@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
colinardo
colinardo 03.09.2014 um 08:12:24 Uhr
Goto Top
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

Grüße Uwe
fliegerx11
fliegerx11 06.09.2014 um 17:05:02 Uhr
Goto Top
Hallo nocheinmal zusammen,

besteht noch die Möglichkeit nur neue Termine als ICS Datei zu verschicken?
Ich habe hier etwas gefunden was zur Lösung beitragen könnte.
Ich selber aber nicht weiß ob dies mit eingebaut werden kann.

http://www.vboffice.net/sample.html?lang=de&mnu=2&smp=35&cm ...

Wäre echt cool wenn das noch funktionieren würde.

Gruß
Dirk
colinardo
colinardo 06.09.2014 aktualisiert um 17:15:59 Uhr
Goto Top
Zitat von @fliegerx11:

besteht noch die Möglichkeit nur neue Termine als ICS Datei zu verschicken?
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 ...
fliegerx11
fliegerx11 06.09.2014 um 17:22:19 Uhr
Goto Top
Hallo Uwe,

ein hosted Exchange geht leider nicht. Glaube ich zumindestens.
Ich arbeite bei einer Behörde und ich kann in meinem Outlook keine eigenen Einstellungen machen.
Das einzige was ich im April noch konnte war meinen Kalender veröffentlichen. Das war die einzigste Lücke die Termine auf meinem privaten Iphone darzustellen. Da ich hauptsächlich dienstliche Termine habe muss ich den Dienstkalender nutzen. Meine paar privaten Termine trage ich dort auch ein.
Wie gesagt bis April diesen Jahres war alles super. Aber Microsoft hat es ja abgestellt.
Jetzt dachte ich halt an diese Lösung.
Ärgerlich ist allerdings das Termine jetzt immer doppelt und dreifach auf meinem privaten Google Mail Konto erscheinen.

;(((((((((
Gruß Dirk
colinardo
colinardo 06.09.2014 aktualisiert um 17:38:41 Uhr
Goto Top
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 face-wink. Sei froh das du nicht noch mit einer Schreibmaschine abgefertigt wirst face-smile

Grüße Uwe
colinardo
colinardo 08.09.2014, aktualisiert am 08.04.2018 um 11:07:50 Uhr
Goto Top
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.
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
Support gibts nur gegen Bares face-wink

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
fliegerx11
fliegerx11 09.09.2014 um 19:26:35 Uhr
Goto Top
Hallo Uwe,

ich bin echt sehr beeindruckt von deinem Agement.
Ich habe meine Emailadresse eingetragen und das Scipt ausgeführt.
Es schickt mir auch die ICS Datei aber jetzt kommts.
Diese Fehlermeldung mit der Kämpfe ich gerade noch.

Die vCalender-Datei kann nicht importiert werden.
Dieser Fehler kann durch den Versuch auftreten, eine Mondkalender-Terminserie im iCalendar-Format zu speichern.
Um diesen Fehler zu vermeiden, stellen Sie die Terminoption auf "Gregorianisch" anstelle von "Mondkalender".
Weitere Informationen zu dieser Fehlermeldung erhalten Sie online.

Jetzt brauche ich wohl doch Support ;(
fliegerx11
fliegerx11 09.09.2014 um 19:35:38 Uhr
Goto Top
Hier hatten auch schon einige dieses Problemes des importes.

http://www.office-loesung.de/ftopic102884_0_0_asc.php
NiteCrow
NiteCrow 05.02.2015 um 18:17:39 Uhr
Goto Top
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?!

Danke schon einmal.
Grüße
colinardo
colinardo 05.02.2015 aktualisiert um 21:25:20 Uhr
Goto Top
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,
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"
und mit AND verknüpft werden. Diese bedeutet "nehme alle Termine die keinerlei private-Flag haben".

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") 
Grüße Uwe
NiteCrow
NiteCrow 06.02.2015 um 16:10:35 Uhr
Goto Top
Moin,

dachte man antwortet hier immer auf eine bestimmte Antwort. Gemeint war das ganz obrige Skript, sprich die einfachste Variante. 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!

Gruß Marcus
colinardo
colinardo 06.02.2015 aktualisiert um 17:55:15 Uhr
Goto Top
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 ...

Grüße Uwe
Graudon
Graudon 16.01.2016 um 13:19:42 Uhr
Goto Top
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
colinardo
colinardo 16.01.2016 aktualisiert um 17:37:55 Uhr
Goto Top
Zitat von @Graudon:
Hi,
Hallo Graudon, Willkommen auf Administrator.de!
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!
BaluAux
BaluAux 10.01.2017 um 11:17:32 Uhr
Goto Top
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!
cbk882
cbk882 05.04.2018 um 12:34:56 Uhr
Goto Top
Hallo Uwe,

vielen Dank. Ich muss Office 365-Kalender als ics abonnierbar machen, leider geht das aber mit der Linkfreigabe nur für maximal ein Jahr in die Zukunft. Mit deinem Skript hab ich es mir so gebaut, dass es gewünscht funktioniert.

Lieben Gruß
Christoph
colinardo
colinardo 05.04.2018 aktualisiert um 20:55:52 Uhr
Goto Top
Servus Christoph.
Freut mich zu hören das das Skript dir hilfreich zur Seite steht!
Beste Grüße und herzlichen Dank für deine Spende face-smile.

Grüße Uwe
cbk882
cbk882 08.04.2018 um 10:44:26 Uhr
Goto Top
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 face-smile
Christoph
colinardo
colinardo 08.04.2018 aktualisiert um 11:15:56 Uhr
Goto Top
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.

Falls dein Client es noch immer nicht schluckt, ist nicht meine Schuld face-smile.

Grüße Uwe
Sensibe
Sensibe 21.08.2018 um 12:10:16 Uhr
Goto Top
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
cbk882
cbk882 21.08.2018 um 21:19:23 Uhr
Goto Top
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.

.StartDate = 24.08.2018
.EndDate = 31.08.2018 + 6
colinardo
colinardo 21.08.2018 aktualisiert um 22:05:52 Uhr
Goto Top
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.

> .StartDate = 24.08.2018
> .EndDate = 31.08.2018 + 6
> 
Das geht so nicht, VBA würde die Punkte als Dezimaltrenner interpretieren

.StartDate = CDate("24.08.2018")  
.EndDate = DateAdd("d",6, CDate("31.08.2018"))  
Grüße Uwe
Sensibe
Sensibe 31.08.2018 um 14:18:59 Uhr
Goto Top
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:

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.
colinardo
colinardo 31.08.2018 aktualisiert um 15:13:24 Uhr
Goto Top
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 face-sad!
.StartDate = Date
.EndDate = Date + 6
Es ist schnuppe ob du bei EndDate eine einfache Addition mit den Tagen machst (denn das ist der Standard wenn man ein Datum mit einem Integer addiert), oder du die Addition mit DateAdd machst
.EndDate = DateAdd("d", 6, Date)   
Bitte mal etwas lesen: https://www.tutorialspoint.com/vba/vba_date_function.htm

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.
Sensibe
Sensibe 04.09.2018 um 16:04:40 Uhr
Goto Top
Hallo,

danke für die hilfreiche Antwort. Es funktioniert mittlerweile genau wie ich es haben wollte. Das hatte ich überlesen, aber beim nächsten Mal achte ich genauer drauf.

Viele Grüße
Sensibe
Basti82
Basti82 15.03.2021 um 12:59:15 Uhr
Goto Top
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
NiteCrow
NiteCrow 15.03.2021 um 15:00:15 Uhr
Goto Top
Mach dafür besser einen neuen Thread auf statt so eine alte Leiche wiederzubeleben ;)