Es ist Urlaubszeit. Sie haben einige freie Tage vor sich, und wollen deshalb im Kalender von Outlook die von Ihnen angesetzten oder akzeptierten Besprechungen absagen.
Das dauert, selbst wenn Sie flink an der Tastatur sind, weil Sie für jeden Termin ein paar mal klicken und die Absagenachricht eintragen müssen. Die Abhilfe schafft ein VBA-Skript, das diese lästige Aufgabe übernimmt.
Da für einen Urlaub pro Woche ganz gern mal ein dutzend Termine und mehr anfallen, wird mir dieses Skript in Zukunft noch viel Zeit und Mühen und Fehler sparen.
Dieser Artikel ist auch auf Englisch verfügbar: Vacation Time ‒ Quickly Delete Multiple Appointments in Outlook
Schritte, Outlook-Termine abzusagen
Die folgenden Schritte führen Sie händisch für jeden Termin durch:
- Sie markieren im Kalender alle Termine, die Sie absagen möchten, egal ob Sie derjenige sind, der eingeladen hat, oder ob Sie ein Teilnehmer daran sind.
- Dann löschen Sie mit der Entfernen-Taste, woraufhin ein Fenstergewitter ausbricht.
- Für alle Termine fragt Outlook, ob Sie nur diesen Termin oder die ganze Serie absagen wollen.
- Für alle eigenen Termine öffnet Outlook daraufhin den Kalendereintrag. Hier tragen Sie die Nachricht zur Absage ein und drücken dann auf „Senden“. Für jeden Termin mindestens drei Klicks und vier Tastenanschläge. Wenn Sie gut sind.
- Für alle angenommenen Termine fragt Outlook, ob Sie mit Nachricht absagen wollen. Wenn Sie nett zu Ihren Kollegen sind, tun Sie dies, und befüllen das neue Nachrichtenfenster. Für jeden Termin mindestens vier Klicks und vier Tastenanschläge. Wenn Sie gut sind.
Einfacher per Automatisierung
Meist wollen Sie allen dieselbe Nachricht schicken und nur den jeweiligen Termin absagen, nicht jedoch die Terminserie.
Das heißt Sie entscheiden gar nicht für jeden Termin neu, und formulieren auch nicht neu, müssen aber trotzdem immer neu Klicken und kopieren & einfügen.
Dafür hat uns die Informatik Skriptsprachen gegeben. Und im konkreten Fall heißt mein Visual Basic-Skript BulkDeleteAppointments.bas. Das übernimmt diese Aufgaben für Sie.
- Sie wählen in Outlook entweder einen Datumsbereich in der Kalenderansicht aus oder mehrere Termine.
- Sie haben im fraglichen Zeitraum lauter interne Termine, die alle dieselbe Nachricht bekommen sollen? Dann wählen Sie einen Datumsbereich aus.
- Sie möchten mehrere Termine mit derselben Absage versehen, aber andere stehen lassen? Dann wählen Sie mit der Strg- oder Umschalten-Taste mehrere Termine aus.
- Mit Alt-F8 öffnen Sie das Makro-Fenster und wählen das Makro BulkDeleteAppointments. Dieses fragt Sie nach einer einzeiligen Nachricht, die verschickt werden soll, bevor es dann die Absagen erstellt und die Termine löscht. Fertig.
Vorsicht und Umsicht ist geboten, denn das Skript fragt nicht nochmal nach.
Wenn Sie dem Skript oder mir noch nicht ganz trauen, dann versetzen Sie Outlook einfach vorher in den Offline-Modus und führen BulkDeleteAppointments dann aus. Manchmal bringt das Skript einen Fehler, der auf noch unberücksichtigte Eigenschaften mancher Termine zurückgeht. In diesem Fall bitte auf die verbleibenden Termine nochmal ausführen.
Einrichten
Damit Sie das Skript nutzen können, müssen Sie es in Ihr Outlook integrieren. Dazu importieren Sie es zunächst in den Makro-Editor und signieren es dann digital, damit Outlook sich sicher genug fühlt.
- Gehen Sie zu BulkDeleteAppointments.bas und laden dort die Datei in der Raw-Ansicht herunter.
- Öffnen Sie in Ihrem Outlook den Makro-Editor mit Alt-F11.
- Wählen Sie im Menü Datei den Eintrag „Datei importieren“.
- Wählen Sie das heruntergeladene Skript BulkDeleteAppointments.bas.
- Erstellen Sie eine Signatur, in dem Sie C:\Program Files\Microsoft Office\root\Office16\selfcert.EXE aufrufen. Statt Office16 kann das Verzeichnis bei Ihnen auch anders heißen. Geben Sie dem Zertifikat einen Namen und bestätigen Sie.
- Signieren Sie im Makroeditor, indem Sie im Menü Tools/Werkzeuge den Eintrag Digitale Signatur klicken und dort Ihr neu erstelltes Zertifikat suchen.
Fertig.
Das Skript können Sie auch auf Github einsehen und selbst anpassen.
Wieso biete ich das nicht als fertiges Plugin für Outlook an? Weil ich dazu deutlich mehr Test- und Verifikationsaufwand treiben müsste, und permanent Signaturen und Integration mit allen möglichen Outlook-Versionen pflegen müsste. Einfacher ist es so.
Fehler und deren Behebung
Einige übliche Fehlermeldungen:
- Fehlermeldung „Statement too complex“/ „Anweisung zu komplex“: Sie haben nicht die Quellcode-Datei heruntergeladen, sondern die ganze Webseite gespeichert. Gehe exakt so vor wie im Abschnitt „Einrichten“ beschrieben.
- Fehlermeldung „Die Makros in diesem Projekt sind deaktiviert. Informationen zum Aktivieren der Makros finden Sie in der Online Hilfe oder der Dokumentation der Host-Anwendung.“: Genau dies. Speichern kann schon helfen, und nochmal genau die Anleitung oben befolgen.
Wenn Sie mit einer anderen Fehlermeldung konfrontiert sind, lesen und befolgen Sie nochmal genau die Anleitung zum Einrichten von oben. Wenn’s dann immer noch nicht geht, befragen Sie eine Suchmaschine Ihrer Wahl mit der genauen Fehlermeldung.
Und was automatisieren Sie?
Was automatisieren Sie sonst noch in Outlook?
Wenn Ihnen das Skript hilft, oder Sie weitere konkrete Ideen haben, dann kommentieren Sie und tragen Sie sich unten für den Newsletter ein. Auf diese Weise verpassen Sie nicht, wenn es was neues dazu gibt.
Photo: Joachim Schlosser, License Creative Commons Attribution Share-Alike
Ganz lieben Dank für das tolle Macro!
Hat mir sehr geholfen
Jochen
Kann man das script auch per Mail aktivieren?
Ich sende von meiner privaten Mail einen Zahlencode an meine Firmenadresse der das VBA für heute aktiviert. Hintergrund: Termine absagen bei ungeplanter Abwesenheit wie Krankheit.
Das Skript läuft ja auf der lokalen Outlook-Instanz auf dem Desktop-Rechner, und zumindest ich lasse den Computer nicht an, wenn ich das Büro verlasse. Da hülfe also auch eine Fernsteuerung nichts, und ich wäre eher vorsichtig, VBA basierend auf E-Mail-Triggern laufen zu lassen. Spätestens dann kommt nämlich noch der Wunsch, die Nachricht auch als Text mit der E-Mail mitzuschicken, und schon muss man gucken, wie man das sicher kriegt. Ich rate von diesem Anwendungsfall eher ab.
Ich kriege beim Aufruf des Makros die Meldung:
„Die Makros in diesem Projekt sind deaktiviert. Informationen zum Aktivieren der Makros finden Sie in der Online Hilfe oder der Dokumentation der Host-Anwendung.“
Wie kann ich das lösen? Nächste Woche steht Urlaub an :)
Das hängt von der eigenen Installation ab. Bitte mit genau der Fehlermeldung in der Online-Hilfe suchen.
Bin zu blind, speichern des Makros hat es gebracht.
Alle Termine für nächste Woche waren schwuppdiwupp abgesagt.
Schön!
Ich habe mit VBA bisher nur ein wenig gearbeitet. Ich scheitere bereits daran, dass Script runter zu laden… Ich finde keinen Download Button o. ä.
Ich habe mir extra GitHub installiert, half mir auch nicht.
Den Raw Content in eine Textdatei zu kopieren und diese umzubenennen in „BulkDeleteAppointments.bas“ mit entsprechender Dateiendung hat auch nicht geklappt…
Kann man mir helfen? :)
Das mag ein leider Zeichen des Himmels sein, dass es diesmal nicht sein soll. Am besten nochmal ganz langsam und von vorne die Punkte durchgehen.
Hey Morris,
ich habe auch ein Weilchen gesucht – obwohl ich das Tool schon ein Weile nutze und es wiiiiirklich genial finde, Danke an dieser Stelle nochmal an Joachim.
Den Download habe ich gefunden unter: https://github.com/drjs/OutlookHelpers und dann bei „Code“ auf Download ZIP. Danach kannst du nach der Anleitung fortfahren. Bei mir braucht es hin und wieder eine Freigabe der Makros. Ansonsten funktioniert es tadellos!
Herzliche Grüße
Volker
Hallo,
ich würde das Makro geren wieder auf meien neuen Arbeitsrechner aktivieren (Office 365 64 bit), aber es kommt beim Import die Meldung „Anweisung zu komplex“.
Gibt es schon einen Workaround?
Danke und Gruß
Bitte zunächst auf den Link klicken, dann dort die Datei herunterladen.
Hallo,
nach kurzer google Suche bin ich auf dieses großartige Makro gestoßne! Leider ist bei mir das gleiche Problem. Ich habe die .bas heruntergeladen und versuche diese im Makroeditor als Datei zu importieren. Es erscheint die Meldung „Statement too complex“.
Übersehe ich etwas?
Danke für einen Hinweis,
Tom
Den Fehler habe ich bei mir noch nicht gesehen, von daher kann ich nur Vermutungen anstellen. Eventuell packt er nur eine maximale Anzahl an Terminen (die im Code schon auf 100 begrenzt sind), oder die Nachricht ist zu lang. Bei welcher Zeile meckert er denn?
Hi, irgendwie wird meine vorherige Antwort hier nicht angezeigt. „Statement too complex“ kommt beim import der .bas. Danach wird kein Makro importiert. Das heißt, „er meckert“ bei keiner Zeile, da das Makro gar nicht ausgeführt werden kann und auch keine Termine ausgewählt wurden.
VG
Ah. Du hast nicht die Quellcode-Datei heruntergeladen, sondern die ganze Webseite gespeichert. Gehe exakt so vor wie im Abschnitt „Einrichten“ beschrieben.
„BulkDeleteAppointments.bas“ habe ich heruntergeladen und gespeichert. So wie unter einrichten beschrieben.
VG
Top Script! Vielen Dank, Joachim!
Ich habe die selfcert.exe erst nicht gefunden, aber die Seite hier hat geholfen:
https://www.howto-outlook.com/howto/selfcert.htm
Sehr gut, danke für den Link!
Daran kann es durchaus liegen.
Habe Office professional plus 2016 :-)
Aus dem Text konnte ich nicht entnehmen, dass es nur für alte Versionen funktioniert.
Bei mir läuft die neueste Office365-Version, und auf Office 2016 hatte ich es verwendet. Vielleicht irgendwelche Einstellungen der Organisation, die Makros verhindern?
Hallo in die Runde,
nach so einem Makro habe ich grade gesucht, als es darum ging, Termine für die Ferien abzusagen.
Allerdings wirft er bei mir nach dem Ausführen mit ALT & F8 folgenden Fehler raus:
„Fehler beim kompilieren, Syntaxfehler“
Markiert durch den Debugger ist dann folgende Zeile „Sub DeleteItemWithDefaultMessage(oItem, cancelMsg)“
Vl kann mir ja Jemand helfen :-)
Welche Version von Outlook/Office (Datei->Office Account->About Outlook)? Hier läuft die Version 2008.
Das hilft mir sooooo toll – herzlichen DANK!
Sehen Sie vielleicht auch den umgekehrten Weg? Ich möchte gern allen markierten Terminen/Einladungen ZUsagen.
Das wäre so toll.
Wenn Sie sich an VBA herantrauen, lässt sich das bestimmt machen – es ist ja dieselbe Struktur.
Hilft immer noch :-) Danke!
Guten Tag
Besten Dank für das Skript und die sehr gute Anleitung!
Frage: Ist es möglich, die Termine auch ohne Antwortmail abzusagen? Also so wie auch via GUI die Option „Keine Antwort senden“.
LG
Dimitree
Gerne! Ja, das geht freilich auch ohne Antwortmail, habe ich aber nicht implementiert. Da müssten Sie an den VBS-Code ran.
Vor so langer Zeit geschrieben, aber es hilft noch immer :-) Vielen Dank!!
Freut mich!
Guten Morgen Herr Dr. Schlosser,
vielen Dank für dieses Makro. Es hat mir sehr geholfen und enorm viel Zeit gespart.
Viele Grüße,
Rudolf Stieben
Freut mich!
Guten Tag Herr Dr. Schlosser,
ich hatte vor ein paar Tagen die gleiche Idee und siehe da es gibt diese Möglichkeit schon.
Als Add-In wäre es natürlich toll.
Ich probiere es auf jeden Fall mal zu (wenn unsere Unternehmenssicherheitshürden es zu lassen :)).
Herzlichen Dank für Ihre Arbeit.
Beste Grüße
Ricarda Schindler
Gerne, freut mich, wenn’s hilft.
Hallo Herr Schlosser,
sehr gutes Markos. Ich bin auf der Suche nach etwas ähnlichem, welches nicht absagt, sondern mit dem ich mehrere Termine zusagen kann, ohne jeden einzeln auszuwählen.
Gibt es so etwas?
Hmm, jedenfalls nicht von mir…
Hallo,
tolles Makro, hat mir sehr geholfen, vielen Dank!
Was bei mir nicht gleich funktioniert hat: Outlook.Session.CurrentUser enthält auch meine Abteilungsbezeichnung in Klammern, während oAppointItem.Organizer nur den Namen enthält. Ich habe den Vergleich auf „InStr(1, Outlook.Session.CurrentUser, oAppointItem.Organizer) = 1“ geändert. Das ist aber wohl sehr spezifisch.
Was generell nicht geht, ist das Löschen von Terminen, wo niemand eingeladen ist, die also nur für mich sind. Das habe ich so gelöst:
If InStr(1, Outlook.Session.CurrentUser, oAppointItem.Organizer) = 1 Then ‚ If this is my own meeting
If (oAppointItem.Recipients.Count) <= 1 Then ' Nobody invited
'MsgBox ("Own Appointment, nobody invited: " + oAppointItem.Subject)
oAppointItem.Delete
Else
'MsgBox ("Own Appointment: " + oAppointItem.Subject)
oAppointItem.MeetingStatus = olMeetingCanceled
oAppointItem.Body = cancelMsg
oAppointItem.Save
oAppointItem.Send
End If
Vielleicht willst Du das ja übernehmen.
Danke nochmal,
Klaus
Danke, Klaus, der Knaller! Das seh ich mir an.
Hi,
das Problem habe ich auch, auch wenn der Post schon paar Jahre alt ist ;)
Wo muss ich den Code einfügen, damit das geht?
Danke,
Daniel
Du kannst jetzt den aktualisierten kompletten Code aus GitHub nehmen.
Hi,
ich habe meinen aktuellen Stand (ist besser als mein Post oben) hier https://github.com/klausj1/OutlookHelpers/blob/master/BulkDeleteAppointments.bas veröffentlicht, und im Original-Repository einen Pull-Request erstellt.
@Daniel, kannst Du gerne verwenden, Feedback welcome!
Vielen herzlichen Dank für deine umfangreichen Verbesserungen, Klaus! Diese sind jetzt in den Hauptzweig übernommen für alle, inklusive erweiterter Credits.
Hallo Herr Schlosser!
Vielen herzlichen Dank für das Zurverfügungstellen dieses einfachen und effektiven Makros.
Konnte gerade haufenweise Arbeit sparen :-)
Nette Grüße,
Marian Kelc
Freut mich, danke!
Hallo
bei mir bricht das Makro ab in der
The core function for bulk delete bei
myMtg.Body = cancelMsg
office 2013
Hatte ich auch schon ein paar Male, konnte bislang jedoch noch nicht rausfinden, bei welcher Konstellation das auftritt, deswegen habe ich keine Fehlerbehandlung außenrum gebaut. Es macht auf jeden Fall keinen Unsinn, sondern bricht lediglich ab.