Ho più e-mail in arrivo (Ogni giorno ricevo 3 e-mail per ordini per 3 categorie). L'oggetto dell'e-mail è nel formato:Esegui script batch una volta per più e-mail
"ESTRATTO ORDINI - [Categoria] - [Data]".
Dove [categoria] può essere Category 1
, Category 2
o Category 3
. [Data] è la data di invio dell'e-mail nel formato GG/MM/AAAA.
Ho una configurazione di regola per cercare 'Ordini' quindi chiamare il codice riportato di seguito.
Voglio eseguire Complete.bat
dopo che tutti gli allegati di posta elettronica sono stati salvati e voglio solo chiamarlo una volta.
Ho provato a farlo creando un altro sottotitolo chiamato saveAttachtoDisk_CATEGORY1(itm)
che viene chiamato solo quando trova "Categoria 1" nell'oggetto. Quindi salva l'allegato ma cerca anche una categoria 1 nell'oggetto E cerca anche la data di ieri.
Voglio una soluzione migliore che non dipende dalla data. Una variabile globale potrebbe funzionare dove imposto che la variabile sia 1, quindi eseguire Complete.bat
e quindi in futuro se variabile = 1, quindi non eseguire Complete.bat
. Non sai dove mettere questa variabile (variabile globale?) Poiché entrambi i sottomoduli sembrano il posto sbagliato per metterlo e riferirlo.
Entrambi questi due moduli vengono salvati nella sezione "Moduli" di Microsoft Outlook VBA.
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
altro modulo:
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
che chiamerei [SetTimer] (http://stackoverflow.com/q/20269844/3959875) con un timeout di dire 1 secondo al termine della procedura e salvare il suo ID con 'SaveSetting', e all'inizio della procedura, caricarlo e cancellare l'ID di timeout. Pertanto, se il salvataggio di ciascun elemento richiede meno di 1 secondo, il timeout dell'ultimo elemento non verrà cancellato e verrà richiamata la funzione di richiamata del timer, in cui verrà richiamato il file batch. – wOxxOm
"Voglio eseguire 'Complete.bat' dopo che tutti gli allegati di posta elettronica sono stati salvati e voglio solo chiamarlo una volta." Una volta per posta o al giorno? Non è chiaro quale sia il tuo vero problema. Puoi elaborare un po '? –
Il problema potenziale è che ci saranno gli stessi nomi allegati. Dovresti prefisso/aggiungi codice Data ricevuta al nome del file - o qualcosa lo rende più unico? Dato che rimuovi gli allegati dall'elemento di posta, non c'è traccia sul tuo capo e non sappiamo cosa fa il 'Complete.bat'. Anche su "Categoria 1" trovato e cerca ieri, allora cosa? – PatricK