Mit dem Blogeintrag Outlook 2007 – Definierte Regeln per Makro aufrufen vor einiger Zeit hatte ich beschrieben, wie per Makro in Outlook definierte Regeln ausgeführt werden können. Vor kurzem erhielt ich die Frage, wie die definierten Regeln gegen jeden beliebigen Ordner ausführt werden können. Dazu muss man das Konzept der benannten Parameter von Visual Basic for Applications (VBA) kennen.
Eine Methode wird so aufgerufen (Erklärung Code siehe obigen referenzierten Blogeintrag):
actualRule.Execute
Unterstützt die Methode auch benannte Parameter, geht das so:
actualRule.Execute _ ShowProgress:=False, _ Folder:=Application.Session.GetDefaultFolder(olFolderJunk), _ IncludeSubfolders:=False, _ RuleExecuteOption:=OlRuleExecuteOption.olRuleExecuteAllMessages
Die Reihenfolge der Parameter ist dabei egal, dazu sind sie ja benannt. Wichtig ist für "C#-ler" nur, dass das auch als eine Zeile Anwendungscode geschrieben werden kann; dass "_" dient dem Zeilenumbruch im VB-Anwendungscode.
Wozu könnte man obigen Anwendungscode in Verbindung mit dem obigen Blogeintrag gebrauchen? In Outlook werden leider eintreffende E-Mails zuerst vom Junk-Mail-Filter bearbeitet und erst danach, ha, da hat Microsoft wieder "mitgedacht", von den definierten Regeln. Definiert man sich eine Regel, die die üblichen E-Mails mit z. B. einem Betreff wie "Viagra" sofort löscht, wenn diese nicht von einem Kontakt stammen, funktioniert das nicht. Warum? Diese E-Mails werden in den Junk-Mail-Ordner einsortiert und die definierten Regeln dann eben nicht mehr gegen diese eingetroffenen E-Mails ausgeführt. Werden die definierten Regeln gegen den Junk-Mail-Ordner aber per Makro ausgeführt, lässt sich das Prinzip nachträglich erreichen. Notiz ans Product Team in Redmond: Bitte ändern.
Soll es nicht ein vordefinierter Ordner sein, gegen den definierte Regeln per Makro ausgeführt werden, sondern der aktuell angezeigte, ist das auch möglich. Da Ganze funktioniert dann so:
actualRule.Execute _ ShowProgress:=False, _ Folder:=Application.ActiveExplorer.CurrentFolder, _ IncludeSubfolders:=False, _ RuleExecuteOption:=OlRuleExecuteOption.olRuleExecuteAllMessages
Remember Me
a@href@title, b, blockquote@cite, em, i, strike, strong, sub, sup, u