Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: 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
Anzeige

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
Anzeige
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
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
Anzeige
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.
Anzeige
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
Anzeige
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
Anzeige
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")

Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA für das Automatische Verschieben von Outlook-Mails


Schritt-für-Schritt-Anleitung

  1. Outlook-Entwicklermodus aktivieren

    • Öffne Outlook und gehe zu „Datei“ > „Optionen“ > „Menüband anpassen“.
    • Aktiviere das Kontrollkästchen „Entwicklertools“ und klicke auf „OK“.
  2. VBA-Editor öffnen

    • Klicke auf „Entwicklertools“ und wähle „Visual Basic“ aus.
  3. Neues Modul erstellen

    • Klicke mit der rechten Maustaste auf „Projekt1“, wähle „Einfügen“ > „Modul“.
  4. VBA-Code einfügen

    • Kopiere und füge den folgenden VBA-Code in das Modul ein:
    Sub MailsVerschieben()
       Dim RegEx As Object
       Set RegEx = CreateObject("vbscript.regexp")
       RegEx.Pattern = "\d{8}"
       Dim FLD As Folder, EML As MailItem
       Dim Art_Nr As Long, i As Long, Ziel As Folder
       Set FLD = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
    
       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)
               If RR.Count > 0 Then
                   Art_Nr = Val(RR(0))
                   ' Hier die Zielordner-Logik implementieren
                   Set Ziel = FLD.Folders("ZielOrdner") ' Hier den entsprechenden Ordner angeben
                   EML.Move Ziel
               End If
           End If
       Next i
    End Sub
  5. Code anpassen

    • Stelle sicher, dass du den entsprechenden Zielordner angibst, wo die Mails verschoben werden sollen.
  6. Makro ausführen

    • Schließe den VBA-Editor und gehe zurück zu Outlook.
    • Klicke auf „Entwicklertools“ > „Makros“ und starte das Makro „MailsVerschieben“.

Häufige Fehler und Lösungen

  • Laufzeitfehler 440: Array-Index außerhalb des zulässigen Bereichs

    • Ursache: Falsche Referenzierung des Ordners. Stelle sicher, dass der Ordnername korrekt ist.
  • Outlook Mail verschieben geht nicht

    • Überprüfe, ob der Zielordner existiert und dass du die richtigen Berechtigungen hast.
  • Outlook Mails verschieben geht nicht

    • Vergewissere dich, dass die E-Mails tatsächlich die erwartete Struktur im Betreff haben.

Alternative Methoden

  • Regeln in Outlook nutzen

    • Du kannst auch die integrierten Regeln von Outlook verwenden, um Mails basierend auf dem Betreff automatisch in bestimmte Ordner zu verschieben.
  • Excel zur Unterstützung

    • Wenn du eine Excel-Datei mit Artikelnummern hast, kannst du diese zur Identifizierung der Mails verwenden und die VBA-Logik darauf basieren.

Praktische Beispiele

  • Artikelnummern im Betreff

    • Wenn der Betreff einer E-Mail „10121314 Milch Schokolade“ ist, kannst du die Artikelnummer „10121314“ extrahieren und die Mail in den entsprechenden Ordner verschieben.
  • Verschieben von Mails älter als 12 Monate

    • Du kannst einen Filter hinzufügen, um nur Mails anzuzeigen, die älter als 12 Monate sind, und diese dann verschieben.

Tipps für Profis

  • RegEx verwenden

    • Nutze reguläre Ausdrücke (RegEx) für komplexere Suchmuster im Betreff. So kannst du flexibler auf verschiedene Artikelnummern reagieren.
  • Automatisierung

    • Überlege, wie du die Makros automatisch beim Start von Outlook oder zu festgelegten Zeiten ausführen lassen kannst, um die Effizienz zu steigern.

FAQ: Häufige Fragen

1. Wie kann ich die Excel-Datei automatisch öffnen? Du kannst den Code erweitern, um die Excel-Datei beim Start des Makros zu öffnen:

Dim WB As Workbook
Set WB = Workbooks.Open("Pfad\zur\Datei.xlsx")

2. Kann ich die Mailadresse anstelle der Accountnummer verwenden? Ja, du kannst den Code anpassen, indem du die Mailadresse direkt in der Session referenzierst:

Set FLD = Session.Folders("meineMailadresse").Folders("Posteingang")

3. Wie kann ich die Mails anzeigen, die älter als 12 Monate sind? Du kannst in der Schleife eine Bedingung hinzufügen, um das Datum der Mails zu überprüfen.

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