Outlook VBA, nur eine bestimmte Anzahl an Items in Ordner durchsuchen
Hallo,
Ich habe ein Makro geschrieben, was eigentlich auch funktioniert. Im Grunde durchsucht es einen Folder bei jeder neuen Mail die ankommt
(newmailex event). Problem ist nun, dass in dem Ordner ca. 8000 eMails zu finden sind und Outlook dementsprechend hängen bleibt (Not responding). Ist das normal bei einer solchen Menge das Programm abstürzt? Laut Debugger macht es genau was es soll und mit einem anderen Folder, in welchem weniger Mails sind funktioniert es auch wie gewollt.
Meine Frage ist nun ob man irgendwie beeinflussen kann wie und in welcher Reihenfolge ein Ordner durchsucht wird (z.B. nur 20 aktuellsten Mails o.Ä.)
Liebe Grüße,
fudge
Ich habe ein Makro geschrieben, was eigentlich auch funktioniert. Im Grunde durchsucht es einen Folder bei jeder neuen Mail die ankommt
(newmailex event). Problem ist nun, dass in dem Ordner ca. 8000 eMails zu finden sind und Outlook dementsprechend hängen bleibt (Not responding). Ist das normal bei einer solchen Menge das Programm abstürzt? Laut Debugger macht es genau was es soll und mit einem anderen Folder, in welchem weniger Mails sind funktioniert es auch wie gewollt.
Meine Frage ist nun ob man irgendwie beeinflussen kann wie und in welcher Reihenfolge ein Ordner durchsucht wird (z.B. nur 20 aktuellsten Mails o.Ä.)
Liebe Grüße,
fudge
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 251983
Url: https://administrator.de/contentid/251983
Ausgedruckt am: 22.11.2024 um 13:11 Uhr
23 Kommentare
Neuester Kommentar
Zitat von @bigfudge:
Meine Frage ist nun ob man irgendwie beeinflussen kann wie und in welcher Reihenfolge ein Ordner durchsucht wird (z.B. nur 20
aktuellsten Mails o.Ä.)
Dafür gibt es die Restrict-Methode der Items-Collection mit der man Mails schon im vornherein anhand der Eigenschaften entsprechend begrenzen kann:Meine Frage ist nun ob man irgendwie beeinflussen kann wie und in welcher Reihenfolge ein Ordner durchsucht wird (z.B. nur 20
aktuellsten Mails o.Ä.)
http://www.outlookcode.com/article.aspx?id=30
sFilter = "[ReceivedTime] >= '" & Format(Now - 1, "ddddd") & "'"
Set itms = Session.GetDefaultFolder(olFolderInbox).Items.Restrict(sFilter)
Oder die Items absteigend sortieren (Descending):
Items.Sort Method
und dann nur die ersten 20 Items mit einer FOR-Schleife abarbeiten.
Gruß jodel32
Zitat von @bigfudge:
Frage wie das funktioniert? Müsste für so etwas nicht auch jede Mail in der Inbox auf dieses Kriterium
überprüft werden womit man wieder bei ähnlichem Aufwand ist?
normalerweise ist das wesentlich schneller als mit einer Schleife alle Items zu durchlaufen, da es die Outlook-Integrierte Suchfunktion verwendet, mit der du z.B. auch die Anzeige eines Ordners Filtern kannstFrage wie das funktioniert? Müsste für so etwas nicht auch jede Mail in der Inbox auf dieses Kriterium
überprüft werden womit man wieder bei ähnlichem Aufwand ist?
klar, du weist einem Folder-Objekt eine Items-Collection zu, das geht natürlich nicht
for each item in Application.Session.Stores("Mailboxname").GetRootFolder.folders("Foldername").Items.Restrict(sFilter)
msgbox item.Subject
next
Zitat von @bigfudge:
Damit habe ich zwar keinen Fehler, aber der Folder enthält dann keine Items obwohl er welche enthalten sollte. Schätze
mal das ist ein Formatierungsfehler oder ich hab grundlegend bei der Uhrzeit bzw. dem Datum was falsch gemacht.
läuft hier ohne Probleme, oder du hast woanders einen Fehler, wie vorhin Damit habe ich zwar keinen Fehler, aber der Folder enthält dann keine Items obwohl er welche enthalten sollte. Schätze
mal das ist ein Formatierungsfehler oder ich hab grundlegend bei der Uhrzeit bzw. dem Datum was falsch gemacht.
nehm mal einfache Anführungszeichen um das Datum herum.
DateToCheck = "[ReceivedTime] >= '" & DateStart & "'"
Das wird es vermutlich sein (Unterschied zwischen Systemsprache und Outlook-Sprache), formatiere das Datum mal ins englische Format
Outlook erwartet hier leider immer ein Datum im richtigen Format als String formatiert ... musst du einfach mal mit spielen
Format(Now - TimeValue("01:35:00"),"mm\/dd\/yyyy h:nn AMPM")
Outlook erwartet hier leider immer ein Datum im richtigen Format als String formatiert ... musst du einfach mal mit spielen
aähhmmm schon wieder ein Flüchtigkeitsfehler...
"mm\/dd\/yyyy hh:mm AMPM"
das hast du falsch übernommen dat mut: h:nn sonst hast du die Monate als Minuten
Sekunden dürfen dort nicht mit rein, aber das macht ja bereits der Format-Befehl. Keine Ahnung warum es bei dir jetzt nicht läuft. Hier läuft es auf einem 2010 und einem 2007er in einer VM einwandfrei. Ich weis nur das ich damals mit 2007 schon mal irgendwelche ähnlichen Probleme hatte, was das genau war weis ich nicht mehr.
Sorry.
Versuch es mal so
Sorry.
Was bedeuten diese Rauten genau?
Damit kennzeichnet Outlook ein Datum in SQL-Abfragen, wie der Filter eine ist.Versuch es mal so
DateToCheck = "[ReceivedTime] >= '#" & DateStart & "#'"
Als vorübergehende ebenfalls schnelle Alternative:
Dim inbox As Folder, itms As items, itm As Object
Set inbox = Application.Session.Stores("Mailboxname").GetRootFolder.folders("Foldername")
Set itms = inbox.items
itms.Sort "[ReceivedTime]", True 'Items nach Zeit absteigend sortieren
For Each itm In itms
If itm.ReceivedTime > (Now() - TimeValue("01:35:00")) Then
'mach was mit den Objekten die innerhalb des Zeitraums liegen
Debug.Print itm.ReceivedTime
Else
'Zeit liegt außerhalb des Timerframes verlasse die Schleife vorzeitig
Exit For
End If
Next
Zitat von @bigfudge:
wow danke! ist das schneller als einfach so über die inbox zu iterieren und dabei jedes mailobjekt auf receivedtime zu
überprüfen? weil genauso mache ich das grade :D
Nein das ist nicht das selbe, weil es die Items vorher nach Datum absteigend sortiert, somit kommen die aktuellen Mails als erstes an die Reihe, die Schleife bricht dann ab sobald ein Item älter als angegeben ist. Siehe die Kommentare im Script!wow danke! ist das schneller als einfach so über die inbox zu iterieren und dabei jedes mailobjekt auf receivedtime zu
überprüfen? weil genauso mache ich das grade :D
schon mal was von Intellisense gehört ?! Oder die Funktionsreferenz in Outlook befragt, da steht drin, welche Parameter verlangt werden !! Sowas ist nun wirklich keine Frage Wert ...
http://msdn.microsoft.com/de-de/library/office/ff866960(v=office.15).as ...
http://msdn.microsoft.com/de-de/library/office/ff866960(v=office.15).as ...