Über Skript auf Öffentlichen Kalender in Outlook zugreifen (Standard Kalender geht bereits)
Hallo zusammen,
Ich habe mir aus einem Thread hier ein Skript zusammengebastelt, das jeden Arbeitstag die Kalenderzusammenfassung des folgenden Arbeitstages an mein Team verschickt. --Vielen Dank, Uwe alias colinardo für den tollen Code in einem früheren Thread!
Mit meinem persönlichen Kalender klappt das auch hervorragend. Allerdings muss ich auch noch einen Kalender (Name: "Kalender") aus einem geteilten Ordner (Folder: "Öffentliche Ordner") verschicken. Und das bekomme ich partout nicht hin. Könnte mir hier jemand sagen, wie ich mein Skript umbauen muß, damit das auch geht?
Besten Dank!
Tim
Skript um meinen eigenen Kalender zu verschicken:
Ich habe mir aus einem Thread hier ein Skript zusammengebastelt, das jeden Arbeitstag die Kalenderzusammenfassung des folgenden Arbeitstages an mein Team verschickt. --Vielen Dank, Uwe alias colinardo für den tollen Code in einem früheren Thread!
Mit meinem persönlichen Kalender klappt das auch hervorragend. Allerdings muss ich auch noch einen Kalender (Name: "Kalender") aus einem geteilten Ordner (Folder: "Öffentliche Ordner") verschicken. Und das bekomme ich partout nicht hin. Könnte mir hier jemand sagen, wie ich mein Skript umbauen muß, damit das auch geht?
Besten Dank!
Tim
Skript um meinen eigenen Kalender zu verschicken:
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
If Weekday(Date) = 6 Then 'Freitags soll der Kalender vom Montag verschickt werden
With objCal
.CalendarDetail = 2 'FullDetails
.StartDate = Date + 3
.EndDate = Date + 3 'Wir wollen immer nur einen Tag versenden
Set objMail = .ForwardAsICal(1) 'Als Ereignisliste darstellen
objMail.To = "team@email.de"
objMail.Subject = "Termine am " & WeekdayName(Weekday(.StartDate)) & ", " & .StartDate
objMail.Send
End With
Else 'An allen anderen Wochentagen soll der Kalender des nächsten Tages verschickt werden
With objCal
.CalendarDetail = 2 'FullDetails
.StartDate = Date + 1
.EndDate = Date + 1 'Wir wollen immer nur einen Tag versenden
Set objMail = .ForwardAsICal(1) 'Als Ereignisliste darstellen
objMail.To = "team@email.de"
objMail.Subject = "Termine am " & WeekdayName(Weekday(.StartDate)) & ", " & .StartDate
objMail.Send
End With
End If
Set objCal = Nothing
Set objMail = Nothing
Set objOL = Nothing
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 265910
Url: https://administrator.de/forum/ueber-skript-auf-oeffentlichen-kalender-in-outlook-zugreifen-standard-kalender-geht-bereits-265910.html
Ausgedruckt am: 03.05.2025 um 09:05 Uhr
15 Kommentare
Neuester Kommentar
Hallo Tim, Willkommen auf Administrator.de!
Schön das dir das Script geholfen hat. Wenn dein Kalender in den öffentlichen Ordnern eines Exchange-Accounts liegt, direkt in der obersten Ebene sieht das so aus:
mit Unterordnern verfährst du immer nach folgendem Schema:
So hangelst du dich bis zum Kalender...
Die 18 steht für die Konstante olPublicFoldersAllPublicFolders
Eine Übersicht der Default-Folder Konstanten erhältst du hier:
https://msdn.microsoft.com/en-us/library/bb208072(v=office.12).aspx
Viele Grüße Uwe
Schön das dir das Script geholfen hat. Wenn dein Kalender in den öffentlichen Ordnern eines Exchange-Accounts liegt, direkt in der obersten Ebene sieht das so aus:
Set objCal = objOL.GetNamespace("MAPI").GetDefaultFolder(18).Folders("Kalender").GetCalendarExporter
Set objCal = objOL.GetNamespace("MAPI").GetDefaultFolder(18).Folders("Unterordner").Folders("Kalender").GetCalendarExporter
Die 18 steht für die Konstante olPublicFoldersAllPublicFolders
Eine Übersicht der Default-Folder Konstanten erhältst du hier:
https://msdn.microsoft.com/en-us/library/bb208072(v=office.12).aspx
Viele Grüße Uwe
Zitat von @tcg1982:
Leider funktioniert das nicht, was wohl daran liegt, dass das kein Exchange-Account sondern ein Kerio-Emailserver ist. -- Gibt es
da trotzdem eine Möglichkeit, das zu extrahieren?
Klar, das sollte gehen, dafür benötige ich aber mehr Infos.Leider funktioniert das nicht, was wohl daran liegt, dass das kein Exchange-Account sondern ein Kerio-Emailserver ist. -- Gibt es
da trotzdem eine Möglichkeit, das zu extrahieren?
Am besten du machst einen Screenshot der linken Baumansicht. Dann kann ich dir weiterhelfen.
Dazu benötigt man den Namen des Stores sowie er in Outlook in der oberste Ebene des Accounts steht, wenn es hier um einen anderen Store gehen sollte. Diese Variante geht aber auch mit deinem jetzigen Store...
Set objCal = objOL.Session.Stores("Name des Stores").GetRootFolder.Folders("Öffentliche Ordner").Folders("Kalender").getCalenderExporter
Kannst Du mir mit diesen Infos weiterhelfen, oder gibt es sonst noch etwas, was ich nachschauen kann?
Das ist die falsche Ansicht mit der kann ich leider weniger anfangen, ich meinte die Ordner-Übersicht Ordnerliste...
Und dann bis zum Kalender den Tree aufklappen ...
Also nochmal, hier ein Beispiel:

