Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1412to1416
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Outlook Makro speichert nur einen Anhang der zwei

Outlook Makro speichert nur einen Anhang der zwei
19.03.2015 14:44:56
Daniel
Systemkonfiguration: Windows 7, Outlook 2010
Hallo zusammen, folgendes Problemchen stellt sich mir im Moment beim Speichern der Anhänge neuer mails in Outlook per Makro:
Jeden Tag um 6 Uhr erhalte ich von einem Nicht-Windowsrechner zwei Dateien mit .csv-Dateien im Anhang, die dann in Outlook per Regel in einen Ordner, sagen wir „charts“ verschoben werden. Ein Makro in „Diese Outlook Sitzung“ soll automatisch bei Eingang einer neuen Email in diesem Outlookordner die Anhänge dieser beiden Mails in einen Datei-Ordner „charts“ auf der Festplatte speichern. Dies funktioniert, wenn ich das Makro manuell anschubse auch bestens, allerdings ohne Eingriff (Rechner läuft 24/7, kein Energiesparmodus) funktioniert es nur sporadisch, dass beide Anhänge automatisch gespeichert werden. Es wird oft nur der Anhang der "obersten", neuesten Mail (beide kommen durch den Abruf von Outlook ja um ca: 6:01 an) gespeichert, die andere Mail ist weiterhin ungelesen und der Anhang wird nicht gespeichert.
Da zu einer bestimmten Zeit später eine weitere automatische Verarbeitung dieser Daten durch eine Exceltabelle erfolgt, ist das immer ärgerlich. Es funktioniert alles, aber das automatische Speichern ALLER Anhänge ohne Beitun nicht.
Auch das Starten von Outlook mit dem explizitem Befehl

ECHO OFF
"C:\Program Files\Microsoft Office\OFFICE14\OUTLOOK.EXE"  /autorun NewMail_modul

mittels Aufgabenplanung hilft nicht. Zuvor hatte ich den untenstehenden Makrotext in einem Modul mit anderem Namen als in DieseOutlookSitzung kopiert.
Ich vermute den Fehler irgendwo in der If-Schleife, habe mir den Code aber mit meinen rudimentären Kenntnissen selbst mühselig zusammengebastelt. Ich hoffe Ihr habt den entscheidenden Tipp.
Der Rechner hat mehrere Benutzer und der, unter dem dieses Makro läuft ist NICHT der Admin. Da aber sonst alle anderen Makros funktionieren dürfte dies doch nicht das Problem sein oder?
Freue mich von Euch zu hören!
Sub Application_NewMail()
'Sub Anlage(oMail As MailItem)
Dim fso As Object
Dim objPosteingang As MAPIFolder
Dim objNewMail As MailItem
Dim strNewFolder As String
Dim intAnlagen As Integer
Dim i As Integer
Dim FolderPath As String
Dim DateFolderPath As String
'Set objPosteingang = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
Set objPosteingang = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox). _
Folders.Item("charts")
FolderPath = "C:\ungesicherte_Daten\charts\"
DateFolderPath = FolderPath
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(FolderPath) Then
fso.CreateFolder FolderPath
End If
If Not fso.FolderExists(DateFolderPath) Then
fso.CreateFolder DateFolderPath
End If
'vorher mit s am Ende, items
For Each objNewMail In objPosteingang.Items
With objNewMail
If .UnRead = True Then
intAnlagen = .Attachments.Count
If intAnlagen > 0 Then
For i = 1 To intAnlagen
If Not fso.FileExists(DateFolderPath & "\" & .Attachments.Item(i). _
FileName) Then
.Attachments.Item(i).SaveAsFile DateFolderPath & "\" & .Attachments. _
Item(i).FileName
End If
Next i
End If
End If
End With
Next objNewMail
Set fso = Nothing
'Emails als ungelesen markieren
Set ol = New Outlook.Application
Set olns = ol.GetNamespace("MAPI")
Set myFolder = objPosteingang ' Ordner zum Zählen der ungelesenen Mails angeben
NumItems = myFolder.Items.Count ' E-Mails zählen
For i = 1 To NumItems
myFolder.Items(i).UnRead = False ' Wert auf Gelesen setzen
Next
End Sub

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Outlook Makro speichert nur einen Anhang der zwei
19.03.2015 17:33:08
Luschi
Hallo Daniel,
diese For-Schleife: For i = 1 To intAnlagen
muß man von hinten aufrollen, also:
For i = intAnlagen To 1 Step -1
oder man macht besser eine For Each-Schleife draus, dann werden alle Anlagen auch
durchlaufen:

Dim Atmt As Attachment
For Each Atmt In objNewMail.Attachments
'Dein Code
Next Atmt
Gruß von Luschi
aus klein-Paris
PS: Wenn Du mit den Outlook-Ereignissen arbeiten willst, dann muß das Makro in
'ThisOutlookSession' stehen und die Routine heißt dann:
Private Sub Application_NewMail()
End Sub
In der amerikamischen Fachliteratur wird aber Folgendes empfohlen:
"Generally, youshould prefer the NewMailEx event over the NewMail event!"
zu dt.: das 'NewMailEx'-Ergeignis ist dem 'NewMail' vorzuziehen, da es hier einen kommagetrennten Übergabeparameter gibt.
siehe auch: http://www.fontstuff.com/outlook/oltut01.htm

Anzeige
AW: Outlook Makro speichert nur einen Anhang der zwei
19.03.2015 23:15:56
Daniel
Hi Luschi, danke für die schnelle Antwort.
Meinst Du so mit der Each-Schleife? s.u. Ich bleibe lieber bei der Windows-Aufgabenplanung, mit der DieseOutlooksession hatte ich schon öfter Schwierigkeiten.
For Each objNewMail In objPosteingang.Items
'For Each Atmt In objPosteingang.Attachments
With objNewMail
If .UnRead = True Then
intAnlagen = .Attachments.Count
If intAnlagen > 0 Then
For Each Atmt In objNewMail.Attachments
'For i = 1 To intAnlagen
If Not fso.FileExists(DateFolderPath & "\" & .Attachments.Item(i). _
FileName) Then
.Attachments.Item(i).SaveAsFile DateFolderPath & "\" & .Attachments. _
Item(i).FileName
End If
Next Atmt
'Next i
End If
End If
End With
Next objNewMail

Anzeige
AW: Outlook Makro speichert nur einen Anhang der zwei
20.03.2015 07:43:00
Luschi
Hallo Daniel,
ja, so sollte es klappen, ergänze aber füge nach dem Kopier-Befehl noch folgende Ergänzung an:
Attachments.Item(i).SaveAsFile ....
DoEvents
Sind es große Dateien, die kopiert werden, dann mache ich es i.R. so:

Attachments.Item(i).SaveAsFile ....
Do While True
'warten, bis Datei im Zielverzeichnis angekommen ist
If Dir(DateFolderPath & "\" & .Attachments.Item(i).FileName, vbNormal)  "" Then
Exit Do
End If
Loop
DoEvents
Noch 1 Tipp: Am Ende des Makros alle Outlook- & FSO-Objekte auf Nothing setzen, z.B.:
Set fso = Nothing
Set Atmt = Nothing
usw.

Anzeige
AW: Outlook Makro speichert nur einen Anhang der zwei
20.03.2015 07:46:34
Daniel
Hallo Luschi, danke für Deine Antwort!
Meinst Du es so (s,u.)? Bin leider kein MAkrosachverständiger und hab nur grundlegende Makro Kenntnisse. Schleifen erkenne ich aber die Befehle, speziell die x.Befehle Versionen hab ich nicht drauf.
Bekomme jetzt ständig Fehlermeldungen. Hab den Code vermutlich falsch angepasst.

Dim Atmt as Attachment
For Each objNewMail In objPosteingang.Items
With objNewMail
If .UnRead = True Then
intAnlagen = .Attachments.Count
If intAnlagen > 0 Then
For Each Atmt in objNewMail.Attachments (muss es hier nicht heißen "in  _
objPosteingang.Items"?
' = 1 To intAnlagen
If Not fso.FileExists(DateFolderPath & "\" & .Attachments.Item(i). _
FileName) Then
.Attachments.Item(i).SaveAsFile DateFolderPath & "\" & . _
Attachments. _
Item(i).FileName
End If
'Next i
Next Atmt
End If
End If
End With
Next objNewMail

Anzeige
AW: Outlook Makro speichert nur einen Anhang der zwei
20.03.2015 09:57:23
Luschi
Hallo Daniel,
habe jetzt mal das Outlook-Makro bei mir laufen lassen und getestet.
https://www.herber.de/bbs/user/96513.txt
Gruß von Luschi
aus klein-Paris

AW: Outlook Makro speichert nur einen Anhang der zwei
20.03.2015 10:48:36
Daniel
Hi luschi, vielen lieben Dank für Deine erneute Antwort. Ich musste mich erst noch in die Schleife einfuchsen und lernen, dass die i-Zählung ja doch weiterhion gebraucht wird. Ich habe es jetzt so realisiert und den Code doch in "DieseOutlookSitzung" eingebettet. Es scheint bisher zu funktionieren. Hatte es vorher auch schonmal, aber morgens wenns drauf ankam eben nicht. Bisher hat Outlook alle Testemail-Anhänge abgespeichert. Wenn es morgen früh wieder nicht klappt, dann probiere ich den DO-While-Ansatz von Dir.
So siehts jetzt bei mir aus:
https://www.herber.de/bbs/user/96516.txt

Anzeige
AW: Outlook Makro speichert nur einen Anhang der zwei
20.03.2015 13:46:48
Daniel
Hi Luschi,
habe jetzt zwischendurch immer mal wieder Emails mit "charts" im Betreff an den Empfängerrecner gesendet und er speichert auch einzelne Emails ab. Nur wenn mehrere Emails gleichzeitig eintreffen (und so ist es dann planmäßig auch) wird nur der oberste Emailanhang gespeichert. Siehe Bild:
Userbild
Also stoppt die Schleife bei mehreren Anhängen und nimmt nur die erste? Ich verstehs leider nicht.
Mein Code (steht jetzt in DieseOutlookSitzung):
Private Sub Application_NewMail()
Dim fso As Object
Dim objPosteingang As MAPIFolder
Dim objNewMail As MailItem
Dim Atmt As Attachment
Dim DateFolderPath As String
Set objPosteingang = Application.GetNamespace("MAPI"). _
GetDefaultFolder(olFolderInbox).Folders("charts")
DateFolderPath = "C:\ungesicherte_Daten\charts\"
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(DateFolderPath) Then
fso.CreateFolder DateFolderPath
DoEvents
End If
For Each objNewMail In objPosteingang.Items
With objNewMail
If .UnRead = True Then
For Each Atmt In objNewMail.Attachments
If Not fso.FileExists(DateFolderPath & "\" & Atmt.FileName) Then
Atmt.SaveAsFile DateFolderPath & "\" & Atmt.FileName
DoEvents
Do While True
'warten, bis Datei im Zielverzeichnis angekommen ist
If Dir(DateFolderPath & "\" & Atmt.FileName, vbNormal)  "" Then
Exit Do
End If
Loop
End If
Next Atmt
End If
End With
'Wert auf Gelesen setzen
objNewMail.UnRead = False
Next objNewMail
Set fso = Nothing
Set objPosteingang = Nothing
Set objNewMail = Nothing
Set Atmt = Nothing
End Sub

Anzeige
AW: Outlook Makro speichert nur einen Anhang der zwei
20.03.2015 14:00:54
Daniel
PS: wenn jetzt eine neue Email (auch ohne Anhang und auch ohne den Betreff "charts") eintrifft, werden alle Anhänge gespeichert. Als wäre die neue Email dann der Auslöser für die Schleife..

AW: Outlook Makro speichert nur einen Anhang der zwei
20.03.2015 16:36:21
Luschi
Hallo Daniel,

Zitat:
Ich habe es jetzt so realisiert und den Code doch in "DieseOutlookSitzung" eingebettet.

Damit ist 'Sub Application_NewMail()' (eigentlich: Private Sub Application_NewMail()) eine Ereignis-Routine von Outlook, die automatisch aktiviert wird, wenn eine neue EMail auf Deinem Konto eintriff.
jetzt müßte 1 Kontroll-Routine eingebaut werden, wenn die eintreffende EMail von 1 bestimmten Absender ist oder im bestimmten SubDir von 'Posteingang' eintrifft.
Gruß von Luschi
aus klein-Paris
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige