Anzeige
Archiv - Navigation
888to892
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
888to892
888to892
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

For Each Mail ...

For Each Mail ...
30.07.2007 11:17:00
gerwas
Hallo weite Welt - mal wieder
Ich sitze hier vor einem Phänomen, was ich mir nicht erklären kann!
Hintergrund ist folgendes:
In einer Schleife lese ich per Macro OutLook-Postfächer(Posteingang) aus und markiere eMails, die ich verarbeitet habe als Unread=False. Alle nicht verarbeiteten Inhalte des Postfaches sind nach Durchlauf der Schleife markiert als Unrad=True.
Anschließen sollen in einer anderen Schleife die Unrad=False markierten verschoben werden. Dafür verwende ich die nachfolgende Routine:
Set oF=CreateObject("Outlook.Application").GetNamespace("MAPI")
For Each Mail in oF.GetDefaultFolder(olFolderInbox).Items
a=a+1
If Mail.Unread=True Then Mail.Move oF.Folders("abgearbeitet")
Next
Soweit sollte es klappen - tut es aber nicht!
Die Mails z.B. 3,4,7,9,12,13,16 (von insgasamt 16) sind Unread=True markiert
Die Schleife wird mit a=12 verlassen! Warum, oder was mache ich falsch?
gruss GerWas

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: For Each Mail ...
30.07.2007 11:33:25
Chris
Servus,
stimmt die Zeile ?
If Mail.Unread=True Then Mail.Move oF.Folders("abgearbeitet")
Wolltest du nicht dei Unread = False verschieben?
Gruß
Chris

AW: For Each Mail ...
30.07.2007 12:24:32
AndrRo
Hallo GerWas,
meine Vermutung ist, dass durch die Verschiebung die Anzahl verringert, und das Makro dadurch mit der Zuordnung des nächsten Mails Probleme hat.
Desweiteren hat sich die Logik der internen Mailnumerierung ab 2003 geändert. Bis 2002 hatte das neues Mail die Nummer 1 bekommen. Ab 2003 erhält das älteste Mail die 1 und das neueste die größte Nummer.
Mein Vorschlag ist:
with oF.GetDefaultFolder(olFolderInbox)
Anzahl=.Items.count
For i=Anzahl to 1 Step -1
a=a+1 'Wird nicht benötigt
If .Items(i).Unread=True Then .Items(i).Move oF.Folders("abgearbeitet")
Next
end with
Somit arbeitet das Makro vom jüngsten zum ältesten alle Mails ab und es kann eine Probleme mit der internen Numerierung haben.
gruss
Anderas

Anzeige
AW: For Each Mail ...
30.07.2007 13:57:06
gerwas
Danke, so gehts

AW: For Each Mail ...
30.07.2007 18:45:00
Ramses
Hallo
"...Bis 2002 hatte das neues Mail die Nummer 1 bekommen. Ab 2003 erhält das älteste Mail die 1 und das neueste die größte Nummer. .."
Outlook nummeriert die Mails intern mit einer 16 stelligen ID-Nummer und nicht von 1 bis irgendwas.
Das hat nichts mit der internen Nummerierung zu tun, wenn du von 1 zu X arbeitest.
Wenn du anfängst und zählst wieviele Mails du drin hast dann hast du z.B.
For i = 1 to 10
Wenn du nun das erste Mail verschiebst, dann greifst du mit der nächsten Zählvariable 2 auf das nun 2. Object zu, das aber eigentlich das dritte ist, denn das zweite Mail ist nun nach oben "gerutscht" und nun die Nummer 1.
Irgendwann hast du weniger Mails drin, als du zu Anfang gezählt hast, und dann kracht es eben.
Daher beginnt man von "hinten nach vorne", denn dann wird das Mailobject verschoben das der Zählvariable entspricht, und deine Schleife greift mit der nächsten Zählvariable auf das nächste nun exisiterende Mailobject.
So nach dem Motto:
Was ich hinter mir habe (gelöscht :-) ) interessiert mich nicht mehr.
Das gleiche Verfahren musst du auch anwenden, wenn du Zeilen in einer EXCEL-"datenbank" löschen willst.
Gruss Rainer

Anzeige
@Rainer
31.07.2007 07:54:46
AndrRo
Hallo Rainer,
was ich sagen wollte ist, mit
GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items(1) bekam man bis 2002-Version, das jüngste Mail als Rückgabe, ab 2003-Version erhält man das älteste Mail als Antwort.
Probiere es aus!
Also hat sich die interne Zuordnung (wie auch immer du das bezeichnen möchtest) geändert.
Das war der Kern meiner Aussage.
gruss
Andreas

AW: @Rainer
31.07.2007 13:30:09
Ramses
Hallo
"...Items(1).."
Nun ist das klarer :-)
Das hat aber nichts mit der "Nummerierung" zu tun, damit gibt Outlook nur das erste Object zurück das sich im Folder befindet.
Ob sich die interne Verwaltung geändert hat (alt-neu oder neu-alt) kann ich nicht mehr nachvollziehen da ich kein O2002 mehr habe.
Das könnte auch mit der Grundeinstellung der Darstellung zu tun haben. Aber ich probier mal was in O2003 aus.
Gruss Rainer
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige