Moin,
ich habe ein Skript geschrieben, welches täglich eingehende Mails zur Datensicherung in spezielle Unterordner verschieben soll.
Irgendwann führt das Skript folgende Prozedur aus:
Private Sub SetDASIOrdner(sDASIOrdner As String)
'Outlook Objekt erzeugen
Set olAnwendung = CreateObject("Outlook.Application")
'Jeweils den richtigen DASI-Ordner setzen
Set olOrdnerDASI = olAnwendung.Session.Folders("Servicedesk") _
.Folders("Posteingang") _
.Folders("1a - Datensicherungen") _
.Folders(sDASIOrdner)
End Sub
Die Variablen olAnwendung und olOrdnerDASI werden im Kopf des Userforms gesetzt:
Dim olAnwendung As Outlook.Application 'Um Outlookobjekt zu erzeugen
Dim olOrdnerDASI As Outlook.MAPIFolder 'Zielordner zum Wegsortieren der DASI-Mails
Nun erhalte ich an der Stelle Set olOdnerDASI = ... von Zeit zu Zeit einen Laufzeitfehler:
Laufzeitfehler -2147221233 (8004010f)
Der Vorgang konnte nicht ausgeführt werden, Ein Objekt wurde nicht gefunden.
Komischerweise funktioniert nach dem Start von Outlook das Skript einmal ohne Probleme, erst beim zweiten Durchlauf kommt es zu dem Fehler. Starte ich Outlook neu, funktioniert das Skript wieder.
Nun habe ich testweise auch folgende Variante der betroffenen Prozedur genutzt:
Private Sub SetDASIOrdner(sDASIOrdner As String)
'Outlook Objekt erzeugen
Set olAnwendung = CreateObject("Outlook.Application")
'Namespace MAPI setzen
Set olNamensraum = olAnwendung.GetNamespace("MAPI")
'Jeweils den richtigen DASI-Ordner setzen
Set olOrdnerDASI = olNamensraum.Folders("Servicedesk") _
.Folders("Posteingang") _
.Folders("1a - Datensicherungen") _
.Folders(sDASIOrdner)
End Sub
(olNamensraum ist auch im Kopf als Outlook.NameSpace deklariert)
Das Ergebnis ist allerdings das selbe.
Wenn ich nun Testweise mal folgendes mache:
Private Sub SetDASIOrdner(sDASIOrdner As String)
'Outlook Objekt erzeugen
Set olAnwendung = CreateObject("Outlook.Application")
'Jeweils den richtigen DASI-Ordner setzen
Set olOrdnerDASI = olAnwendung.Session.Folders("Servicedesk")
Set olOrdnerDASI = olAnwendung.Session.Folders("Servicedesk").Folders("Posteingang")
Set olOrdnerDASI = olAnwendung.Session.Folders("Servicedesk").Folders("Posteingang").Folders("1a - Datensicherungen")
Set olOrdnerDASI = olAnwendung.Session.Folders("Servicedesk").Folders("Posteingang").Folders("1a - Datensicherungen") .Folders(sDASIOrdner)
End Sub
erhalte ich in der dritten Zeile von Set olOrdnerDASI den Laufzeitfehler.
Wenn ich wiederum mir nun die Unterordner des Verzeichnises 'Posteingang' ausgeben lasse mit folgender Prozedur:
Private Sub CommandButton1_Click()
Dim folder As Outlook.folder
Set olAnwendung = CreateObject("Outlook.Application")
Set olOrdnerDASI = olAnwendung.Session.Folders("Servicedesk") _
.Folders("Posteingang") _
.Folders("1a - Datensicherungen")
For Each folder In olOrdnerDASI.Folders
Debug.Print folder.Name
Next
End Sub
werden keine Unterordner gelistet obwohl diese existieren (beim ersten Versuch klappt es ja immer).
Weiß hier jemand Rat oder hat eine Idee warum er den Unterordner beim ersten Durchlauf findet und beim zweiten nicht? (Ab und zu klappt es auch eine Weile mehrmals hintereinander und ganz plötzlich nicht mehr, bis ich Outlook neustarte).
Weiterhin ist auch der Rest meines Skriptes nicht schuld an der Misere, da ich diese Prozedur testweise auch solo hab durchlaufen lassen, natürlich mit dem selben unschönen Ergebnis.
Zu meiner Infrastruktur:
Ich nutze Office 2013 und habe das Postfach "Servicedesk" als Extra Postfach in mein privates Postfach eingebunden. Beides sind Exchange Postfächer im Exchange-Cache-Modus.
|