Centrum skryptów - Microsoft office

Jak usunąć wszystkie wiadomości z folderu „Elementy wysłane”?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

Jak usunąć wszystkie wiadomości z folderu „Elementy wysłane”?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak usunąć wszystkie wiadomości z folderu „Elementy wysłane”?

-- OG

Cześć Skrypciarze! Odpowiedź

Cześć, OG. Przez całe życie Skrypciarzowi piszącemu te słowa wmawiano, że „głupiej niż zadać głupie pytanie, jest nie zadać żadnego”. Ale szczerze mówiąc, Skrypciarz w to nie wierzy. Weźmy na przykład Douga Williamsa, pierwszego czarnoskórego rozgrywającego w zawodach Super Bowl. Jednym z pytań, jakie mu często zadawano, było: „Od jak dawna jesteś czarnym rozgrywającym?”

Na tym przykładzie jasno widać, że czasami mądrzej jest darować sobie niektóre pytania.

Tak czy inaczej, wiadomo, że aby uzyskać odpowiedź, trzeba się najpierw zapytać… Chociaż nie dotyczy to czytelników rubryki Cześć Skrypciarze! Otóż Skrypciarze odpowiadają nie tylko na zadane pytanie, lecz także na takie, których nikt nie zadał. Jak na przykład to: tak, już pora rozpocząć przygotowania do Zimowej Olimpiady Skrypciarskiej 2007.

Zgadza się, Zimowa Olimpiada Skrypciarska 2007 jest już za pasem – odbędzie się w dniach 12-23 lutego. W tegorocznych zawodach mamy nie tylko większą liczbę dyscyplin, ale i więcej kategorii (VBScript dla początkujacych; VBScript dla zaawansowanych; Windows PowerShell dla początkujących; Windows PowerShell dla zaawansowanych). A czy wspomnieliśmy już, że mamy także nagrody – o niektórych już informowaliśmy, o niektórych jeszcze nie. Uwaga – przyszykujcie się na szok – zamierzamy rozdać m.in. 250 laleczek doktora Scripto.

Najlepsze, że szansę otrzymania nagrody ma każdy, kto weźmie udział w zawodach – nie trzeba nawet prawidłowo ukończyć żadnej konkurencji. Czy istnieją jakieś inne zawody, gdzie zwycięzcy wyłaniani są losowo?!

No, dobra. Oprócz łyżwiarstwa figurowego.

Rozumiemy, że jeśli w jakimkolwiek stopniu przypominacie Skrypciarzy, to odkładaliście szkolenia na ostatnią chwilę, aż to nagle okazało się, że Olimpiada Skrypciarska jest tuż-tuż. Ale nie ma się co stresować. Przygotowaliśmy do pobrania oficjalny program Olimpiady Skrypciarskiek, w którym można znaleźć wiele porad, przykładowy przebieg jednej z konkurencji i kilka krzyżówek, dzięki którym można powtórzyć najważniejsze pojęcia z dziedziny skryptów. Natomiast dla początkujących mamy specjalny artykuł szkoleniowy poświecony obsłudze tablic. W tym roku nie ma żadnych wymówek, by nie wziąć udziału chociaż w jednej konkurencji Olimpiady.

Mówimy poważnie: żadnych wymówek.

Zatem teraz, kiedy zajęliśmy się już pytaniem niezadanym, możemy przejść do właściwego tematu artykułu. OG, mówisz, że chcesz usunąć wszystkie wiadomości zapisane w folderze elementów wysłanych. Umożliwi Ci to poniższy skrypt:

Const olFolderSentMail  = 5



Set objOutlook = CreateObject("Outlook.Application")

Set objNamespace = objOutlook.GetNamespace("MAPI")



Set objFolder = objNamespace.GetDefaultFolder(olFolderSentMail)



Set colItems = objFolder.Items



For i = colItems.Count to 1 Step - 1

    colItems(i).Delete

Next

Jak działa ten skrypt? Zaszalejmy – odpowiemy i na to pytanie! Zaczynamy od utworzenia stałej o nazwie olFolderSentMail, której wartość ustawimy na 5; za pomocą tej stałej poinstruujemy skrypt, z którym folderem programu Outlook chcemy się połączyć. Po zdefiniowaniu stałej tworzymy wystąpienie obiektu Outlook.Application, a następnie używamy metody GetNamespace, by połączyć się z przestrzenią nazw MAPI. Teraz możemy połączyć się z folderem elementów wysłanych za pomocą metody GetDefaultFolder:

Set objFolder = objNamespace.GetDefaultFolder(olFolderSentMail)

Kiedy to wykonamy, używamy poniższego wiersza kodu, który zwraca kolekcję wszystkich wiadomości znajdujących się w folderze „Elementy wysłane”:

Set colItems = objFolder.Items

Teraz będzie trochę dziwnie, ale tylko trochę. Musimy uruchomić pętlę, która przejdzie przez wszystkie elementy kolekcji, po kolei je usuwając. Zwykle użylibyśmy do tego pętli For Each. Jednak w programie Outlook to nie zadziała i musimy podać numer porządkowy każdego elementu, który chcemy usunąć. Co więcej – z przyczyn, o których wolimy się nie wypowiadać – próba usunięcia wiadomości w kolejności od pierwszej do ostatniej się nie powiedzie. Musimy zacząć od ostatniej wiadomości, przechodząc stopniowo ku pierwszej. Dlatego nasz pętla wygląda tak dziwacznie:

For i = colItems.Count to 1 Step - 1

    colItems(i).Delete

Next

Jak widać, pętla działa do tyłu (Step -1), przechodząc od ostatniej wiadomości (której numer określamy dzięki właściwości Count) do pierwszej z nich (element 1). Jest to konieczne, ponieważ usunięcie jednego elementu powoduje, że wszystkie zostają policzone ponownie. Gdybyśmy więc zaczęli od pierwszej wiadomości, doszlibyśmy co najwyżej do połowy.

Wiemy, wygląda to dziwnie. Ale spróbujcie sami, a będziecie wiedzieć, o co chodzi.

Tak czy inaczej, ten skrypt powinien załatwić sprawę. Do zobaczenia na Olimpiadzie Skrypciarskiej.

Uwaga!

Macie rację: usuwanie wszystkich elementów w folderze programu Outlook byłoby niezłą konkurencją olimpijską. No ale już trochę na to za późno, no nie?

 Do początku strony Do początku strony

Centrum skryptów - Microsoft office