Ich habe mehrere E-Mails kommen (Jeden Tag bekomme ich 3 E-Mails für Bestellungen für 3 Kategorien). Die E-Mails Betreff sind im Format:Batch-Skript einmal für mehrere E-Mails ausführen
"Bestellungen EXTRACT - [Kategorie] - [Datum]".
Wo [Kategorie] kann Category 1
, Category 2
oder Category 3
sein. [Datum] ist das Datum, an dem die E-Mail im Format TT/MM/JJJJ gesendet wurde.
Ich habe eine Regel-Setup für die Suche nach 'Orders' dann rufen Sie den folgenden Code.
Ich möchte Complete.bat
ausführen, nachdem alle E-Mail-Anhänge gespeichert wurden und ich möchte nur einmal anrufen.
Ich habe versucht, dies zu tun, indem Sie eine andere Unter namens saveAttachtoDisk_CATEGORY1(itm)
, die nur aufgerufen wird, wenn es "Kategorie 1" im Betreff findet. Es speichert dann den Anhang, sucht aber auch nach einer Kategorie 1 im Betreff UND sucht auch nach dem gestrigen Datum.
Ich möchte eine bessere Lösung, die nicht datumsabhängig ist. Eine globale Variable könnte funktionieren, wo ich die Variable auf 1 setze, dann renne Complete.bat
gesendet wird und dann in Zukunft, wenn Variable = 1 dann führe Complete.bat
nicht aus. Nicht sicher, wo diese Variable platziert werden soll (Globale Variable?). Da beide Untermodule der falsche Ort sind, um dies zu setzen und darauf Bezug zu nehmen.
Diese beiden Module werden im Abschnitt "Module" von Microsoft Outlook VBA gespeichert.
Public Sub saveAttachtoDisk(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim SaveFolder As String
SaveFolder = "D:\Orders\"
For Each objAtt In itm.Attachments
objAtt.SaveAsFile SaveFolder & "\" & objAtt.DisplayName
objAtt.Delete
Next
itm.Save
End Sub
Andere Modul:
Public Sub saveAttachtoDisk_CATEGORY1(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim SaveFolder As String
SaveFolder = "D:\Orders\"
For Each objAtt In itm.Attachments
objAtt.SaveAsFile SaveFolder & "\" & objAtt.DisplayName
objAtt.Delete
Next
itm.Save
If InStr(1, itm.Subject, "ORDERS EXTRACT - Category 1 -" & Format(Date, "dd/mm/yyyy")) Then
Shell "D:\Orders\Complete.bat"
End If
End Sub
ich nennen würde [SetTimer] (http://stackoverflow.com/q/20269844/3959875) mit einem Timeout von sagen wir 1 Sekunde am Ende des Verfahrens und seiner ID speichern mit 'SaveSetting' und Zu Beginn des Verfahrens laden Sie es und löschen Sie die Timeout-ID. Wenn das Speichern der einzelnen Elemente weniger als 1 Sekunde dauert, wird nur die Zeitüberschreitung des letzten Elements nicht gelöscht und Ihre Timer-Callback-Funktion wird aufgerufen, wo Sie Ihre Batch-Datei aufrufen. – wOxxOm
"Ich möchte 'Complete.bat' ausführen, nachdem alle E-Mail-Anhänge gespeichert wurden und ich sie nur einmal aufrufen möchte." Einmal pro Post oder pro Tag? Es ist nicht klar, was dein wirkliches Problem ist. Kannst du ein wenig weiterarbeiten? –
Mögliches Problem ist, dass es gleiche Anlagennamen gibt. Solltest du den Code "Received Date" an den Dateinamen anhängen/anhängen - oder etwas "einzigartiger" machen? Da Sie die Anhänge von der Mail entfernen, gibt es keine Rückverfolgung an Ihrem Ende und wir wissen nicht, was die 'Complete.bat' tut. Auch auf "Kategorie 1" gefunden und suche nach Gestern, was dann? – PatricK