Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1912to1916
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

VBA Outlook Mail verschieben

VBA Outlook Mail verschieben
06.01.2023 09:59:07
Marco
Hey Leute,
ich habe bei mir in der Firma ein kleines Problem. Wir haben in unserem Team neu eine Gemeinsame Mailadresse bekommen. Nun habe ich für jeden der 7 Team Mitglieder einen Ordner erstellt. Nun möchte ich dass wenn eine Mail in das Postfach kommt dass anhand der Betreffes die Mail entsprechend dem Team Mitglied zugeordnet wird. Wir haben dazu die Regel, dass im Betreff immer die Artikelnummer des Produktes sein muss. Ich habe dazu eine liste mit ca. 9000 Artikel Nummern die bereits entsprechend zugewiesen sind. Nun möchte ich diese über VBA so programmieren, dass die Mails mit dem entsprechenden Betreff in den Entsprechenden Ordner verschoben wird.
Beispiel:
Artikel 1-10 in Ordner Marco
Artikel 11-20 in Ordner Joel
Artikel 21-30 in Ordner Lea
Kann mir von euch jemand helfen, wie ich dies Lösen kann mit VBA? Ich möchte nicht die gesamten Artikel einzeln über die Regeln im Outlook Manuel erstellen.
Danke für eure Hilfe.
Gruss Marco

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Outlook Mail verschieben
06.01.2023 10:48:04
Fennek
Hallo,
ein VBA-Code erfordert eine genaue Referenzierung der Ordner. Wenn jemand das System sieht, ist es recht einfach. Für das Forum müsstest Du die Informationen mit der richtigen Präzision zeigen.
mfg
AW: VBA Outlook Mail verschieben
06.01.2023 12:03:52
Marco
Hallo Fennek
Was meinst du mit genauer Referenzieren? und was müsste ich hier im Forum entsprechend angeben?
Gruss Marco
Anzeige
AW: Beispiel
06.01.2023 12:39:17
Fennek
Hallo,
hier ein Beispiel:

Set mIts = Application.GetNamespace("MAPI").Folders.Item("myEmail@gmx.de").Folders.Item("Name1").Folders.Item("Name1").Items
Auch die Artikel-Nr. müssen sehr genau bekannt sein, um sie in beliebigen Subjects finden zu können.
mfg
AW: Beispiel
06.01.2023 12:54:41
Marco
Hallo Fennek
Die genaue Mail adresse habe ich. Verstehe ich es richtig das bei Folders.Item("Name1") der Ordnername angegeben werden muss bei beiden? Wo müsste ich die erforderlichen Artikel Nr. eintragen die geprüft werden sollen?

 Set mIts = Application.GetNamespace("MAPI").Folders.Item("myEmail@gmx.de").Folders.Item("Name1").Folders.Item("Name1").Items
Danke für die Hilfe.
Anzeige
AW: Beispiel
06.01.2023 12:58:58
Fennek
Hallo,
ist es so schwer präzise zu antworten?
ISt die Ordnerstruktur so:
Posteingang
-- Marko
-- Joel
-- Lea
-- etc
Zeige bitte einen Betreff mit der Artikel-Nr.
mfg
AW: Beispiel
06.01.2023 13:02:50
Marco
Sorry, ich kenne mich nicht so gut aus damit.
Ja die Ordnerstruktur ist wie von dir beschrieben.
der Betreffe sieht so aus:
10121314 Milch Schokolade (evtl. weiterer Text).
danke dir für die Hilfe.
AW: Linkbündig
06.01.2023 13:07:27
Fennek
Ok, die Zahl ist immer linksbündig. Gibt es Bereiche, die einem Kollegen zugeordnet sind, also z.B.
10000000 - 2000000 Marko
20000001 - 3000000 Lea
AW: Artikel erkennen
06.01.2023 13:17:22
Fennek
Hallo,
hier ist ein Code, der die Artikel-Nr im Betreff erkennen sollte:

Sub Marko()
Dim FLD As Folder, EML As MailItem
Dim Art_Nr As Long, i As Long
Set FLD = GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
For i = 1 To 20
If FLD.Items(i).Class = olMail Then
Set EML = FLD.Items(i)
Art_Nr = Val(Split(EML.Subject)(0))
If Art_Nr Then MsgBox Art_Nr
End If
Next i
End Sub

Anzeige
AW: Linkbündig
06.01.2023 13:28:06
Marco
Muss die Zahl immer links sein oder kann diese einfach im Betreff stehen? Wenn sie links sein muss dann werden ich entsprechend in der Firma sagen dass wir nur noch solche Mails entgegen nehmen werden.
Nein es ist nicht ein gewisser Bereich von und bis einer Person zugeordnet und dann die nächste Person. Wir haben ca. 9000 Artikel Nummern die Personen zugeordnet sind (siehe Datei im Anhang).
https://www.herber.de/bbs/user/157124.xlsx
mfg
AW: Firma zu groß
06.01.2023 13:52:36
Fennek
Hallo,
mit RegEx kann die Artikel-Nr an jeder belibigen Stelle des Betreffs erkannt werden. Für die Zuordnung ist ein Öffnen der Excel-Datei notwendig.

Sub Marko()
Dim RegEx As Object: Set RegEx = CreateObject("vbscript.regexp")
Dim FLD As Folder, EML As MailItem
Dim Art_Nr As Long, i As Long, RR As Object
Const Micros As String = "qwe 10126629 fnwf"
RegEx.Pattern = "\d{8}"
Set RR = RegEx.Execute(Micros)
Debug.Print RR(0)
Set FLD = GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
For i = 1 To 20
If FLD.Items(i).Class = olMail Then
Set EML = FLD.Items(i)
Art_Nr = Val(Split(EML.Subject)(0))
If Art_Nr Then MsgBox Art_Nr
End If
Next i
End Sub
Aber Großkonzerne sollten sich einen Dienstleister leisten können.
mfg
Anzeige
AW: Firma zu groß
06.01.2023 14:16:32
Marco
Ich würde ja nichts dabei lernen wenn ich mich nicht mehr damit auseinandersetzen müsste bezüglich dem Dienstleisters.
Ich möchte halt einfach das die Mails die reinkommen anhand der Artikel Nr. gleich den entsprechenden Personen/ Ordnern zuweisen so dass jeder aus meinem Team nur die Mails lesen muss von den Artikeln die Ihn betreffen. Alle Mails die dann noch im Ordner Posteingang sind wären dann nicht mit einer Artikel Nr. im Betreff (oder noch nicht zugewiesener Artikel Nr.)
mfg
AW: zum lernen
06.01.2023 14:52:52
Fennek
Für mein Outlook mit 3 Accounts habe ich jetzt alle Komponente zusammen. Der Name wird aus der Excel-Datei ausgelesen und die Mail wird verschoben. Da ich keine Ordner angelgen wollte, immer in "Drafs"

Sub Marko()
Dim RegEx As Object: Set RegEx = CreateObject("vbscript.regexp")
Dim Acc As Account, FLD As Folder, Ziel As Folder, EML As MailItem
Dim WB As Object
Dim Art_Nr As Long, Nm As String, i As Long, RR As Object
Const Micros As String = "qwe 10126629 fnwf"
'Debug.Print Session.Accounts(3).DisplayName
Set WB = GetObject(Environ("userprofile") & "\desktop\Mappe1.xlsx")  '157124.xlsx")
RegEx.Pattern = "\d{8}"
Set RR = RegEx.Execute(Micros)
Debug.Print RR(0)
Nm = WB.sheets(1).Columns(1).Find(RR(0)).Offset(, 1).Value  'Name
Debug.Print Nm
'Set FLD = GetNamespace("MAPI").Folders(Session.Accounts(3).DisplayName).GetDefaultFolder(olFolderInbox)
Set FLD = Session.Folders.Item(Session.Accounts(3).DisplayName).Folders("Posteingang")
Set Ziel = FLD.Folders("Drafts")
For i = FLD.Items.Count To 1 Step -1
If FLD.Items(i).Class = olMail Then
Set EML = FLD.Items(i)
Set RR = RegEx.Execute(EML.Subject)
Debug.Print RR.Count
If RR.Count > 0 Then Art_Nr = Val(RR(0))
If Art_Nr > 0 Then EML.Move Ziel
Art_Nr = 0
End If
Next i
End Sub
Mehr Arbeit möchte ich mir so als kostenlose Unterstützung für Gröst-Händler nicht machen.
Anzeige
AW: Eigentlich ein einfacher Code
06.01.2023 17:33:10
Fennek

