Nach den Blogeinträgen
bin ich mehrfach gefragt worden, wie man Regeln in bestimmten Ordnern ausführen kann. Das heißt, es geht nicht um durch Microsoft vordefinierte Ordner, sondern beliebige, die von Endanwendern definiert werden. Es funktioniert so:
Sub RunAllRules()
Dim outlookStore As Outlook.Store
Dim allRules As Outlook.Rules
Dim actualRule As Outlook.Rule
Dim resultFolder As Folder
Set outlookStore = Application.Session.DefaultStore
Set allRules = outlookStore.GetRules
Set resultFolder = GetFolderByName( _
rootFolder:=OlDefaultFolders.olFolderInbox, folderName:="Test")
For Each actualRule In allRules
If actualRule.RuleType = olRuleReceive Then
actualRule.Execute _
ShowProgress:=False, _
Folder:=Application.Session.GetFolderFromID(EntryIDFolder:=resultFolder.EntryID), _
IncludeSubfolders:=False, _
RuleExecuteOption:=OlRuleExecuteOption.olRuleExecuteAllMessages
End If
Next
Set outlookStore = Nothing
Set allRules = Nothing
Set actualRule = Nothing
End Sub
Function GetFolderByName(rootFolder As OlDefaultFolders, folderName As String) As Folder
Dim folders As folders
Dim actualFolder As Folder
Set folders = Application.Session.GetDefaultFolder(rootFolder).folders
For Each actualFolder In folders
If actualFolder.Name = folderName Then
Set GetFolderByName = actualFolder
Exit Function
End If
Next
End Function
Sub RunAllRules()
Dim outlookStore As Outlook.Store
Dim allRules As Outlook.Rules
Dim actualRule As Outlook.Rule
Dim resultFolder As Folder
Set outlookStore = Application.Session.DefaultStore
Set allRules = outlookStore.GetRules
Set resultFolder = GetFolderByName( _
rootFolder:=OlDefaultFolders.olFolderInbox, folderName:="Test")
For Each actualRule In allRules
If actualRule.RuleType = olRuleReceive Then
actualRule.Execute _
ShowProgress:=False, _
Folder:=Application.Session.GetFolderFromID(EntryIDFolder:=resultFolder.EntryID), _
IncludeSubfolders:=False, _
RuleExecuteOption:=OlRuleExecuteOption.olRuleExecuteAllMessages
End If
Next
Set outlookStore = Nothing
Set allRules = Nothing
Set actualRule = Nothing
End Sub
Function GetFolderByName(rootFolder As OlDefaultFolders, folderName As String) As Folder
Dim folders As folders
Dim actualFolder As Folder
Set folders = Application.Session.GetDefaultFolder(rootFolder).folders
For Each actualFolder In folders
If actualFolder.Name = folderName Then
Set GetFolderByName = actualFolder
Exit Function
End If
Next
End Function
Das Besondere liegt also darin, dass über die Funktion GetFolderByName die ID des jeweiligen Ordners ermittelt wird, in dem die Regeln ausgeführt werden sollen. Dazu muss bei:
Set resultFolder = GetFolderByName( _
rootFolder:=OlDefaultFolders.olFolderInbox, folderName:="Test")
der Ordner angegeben werden unter dem der jeweilige Ordner liegt als auch sein Name.
In der nachfolgenden Abbildung wird dieses gut ersichtlich. Hier befindet sich der Ordner Test unterhalb von Posteingang (olFolderInbox) und heißt eben "Test". Mit dem obigen Anwendungscode werden dann alle definierten Regeln in diesem Ordner ausgeführt. Non scholae, set vitae discimus.