Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Outlook VBA - Anhang autom. speichern

Frage Entwicklung VB for Applications

Mitglied: sokraTonis

sokraTonis (Level 1) - Jetzt verbinden

31.07.2014, aktualisiert 14:09 Uhr, 2972 Aufrufe, 8 Kommentare, 4 Danke

Hallo,

ich bekomme an eine bestimmte E-Mail-Adresse immer wieder Nachrichten mit einem Anhang. Der Name vom Anhang ist immer gleich. Nun soll dieser Anhang automatisch in einen Ordner abgelegt werden. Dort holt ihn sich ein weiteres Programm ab und verarbeitet die Datei.

Ich habe in Outlook ein Script erstellt, welches bei Erhalt einer Nachricht an diese E-Mail-Adresse in einen bestimmten Outlook-Ordner verschiebt, dann das Script ausführt und im Anschluss die Nachricht auf gelesen setzt.

Jetzt das Script:

Sub Anlagen_Speichern(OlMail As MailItem)

Dim Anlagen As Attachments
Dim i As Integer
Dim Ziel As String
Dim Ziel2 As String
Dim ErrMsg As String

'Primärer Zielpfad'

On Error GoTo Errorhandler

Ziel = "C:\Sandbox\EDI\"

einsziel:

Set Anlagen = OlMail.Attachments
If Anlagen > 0 Then
For i = 1 To Anlagen.Count
Anlagen.Item(i).SaveAsFile Ziel & "\" & Anlagen.Item(i).FileName
Next i
Else: GoTo Errorhandler
MsgBox "Der Anhang wurde erfolgreich im primären Ziel gespeichert."

Exit Sub

'Sekundärer Zielpfad'

zweiziel:

Err.Clear
On Error GoTo Errorhandler

Ziel2 = "C:\Sandbox\EDI_manuell\"

Set Anlagen = OlMail.Attachments
If Anlagen > 0 Then
For i = 1 To Anlagen.Count
Anlagen.Item(i).SaveAsFile Ziel2 & "\" & Anlagen.Item(i).FileName
Next i
Else: GoTo Errorhandler
MsgBox "Der Anhang wurde erfolgreich im sekundären Ziel gespeichert. Bitte prüfen Sie das primäre Verzeichnis."

Exit Sub

'Fehlerbehandlung'
Errorhandler:
Select Case Err.Number
Case -2147024893:
ErrMsg = "Der primäre Zielpfad ist nicht vorhanden. Es wird versucht im sekundären Zielpfad zu speichern."
Result = MsgBox(ErrMsg, vbOKOnly)
If Result = vbOK Then GoTo zweiziel

Case 5:
ErrMsg = "Es ist kein Anhang vorhanden. Die E-Mail wird nun geöffnet."
Result = MsgBox(ErrMsg, vbOKOnly)
If Result = vbOK Then OlMail.Display

Case Else:
MsgBox "Error # " & Err.Number & ":" & Error(Err.Number)

End Select

End If
End If
End Sub

Nun ist folgendes mein Ziel mit diesem Script:
- E-Mail soll auf Anhang geprüft werden. Ist ein Anhang da, soll er im Pfad gespeichert werden. Ist der Pfad nicht verfügbar, weiche auf sekundären Pfad aus. Ist kein Anhang dabei, soll die E-Mail geöffnet werden.

Problem:
- Im aktuellen Script wird jede E-Mail, egal ob Anhang oder nicht, an Case 5 im Errorhandler geleitet.

Hinweis:
- Entferne ich If Anlagen > 0 Then funktioniert es. Allerdings wird dann nicht mehr geprüft ob ein Anhang verfügbar ist.

Wo ist mein Fehler?
Mitglied: emeriks
31.07.2014 um 10:59 Uhr
Hi.
ich glaube, das muss lauten:

If Anlagen.Count > 0 Then

E.
Bitte warten ..
Mitglied: sokraTonis
31.07.2014, aktualisiert um 11:11 Uhr
Hallo,

änderung erfolgt. Jetzt tritt folgendes auf:

- mit Anhang wird die E-Mail ohne Benachrichtigung gespeichert
- ohne Anhang erscheint keine Fehlermeldung

//EDITIERT:

Im Script habe ich noch folgendes geändert:

Errorhandler:
Case 0:
ErrMsg = "Es ist kein Anhang vorhanden. Die E-Mail wird nun geöffnet."
Result = MsgBox(ErrMsg, vbOKOnly)
If Result = vbOK Then OlMail.Display

Nun ist es so:
- mit Anhang wird die E-Mail ohne Benachrichtigung gespeichert
- ohne Anhang erscheint die gewünschte Fehlermeldung
Bitte warten ..
Mitglied: napperman
31.07.2014 um 11:12 Uhr
Moin,

Versuchmal die Anlagen vor dem If zu zählen und dann an den If-Block zu übergeben
Anlagen = .Attachments.Count
if Anlagen > 0 .....
Bitte warten ..
Mitglied: sokraTonis
31.07.2014, aktualisiert um 11:19 Uhr
Ich habe Set Anlagen = OlMail.Attachments entfernt und dafür Anlagen = .Attachments.Count eingesetzt. Beim Kompilieren erscheint dann:

Unzulässiger oder nicht ausreichend definierter Verweis

Setze ich OlMail vor .Attachments.Count ein, erscheint dann eine Fehlermeldung beim Erhalt der Nachricht mit Anhang.

//EDITIERT:
Fehlermeldung lautet: Error #91: Objektvariable oder With-Blockvariable nicht festgelegt.
Bitte warten ..
Mitglied: emeriks
31.07.2014 um 11:24 Uhr
For i = 1 To Anlagen.Count

müsset lauten

For i = 0 To Anlagen.Count - 1

E.
Bitte warten ..
Mitglied: sokraTonis
31.07.2014, aktualisiert um 11:31 Uhr
Ändert leider nichts.

Setzte ich Count vor If erscheint die selbe Fehlermeldung mit Code 91.
Setze ich den Count in die If und ändere es auf ... - 1, dann erscheint Error # -2147352567:Array-Index außerhalb des zulässigen Bereichs.
Bitte warten ..
Mitglied: colinardo
LÖSUNG 31.07.2014, aktualisiert um 16:09 Uhr
Moin,
das ganze lässt sich abkürzen ohne das ganze GOTO gedöhns:
01.
Sub AnlagenSpeichern(olMail As MailItem) 
02.
    Dim att As Attachment, fso As Object, ziel As String, ziel1 As String, ziel2 As String 
03.
    Set fso = CreateObject("Scripting.FilesystemObject") 
04.
    ziel1 = "C:\Sandbox\EDI" 
05.
    ziel2 = "C:\Sandbox\EDI_manuell\" 
06.
   
07.
    If olMail.Attachments.Count > 0 Then 
08.
        If Not fso.FolderExists(ziel1) Then 
09.
            If fso.FolderExists(ziel2) Then 
10.
                MsgBox "Ziel 1 ist nicht erreichbar, speichere unter Ziel2!", vbExclamation 
11.
                ziel = ziel2 
12.
            Else 
13.
                MsgBox "Beide Ziele nicht erreichbar!", vbCritical 
14.
                Exit Sub 
15.
            End If 
16.
        Else 
17.
            ziel = ziel1 
18.
        End If 
19.
         
20.
        For Each att In olMail.Attachments 
21.
            targetPath = ziel & "\" & att.FileName 
22.
            if not fso.FileExists(targetPath ) then 
23.
               att.SaveAsFile targetPath 
24.
            else 
25.
               if msgbox("Attachment existiert schon im Zielordner: " & targetPath & vbNewline & "Soll es überschrieben werden ?",vbYesNo or vbQuestion) = vbYes then 
26.
                 fso.DeleteFile targetPath, True 
27.
                 att.SaveAsFile targetPath 
28.
               end if 
29.
            end if 
30.
        Next 
31.
    Else 
32.
        MsgBox "Kein Anhang vorhanden! Mail wird nun geöffnet.", vbInformation 
33.
        olMail.Display 
34.
    End If 
35.
End Sub
Du solltest aber wissen, das auch eingebettete HTML-Bilder als Anlagen behandelt und gezählt werden.

Grüße Uwe

p.s. Bitte nutze Code-Tags für deinen Quellcode: <code> Quellcode </code>, ansonsten kommen uns hier eventuell wichtige Sonderzeichen abhanden.
Bitte warten ..
Mitglied: sokraTonis
31.07.2014, aktualisiert um 14:12 Uhr
Hallo Uwe,

vielen Dank für das Script. Es funktioniert soweit. Die entspreche Meldung für eine erfolgreiche Speicherung habe ich noch hinzugefügt.

Die Frage, weshalb mein Script nicht funktioniert, bleibt... .

//EDITIERT:
HTML-Bilder und Co. stören nicht, da die Nachricht keine Signatur aufweist.
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Outlook & Mail
gelöst Outlook 2010 Anhang Öffnen mit Problem (8)

Frage von dakoerry zum Thema Outlook & Mail ...

Outlook & Mail
Importieren von excel daten in outlook vba - Teil 2 (5)

Frage von Bgervais zum Thema Outlook & Mail ...

Microsoft Office
gelöst Importieren von excel daten in outlook vba (10)

Frage von Bgervais zum Thema Microsoft Office ...

VB for Applications
gelöst Outlook VBA, Alternative zu NewMailEx, neue bereits gelesene Email im Posteingang (12)

Frage von joha1908 zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...