Centrum Skryptów - Microsoft office

Jak ustawić przypomnienie o wszystkich spotkaniach w programie Microsoft Outlook?

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 ustawić przypomnienie o wszystkich spotkaniach w programie Microsoft Outlook?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Moja szefowa bardzo nie lubi przypomnień o spotkaniach, więc za każdym razem, gdy wysyła zawiadomienie o spotkaniu, robi to bez przypomnienia. Ja jestem raczej zabiegany, dlatego lubię przypomnienia - jestem wtedy pewien, że o niczym nie zapomnę. Czy można napisać skrypt, który przejdzie przez wszystkie moje spotkania i doda do nich przypomnienie?

-- PS

Cześć Skrypciarze! Pytanie

Cześć, PS! Witamy w ten piękny czwartek lub piątek! W sumie może nawet w poniedziałek… Prawda jest taka, że się trochę pogubiliśmy w czasoprzestrzeni, bo całe dnie i połowę nocy spędzamy na testowaniu skryptów, które zostały nam nadesłane z racji naszej Skrypciarskiej Olimpiady 2008 (j.ang.) (jeżeli jeszcze nic nie nadesłaliście, macie czas do trzeciego marca, a nagrody (j.ang.) są rzeczywiście godne polecenia).

Uwaga: Mamy tu oczywiście limit – nagroda na głowę. Prosimy się więc nie podpisywać tysiącami nazwisk, nic to nie da…

Co ciekawe, Skrypciarski Syn zaczął ostatnio wyzywać swojego ojca i jego kolegów od maniaków komputerowych. Wyobrażacie to sobie? Po pierwsze, jak może tak mówić syn o ojcu, a nie odwrotnie, a po drugie fakt, że siedzę przez cały weekend przed komputerem testując tysiące skryptów w Perl, VBScript oraz Windows PowerShell, nie upoważnia go do wyciągania tak dalece mylących wniosków. Nie jestem maniakiem, jestem pasjonatem.

Co jest w tym najzabawniejsze? Nie, nie skrypt „jak obliczyć ilość wody potrzebną do napełnienia basenu (j.ang.)”, Chodzi mi raczej o fakt, że oprócz testowania skryptów musimy ponadto wykonywać swoją normalną pracę. Takie dwa etaty naraz. Zgadnijcie tylko za ile etatów nam płacą? Bingo! Za jeden.

Uwaga od Redakcji: Zdajemy sobie sprawę ,jak bardzo zapracowani są ostatnio nasi Skrypciarze. Chcielibyśmy jednak przypomnieć następujące fakty:

Kto wyszedł z inicjatywą Olimpiady Skrypciarskiej?

Kto wyszedł z inicjatywą dodania kilku języków programowania?

Kto przy każdej możliwej okazji zachęca ludzi do brania udziału w Olimpiadzie?

Bingo!

Skrypciarze.

Skoro już o etatach - oto skrypt, który ustawia przypomnienie dla wszystkich spotkań i wizyt w programie Microsoft Outlook:

Const olFolderCalendar = 9



Set objOutlook = CreateObject("Outlook.Application")

Set objNamespace = objOutlook.GetNamespace("MAPI")

Set objFolder = objNamespace.GetDefaultFolder(olFolderCalendar)



Set colItems = objFolder.Items



For Each objItem in colItems

    objItem.ReminderSet = True

    objItem.ReminderMinutesBeforeStart = 15

    objItem.Save

Next

Dość prosty, nie? Zaczynamy od skonfigurowania stałej olFolderCalendar i ustawienia jej wartości na 9. Po zrobieniu tego tworzymy wystąpienie obiektu Outlook.Application, a następnie używamy poniższego wiersza kodu, który łączy nas z obszarem nazw MAPI:

Set objNamespace = objOutlook.GetNamespace("MAPI")
Ciekawostka: MAPI jest jedynym obszarem nazw, z którym można połączyć się podczas pracy z programem Microsoft Outlook. Jednak nadal potrzebna jest nam metoda GetNamespace w celu połączenia się z tym obszarem nazw. Jeżeli opuścicie ten wiersz kodu, Wasz skrypt zawiedzie.

Po połączeniu się z obszarem nazw MAPI wywołujemy metodę GetDefaultFolder i łączymy się z kalendarzem programu Microsoft Outlook (wiemy, że będziemy łączyć się z kalendarzem, ponieważ metodzie GetDefaultFolder przypisujemy stałą olFolderCalendar):

Set objFolder = objNamespace.GetDefaultFolder(olFolderCalendar)

Po połączeniu się z kalendarzem pobieramy kolekcję wszystkich jego wpisów (spotkania i wizyty) za pomocą poniższego wiersza kodu:

Set colItems = objFolder.Items

