Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Outlook VBA, nur eine bestimmte Anzahl an Items in Ordner durchsuchen

Frage Entwicklung VB for Applications

Mitglied: bigfudge

bigfudge (Level 1) - Jetzt verbinden

15.10.2014 um 09:36 Uhr, 1548 Aufrufe, 23 Kommentare, 5 Danke

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
Mitglied: 114757
15.10.2014, aktualisiert um 10:24 Uhr
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:
http://www.outlookcode.com/article.aspx?id=30
01.
sFilter = "[ReceivedTime] >= '" & Format(Now - 1, "ddddd") & "'" 
02.
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
Bitte warten ..
Mitglied: bigfudge
15.10.2014 um 10:24 Uhr
Danke! Werde ich sobald ich Zeit habe (spätestens morgen früh) ausprobieren und Feedback geben. Trotzdem direkt mal die 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?

Gruß
Fudge
Bitte warten ..
Mitglied: 114757
15.10.2014, aktualisiert um 10:27 Uhr
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 kannst
Bitte warten ..
Mitglied: bigfudge
15.10.2014 um 10:28 Uhr
Alles klar, werde das wie gesagt spätestens morgen ausprobiern und Rückmeldung geben!
Bitte warten ..
Mitglied: bigfudge
15.10.2014 um 10:57 Uhr
Konnte es mir doch schon eher ansehen.

Kriege bei der Zuweisung der Inbox einen TypeMissmatch Error:

01.
sFilter = "[ReceivedTime] >= '" & Format(Now - 1, "ddddd") & "'" 
02.
 
03.
            'Set Inbox to specified folder (e.g. Foldername) 
04.
            Set Inbox = Application.Session.Stores("Mailboxname").GetRootFolder.folders("Foldername").Items.Restrict(sFilter) 
05.
 
Dazu vllt. eine Idee?

Gruß
Bitte warten ..
Mitglied: 114757
15.10.2014, aktualisiert um 11:20 Uhr
Zitat von bigfudge:
Dazu vllt. eine Idee?
klar, du weist einem Folder-Objekt eine Items-Collection zu, das geht natürlich nicht

01.
for each item in Application.Session.Stores("Mailboxname").GetRootFolder.folders("Foldername").Items.Restrict(sFilter) 
02.
  msgbox item.Subject 
03.
next
Bitte warten ..
Mitglied: bigfudge
15.10.2014 um 11:30 Uhr
Hi, ja da kam ich eben auch dahinter :D.

Weise ich dem sFilter ein Datum zu z.B. mit

01.
 DateStart = #15/10/2014# 
02.
            DateToCheck = "[ReceivedTime] >= """ & DateStart & """"


und ich Restricte damit funktioniert alles.

Würde aber gerne immer von der aktuellen Zeitpunkt (Now?) z.B. eine Stunde abziehen um es immer die Mails der letzten Stunde zu haben.

01.
DateStart = Format((Now() - TimeValue("01:35:00")), "ddddd h:nn AMPM") 
02.
DateToCheck = "[ReceivedTime] >= """ & DateStart & """"
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.

Gruß
Bitte warten ..
Mitglied: 114757
15.10.2014, aktualisiert um 11:55 Uhr
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
nehm mal einfache Anführungszeichen um das Datum herum.
Bitte warten ..
Mitglied: bigfudge
15.10.2014 um 12:03 Uhr
Mh... sehe den Fehler nicht - vllt. du? :D

01.
  
02.
DateStart = Format(Now - TimeValue("01:35:00"), "ddddd h:nn AMPM") 
03.
DateToCheck = "[ReceivedTime] >= ""' & DateStart & '""" 
04.
'Set Inbox to specified folder (e.g. Foldername) 
05.
Set Inbox = Application.Session.Stores("Mailboxname").GetRootFolder.folders("Foldername") 
06.
Set myFolder = Inbox.Items.Restrict(DateToCheck) 
07.
 
beim Debuggn hat Inbox 17 Items, myFolder 0. Verwende ich bei DateStart das hard-coded Datum funktioniert es wiegesagt :/
Bitte warten ..
Mitglied: 114757
15.10.2014 um 12:08 Uhr
01.
DateToCheck = "[ReceivedTime] >= '" & DateStart & "'"
Bitte warten ..
Mitglied: bigfudge
15.10.2014, aktualisiert um 12:30 Uhr
Mhhhh.. scheint nicht zu klappen.

Beispiel von Item aus Inbox: Item 18: ReceivedTime: #15.10.2014 12:14:49#

myFolder -> Items -> Count = 0
Inbox -> Items -> Count = 18

EDIT: Verwende Outlook 2007 (auf Englisch) falls das was ändert

Bitte warten ..
Mitglied: 114757
15.10.2014, aktualisiert um 12:41 Uhr
Zitat von bigfudge:
EDIT: Verwende Outlook 2007 (auf Englisch) falls das was ändert
Das wird es vermutlich sein (Unterschied zwischen Systemsprache und Outlook-Sprache), formatiere das Datum mal ins englische Format 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
Bitte warten ..
Mitglied: bigfudge
15.10.2014, aktualisiert um 13:39 Uhr
Ja liegt eigentlich nahe.

Will leider trotzdem nicht (

Werte laut Debugger:

DateStart : #15.10.2014 11:29:00# : Date
DateToCheck : "[ReceivedTime] >= '15.10.2014 11:29:00'" : String

MyFolder 0
Inbox: 18


mit
01.
DateStart = #10/14/2014#
funktioniert es, das kann doch nicht sein? :/

Also Unterschied zwischen Outlook + Systemsprache hab ich nicht, ist beides auf Englisch

aktuell:

01.
DateStart = Format(Now - TimeValue("01:35:00"), "mm\/dd\/yyyy hh:mm AMPM") 
02.
            DateToCheck = "[ReceivedTime] >= '" & DateStart & "'" 
03.
            'Set Inbox to specified folder (e.g. Foldrename) 
04.
            Set Inbox = Application.Session.Stores("Mailboxname").GetRootFolder.folders("Foldername") 
05.
            Set myFolder = Inbox.Items.Restrict(DateToCheck) 
06.
 
habe es mit mm/dd/yyyy AMPM, mm\dd\yyyy usw. versucht -.-

EDIT: aber du hast recht, meine Systemzeit ist natürlich auf Germany eingestellt.

Date formats

short date: dd.MM.yyyy
long date dddd, d.MMMM yyyy

Time formats
Short time HH:mm
Long time: HH:mm:ss

Da aber die Daten beim Debugger gleich angezeigt werden, kann es daran fast nicht liegen oder?
Also ein mail Item aus der Inbox hat genau das selbe Format wie DateStart

Gruß
Bitte warten ..
Mitglied: 114757
15.10.2014, aktualisiert um 14:40 Uhr
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
Bitte warten ..
Mitglied: bigfudge
15.10.2014 um 14:49 Uhr
Ja, damit steht im Debugger dann : DateStart : #15.109.2014 01:06:00# also aktuelle Zeit - 1h 35min. Ohne AMPM halt die normale Zeit.

Verstehe nicht warum das nicht funktioniert?`

Wenn die normalen Mailitems in der Inbox als Received Time z.B. #15.10.2014 14:41:32# haben und im DateToCheck String folgendes steht:

"[ReceivedTime] >= '15.10.2014 13:11:00'"" muss das doch passen oder nicht? ich mein genau diese Werte werden doch letztendlich verglichen?

Kapier das nicht -.-. Wie kann das nur mit hard-coded Date funktionieren und so nicht? Was bedeuten diese Rauten genau?

Gruß
Bitte warten ..
Mitglied: 114757
15.10.2014, aktualisiert um 15:09 Uhr
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.
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 & "#'"
Bitte warten ..
Mitglied: bigfudge
15.10.2014 um 15:21 Uhr
Leider auch nicht. Mensch... das wäre wirklich genau die Lösung die ich bräuchte und jetzt geht das komischerweise nicht -.-.

Falls dir noch was einfällt immer her damit! Nochmal danke für deine bisherige Hilfe!
Bitte warten ..
Mitglied: 114757
15.10.2014, aktualisiert um 16:05 Uhr
Als vorübergehende ebenfalls schnelle Alternative:
01.
Dim inbox As Folder, itms As items, itm As Object 
02.
Set inbox = Application.Session.Stores("Mailboxname").GetRootFolder.folders("Foldername")  
03.
Set itms = inbox.items 
04.
itms.Sort "[ReceivedTime]", True   'Items nach Zeit absteigend sortieren 
05.
For Each itm In itms 
06.
    If itm.ReceivedTime > (Now() - TimeValue("01:35:00")) Then 
07.
        'mach was mit den Objekten die innerhalb des Zeitraums liegen 
08.
        Debug.Print itm.ReceivedTime 
09.
    Else 
10.
        'Zeit liegt außerhalb des Timerframes verlasse die Schleife vorzeitig 
11.
        Exit For 
12.
    End If 
13.
Next
Bitte warten ..
Mitglied: bigfudge
15.10.2014 um 16:13 Uhr
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

Gruß
Bitte warten ..
Mitglied: 114757
15.10.2014, aktualisiert um 16:21 Uhr
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!
Bitte warten ..
Mitglied: bigfudge
15.10.2014 um 16:47 Uhr
Ja, sieht alles gut aus. Hoffen wir mal dass es das ursprüngliche Problem (Absturz bei 8000Mails) verhindert. 8000Items zu sortieren ist vllt. auch nicht zu unterschätzen. Aber ich schätze mal das Sortieren und das direkte Filtern nach der Zeit nimmt sich nicht viel?

Gruß
fudge
Bitte warten ..
Mitglied: bigfudge
15.10.2014 um 17:42 Uhr
Warum eigentlich dieses True? sollte da nicht etwas wie DESC oder so stehen?
Bitte warten ..
Mitglied: 114757
16.10.2014, aktualisiert um 08:14 Uhr
Zitat von bigfudge:
Warum eigentlich dieses True? sollte da nicht etwas wie DESC oder so stehen?
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 ...
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...