Centrum skryptów - Microsoft office

Jak wstawić pole daty w dokumencie Word?

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 wstawić pole daty w dokumencie Word?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Chcę wstawić do dokumentu Word pole zawierające datę o dwa tygodnie późniejszą, niż dzień dzisiejszy. Jak to zrobić?

-- HO

Cześć Skrypciarze! Odpowiedź

Cześć, HO. W momencie, kiedy czytasz ten artykuł, Skrypciarz piszący te słowa bez wątpienia siedzi w czeluściach Sądu Okręgowego Hrabstwa King, oczekując na decyzję, czy zostanie wyznaczony na sędziego przysięgłego. Zdajemy sobie sprawę, że wielu z naszych czytelników nigdy nie miało okazji zasiadać na ławie przysięgłych. Z pewnością zainteresuje Was zatem krótki opis przygód naszego bohatera w charakterze sędziego.

Skrypciarz piszący te słowa wstał o 5:30 rano, wyjrzał przez okno i zobaczył wściekłą śnieżycę. Mając nadzieję, że termin zostanie przełożony, zadzwonił na gorącą linię informacyjną, by sprawdzić, czy pogoda nie spowodowała opóźnień. Dowiedział się, że nie, więc westchnął, wziął prysznic, ubrał się i opuścił dom nieco po 6 rano. Tylko w ten sposób miał pewność, że dotrze do centrum Seattle na ósmą.

Dotarł do budynku sądu około 7:45 i, tak jak mu to nakazano, skierował się do poczekalni dla sędziów przysięgłych. Wraz z innymi potencjalnymi sędziami odczekał chwilę, aż zjawił się jakiś urzędnik z ważną informacją: „Widocznie nikt z was nie odebrał wiadomości – około 7:45 ogłosiliśmy, że praca sądu zacznie się dziś o dwie godziny później. Niestety więc musicie państwo poczekać do dziesiątej.”

Tak więc Skrypciarz piszący te słowa siedział i czekał aż do dziesiątej. Po oficjalnej rejestracji (co zajęło tylko chwilę), wrócił do poczekalni, gdzie czekał do południa. W południe była przerwa na lunch, więc Skrypciarz piszący te słowa zjadł kanapkę i wrócił do poczekalni, gdzie spędził czas do wpół do trzeciej, kiedy to przypisano go do puli sędziów przysięgłych jednego z procesów. Następnie znów usiadł i czekał kolejną godzinę, aż został poinstruowany, by wraz z pozostałymi sędziami przysięgłymi przejść do sali sądowej na siódmym piętrze. Tam usłyszał: „Powinniśmy właściwie odbyć teraz rozmowy kwalifikacyjne, ale robi się już późno, więc odłożymy to na jutro. Zapraszam wszystkich w dniu jutrzejszym.”

I Skrypciarz poszedł do domu.

Innymi słowy, z tego co zorientował się Skrypciarz piszący te słowa, bycie sędzią przysięgłym polega głównie na przesiadywaniu i nudzeniu się, chodzeniu na lunch, a następnie nudzeniu się aż do końca dnia roboczego. Na szczęście Skrypciarz posiada niezbędne do tego kwalifikacje – w końcu jego praca zawodowa wygląda bardzo podobnie.

Okazało się jednak, że Skrypciarz piszący te słowa nie posiada kwalifikacji niezbędnych, by wstawić pole daty do dokumentu Word, a już szczególnie pole daty, pokazujące dzień o dwa tygodnie późniejszy, niż dzień dzisiejszy. Nawet gorzej – z jego wiedzy wynikało, że nie da się tego zrobić, nawet mając otwarty dokument Word. Czy jednak nasz Skrypciarz się poddał? Jasne, że tak.

Ale potem, po rozwiązaniu krzyżówki i wypełnieniu sudoku, i po przeczytaniu po raz trzeci kącika porad w swojej ulubionej gazecie, Skrypciarz piszący te słowa wpadł na pomysł, jak obejść problem:

Set objWord = CreateObject("Word.Application")

objWord.Visible = True



Set objDoc = objWord.Documents.Open("C:\Scripts\Test.doc")



Set objRange = objDoc.Bookmarks("TwoWeeks").Range

objRange.Text = Date + 14

Ponieważ nie mógł wymyślić sposobu utworzenia pola zawierającego datę o dwa tygodnie późniejszą od daty bieżącej, Skrypciarz piszący te słowa zrobił co mógł: wstawił do dokumentu zakładkę (o nazwie TwoWeeks), a następnie troszkę poczarował i ustawił jej wartość na pożądaną datę. Inne podejście, ale rezultat taki sam.

Jak więc działa ten skrypt? Otóż na początek tworzymy wystąpienie obiektu Word.Application, następnie ustawiamy właściwość Visible jako True; dzięki temu uzyskujemy widoczne na ekranie wystąpienie programu Microsoft Word. Teraz używamy metody Open, by otworzyć dokument C:\Scripts\Test.doc:

Set objDoc = objWord.Documents.Open("C:\Scripts\Test.doc")
Ważne. Skrypt ten zakłada, że w dokumencie Test.doc znajduje się już zakładka o nazwie TwoWeeks. Jeśli nie ma takiej zakładki, skrypt nie zadziała.

Po otwarciu dokumentu, poniższy wiersz kodu tworzy obiekt Range, zawierający zakładkę TwoWeeks:

Set objRange = objDoc.Bookmarks("TwoWeeks").Range

Teraz musimy tylko ustawić wartość Text zakładki na bieżącą datę plus dwa tygodnie (czyli 14 dni):

objRange.Text = Date + 14

I gotowe.

To nienajgorsze rozwiązanie, ale ma jedną wadę – zakładka zostanie zaktualizowana tylko wtedy, jeśli otworzymy dokument za pomocą skryptu. Wynika to stąd, że sam dokument nie zawiera kodu powodującego automatyczną aktualizację zakładki. Może, ale nie musi to być problemem. Jeśli jest to problem, można go rozwiązać, tworząc w dokumencie makro AutoExec. Jak wiadomo, makro AutoExec uruchamia się po każdym otwarciu dokumentu – a to znaczy, że każde jego otwarcie spowoduje aktualizację zakładki.

Nie wdając się w szczegółowe informacje o działaniu VBA (Visual Basic for Applications) w programie Microsoft Word podajemy kod makra AutoExec:

Sub AutoExec()

    Set objRange = ActiveDocument.Bookmarks("TwoWeeks").Range

    objRange.Text = Date + 14

End Sub

Zupełnie jak w kąciku porad.

A jeśli chodzi o Skrypciarza piszącego te słowa, to już niedługo dowie się, czy może uznać, że spełnił już swój obywatelski obowiązek, czy też będzie go jeszcze spełniać – uczestnicząc w procesie, który potrwa co najmniej trzy tygodnie. Byłoby to… ciekawe… ale jeszcze damy znać. Mamy teraz mnóstwo czasu.

 Do początku strony Do początku strony

Centrum skryptów - Microsoft office