Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1872to1876
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
Inhaltsverzeichnis

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

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

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige