![]() |
|
|||||||
| MS Outlook Outlook . viel mehr als "nur" ein Mail-Programm. |
![]() |
|
|
Thread Tools | Display Modes |
|
|
#1 |
|
Registered User
Join Date: May 2009
Location: Germany
Posts: 1
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
Ich suche Hilfe beim Programmieren eines Makros
Hallo,
zufällig habe ich entdeckt, dass ich hier möglicherweise Hilfe finden kann. Ich brauche eine Routine, die aus bestimmten Mails die Anlage in ein Verzeichnis speichert. Durch Gestückel aus dem Internet und Hilfe von einem Bekannten habe ich folgendes Makro gebastelt: Sub Application_NewMail() Dim Ordnername As String Dim objPosteingang As MAPIFolder Dim objNewMail As MailItem Dim Dateiname As String Dim Anzahl As Integer Dim Betreff As String Set objPosteingang = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox) On Error Resume Next For Each objNewMail In objPosteingang.Items If objNewMail.Subject Like "Schlussmeldung" Then If Right$(objNewMail.Subject, 14) = "Schlussmeldung" Then inhalt1 = objNewMail.Subject laenge = Len(inhalt1) laenge = laenge - 14 inhalt1 = Left$(objNewMail.Subject, 12) ' MsgBox "Betreff: " & inhalt1 With objNewMail Anzahl = .Attachments.Count If Anzahl > 0 Then ' MsgBox "Anzahl: " & Anzahl ' MsgBox "Betreff: " & objNewMail.Subject Ordnername = "H:\test" For i = 1 To Anzahl .Attachments.Item(i).SaveAsFile Ordnername & "\" & .Attachments.Item(i).FileName Next i End If End With End If End If Next objNewMail End Sub Die erste If-Abfrage (Suche nach Mails mit "Schlussmeldung") findet keine Mails. Wenn ich diese Auskommentiere und dann das Makro starte, wird die Anlage einer Mail gespeichert. Im Posteingang befinden sich jedoch ca. 60 Mails, von denen etwa die Hälfte mindestens eine Anlage hat. Gut wäre auch noch, wenn der Dateiname der gespeicherten Datei aus einem Teil (leider der mittlere) des Mail-Betreffs bestehen könnte und die Mail nach dem Speichern in ein anderes Outlookverzeichnis verschoben werden könnte. Ich verwende Outlook 2002, SP 3. Über rasche Hilfe würde ich mich freuen. Gruß ein Suchender |
|
|
|
| Sponsored Links | |
|
|
#2 |
|
Registered User
Join Date: Jul 2009
Location: germany
Posts: 3
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
Hallo,
>>If-Abfrage (Suche nach Mails mit "Schlussmeldung") findet keine Mails Like vergleicht zwei Zeichenfolgen miteinander. "Schlussmeldung" scheint aber nur ein Teil von Subject zu sein. Demzufolge ist der Vergleich immer False. Setze vor und nach "Schlussmeldung einfach ein Jokerzeichen (*). Damit sollten alle E-Mails mit "Schlussmeldung im Subject gefunden werden. Ich habe Dir mal ein Beispiel für das Kopieren/Verschieben von E-Mails angefügt. Der nachfolgende Code sollte funktionieren. Auf das zusammenbasteln einer neuen Betreff-Zeile habe ich verzichtet. Code:
Option Explicit
Sub SaveAttachements()
Dim objNameSpace As Outlook.NameSpace
Dim sAttachementDir As String
Dim objSourceFolder As Outlook.Folder
Dim objTargetFolder As Outlook.Folder
Dim objMailItem As Outlook.MailItem
Dim objCopiedItem As Outlook.MailItem
Dim i, j As Integer
Dim sRootFolder As String
Dim sSubjectPattern As String
sSubjectPattern = "*"
sAttachementDir = "c:\temp\outlook\"
Set objNameSpace = Application.GetNamespace("MAPI")
Set objSourceFolder = objNameSpace.GetDefaultFolder(olFolderInbox)
sRootFolder = objNameSpace.DefaultStore.GetRootFolder.Name
Set objTargetFolder = GetMAPIFolder("\" & sRootFolder & "\temp")
' Alle Mails im Ordner durchlaufen
For i = objSourceFolder.Items.Count To 1 Step -1
Set objMailItem = objSourceFolder.Items.Item(i)
If objMailItem.Subject Like sSubjectPattern Then
' Attachements im Dateisystem speichern
With objMailItem.Attachments
If .Count > 0 Then
For j = 1 To .Count
.Item(j).SaveAsFile sAttachementDir & .Item(j).FileName
Next j
End If
End With
' Hier Code zur Namensgebung einfügen
' Mail kopieren
'Set objCopiedItem = objMailItem.Copy
'objCopiedItem.Move objTargetFolder
' Mail verschieben
objMailItem.Move objTargetFolder
End If
Next
End Sub
Private Function GetMAPIFolder(sPath As String) As Folder
Dim objNameSpace As NameSpace
Dim objFolder As Folder
Dim i As Integer
Dim sDir As String
Set objFolder = Nothing
If Left(sPath, Len("\")) = "\" Then
sPath = Mid(sPath, Len("\") + 1)
Else
Set objFolder = Application.ActiveExplorer.CurrentFolder
End If
While sPath <> ""
i = InStr(sPath, "\")
If i Then
sDir = Left(sPath, i - 1)
sPath = Mid(sPath, i + Len("\"))
Else
sDir = sPath
sPath = ""
End If
If IsNothing(objFolder) Then
Set objNameSpace = Application.GetNamespace("MAPI")
Set objFolder = objNameSpace.Folders(sDir)
Else
Set objFolder = objFolder.Folders(sDir)
End If
Wend
Set GetMAPIFolder = objFolder
End Function
Private Function IsNothing(objObject As Object) As Boolean
If TypeName(objObject) = "Nothing" Then
IsNothing = True
Else
IsNothing = False
End If
End Function
Last edited by nak on 07-07-2009 at 23:39 |
|
|
|
| Sponsored Links | |
![]() |
| Tags |
| anlage, makro, outlook, speichern |
| Thread Tools | |
| Display Modes | |
|
|