Sub Marko()
'verschiebt Mails in den Ordner des nach Artikel-Nr. zuständigen MA
'Betreff: 8-stellige Zahl: qwe 10126629 fnwf
Dim RegEx As Object
Set RegEx = CreateObject("vbscript.regexp")
RegEx.Pattern = "\d{8}"
Dim Acc As Account, FLD As Folder, Ziel As Folder, EML As MailItem
Dim WB As Object
Dim Art_Nr As Long, Nm As String, i As Long, RR As Object
Set WB = GetObject(Environ("userprofile") & "\desktop\Mappe1.xlsx")  '157124.xlsx")
'set fld = getnamespace("MAPI").GetDefaultFolder(olFolderInbox) 'Normalfall
Set FLD = Session.Folders.Item(Session.Accounts(3).DisplayName).Folders("Posteingang")
For i = FLD.Items.Count To 1 Step -1    'ExChange: 1 to .count
If FLD.Items(i).Class = olMail Then
Set EML = FLD.Items(i)
Set RR = RegEx.Execute(EML.Subject)
If RR.Count > 0 Then
Nm = WB.sheets(1).Columns(1).Find(RR(0)).Offset(, 1).Value  'Name
Set Ziel = FLD.Folders(Nm)
EML.Move Ziel
End If
End If
Next i
End Sub

Anzeige
AW: Eigentlich ein einfacher Code
09.01.2023 07:11:25
Marco
Guten Morgen, danke für deine Unterstützung.
Ich habe deine Programmierung nun in ein Modul eingefügt. Ich habe mir im Posteingang ein Ordner "Marco" erstellt, ich habe mir eine Mail gesendet mit dem Betreff einer Artikel Nr. die dem Name Marco zugewiesen ist. Dann habe ich die Programmierung laufen lassen.
Ich bekomme jedoch bei beiden Programmierungen die du mir gesendet hast an der geleichen stelle eine Fehlermeldung.
"Laufzeitfehler 440, Array-Index ausserhalb des zulässigen Bereichs"

Set FLD = Session.Folders.Item(Session.Accounts(3).DisplayName).Folders("Posteingang")
Woran könnte dies liegen?
Danke für die Hilfe!
mfg
Anzeige
AW: Eigentlich ein einfacher Code
09.01.2023 08:02:03
Marco
Ok ich habe es hin bekommen musste die Account Nr. ändern.
Nun habe ich jedoch eine weitere Frage. Wie kann ich die Excel Datei in der Programmierung zu Beginn automatisch öffnen und am Ende wieder schliessen?
Zudem hat es jetzt alle Mails in den Ordner Marco verschoben und nicht nur die, die auch in der Excel Tabelle zugewiesen sind. Verstehen ich es richtig dass jeder Account nur seine Verschieben kann? dies wäre auch kein Problem dann würde ich die Programmierung bei jedem der es benötigt entsprechend einfügen.
Wie kann ich aus dem Outlook die Programmierung Starten?
mfg und danke für die Hilfe!
Anzeige
AW: Eigentlich ein einfacher Code
09.01.2023 14:59:04
Marco
Hallo zusammen
Wäre es auch möglich anstelle der Accounts Nr. auch eine Mail Adresse anzugeben? Wie müsste ich dann den Code anpassen?
Mit Accounts("meineMailadresse") hat es nicht geklappt.
Danke für die Hilfe!

Set FLD = Session.Folders.Item(Session.Accounts(1).DisplayName).Folders("Posteingang")

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige