Planen Sie die Ausführung des Outlook-VBA-Skripts zu einer bestimmten Zeit

Planen Sie die Ausführung des Outlook-VBA-Skripts zu einer bestimmten Zeit

Diese Frage ist eine andere (vereinfachte) Version dieses SO-Beitrags (Verknüpfung).

Ich habe ein bestimmtes Outlook-VBA-Skript, das ich jeden Tag um 14 Uhr automatisch ausführen möchte (und andere zu mehreren anderen Zeiten). Die Ausführung auf der Clientseite ist problemlos möglich, da der Computer immer eingeschaltet ist. Wie kann ich dies zuverlässig erreichen?

Der (verknüpft) SO Post skizziert ein paar Ansätze, die ich versucht habe, unddieser SO-Beitragist eine allgemeine Anfrage zu Vorgehensweisen, aus der meine spezifische Frage zum Thema „Laufen auf einmal“ entstanden ist.

Antwort1

Zusammenfassung

Wir erstellen ein Powershell-Skript, das eine E-Mail über den SMTP-Server von Google sendet. Dieses Skript kann über den Taskplaner ausgeführt werden, sodass Sie es nach einem Zeitplan ausführen können. Wenn die E-Mail in Outlook empfangen wird, löst eine Regel, die nach dieser E-Mail sucht, ein Outlook-VBA-Skript aus. Viola.

Schritt 1: Erstellen Sie eine sichere Anmeldeinformationsdatei für das Gmail-Konto, das Sie zum Senden einer „Trigger“-E-Mail zum Auslösen des VBA-Skripts verwenden.

Führen Sie in Powershell aus

read-host -assecurestring | convertfrom-securestring | out-file $Home\autopass.txt

Dadurch wird eine sichere Version Ihres Passworts für dieses Gmail-Konto in Ihrem Benutzerverzeichnis gespeichert. Beachten Sie, dass Sie bei Verwendung der Zwei-Faktor-Authentifizierung eineApp-Passwortanstelle Ihres normalen Passworts für diese Anmeldeinformationen, das Sie in den folgenden Schritten verwenden werden.

Schritt 2: Dieses Powershell-Skript sendet eine E-Mail über den SMTP-Server von Google unter Verwendung Ihrer eigenen Anmeldeinformationen. Legen Sie die Felder entsprechend fest und wählen Sie einen ganz bestimmten, eindeutigen Betreff (z. B. „@TRIGGERMYVBA21“), den Sie in Ihrer Outlook-Regel notieren.

   # You must paste your password after running the command:  
   # read-host -assecurestring | convertfrom-securestring | out-file $Home\autopass.txt
   # before running the next part of the script.

   #Create credential file
    $password = get-content $Home\autopass.txt | convertto-securestring
    $credentials = new-object -typename System.Management.Automation.PSCredential -argumentlist "[email protected]",$password

    #Send automatic email
    $From = "[email protected]"
    $To = "[email protected]"
    $Subject = "@TRIGGERMYVBA21"
    $Body = "some body"
    $SMTPServer = "smtp.gmail.com"
    $SMTPPort = "587"

    Send-MailMessage -From $From -to $To -Subject $Subject `
        -Body $Body -SmtpServer $SMTPServer -port $SMTPPort -UseSsl `
        -Credential ($credentials)

        # possible additions
        # $Cc = "[email protected]"
        # $Attachment = "dir\attachment.txt"
        # both of which require the following tags in the Send-MailMessage command
        # -Attachments $Attachment -Cc $Cc

Speichern Sie das Skript als .ps1-Datei.

Schritt 3:Stellen Sie sicher, dass Sie in Outlook Regeln erstellen können, die als Aktion „Skript ausführen“ können. Wenn das nicht möglich ist, müssen Sie mit regedit HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Securityein neues DWORD (32-Bit-Wert) mit dem Titel "EnableUnsafeClientMailRules"und dem Wert 1 hinzufügen.

Schritt 4: Erstellen Sie eine Regel, die Folgendes findet:

  • Die Gmail-Adresse des Gmails, die Sie im Powershell-Skript verwenden, um die Regel auszulösen
  • Die eindeutige Betreffzeile, die Sie im Powershell-Skript erstellt haben (z. B. „@TRIGGERMYVBA21“)

und dann:

  • Löscht die E-Mail,
  • Und führt ein Skript aus

Schritt 5: Richten Sie eine Taskplanerregel ein, die das Powershell-Skript zu den gewünschten Zeitpunkten auslöst. Wählen Sie als Aktion „Programm starten“ aus, geben Sie dann „Powershell“ als Programm ein und schließlich „-File directory\script.ps1“ in das Feld „Argumente hinzufügen“.

Zur Information: Ich verwende dies, um E-Mails zurückzustellen, bis sie mithilfe des VBA-Skripts zum Verschieben von Ordnern bearbeitet werden können. Ich verschiebe E-Mails in bestimmte Ordner und sie werden dann zurück in den Posteingang verschoben, wenn die Regel für diesen bestimmten Ordner ausgelöst wird.

Der Vollständigkeit halber ist dieses Skript hier enthalten:

Sub moveTheItems(item As Outlook.MailItem)
 Dim myNameSpace As Outlook.NameSpace
 Dim myInbox As Outlook.Folder
 Dim myDestFolder As Outlook.Folder
 Dim myItems As Outlook.Items
 Dim myItem As Object

 Set myNameSpace = Application.GetNamespace("MAPI")
 Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox)
 Set myItems = myInbox.Items
 Set myDestFolder = myInbox
 Set myItems = myInbox.Folders("Snooze Until 3 PM").Items   

 For i = myItems.Count To 1 Step -1 'Iterates from the end backwards
    myItems.item(i).Move myDestFolder
 Next
End Sub

verwandte Informationen