Seite 1 von 1
COMmatePLUS Outlook (Serien)Termine auslesen
Verfasst: 23.10.2015 08:07
von dietmar
Seit Tagen versuche ich die Termine aus Outlook auszulesen, funktioniert in Teilbereichen auch ganz gut. Nur die Serientermine wollen nicht wie ich. Bei meinen Versuchen mit unterschiedlichen Ansätzen bin ich letztens bei COMatePlus gelandet da dieser bis jetzt am schnellsten läuft.
In Zeile 20 (Debug Terminwiederholung...) kommt ungültiger Speicher Zugriff, hat jemand eine Idee oder einen Schubs in eine ganz andere funktionierende Richtung?
Code: Alles auswählen
XIncludeFile "COMatePLUS.pbi"
Global Outlook.COMateObject, NameSpace.COMateObject, Folder.COMateObject, Items.COMateObject, Termin.COMateObject, TerminWiederholung.COMateObject
Outlook = COMate_CreateObject("Outlook.Application")
If Outlook
NameSpace = Outlook\GetObjectProperty("GetNamespace(" + Chr(39) + "MAPI" + Chr(39) + ")")
If NameSpace
Folder = NameSpace\GetObjectProperty("GetDefaultFolder(" + 9 + ")")
If Folder
Items = Folder\GetObjectProperty("Items")
; Items\SetProperty("items.IncludeRecurrences = True)")
If Items
For i=1 To i+1
Items\SetProperty("GetRecurrencePattern")
Termin = Items\GetObjectProperty("Item("+Str(i)+")" )
TerminWiederholung = Items\GetObjectProperty("Item("+Str(i)+").GetRecurrencePattern" )
If Not Termin: Break: EndIf
Debug Termin\GetStringProperty("Subject") + ", " + Termin\GetStringProperty("Start") + " bis " + Termin\GetStringProperty("End") + " Uhr"
Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+").RecurrenceType")
Next
If Termin : Termin\Release() : EndIf
If Items : Items\Release() : EndIf
If Folder : Folder\Release() : EndIf
If NameSpace: NameSpace\Release(): EndIf
If Outlook : Outlook\Release() : EndIf
EndIf
EndIf
EndIf
EndIf
Re: COMmatePLUS Outlook (Serien)Termine auslesen
Verfasst: 23.10.2015 08:19
von Kiffi
Code: Alles auswählen
Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+")\RecurrenceType")
Grüße ... Peter
Re: COMmatePLUS Outlook (Serien)Termine auslesen
Verfasst: 23.10.2015 09:51
von dietmar
Danke, hab ich eben versucht. Leider mit dem gleichen Ergebnis.
Korrektur, man den "\" grundsätzlich verwendet kommt die Fehlermeldung nicht mehr, allerdings auch kein Ergebnis.
Code: Alles auswählen
Global Outlook.COMateObject, NameSpace.COMateObject, Folder.COMateObject, Items.COMateObject, Termin.COMateObject, TerminWiederholung.COMateObject
Outlook = COMate_CreateObject("Outlook.Application")
If Outlook
NameSpace = Outlook\GetObjectProperty("GetNamespace(" + Chr(39) + "MAPI" + Chr(39) + ")")
If NameSpace
Folder = NameSpace\GetObjectProperty("GetDefaultFolder(" + 9 + ")")
If Folder
Items = Folder\GetObjectProperty("Items")
Items\SetProperty("Item\Sort" + Chr(39) + "[Start]" + Chr(39))
Items\SetProperty("items\IncludeRecurrences = True)")
If Items
For i=1 To i+1
Termin = Items\GetObjectProperty("Item("+Str(i)+")" )
TerminWiederholung = Items\GetObjectProperty("Item("+Str(i)+")\GetRecurrencePattern" )
If Not Termin: Break: EndIf
Debug Termin\GetStringProperty("Subject") + ", " + Termin\GetStringProperty("Start") + " bis " + Termin\GetStringProperty("End") + " Uhr"
Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+")\RecurrenceType")
Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+")\RecurrenceType")
Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+")\DayOfWeekMask")
Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+")\MonthOfYear")
Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+")\Instance")
Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+")\Occurrences")
Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+")\Duration")
Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+")\PatternStartDate")
Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+")\StartTime")
Debug TerminWiederholung\GetStringProperty("Item("+Str(i)+")\EndTime")
Next
If Termin : Termin\Release() : EndIf
If Items : Items\Release() : EndIf
If Folder : Folder\Release() : EndIf
If NameSpace: NameSpace\Release(): EndIf
If Outlook : Outlook\Release() : EndIf
EndIf
EndIf
EndIf
EndIf
Re: COMmatePLUS Outlook (Serien)Termine auslesen
Verfasst: 23.10.2015 11:00
von Kiffi
was meinst Du mit "kein Ergebnis"?
Sind die Debug-Ausgaben leer?
Testweise kannst Du mal schauen, ob COMate_GetLastErrorDescription() etwas zurückgibt.
Grüße ... Peter
Re: COMmatePLUS Outlook (Serien)Termine auslesen
Verfasst: 26.10.2015 08:14
von dietmar
Sorry für die späte Antwort. Mit kein Ergebnis meinte ich das Einzeltermine ausgegeben werden, Serientermine lediglich einmal am Startdatum. Es kommen keine Informationen über die Wiederholung (Häufigkeit, Anzahl) oder direkt die Serientermine.
Re: COMmatePLUS Outlook (Serien)Termine auslesen
Verfasst: 03.11.2015 08:04
von dietmar
Keiner eine Idee?
Re: COMmatePLUS Outlook (Serien)Termine auslesen
Verfasst: 06.11.2015 10:23
von dietmar
Ich hab im Netz folgendes Makro gefunden:
Sub DemoFindNext()
Dim myOlApp As Outlook.Application
Dim myNameSpace As Outlook.NameSpace
Dim tdystart As Date
Dim tdyend As Date
Dim myAppointments As Outlook.Items
Dim currentAppointment As Outlook.AppointmentItem
Set myOlApp = CreateObject("Outlook.Application")
Set myNameSpace = myOlApp.GetNamespace("MAPI")
tdystart = VBA.Format("09.11.2015", "Short Date")
tdyend = VBA.Format("13.11.2015", "Short Date")
Set myAppointments = myNameSpace.GetDefaultFolder(olFolderCalendar).Items
myAppointments.Sort "[Start]"
myAppointments.IncludeRecurrences = True
Set currentAppointment = myAppointments.Find("[Start] >= """ & tdystart & """ and [Start] <= """ & tdyend & """")
While TypeName(currentAppointment) <> "Nothing"
MsgBox currentAppointment.Subject
Set currentAppointment = myAppointments.FindNext
Wend
End Sub
Das funktioniert in Excel soweit gut, auch die Serientermine werden mit den Wiederholungen angezeigt, mir ist klar das ich die beiden Zeile in Rot brauche. Allerdings egal was ich versuche die COMate gibt mir nur den Fehler "One or more arguments are invalid. Possibly a numerical overflow or too many nested objects, -if so, try splitting your method call into two or more subcalls." bei den beiden zurück. Andere Termine werden sauber erkannt und werden auch im Debug ausgegeben.
Re: COMmatePLUS Outlook (Serien)Termine auslesen
Verfasst: 29.08.2021 11:25
von 123
Hallo zusammen,
ich suche einen source code, der outlook termine monatsweise oder einzeln ausliest, schreibt und löscht. dieses beispiel funktioniert leider nicht. hat irgend jemand funktionierende beispiele?
vielen dank im voraus
Re: COMmatePLUS Outlook (Serien)Termine auslesen
Verfasst: 23.09.2021 16:13
von Bernie
Hallo 123
Auslesen von Outlook-Serien-Terminen (bei den Privaten Terminen klemmt noch etwas und
zudem habe ich noch ein Problem beim auslesen des Nachrichteninhalts.
Es funktionieren:
- Fremdkonto
- Serientermine
- Begrenzung des anzuzeigenden Zeitraumes
Code: Alles auswählen
IncludeFile "COMatePLUS.pbi"
Global Outlook.COMateObject, NameSpace.COMateObject
Global Items.COMateObject, Termin.COMateObject
Global Kalender.COMateObject, Folder.COMateObject
Global NewItems.COMateObject
Global vUserid.s, vFilter.s, DatumVon.s, DatumBis.s, vDatum.s
Global vInterval.COMateObject, vFreeBusy.COMateObject, objRecipient.COMateObject
Outlook = COMate_CreateObject("Outlook.Application")
If Outlook
NameSpace = Outlook\GetObjectProperty("GetNamespace('MAPI')")
If NameSpace
; Default-Folder
;Folder = NameSpace\GetObjectProperty("GetDefaultFolder(9)")
; Calendar from another User / e-mail-Address
vUserid = "U123456" ; Userid
;vUserid = "email@mail.com" ; e-Mail
Kalender = NameSpace\GetObjectProperty("CreateRecipient('" + vUserid + "')")
; Private Termine des fremden Users anzeigen / Private Appointments
; https://docs.microsoft.com/en-us/office/vba/api/outlook.recipient.freebusy
; myFBInfo = myRecipient.FreeBusy(#11/11/2003#, 60 * 24)
; Suchen der privaten Termine von heute (falls vorhanden)
; LET vStartTime = Dat_Heute_Form + " 00:00"
; 1 Minuten
; LET vInterval = 1
; SET objRecipient = vKalender
; Generiert die Ansicht von 4 Wochen = 28 Tagen x (24 Std x 60 Min = 1440) = String mit 40320 Zeichen (0-4) = Minuten-Einheiten
; OBJECT CALL objRecipient.FreeBusy(vStartTime, vInterval) To vFreeBusy
; 0 olFree The user is available.
; 1 olTentative The user has a tentative appointment scheduled.
; 2 olBusy The user is busy.
; 3 olOutOfOffice The user is out of office.
; 4 olWorkingElsewhere The user is working in a location away from the office.
; Probleme mit dem Zugriff auf die FreeBusy-Information:
; https://support.microsoft.com/en-us/topic/how-to-troubleshoot-free-busy-issues-in-a-hybrid-deployment-of-on-premises-exchange-server-and-exchange-online-in-office-365-ae03e199-b439-a84f-8db6-11bc0d7fbdf0
; https://manuals.gfi.com/en/kerio/connect/content/email-clients/kerio-outlook-connector/outlook-free-busy-service-always-returns-no-information-297.html
; vInterval = 1 ; Einen Monat (= 4 Wochen! fix!) in 1-Minuten-Einheiten anzeigen
; vDatum = "22.09.2021 00:00"
; objRecipient = Kalender
; MessageRequester("", "Kalender-Objekt = " + Str(objRecipient))
;
; Debug "Start = " + objRecipient\GetObjectProperty("FreeBusy('" + vDatum + "',1)") + " Ende"
; Debug "Start = " + objRecipient\GetStringProperty("FreeBusy('" + vDatum + "',1)") + " Ende"
; Debug "Start = " + objRecipient\GetStringProperty("FreeBusy('" + Chr(34) + vDatum + Chr(34) + "',1)") + " Ende"
; Debug "Start = " + objRecipient\GetStringProperty("FreeBusy(" + Chr(34) + vDatum + Chr(34) + ",1)") + " Ende"
; Debug "Start = " + objRecipient\GetStringProperty("FreeBusy('22.09.2021 00:00',1)") + " Ende"
; Debug "Start = " + objRecipient\GetStringProperty("FreeBusy(" + Chr(34) + "22.09.2021 00:00" + Chr(34) + ",1)") + " Ende"
; Debug "Start = " + objRecipient\GetStringProperty("FreeBusy(#22.09.2021 00:00#,1)") + " Ende"
;
; Debug "Start = " + objRecipient\GetStringProperty("FreeBusy($002722.09.2021 00:00$0027,1)") + " Ende"
; Debug "Start = " + objRecipient\GetStringProperty("FreeBusy('22.09.2021 00:00',1)") + " Ende"
;
; Debug "Start = " + Kalender\GetStringProperty("FreeBusy(#01/01/2021#,1)") + " Ende"
; Debug "Start = " + Kalender\GetStringProperty("FreeBusy('#01/01/2021#',1)") + " Ende"
;
Folder = NameSpace\GetObjectProperty("GetSharedDefaultFolder(" + Kalender + " AS COMateObject, 9)")
If Folder
Items = Folder\GetObjectProperty("Items")
; Termin-Serien aufbereiten für die Ausgabe
Items\SetProperty("IncludeRecurrences=1")
Items\GetObjectProperty("Sort('[START]')")
DatumVon = "20.09.2021"
DatumBis = "31.12.2021"
;DatumBis = "30.09.2021"
vFilter = "[START] >= $0027" + DatumVon + " 00:00$0027 And [START] <= $0027" + DatumBis + " 00:00$0027"
NewItems = Items\GetObjectProperty("Restrict('" + vFilter + "')")
;NewItems\GetObjectProperty("Sort('[START]')")
; Zeigt viel zuviele Elemente an!! -> "x" ist für For-Next unbrauchbar!
x = NewItems\GetIntegerProperty("Count")
;MessageRequester("", "Anzahl Elemente = " + Str(x))
If NewItems
;For i = 1 To x ; funktioniert nicht!
For i = 1 To i+1
Termin = NewItems\GetObjectProperty("Item("+Str(i)+")" )
;apptOrganizer = Termin\GetObjectProperty("Body" )
;MessageRequester("", "apptOrganizer = " + Str(apptOrganizer))
; addAsync(recipients: (string | EmailUser | EmailAddressDetails)[],
; options: Office.AsyncContextOptions, callback?: (asyncResult: Office.AsyncResult<void>) => void): void;
; https://docs.microsoft.com/en-us/javascript/api/outlook/office.recipients?view=outlook-js-preview
; https://docs.microsoft.com/en-us/javascript/api/outlook/office.appointmentcompose?view=outlook-js-preview
If Termin
Debug Termin\GetStringProperty("Start") + " bis " +
Termin\GetStringProperty("End") + " Uhr " +
Termin\GetStringProperty("Subject") + ", " +
Termin\GetStringProperty("Location") + ", " + ; Bis hier funktioniert alles wie gewünscht!
Termin\GetStringProperty("Body") + ", " + ; Ab hier keine Daten mehr!? -> Mailinhalt / Details -> anderer Level?
;Termin\GetStringProperty("emailAddress") + ", " +
;Termin\GetStringProperty("RequiredAttendees") + ", " +
;Termin\GetStringProperty("organizerAddress") + ", " +
;apptOrganizer\GetStringProperty("displayName")
Termin\GetStringProperty("Recipients")
Else
Break
EndIf
Next
If Termin : Termin\Release() : EndIf
If Items : Items\Release() : EndIf
If Folder : Folder\Release() : EndIf
If NameSpace: NameSpace\Release(): EndIf
If Outlook : Outlook\Release() : EndIf
EndIf
EndIf
EndIf
EndIf
Gruss Bernie