Unbekannt
|
erstellt am: 27/8/2007 um 19:58 |
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. |
Stört Sie diese Werbung?
Dann schalten Sie diese einfach ab,
in dem Sie sich kostenlos
auf Mailhilfe.de
anmelden
|
MichaelBauer
Member Beiträge: 119 Registriert: 20/11/2006 Status: Offline |
erstellt am: 28/8/2007 um 07:44, Antwort 1 |
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
____________________ Viele Grüße
Michael Bauer
|
| |
Unbekannt
|
erstellt am: 28/8/2007 um 11:24, Antwort 2 |
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
|
| |
MichaelBauer
Member Beiträge: 119 Registriert: 20/11/2006 Status: Offline |
erstellt am: 29/8/2007 um 07:56, Antwort 3 |
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
____________________ Viele Grüße
Michael Bauer
|
| |
Unbekannt
|
erstellt am: 29/8/2007 um 19:26, Antwort 4 |
Vielen Dank! Jedoch: "Mindestens ein Parameterwert ist ungültig." wird angezeigt. Und wo trage ich den Zielordner ein?
|
| |
MichaelBauer
Member Beiträge: 119 Registriert: 20/11/2006 Status: Offline |
erstellt am: 30/8/2007 um 08:07, Antwort 5 |
Sorry, es fehlte ein 'd'
statt: olFolderDeleteItems
besser: olFolderDeletedItems
Was meinst Du mit der Frage nach dem Zielordner? ____________________ Viele Grüße
Michael Bauer
|
| |
Unbekannt
|
erstellt am: 30/8/2007 um 18:09, Antwort 6 |
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.
|
| |
MichaelBauer
Member Beiträge: 119 Registriert: 20/11/2006 Status: Offline |
erstellt am: 31/8/2007 um 08:03, Antwort 7 |
Hier ist eine Funktion, die Dir zum einem Pfad den Ordner liefert: 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
|
| |
Unbekannt
|
erstellt am: 31/8/2007 um 16:31, Antwort 8 |
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.
|
| |
Unbekannt
|
erstellt am: 5/10/2007 um 14:46, Antwort 9 |
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
|
| |
Unbekannt
|
erstellt am: 9/4/2008 um 11:47, Antwort 10 |
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
|
| |
Unbekannt
|
erstellt am: 27/1/2009 um 22:10, Antwort 11 |
Hoi zäme
Hier einfache Button Code indem Ihr markierte Mail in den Ordner z.B. Test verschieben könnt.
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
Diese funktioniert einwandfrei.
Gruss Bandy 
|
| |
Unbekannt
|
erstellt am: 17/6/2009 um 13:21, Antwort 12 |
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
|
| |
Unbekannt
|
erstellt am: 20/1/2010 um 17:24, Antwort 13  |
ersetze die Zeile:
Set objFolder = objInbox.Parent.Folders("Test")
mit dieser
Set objFolder = Application.GetNamespace("MAPI").Folders.Item("Postfach - XXX").Folders("test")
|
| |
Unbekannt
|
erstellt am: 25/1/2010 um 20:50, Antwort 14  |
... das gibt es doch schon alles fertig und bei geringem E-Mail Aufkommen als Freeware !
http://www.mailonizer.de/index.html/de/produkte/free
|
| |
Unbekannt
|
erstellt am: 28/4/2010 um 15:31, Antwort 15  |
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
|
| |
|