Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: eMails verschieben in Outlook

eMails verschieben in Outlook
27.02.2022 08:58:50
Heinzs
Hallo Excel-Profis,
ich habe ein Mapi Outlook Postfach mailbox retouren auf einem Exchange Server.
Aus diesem Postfach mailbox retouren sollen Einträge vom Ordner Posteingang in Posteingang\Retourenbegleitschein verarbeitet verschoben werden.
Im Posteingang liegen ursprünglich 2500 Einträge; es werden aber nur genau 1250 Einträge ; d.h. die Hälfte verschoben.
Das Makro ist diesem Eintrag angehangen.
Wenn ich Item.Move movetofolder auskommentiere werden alle eMails gelesen und im Sheet emails protokolliert.
Hat jemand eine Idee?
Danke für Hilfe!
MfG
Heinz

Sub test()
Sheets("emails").Select
' Outlook-Konstanten
Const olFolderInbox = 6
Const olTXT = 0
Application.StatusBar = False
Application.ScreenUpdating = False
' Outlook-Objekt erstellen
Set oOutlook = CreateObject("Outlook.Application")
' Namespace: MAPI
Set oNamespace = oOutlook.GetNamespace("MAPI")
' Recipient anbinden
Set myRecipient = oNamespace.CreateRecipient("mailbox retouren")
myRecipient.Resolve
' Outlook-Ordner: "Neue Nachrichten"
Set oFolder = oNamespace.Folders("mailbox dpg-retouren").Folders("Posteingang")
' Outlook-Ordner: Archiv
Set movetofolder = oNamespace.Folders("mailbox retouren").Folders("Posteingang")
Set movetofolder = movetofolder.Folders("Retourenbegleitschein verarbeitet")
e1 = oFolder.Items.Count
i1 = 0
For Each Item In oFolder.Items
i1 = i1 + 1
If i1 Mod 10 = 0 Or i1 = e1 Then
Application.StatusBar = gn_sheet & " Protokollverarbeitung, Datensatz " & Format(i1, "0000000") & " von " & Format(e1, "0000000") & " Endzeit = " & Anfangszeit1 + (Now() - Anfangszeit1) / i1 * e1
DoEvents
End If
Sheets("emails").Select
e2 = i1 + 1
gn_creationtime = Item.CreationTime
gn_mailtyp = TypeName(Item)
gn_sendername = Item.sendername
gn_senderemailaddress = Item.SenderEmailAddress
gn_betreff = Item.Subject
gn_anhang_anzahl = Item.attachments.Count
Cells(e2, 1) = e2
Cells(e2, 2) = gn_mailtyp
Cells(e2, 3) = gn_creationtime
Cells(e2, 4) = gn_sendername
Cells(e2, 5) = gn_senderemailaddress
Cells(e2, 6) = gn_betreff
Item.Move movetofolder
Next
End Sub
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: eMails verschieben in Outlook
27.02.2022 20:35:46
Yal
Hallo Heinz,
beim Löschen (und anscheinend auch beim Verschieben) innerhalb einer Schleife gibt es immer das Problem, dass wenn das Element, das durch die Lauf-Variable garede betrachtet wird, gelöscht wird, dann wird sofort die nächste genommen. Dann kommt das "Next", das sagt nimmt das nächste.
Also Du hast die Element 1,2,3:

For each Elt in Elements
Elt.Delete
Next
es nimmt Elt = 1, wird gelöscht, also Elt wird 2, gehe auf Next, also Elt = 3. 2 bleibt bestehen und wird nicht gelöscht.
Das genau die Hälfte der Mails nicht verschoben werden, deutet auf diesen Effekt. Lässt Du die Makro nochmal laufen, werden wohl 750 übrig bleiben.
Du musst in dem Fall

For i = Items.Count -1 to 0 Step -1
Items(i).Delete 'oder Verschiebe
Next
Man sagt dazu "von hinten anfangen" oder um es sich zu merken: wie beim Boden wischen, immer zurück zur Tür.
Übrigens ist "item" ein doofe Name für eine Variable: zu nah an einem reservierten Begriff.
Warum übergibst Du die Item-Eigenschaften (CreationTime, SenderName, usw) zuerst einer Variable und dann die Variable in die Tabelle? Warum nicht direkt in die Tabelle?
VG
Yal
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige