Nie wiem jak wy, ale ja jestem maniakiem jeżeli chodzi o porządnie posegregowaną pocztę e-mail. Może to wina tego, iż od Outlook 97 prowadzę archiwum poczty w plikach PST, w którym można znaleźć większość poczty e-mail jaką dostałem.
Niestety, obszerne archiwum wymaga także dużej ilości „zasad” (ang. rules i tak dalej będę tego używał) segregowania poczty, co z czasem zaczyna być coraz trudniejsze – dużo adresów się zmienia, tworzy się duplikaty, coś się skasuje nie potrzebnie i nagle nasz Inbox zawiera 1000 maili, które powinny być posortowane lub usunięte zgodnie ustawionym rule. Jeżeli nagle stwierdzimy, że należy uruchomić nasze rules dla danego folderu w celu jego posortowania, to okazuje się iż musimy kliknąć 500 razy strzałką w dół i 500 razy spacją by zaznaczyć wszystkie rules by się uruchomiły w danym katalogu.
Ja dzisiaj nie wytrzymałem, dlatego też popełniłem VBA :)
Poniżej znajdziecie gotowy kod, który umożliwi wam uruchamiania rules dla wybranego przez was folderu w Outlook 2007 (to jest WAŻNE, dopiero od Outlook 2007 można uruchamiać rules z poziomu VBA!!). Oczywiście kod jako plik txt załączony do postu. Mam nadzieję, że się to komuś przyda :)
' <summary>
' Metoda przechodzi po wszystkich ustawionych rulach i wywoluje je
' dla zaznaczonego przez uzytkownika katalogu.
' </summary>
Public Sub RunAllRules()
' Plik PST
Dim oStore As Outlook.Store
' Kolekcja Ruli (kolekcja przypisana jest do pliku PTS (sic!))
Dim colRules As Outlook.Rules
' Pojedynczy rule
Dim oRule As Outlook.Rule
' Wybrany folder przez uzytkownika
Dim oFolder As Outlook.Folder
' Liczba wywolanych ruli
Dim count As Integer
Dim includeSubFld As Boolean
' Prosba o wybranie folderu przez uzytkownika
oFolder = Application.Session.PickFolder
' Jezeli uzytkownik kliknie cancel to wychodzimy z funkcji
If TypeName(oFolder) = "Nothing" Then
Exit Sub
End If
' Sprawdzamy czy jest jakis podfolder
If oFolder.Folders.count > 0 Then
' Jezeli jest to pytamy sie czy ma byc brany pod uwage podczas
' egzekucji rule
If vbOK = MsgBox("Include subfolder in rule execution?", vbOKCancel, "Macro: RunAllRules") Then
includeSubFld = True
Else
includeSubFld = False
End If
End If
' Pobieramy plik PST przypisany do folderu
oStore = oFolder.Store
' A z niego kolekcje ruli
colRules = oStore.GetRules
' Dla kazdego rule
For Each oRule In oStore.GetRules
' Wywolujemy rule:
' jezeli nie chcemy miec pokazanego progress to ShowProgress ustawiamy na False
oRule.Execute(ShowProgress:=True, Folder:=oFolder, IncludeSubfolders:=includeSubFld)
' Zwiekszamy licznik przejsc
count = count + 1
Next
' Infomujemy uzytkownika o zakonczeniu dzialania :)
MsgBox(CStr(count) & " rules has been executed against " & oFolder.Name & " in " & oStore.DisplayName, vbInformation, "Macro: RunAllRules")
oRule = Nothing
oRules = Nothing
oStore = Nothing
oFolder = Nothing
End Sub














