Home-›Foren-›Outlook-›Outlook VBA-›E-Mail per Makro in Ordner verschieben
- This topic has 16 Antworten, 2 Stimmen, and was last updated 11:57 um 19. Oktober 2011 by Unbekannt.
- AutorBeitrag
- 27. August 2007 um 19:58 #42725UnbekanntParticipant
Hallo!
Ich möchte gerne in Outlook 2007 eine E-Mail per Makro in einen festgelegten Ordner verschieben. Das sollte für die VBA-Experten unter euch eine Kleinigkeit sein. Leider kenne ich mich damit gar nicht aus.
Ich weiß, dass es dafür in Outlook einen Button gibt, jedoch muss man anschließend den Ordner immer manuell wählen. Ich hätte das gerne als „One-Click“-Lösung.
Ich hoffe, jemand kann mir helfen, ich habe nämlich in Google schon den ganzen Tag gesucht.
Vielen Dank!
jan
PS: Das Verschieben soll nur bei Bedarf erfolgen, weshalb eine Regel nicht zur Lösung beträgt. Ich möchte das Makro dann einem Button zuweisen.
28. August 2007 um 07:44 #149046MichaelBauerParticipantIn 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 Bauer28. August 2007 um 11:24 #149050UnbekanntParticipantIch 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]
29. August 2007 um 07:56 #149079MichaelBauerParticipant[code]
Dim TargetFolder as Outlook.Mapifolder
Dim obj as Object
Dim Sel as Outlook.ExplorerSet TargetFolder=Application.Session.GetDefaultFolder(olFolderDeleteItems)
Set Sel=Application.ActiveExplorer.SelectionIf Sel.Count Then
Set obj=Sel(1)
obj.Move targetFolder
Endif
[/code]Viele Grüße
Michael Bauer29. August 2007 um 19:26 #149090UnbekanntParticipantVielen Dank! Jedoch: \“Mindestens ein Parameterwert ist ungültig.\“ wird angezeigt. Und wo trage ich den Zielordner ein?
30. August 2007 um 08:07 #149110MichaelBauerParticipantSorry, es fehlte ein \’d\‘
statt: olFolderDeleteItems
besser: olFolderDeletedItemsWas meinst Du mit der Frage nach dem Zielordner?
Viele Grüße
Michael Bauer30. August 2007 um 18:09 #149138UnbekanntParticipantJetzt 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.
31. August 2007 um 08:03 #149174MichaelBauerParticipantHier 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 Bauer31. August 2007 um 16:31 #149188UnbekanntParticipantDanke 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.
5. Oktober 2007 um 14:46 #151141UnbekanntParticipantHallo,
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 ThenIf 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.FileNameNext
Else
MsgBox (\“Leerer Body\“)
End If
End If\’wenn email als html
If myMail.GetInspector.EditorType = olEditorHTML ThenIf 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\“, olHTMLNext
\’Anhang mit speichern
For Each anhang In myMail.Attachments
anhang.SaveAsFile \“c:\\temp\\\“ & anhang.FileNameNext
Else
MsgBox (\“Leerer Body\“)
MsgBox (myMail.Body)
End If
End If
\’wenn email rtf
If myMail.GetInspector.EditorType = olEditorRTF ThenIf 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 ThenIf 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.FileNameNext
Else
MsgBox (\“Leerer Body\“)
End If
End IfNext
MsgBox (\“Speichern beendet\“)
End SubDenn 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
9. April 2008 um 11:47 #159341UnbekanntParticipantHi,
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
27. Januar 2009 um 21:10 #168118UnbekanntParticipantHoi 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.MailItemSet 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 IfIf Application.ActiveExplorer.Selection.Count = 0 Then
Exit Sub
End IfFor Each objItem In Application.ActiveExplorer.Selection
If objFolder.DefaultItemType = olMailItem Then
If objItem.Class = olMail Then
objItem.Move objFolder
End If
End If
NextSet objItem = Nothing
Set objFolder = Nothing
Set objInbox = Nothing
Set objNS = NothingEnd Sub
[line]Diese funktioniert einwandfrei.
Gruss Bandy 😉
17. Juni 2009 um 13:21 #171564UnbekanntParticipantHallo 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
20. Januar 2010 um 16:24 #176926UnbekanntParticipantersetze die Zeile:
Set objFolder = objInbox.Parent.Folders(\“Test\“)
mit dieser
Set objFolder = Application.GetNamespace(\“MAPI\“).Folders.Item(\“Postfach – XXX\“).Folders(\“test\“)
25. Januar 2010 um 19:50 #177109UnbekanntParticipant… das gibt es doch schon alles fertig und bei geringem E-Mail Aufkommen als Freeware !
- AutorBeitrag