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