2017-08-17 11 views
0

J'ai un certain nombre de modules "script" dans Outlook qui ont été désactivés car l'option "Exécuter en tant que script" a été supprimée dans notre système. J'ai fait appel pour une exception à l'équipe informatique, mais il n'a pas été accordé en raison du risque de sécurité. Par conséquent, je dois trouver un autre moyen de faire ce que j'ai déjà fait.Comment remplacer la fonctionnalité "Exécuter en tant que script" dans les règles Outlook 2016?

Je reçois des centaines d'e-mails chaque semaine à partir de systèmes de rapports automatisés, et ils sont filtrés dans des dossiers et d'autres applications pour être consommés par d'autres utilisateurs selon les besoins. J'ai exploré l'option NewMailItems comme alternative, mais je ne comprends pas comment exécuter les sous-routines différentes et utiliser les fonctionnalités de relocalisation de fichiers dans le cadre des règles. Une règle type permet de déplacer l'e-mail dans un dossier, de le marquer comme lu, puis de traiter les pièces jointes par le script, puis de le fermer. Je suspecte que j'ai besoin d'écrire des règles entières dans VBA maintenant pour faire la même chose, mais mon expérience au niveau du traitement des fichiers est faible, et je corromps/perds certains des fichiers que j'expérimente.

Voici ce que j'ai utilisé comme exemple de fichiers génériques. Il y en a d'autres qui ont des filtres pour les numéros d'unités et dirigent les pièces jointes vers des dossiers spécifiques à la flotte pour l'archivage (code VBA beaucoup plus long). Il y en a d'autres qui lancent des feuilles de calcul Excel et fusionnent des données avant la fermeture. Mes pairs exécutent également ce code, et certains frais généraux sont supprimés (test d'existence de dossier, etc.), de sorte que si nous sommes absents, le flux de données continue sans interruption et les scripts ne dupliquent pas les entrées (je suis juste le type écrit et partage). Le traitement des données est compris, c'est capturer que j'ai besoin d'aide.

Un exemple de « Exécuter en tant que script » la gestion des fichiers pour un projet actif:

Public Sub saveAVMAttachtoDisk(itm As Outlook.MailItem) 

'Prepare variables 
Dim objAtt As Outlook.Attachment 

'Identify destination folders: 
'Engineering AVM Daily Fault folder is as follows: 
    '\\Dc3fap002\Transit Engineering\Reliability MDBF\AVM\Daily Reports\ 
Dim saveFolder1 As String 
    saveFolder1 = "\\Dc3fap002\groups$\Transit Engineering\Reliability MDBF\AVM\Daily Reports\" 

'Engineering AVM Oil Pressure Analysis folder is as follows: 
    '\\Dc3fap002\Transit Engineering\Reliability MDBF\AVM\Daily Reports\ 
Dim saveFolder2 As String 
    saveFolder2 = "\\Dc3fap002\groups$\Transit Engineering\Project Management\Fluid Life Oil Analysis\AVM Oil Pressure Study\AVM Data\" 

Dim dateFormat 
    dateFormat = Format(itm.ReceivedTime, "yyyy-mm-dd H-mm") 

'Save file 
    For Each objAtt In itm.Attachments 
    'Saves each Daily Fault Summary Report 
      If InStr(objAtt.DisplayName, "OC Transpo - Daily Fault Summary Report") Then 
       objAtt.SaveAsFile saveFolder1 & "\" & objAtt.DisplayName 
      End If 

     'Saves each Oil Pressure File with the date and time (to prevent overwriting) 
      If InStr(objAtt.DisplayName, "Engine Oil Pressure") Then 
      objAtt.SaveAsFile saveFolder2 & "\" & dateFormat & " " & objAtt.DisplayName 
      End If 

     'Clears the Attachment for the purposes of the loop 
      Set objAtt = Nothing 
    Next 

End Sub 

J'ai expérimenté avec le code de détection NewMailItem suivant, mais je brouillage des données dans les dossiers mal, et je accidentellement supprimé/écrasé quand je suis allé vivre un essai (n'avait pas toutes les sécurités et le code de manipulation des erreurs en place). C'est le code brut non ajusté de: https://www.slipstick.com/developer/processing-incoming-e-mails-with-macros/

Je pense que c'est ce dont j'ai besoin, j'ai juste besoin d'agir dessus (appelez une autre routine) au lieu de "echo it out" dans un script de débogage. Je soupçonne qu'il me manque un petit élément conceptuel, et donc votre expérience et vos recommandations seraient appréciées. Je suis sûr que je ne serai pas seul alors que d'autres organisations coupent l'option «Exécuter en tant que script» d'Outlook, car elles ferment les portes aux logiciels malveillants potentiels.

Répondre

