Hallo Leute,
hier habe ich leider kein ausführbares Beispiel sondern nur eine Fehlerbeschreibung und eine Funktion. Vielleicht sieht jemand darin einen Fehler oder kann mir die beobachteten Effekte erklären.
Was soll das Skript machen: Mails aus einem Outlook-Ordner lesen, die Inhalte verarbeiten (hier in eine Excel-Datei schreiben) und alle erfolgreich verarbeiteten Dateien in einen "gelesen"-Ordner verschieben. Dazu werden alle erfolgreich gelesenen Outlook Elemente in einem Array gespeichert ($aMoveItems), dass am Ende in einer Schleife durchlaufen wird.
Problembeschreibung:
In der For-Schleife, in der die Items verschoben werden, wird nach jedem Aufruf von _OL_ItemMove geprüft, ob es erfolgreich war. Leider ist es das häufiger mal nicht. Im Fehlerfall verlasse ich das Skript mit Exit. Würde ich den Fehler ignorieren, würde sich AutoIt aufhängen.
Das für mich irritierende ist der zurückgegebene Fehlerwert 6 (No or an invalid item has been specified). Dabei werden doch nur die EntryIDs von Mails gespeichert, die vorher gelesen werden konnten.
Spoiler anzeigen
Global $g_oOutlook = _OL_Open(True, "..\Included UDFs\_OL_Warnings.exe", 500, 250)
If @error Then Exit MsgBox(0, "Fehler-Abbruch", "_OL_Open-Fehler: " & @error)
Global $g_aOL_Item = _OL_ItemFind($g_oOutlook, "Nutzer@Domain\Posteingang\Formulare\ABC_Mails", $olMail, "", "", "", "Body,EntryID,ReceivedTime,Subject", "[Subject]")
If IsArray($g_aOL_Item) Then
If $g_aOL_Item[0][0] = 0 Then Exit MsgBox(0, 'Fehler-Abbruch', 'Keine Mails im Ordner "Nutzer@Domain\Posteingang\Formulare\ABC_Mails" gefunden.')
Else
Exit MsgBox(0, 'Fehler-Abbruch', 'Ordner "Nutzer@Domain\Posteingang\Formulare\ABC_Mails" nicht gefunden.')
EndIf
Global $g_bContinueLoop = True
_Mainloop()
Func _Mainloop()
Local $aMoveItems[$g_aOL_Item[0][0] + 1], $iCount = 0, $iSec = 0, $hTimer, $fDiff
For $i = 1 To $g_aOL_Item[0][0]
ToolTip("Mail " & $i & " von " & $g_aOL_Item[0][0])
_OutputArray($g_aOL_Item[$i][0], $g_aOL_Item[$i][2])
If Not @error Then
$aMoveItems[$iCount] = $g_aOL_Item[$i][1]
$iCount += 1
EndIf
_OL_ItemPrint($g_oOutlook, $g_aOL_Item[$i][1])
If @error <> 0 Then Exit MsgBox(16, "Fehler-Abbruch", "Fehler beim Drucken. @error = " & @error & ", @extended = " & @extended)
Next
Local $aOutput = _OutputArray("", "", 1)
Local $aDoubles = _MarkDoubles($aOutput) ; hier stehen Dubletten drin. Alle Datensätze außer dem ersten der jew. Dublette werden markiert.
Local $sOutputFile = "X:\Ausgabedatei" & @YEAR & @MON & @MDAY & "_" & @HOUR & @MIN & @SEC & ".xls"
_WriteArrayToNewExcel($aOutput, $sOutputFile, $aDoubles)
If @error Then _
Exit MsgBox(0, "Fehler-Abbruch", "PatenInternet.xls konnte nicht erstellt werden! Fehlerwert: " & @error)
ReDim $aMoveItems[$iCount]
For $i = 0 To $iCount - 1
_OL_ItemMove($g_oOutlook, $aMoveItems[$i], Default, "Nutzer@Domain\Posteingang\Formulare\ABC_Mails\gedruckt_ABC_Mails")
If @error <> 0 Then Exit MsgBox(16, "Fehler-Abbruch", "Beim Verschieben der Mail-Nr.: " & $i & " (" & $aMoveItems[$i] & " ist ein Fehler aufgetreten. (Fehler-Nr: " & @error & ")")
Next
EndFunc ;==>_Mainloop
Alles anzeigen