tcg1982
Goto Top

Ü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:
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

Content-Key: 265910

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

Printed on: April 23, 2024 at 18:04 o'clock

Member: colinardo
Solution colinardo Mar 11, 2015, updated at Mar 12, 2015 at 12:51:39 (UTC)
Goto Top
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:
Set objCal = objOL.GetNamespace("MAPI").GetDefaultFolder(18).Folders("Kalender").GetCalendarExporter    
mit Unterordnern verfährst du immer nach folgendem Schema:
Set objCal = objOL.GetNamespace("MAPI").GetDefaultFolder(18).Folders("Unterordner").Folders("Kalender").GetCalendarExporter  
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
Member: tcg1982
tcg1982 Mar 11, 2015 at 15:04:17 (UTC)
Goto Top
Hi Uwe,

Vielen Dank für Deine schnelle Antwort.

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?

Nochmals vielen Dank!
Tim
Member: colinardo
Solution colinardo Mar 11, 2015, updated at Mar 12, 2015 at 12:51:31 (UTC)
Goto Top
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.
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
Auch hier kommt es wieder darauf an wo genau der Ordner verschachtelt ist, und dazu brauche ich mehr Infos um dir zielführend helfen zu können.
Member: tcg1982
tcg1982 Mar 11, 2015 at 16:12:01 (UTC)
Goto Top
Danke, Uwe!

Hier ist der Screenshot:
d8ec5c3e97068e0651654d0962ac7947

Und hier ist noch die Info, die ich bekomme, wenn ich auf die Eigenschaften des Kalenders klicke:
Name: Kalender
Typ: Ordner enthält Elemente des Typs "Kalender"
Ort: \\Öffentliche Ordner

Kannst Du mir mit diesen Infos weiterhelfen, oder gibt es sonst noch etwas, was ich nachschauen kann?

Nochmals vielen Dank!

Tim
Member: colinardo
Solution colinardo Mar 11, 2015, updated at Mar 12, 2015 at 13:00:24 (UTC)
Goto Top
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...

6b0bb849f6899b407138e22055c62a44

Und dann bis zum Kalender den Tree aufklappen ...


Also nochmal, hier ein Beispiel:

43c39123654d0ca93a96f23284a59748

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  
So kannst du bei dir normalerweise auch verfahren. Wenn der Kalender in noch weiteren Unterordnern verschachtelt ist verfährst du wie oben bereits geschrieben.

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 face-big-smile

Grüße Uwe
Member: tcg1982
tcg1982 Mar 12, 2015 at 07:35:33 (UTC)
Goto Top
Guten Morgen, Uwe!

Tut mir leid, dass ich da die falschen Infos reingestellt habe. Vielen Dank für Deine Hilfe!

Der Screenshot sieht bei mir so aus:
9ae7aa5658e5974e5453b54f69ff467a

Ich dachte also auch, dass
Set objCal = objOL.Session.Stores("Öffentliche Ordner").GetRootFolder.Folders("Kalender").GetCalenderExporter  
funktionieren sollte.

Allerdings tut sich damit leider nichts. Könnte das entweder an den Umlauten oder an der Kalenderstruktur mit den weiteren Unterordnern liegen?

Es tut mir wirklich leid, dass ich so viele Fragen habe und selbst nicht weiterkomme. Ich bin ein absoluter Neuling im Skript-Schreiben und weiß Deine Hilfe sehr zu schätzen.

Beste Grüße,
Tim
Member: colinardo
Solution colinardo Mar 12, 2015 updated at 12:51:21 (UTC)
Goto Top
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.

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
Grüße Uwe
Member: tcg1982
tcg1982 Mar 12, 2015 at 09:36:25 (UTC)
Goto Top
Hi Uwe,

Ich habe das gerade im Direktfenster versucht. Da bekomme ich leider die Fehlermeldung "Fehler beim Kompilieren: Ungültig im Direktfenster"

Kann ich das auch noch irgendwie anders ausführen?

Vielen Dank!
Tim
Member: colinardo
Solution colinardo Mar 12, 2015 updated at 12:51:16 (UTC)
Goto Top
Neinnnnn nicht den Code ins Direktfenster pasten sondern einfach in ein Modul pasten, dann den Cursor innerhalb der Methode platzieren und F5 drücken ... (vorher die Ausgabe im Direktfenster löschen, sonst gibts Nudelsalat im Ausgabefenster) face-wink

Im Ausgabefenster landen nur die Namen der Stores.
Member: tcg1982
tcg1982 Mar 12, 2015 at 09:45:39 (UTC)
Goto Top
Ah. Danke! Sorry für meine Wissenslücken.

Die Ausgabe ist:
Tim GÖffentliche OrdnerArchivordner
Member: colinardo
Solution colinardo Mar 12, 2015 updated at 12:51:53 (UTC)
Goto Top
OK dann ist das in Ordnung, dann kann ich leider nur via Teamviewer weiterhelfen ...
Member: tcg1982
tcg1982 Mar 12, 2015 at 12:51:16 (UTC)
Goto Top
Hi Uwe,

Ich habe es jetzt doch noch hinbekommen. Die Dateistruktur war genau in Ordnung, der Fehler war letztendlich ein Schreibfehler. Ich gab "CalenderExporter" statt "CalendarExporter" ein.

Vielen Dank für Deine Hilfe. Ist wirklich großartig!

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?

Vielleicht sollte das aber in einen neuen Thread, da meine ursprüngliche Anfrage ja gelöst ist.

Nochmals vielen Dank und beste Grüße!
Tim
Member: colinardo
Solution colinardo Mar 12, 2015 updated at 13:23:43 (UTC)
Goto Top
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.
Member: colinardo
Solution colinardo Mar 13, 2015 updated at 09:21:08 (UTC)
Goto Top
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.
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
Grüße Uwe
Member: tcg1982
tcg1982 Mar 13, 2015 at 09:21:57 (UTC)
Goto Top
Super! Vielen Dank, Uwe.

Jetzt habe ich ein tolles Skript, um mein Team automatisch zu benachrichtigen. Das hätte ich ohne Dich nie hinbekommen.

Beste Grüße,
Tim