0

Lors de l'exécution, un code de script est un élément du code ItemAdd.

Toutes les trois suggestions suivantes sont équivalentes.

Suggestion 1 - Réutilisez l'exécution d'un code de script tel quel. Suggestion 2 - définissez itm égal à l'élément de manière à ce qu'il n'y ait aucun changement dans l'exécution incluse d'un code de script.

Private Sub objNewMailItems_ItemAdd(ByVal Item As Object) 

    'Ensure we are only working with e-mail items 
    If Item.Class <> olMail Then Exit Sub 

    dim itm as mailitem 
    set itm = item 

    'Prepare variables 
    Dim objAtt As Outlook.Attachment 

    'Identify destination folders: 
    'Engineering AVM Daily Fault folder is as follows: 
    '\\Dc3fap002\Transit Engineering\Reliability MDBF\AVM\Daily Reports\ 
    Dim saveFolder1 As String 
    saveFolder1 = "\\Dc3fap002\groups$\Transit Engineering\Reliability MDBF\AVM\Daily Reports\" 

    'Engineering AVM Oil Pressure Analysis folder is as follows: 
    '\\Dc3fap002\Transit Engineering\Reliability MDBF\AVM\Daily Reports\ 
    Dim saveFolder2 As String 
    saveFolder2 = "\\Dc3fap002\groups$\Transit Engineering\Project Management\Fluid Life Oil Analysis\AVM Oil Pressure Study\AVM Data\" 

    Dim dateFormat 
    dateFormat = Format(itm.ReceivedTime, "yyyy-mm-dd H-mm") 

    'Save file 
    For Each objAtt In itm.Attachments 
     'Saves each Daily Fault Summary Report 
     If InStr(objAtt.DisplayName, "OC Transpo - Daily Fault Summary Report") Then 
      objAtt.SaveAsFile saveFolder1 & "\" & objAtt.DisplayName 
     End If 

     'Saves each Oil Pressure File with the date and time (to prevent overwriting) 
     If InStr(objAtt.DisplayName, "Engine Oil Pressure") Then 
      objAtt.SaveAsFile saveFolder2 & "\" & dateFormat & " " & objAtt.DisplayName 
     End If 

     'Clears the Attachment for the purposes of the loop 
     Set objAtt = Nothing 
    Next 

End Sub 

Suggestion 3 - remplacer les instances de itm au point

Private Sub objNewMailItems_ItemAdd(ByVal Item As Object) 

'Ensure we are only working with e-mail items 
If Item.Class <> olMail Then Exit Sub 

'Prepare variables 
Dim objAtt As Outlook.Attachment 

'Identify destination folders: 
'Engineering AVM Daily Fault folder is as follows: 
'\\Dc3fap002\Transit Engineering\Reliability MDBF\AVM\Daily Reports\ 
Dim saveFolder1 As String 
saveFolder1 = "\\Dc3fap002\groups$\Transit Engineering\Reliability MDBF\AVM\Daily Reports\" 

'Engineering AVM Oil Pressure Analysis folder is as follows: 
'\\Dc3fap002\Transit Engineering\Reliability MDBF\AVM\Daily Reports\ 
Dim saveFolder2 As String 
saveFolder2 = "\\Dc3fap002\groups$\Transit Engineering\Project Management\Fluid Life Oil Analysis\AVM Oil Pressure Study\AVM Data\" 

Dim dateFormat 
dateFormat = Format(item.ReceivedTime, "yyyy-mm-dd H-mm") 

'Save file 
For Each objAtt In item.Attachments 
    'Saves each Daily Fault Summary Report 
    If InStr(objAtt.DisplayName, "OC Transpo - Daily Fault Summary Report") Then 
     objAtt.SaveAsFile saveFolder1 & "\" & objAtt.DisplayName 
    End If 

    'Saves each Oil Pressure File with the date and time (to prevent overwriting) 
    If InStr(objAtt.DisplayName, "Engine Oil Pressure") Then 
     objAtt.SaveAsFile saveFolder2 & "\" & dateFormat & " " & objAtt.DisplayName 
    End If 

    'Clears the Attachment for the purposes of the loop 
    Set objAtt = Nothing 
Next 

End Sub 
+0

Merci niton. J'étais clairement en train de penser cela.Je construisais une "règle" quand je n'en avais pas besoin, car les règles géreront toujours le déplacement du fichier vers un dossier approprié, j'ai juste besoin de cela pour enlever toutes les pièces jointes applicables. Cela peut rendre le code plus encombrant, car chaque e-mail appelle tous les anciens scripts, mais cela peut être optimisé à une date ultérieure. Je suis allé avec la première option, mais réécrire le reste pour harmoniser la syntaxe. Merci encore. – Dashboarder