Auf folgendem Bild ist Nr. 1 der Name des Stores und Nr. 2 der Name des Kalenders. Der Kalender liegt direkt im Root des Stores. Dann sieht der Code für dieses Beispiel so aus:
Set objCal = objOL.Session.Stores("SentMailsArchive").GetRootFolder.Folders("Kalender").GetCalendarExporter
Ich rate jetzt einfach mal ... für deinen Kalender müsste es hiermit laufen:
Set objCal = objOL.Session.Stores("Öffentliche Ordner").GetRootFolder.Folders("Kalender").GetCalendarExporter
Jetzt sollte die Verfahrensweise aber endgültig klar sein ! Ich weiß nicht wie oft ich das hier schon runtergebetet habe
Grüße Uwe
Zitat von @tcg1982:
Allerdings tut sich damit leider nichts. Könnte das entweder an den Umlauten oder an der Kalenderstruktur mit den weiteren
Unterordnern liegen?
Nein das ist Standard und geht. Ich vermute es liegt tatsächlich am Kerio-Connector.Allerdings tut sich damit leider nichts. Könnte das entweder an den Umlauten oder an der Kalenderstruktur mit den weiteren
Unterordnern liegen?
Mach mal folgendes... Aktiviere im VBA-Editor das Direktfenster (
STRG+G
) und starte folgendes Makro:Das sollte dir alle in deinem Profil vorhandenen Accounts mit deren Namen im Direktfenster auflisten. Eventuell ist der Name des Kerio-Stores hier anders. Ansonsten hat der Kerio-Store hier Besonderheiten die ich von hier aus nicht lokalisieren kann. Dann würde nur eine TeamViewer-Session Klarheit bringen...
Sub ListStores()
Dim store As store
For Each store In Application.Session.Stores
Debug.Print store.DisplayName
Next
End Sub
Zitat von @tcg1982:
Ich habe noch eine letzte Frage: ist es möglich, dass bei einem "leeren Tag" im Terminkalender, d.h. einem Tag, an
dem es keine Termine gibt (beispielsweise morgen), einfach eine Email verschickt wird mit der Betreffzeile "Keine Termine am
Freitag, 13.3.2015"? -- Wie kann ich abfragen, ob eine Eintragung im Terminkalender existiert?
Das lässt sich machen, melde mich dazu später nochmal.Ich habe noch eine letzte Frage: ist es möglich, dass bei einem "leeren Tag" im Terminkalender, d.h. einem Tag, an
dem es keine Termine gibt (beispielsweise morgen), einfach eine Email verschickt wird mit der Betreffzeile "Keine Termine am
Freitag, 13.3.2015"? -- Wie kann ich abfragen, ob eine Eintragung im Terminkalender existiert?
So hier ein Beispiel wie man überprüft ob in eine, Zeitbereich Termine vorhanden sind oder nicht:
In diesem Beispiel wird überprüft ob Heute und Morgen ein Termin vorhanden ist. Wenn ja wird eine Mail erstellt und für die Demo erst mal nur angezeigt. Zum Senden einfach die .Send-Zeile auskommentieren und die Display-Zeile entfernen.
Grüße Uwe
In diesem Beispiel wird überprüft ob Heute und Morgen ein Termin vorhanden ist. Wenn ja wird eine Mail erstellt und für die Demo erst mal nur angezeigt. Zum Senden einfach die .Send-Zeile auskommentieren und die Display-Zeile entfernen.
Dim items, restrictedItems, mail
Set items = Application.GetNamespace("MAPI").GetDefaultFolder(9).items
items.Sort "[Start]"
items.IncludeRecurrences = True
Set restrictedItems = items.Restrict("[Start] >= """ & FormatDateTime(Now(),vbShortDate) & """ AND [START] <= """ & FormatDateTime(Now()+1,vbShortDate) & """")
If restrictedItems.GetFirst Is Nothing Then
Set mail = Application.CreateItem(0)
With mail
.Subject = "Keine Termine für Heute und Morgen"
.To = "user@domain.de"
.Display 'Testweise nur anzeigen
' .Send 'zum senden hier auskommentieren
End With
End If