Teraz już możemy działać. W celu ustawienia przypomnienia dla wszystkich wpisów w kalendarzu musimy ustawić najpierw pętlę For Each, która przejdzie przez wszystkie elementy kolekcji, do tego właśnie służy nam następujący wiersz kodu:

For Each objItem in colItems

Wewnątrz pętli ustawiamy wartość właściwości ReminderSet na True; to doda przypomnienie do każdego spotkania. Następnie ustawiamy wartość właściwości ReminderMinutesBeforeStart na 15; innymi słowy, otrzymamy przypomnienie 15 minut przed rozpoczęciem danego wydarzenia. Jeżeli czasu potrzeba nam więcej lub mniej, wówczas ReminderMinutesBeforeStart można modyfikować dowolnie, wedle uznania. To na przykład dla zapominaczy, którym przypominać trzeba 30 minut przed rozpoczęciem danego wydarzenia:

objItem.ReminderMinutesBeforeStart = 30

Już prawie skończyliśmy – musimy jeszcze wywołać metodę Save, a przypomnienie o pierwszym spotkaniu doda się automatycznie:

objItem.Save

Następnie powracamy do pętli i powtarzamy proces dla kolejnego elementu kolekcji.

Działa świetnie, trzeba tylko pamiętać o kilku rzeczach. Po pierwsze, skrypt ustawia przypomnienie dla wszystkich wpisów w kalendarzu, nawet tych, które już miały miejsce. Jeżeli więc uruchomicie skrypt w obecnej formie, to zwróci Wam przypomnienia o 364748 spotkaniach, które już się odbyły. Czy jesteśmy pewni? Zaufajcie nam.

Uwaga: Czy można to jakoś obejść? Oczywiście, że tak, zerknijcie tylko na ten artykuł z serii Cześć, Skrypciarze, który traktuje o filtrowaniu spotkań pod kątem daty.

Po drugie, całkiem możliwe, że nie chcecie przypomnień na temat wszystkich wpisów (ja bym nie chciał), lub chcecie inne godziny przypomnień dla różnych spotkań. To trochę za szeroki temat jak na dzisiejszy artykuł. Mamy jednak jeden na ten temat w witrynie Office Space (j.ang.) – dość obszernie omawia on cały proces filtrowania. Jeżeli więc potrzeba Wam wybrania różnych przypomnień dla różnych spotkań (na przykład dla tych, które zorganizowała Wasza szefowa), to właśnie tam znajdziecie wszystko, co Was interesuje.

Byłoby Wam trochę łatwiej, gdybyśmy dali Wam jakiś skrypt przykładowy? Proszę bardzo. Poniższy skrypt filtruje wszystkie spotkania, których data rozpoczęcia (Start) jest wcześniejsza niż dzisiaj (to jest nie przypomina o tych, które już miały miejsce); filtruje on również wszystkie spotkania, które mają już ustawione przypomnienia (dzięki temu przypomnienie godzinne nie będzie zastępowane przez przypomnienie piętnastominutowe). Stwierdziliśmy, że niektórym z Was może się przydać taki skrypt:

Const olFolderCalendar = 9



Set objOutlook = CreateObject("Outlook.Application")

Set objNamespace = objOutlook.GetNamespace("MAPI")

Set objFolder = objNamespace.GetDefaultFolder(olFolderCalendar)



Set colItems = objFolder.Items



strFilter = "[ReminderSet] = False AND [Start] >= '2/21/2008'"

Set colFilteredItems = colItems.Restrict(strFilter)



For Each objItem In colFilteredItems

    objItem.ReminderSet = True

    objItem.ReminderMinutesBeforeStart = 15

    objItem.Save

Next

Mamy nadzieję, że odpowiedzieliśmy na Twoje pytanie, PS! Muszę teraz kończyć, bo z racji naszej Skrypciarskiej Olimpiady 2008 (j.ang.) nadeszły nowe skrypty do przetestowania (myślę, że gdyby osobną konkurencją było umieszczanie nazwy „Skrypciarska Olimpiada” w artykule, to wygrałbym w cuglach). Pamiętajcie, że zostało jeszcze trochę czasu na otrzymanie naszego certyfikatu jakości (j.ang.).

Jeszcze jakieś pytania? Mamy nadzieję, że nie, bo nasz kalendarz przypomina nam, że czas wracać do roboty. Nasz kalendarz jest chyba najbardziej efektywny ze wszystkich – często staje w naszych drzwiach z założonymi ramionami i błyska na nas laserami z oczu (gdyby nie to, że wiem, że Skrypciarska Pani Redaktor pracuje cały czas zamiast łazić po biurze i błyskać laserami z oczu, to przysiągłbym, że to właśnie ona). Tak czy siak, czas wracać do roboty…

 Do początku strony Do początku strony

Centrum Skryptów - Microsoft office