Moin,
water, ich möchte bei jeder Änderung, eines Termin's im Kalender, das Subject zurück bekommen. Somit kann ich dann mit _OL_ItemFind die Daten auslesen.
Kannst du mir behilflich sein?
Gruß
Moin,
water, ich möchte bei jeder Änderung, eines Termin's im Kalender, das Subject zurück bekommen. Somit kann ich dann mit _OL_ItemFind die Daten auslesen.
Kannst du mir behilflich sein?
Gruß
Da würde ich auf die Items Property des Folder Objekts für den Kalender den ItemChange Event setzen.
water, kannst du mir zum "ItemChange Event" ein kurzes Beispiel geben?
Die Beispielprogramme mit "Event" im Namen wie _OL_Example_PropertyChange_Event.au3 zeigen, wie man mit Events arbeitet.
Ein MS Beispiel findest Du hier: https://docs.microsoft.com/en-us/office/v…tems.itemchange.
#include <OutlookEX.au3>
Global $outlook = _OL_Open()
$oEvt = ObjEvent($outlook, "oItems_")
While 1
Sleep(100)
WEnd
Func oItems_PropertyChange($sEntryIDs)
MsgBox(0,"","Test")
Local $iItemCount, $oItem
Local $aEntryIDs = StringSplit($sEntryIDs, ",", $STR_NOCOUNT) ; multiple EntryIDs are separated by ,
$iItemCount = UBound($aEntryIDs)
ConsoleWrite("OutlookEX UDF Example Script - " & ($iItemCount = 1 ? "new item has" : "new items have") & " arrived!" & @CRLF & @CRLF)
For $i = 0 To $iItemCount - 1
$oItem = $outlook.Session.GetItemFromID($aEntryIDs[$i], Default) ; Translate the EntryID string to the item object
ConsoleWrite("Subject: " & $oItem.Subject)
Next
EndFunc
water, Ich bekomme es nicht hin. Beim verschieben des Termin's soll das Subject zurück gegeben werden.
Du musst das Event auf die Items des Kalender-Folders setzen.
water, auch so funktioniert es nicht, wenn ich es richtig von dir verstanden habe.
#include <OutlookEX.au3>
Global $outlook = _OL_Open()
Local $oDefaultFolder = $outlook.GetNamespace("MAPI").GetDefaultFolder("Outlook-Datendatei\Kalender")
Local $oItems = $oDefaultFolder.Items
$oEvt = ObjEvent($outlook, "oItems_")
While 1
Sleep(100)
WEnd
Func oItems_PropertyChange($sEntryIDs)
MsgBox(0, "", "Test")
Local $iItemCount, $oItem
Local $aEntryIDs = StringSplit($sEntryIDs, ",", $STR_NOCOUNT) ; multiple EntryIDs are separated by ,
$iItemCount = UBound($aEntryIDs)
ConsoleWrite("OutlookEX UDF Example Script - " & ($iItemCount = 1 ? "new item has" : "new items have") & " arrived!" & @CRLF & @CRLF)
For $i = 0 To $iItemCount - 1
$oItem = $outlook.Session.GetItemFromID($aEntryIDs[$i], Default) ; Translate the EntryID string to the item object
ConsoleWrite("Subject: " & $oItem.Subject)
Next
EndFunc ;==>oItems_PropertyChange
Dann muss ich forschen gehen - kann aber dauern, da ich derzeit voll eingespannt bin.
So funktioniert es!
#include <OutlookEX.au3>
#include <Array.au3>
Global $oOL = ObjCreate("Outlook.Application")
Global $oItems = $oOL.GetNamespace("MAPI").GetDefaultFolder($olFolderCalendar).Items
ObjEvent($oItems, "oItems_")
While 1
Sleep(100)
WEnd
Func oItems_ItemChange($oOL_Item)
Consolewrite("Subject: " & $oOL_Item.Subject)
EndFunc ;==>oItems_ItemAdd
_OL_ItemFind brauchst Du somit nicht, da Du ja bereits das Objekt des geänderten Termins in oItems_ItemChange übergeben bekommst.
water, hier nochmal ein Beispiel mit mehreren Kalendern. Die Kalendernamen werden z.B. von einer ini-Datei eingelesen.
#include <OutlookEX.au3>
#include <Array.au3>
Global $aGFolder
Global $oGItems
Local $aCal = IniReadSection(@ScriptDir & "\ini\Kalender.ini", "Cal");Kalendernamen
;~ _ArrayDisplay($aCal)
If @error Then
MsgBox(0 + 262144 + 64, "", 'Fehler Kalender aus ini einlesen')
Else
Local $oOL = ObjCreate("Outlook.Application")
For $i = 1 To UBound($aCal) - 1
$aGFolder = _OL_FolderAccess($oOL, "Outlook-Datendatei\Kalender\" & $aCal[$i][1]);z.B. Alle Kalender im Outlook-Datendatei\Kalender
If @error <> 0 Then
MsgBox(0 + 262144 + 64, "Kalender", $aCal[$i][1] & " fehlt im Outlook-Kalender")
Else
$oGItems = $aGFolder[1].Items
ObjEvent($oGItems, "oItems_")
EndIf
Next
EndIf
Func oItems_ItemChange($oOL_Item)
ConsoleWrite($oOL_Item.Subject & @CRLF)
ConsoleWrite($oOL_Item.Start & @CRLF)
ConsoleWrite($oOL_Item.End & @CRLF)
EndFunc ;==>oItems_ItemChange