E-Mail per Makro in Ordner verschieben

Home-›Foren-›Outlook-›Outlook VBA-›E-Mail per Makro in Ordner verschieben

15 Antworten anzeigen - 1 bis 15 (von insgesamt 16)
  • Autor
    Beitrag
  • #149046
    MichaelBauer
    Participant

      In der VBA-Hilfe findest Du ein Bsp. zur Move-Funktion. Damit das über einen Button aufgerufen werden kann, muss die Deklaration so aussehen:
      [code]
      Public Sub Verschieben()

      End Sub[/code]

      Viele Grüße
      Michael Bauer

      #149050
      Unbekannt
      Participant

        Ich begrüßen ja i. d. R. Hilfe zur Selbsthilfe, aber da ich wirklich gar keine Ahnung von VBA habe, wird das trotzdem schwierig für mich? Welches \”Objekt\” muss ich wählen? Wie wird das \”Ziel\” korrektur aufgeschrieben (mit Anführungszeichen, mit Hochkomma)?

        Folgendes hat nicht funktioniert:

        [code]Public Sub Verschieben()

        olMailItem.Move Test

        End Sub [/code]

        #149079
        MichaelBauer
        Participant

          [code]
          Dim TargetFolder as Outlook.Mapifolder
          Dim obj as Object
          Dim Sel as Outlook.Explorer

          Set TargetFolder=Application.Session.GetDefaultFolder(olFolderDeleteItems)
          Set Sel=Application.ActiveExplorer.Selection

          If Sel.Count Then
          Set obj=Sel(1)
          obj.Move targetFolder
          Endif
          [/code]

          Viele Grüße
          Michael Bauer

          #149090
          Unbekannt
          Participant

            Vielen Dank! Jedoch: \”Mindestens ein Parameterwert ist ungültig.\” wird angezeigt. Und wo trage ich den Zielordner ein?

            #149110
            MichaelBauer
            Participant

              Sorry, es fehlte ein \’d\’

              statt: olFolderDeleteItems
              besser: olFolderDeletedItems

              Was meinst Du mit der Frage nach dem Zielordner?

              Viele Grüße
              Michael Bauer

              #149138
              Unbekannt
              Participant

                Jetzt kommt die Fehlermeldung \”Typen unverträglich\”.

                Ich möchte doch, dass ich eine E-Mail in den Ordner XYZ verschiebe, wenn ich auf einen Button klicke. Also ohne dass der ordner erst noch manuell gewählt werden muss. Folglich muss doch in dem Makro der Zielordner XYZ irgendwo angegeben werden.

                #149174
                MichaelBauer
                Participant

                  Hier ist eine Funktion, die Dir zum einem Pfad den Ordner liefert: http://www.outlookcode.com/d/code/getfolder.htm.

                  Dann zeige mal, wie Dein Code nun aussieht und markiere bitte die Stelle, an welcher der Fehler auftritt.

                  Viele Grüße
                  Michael Bauer

                  #149188
                  Unbekannt
                  Participant

                    Danke für deine Hilfe, aber das wird mir jetzt zu kompliziert. VBA beherrsche ich nunmal leider nicht. Ich dachte, das wären vielleicht 3 Zeilen Code geworden oder so. Ich werde die E-Mails nun händisch verschieben.

                    #151141
                    Unbekannt
                    Participant

                      Hallo,

                      hier ist der Code für das verschieben von markierten Emails in outlook ab 2000.
                      Einziges Problem was ich noch habe ist,das die Bilder von HTML Mails nicht in der
                      HTML angezeigt werden sondern nur mit in den Ordner kopiert sind. Falls jemand
                      dafür eine Lösung hat, wäre ich sehr dankbar.
                      Code:

                      Option Explicit

                      Sub Command1_Click()

                      \’rem Deklaration und Definition
                      Dim myOlApp As Outlook.Application
                      Dim myMail As Outlook.MailItem
                      Dim mail As String
                      Dim pfad As String
                      Dim fs As Object
                      Dim anhang As Attachment
                      Dim zaehler As Integer

                      \’Erzeuge Objektinstanz für mailitem
                      Set myOlApp = CreateObject(\”Outlook.Application\”)
                      Set myMail = myOlApp.CreateItem(olMailItem)
                      Set fs = CreateObject(\”Scripting.FileSystemObject\”)

                      \’Inputbox test -> vbCrLf für Zeilenumbruch
                      pfad = InputBox(\”Eingabe des Pfades:\”, \”Pfadeingabe\”, \”c:\\temp\\\”)

                      \’prüft ob das Verzeichnis existiert
                      If fs.FolderExists(pfad) = True Then
                      \’MsgBox (\”Pfad existiert\”)
                      Else
                      MsgBox (\”Pfad existiert nicht Programmabbruch\”)
                      End
                      End If

                      \’Für jedes ausgewähltes Objekt im explorer
                      For Each myMail In Outlook.ActiveExplorer.Selection

                      \’Wenn email txt
                      If myMail.GetInspector.EditorType = olEditorText Then

                      If myMail.Body <> \”\” Then

                      mail = Replace(myMail.Subject, \”:\”, \” \”)
                      mail = Replace(mail, \”&\”, \” \”)
                      mail = Replace(mail, \”<\", \" \") mail = Replace(mail, \">\”, \” \”)
                      mail = Replace(mail, \”?\”, \” \”)
                      mail = Replace(mail, \”\\\”, \” \”)
                      mail = Replace(mail, \”/\”, \” \”)
                      mail = Replace(mail, \”*\”, \” \”)
                      mail = Replace(mail, \”|\”, \” \”)

                      \’Mails speichern
                      myMail.SaveAs pfad & mail & \”.html\”, olTXT

                      \’Anhang mit speichern
                      For Each anhang In myMail.Attachments
                      anhang.SaveAsFile \”c:\\temp\\\” & anhang.FileName

                      Next

                      Else

                      MsgBox (\”Leerer Body\”)
                      End If
                      End If

                      \’wenn email als html
                      If myMail.GetInspector.EditorType = olEditorHTML Then

                      If myMail.Body <> \”\” Then

                      mail = Replace(myMail.Subject, \”:\”, \” \”)
                      mail = Replace(mail, \”&\”, \” \”)
                      mail = Replace(mail, \”<\", \" \") mail = Replace(mail, \">\”, \” \”)
                      mail = Replace(mail, \”?\”, \” \”)
                      mail = Replace(mail, \”\\\”, \” \”)
                      mail = Replace(mail, \”/\”, \” \”)
                      mail = Replace(mail, \”*\”, \” \”)
                      mail = Replace(mail, \”|\”, \” \”)

                      For zaehler = 1 To 2

                      \’Mails speichern
                      myMail.SaveAs pfad & mail & \”.html\”, olHTML

                      Next

                      \’Anhang mit speichern
                      For Each anhang In myMail.Attachments
                      anhang.SaveAsFile \”c:\\temp\\\” & anhang.FileName

                      Next

                      Else

                      MsgBox (\”Leerer Body\”)
                      MsgBox (myMail.Body)
                      End If
                      End If
                      \’wenn email rtf
                      If myMail.GetInspector.EditorType = olEditorRTF Then

                      If myMail.Body <> \”\” Then

                      mail = Replace(myMail.Subject, \”:\”, \” \”)
                      mail = Replace(mail, \”&\”, \” \”)
                      mail = Replace(mail, \”<\", \" \") mail = Replace(mail, \">\”, \” \”)
                      mail = Replace(mail, \”?\”, \” \”)
                      mail = Replace(mail, \”\\\”, \” \”)
                      mail = Replace(mail, \”/\”, \” \”)
                      mail = Replace(mail, \”*\”, \” \”)
                      mail = Replace(mail, \”|\”, \” \”)

                      \’Mails speichern
                      myMail.SaveAs pfad & mail & \”.rtf\”, olRTF

                      \’Anhang mit speichern
                      For Each anhang In myMail.Attachments
                      anhang.SaveAsFile \”c:\\temp\\\” & anhang.FileName
                      Next
                      Else
                      MsgBox (\”Leerer Body\”)
                      End If
                      End If

                      \’wenn email doc
                      If myMail.GetInspector.EditorType = olEditorWord Then

                      If myMail.Body <> \”\” Then

                      mail = Replace(myMail.Subject, \”:\”, \” \”)
                      mail = Replace(mail, \”&\”, \” \”)
                      mail = Replace(mail, \”<\", \" \") mail = Replace(mail, \">\”, \” \”)
                      mail = Replace(mail, \”?\”, \” \”)
                      mail = Replace(mail, \”\\\”, \” \”)
                      mail = Replace(mail, \”/\”, \” \”)
                      mail = Replace(mail, \”*\”, \” \”)
                      mail = Replace(mail, \”|\”, \” \”)

                      \’Mails speichern
                      myMail.SaveAs pfad & mail & \”.html\”, olDoc

                      \’Anhang mit speichern
                      For Each anhang In myMail.Attachments
                      anhang.SaveAsFile \”c:\\temp\\\” & anhang.FileName

                      Next

                      Else

                      MsgBox (\”Leerer Body\”)
                      End If
                      End If

                      Next

                      MsgBox (\”Speichern beendet\”)
                      End Sub

                      Denn Code einfach in ein neues Modul reinkopieren und das Projekt speichern.
                      Danach unter Extras -> Anpassen , da dann auf Befehle und unter Makros findest
                      du dann den Namen von deinem Projekt und das einfach in die Taskleiste ziehen.
                      Dann kannst du durch einfachen Klick eine oder mehre markierte Emails in einem
                      Ordner deiner Wahl speichern, indem Format wie du Sie bekommen hast.

                      Gruß Omega_D

                      #159341
                      Unbekannt
                      Participant

                        Hi,
                        ich hab auch von VBA keine ahnung aber ich würde gern alle eMails von einem Selbst erstellten Ordner per Macro in eine PST Verschienen.

                        Wie mach ich das?

                        Per regel geht leider nicht, da die Mail nicht im Posteingang ankommen darf weil ich den PDA mit dem Eingang synce.

                        Danke

                        #168118
                        Unbekannt
                        Participant

                          Hoi zäme

                          Hier einfache Button Code indem Ihr markierte Mail in den Ordner z.B. Test verschieben könnt.
                          [line]
                          Code:

                          Sub Verschieben()

                          On Error Resume Next

                          Dim objFolder As Outlook.MAPIFolder, objInbox As Outlook.MAPIFolder
                          Dim objNS As Outlook.NameSpace, objItem As Outlook.MailItem

                          Set objNS = Application.GetNamespace(\”MAPI\”)
                          Set objInbox = objNS.GetDefaultFolder(olFolderInbox)

                          Set objFolder = objInbox.Parent.Folders(\”test\”)

                          If objFolder Is Nothing Then
                          MsgBox \”Dieser Ordner existiert nicht!\”, vbOKOnly + vbExclamation, \”Fehler\”
                          End If

                          If Application.ActiveExplorer.Selection.Count = 0 Then
                          Exit Sub
                          End If

                          For Each objItem In Application.ActiveExplorer.Selection
                          If objFolder.DefaultItemType = olMailItem Then
                          If objItem.Class = olMail Then
                          objItem.Move objFolder
                          End If
                          End If
                          Next

                          Set objItem = Nothing
                          Set objFolder = Nothing
                          Set objInbox = Nothing
                          Set objNS = Nothing

                          End Sub
                          [line]

                          Diese funktioniert einwandfrei.

                          Gruss Bandy 😉

                          #171564
                          Unbekannt
                          Participant

                            Hallo Zusammen,

                            wie muss ich den letzten Code umschreiben, daß auch alle Unterordner angegeben werden können?

                            Wenn Ordner \”Test\” kein Unterordner ist, funktioniert der Code ja einwandfrei. Aber sobald er, z. B. Posteingang\\Sammlung\\\”Test\” so, als Unterordner vorliegt, funktioniert der Code nicht mehr.

                            Danke + Grüße Volle

                            #176926
                            Unbekannt
                            Participant

                              ersetze die Zeile:

                              Set objFolder = objInbox.Parent.Folders(\”Test\”)

                              mit dieser

                              Set objFolder = Application.GetNamespace(\”MAPI\”).Folders.Item(\”Postfach – XXX\”).Folders(\”test\”)

                              #177109
                              Unbekannt
                              Participant

                                … das gibt es doch schon alles fertig und bei geringem E-Mail Aufkommen als Freeware !

                                http://www.mailonizer.de/index.html/de/produkte/free 😎

                                #179668
                                Unbekannt
                                Participant

                                  Hallo,

                                  ich bin eben auf meiner Suche via Google unter anderem auch über diesen Thread gestolpert.
                                  Vielleicht kann mir ja jemand den entscheidenden Tipp geben.

                                  Da bei einigen Usern hier die Outlookregeln ausgeschöpft sind, und sich keine weiteren Regeln einrichten lassen, wollte ich da das mittels Makro abfackeln.

                                  folgendes habe ich schonmal:
                                  [CODE]
                                  Private Sub Application_NewMail()
                                  \’ Holt die erste ungelesene Mail und tut was damit
                                  Dim olFld As Outlook.MAPIFolder
                                  Set olFld = Outlook.Session.GetDefaultFolder(olFolderInbox)
                                  olFld.Items.Sort \”[SentOn]\”, True
                                  Set objTargetFolder = olFld.Parent.Folders(\”test\”)

                                  Dim oMail As Outlook.MailItem
                                  Set oMail = olFld.Items.GetLast

                                  \’ Hier Mail suchen und verschieben
                                  MsgBox \”Mail:\” & oMail.Subject
                                  if oMail.SenderEmailaddress \’ist in der Verteilerliste
                                  then oMail.Move objTargetFolder

                                  Set oMail = Nothing
                                  Set olFld = Nothing
                                  Set objTargetFolder = Nothing
                                  End Sub
                                  [/CODE]

                                  Nur bin ich kein VBA Bewanderter, und so weiß ich nicht wie/ob man Verteilerlisten auslesen kann. Geht das überhaupt? und wenn ja wie?

                                  Ich würde mich echt über hinweise freuen!

                                  Danke schon mal vorab!

                                  lg
                                  Peter

                                15 Antworten anzeigen - 1 bis 15 (von insgesamt 16)

                                Hat Ihnen der Beitrag gefallen?

                                1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (Keine Bewertung vorhanden)
                                Loading...