Centrum skryptów - Microsoft Office

Jak dodać numerację strony „X z Y” do stopki programu 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 dodać numerację strony „X z Y” do stopki programu Word?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Właśnie przeczytałam artykuł na temat dodawania numerów stron do stopki w dokumencie programu Word. Co jednak zrobić, jeżeli moja numeracja musi wyglądać w następujący sposób: „X z Y”, przy czym X to aktualny numer strony, a Y to całkowita liczba stron?

-- JS

Cześć Skrypciarze! Odpowiedź

Cześć, JS. Kilka lat temu obok naszego centrum skryptów był sklepik, w którym znajdowała się „Łapa szczęścia”, czyli po prostu maszyna zręcznościowa do maskotek. Oczywistym chyba jest, że ani Skrypciarzowi, ani jego męskiemu potomkowi nie przyniosła ona szczęścia. Problem w tym, że to małe Skrypciątko uparło się, że wyłowi coś z tego morza maskotek. Przez jakiś czas nasz Skrypciarz dawał się namawiać, wyciągając co rusz kolejne monety, ale Skrypciątko ani razu nie było nawet o krok od pluszowej wygranej.

-To po prostu bez sensu, nie będę już marnował pieniędzy, bo to po prostu niemożliwe, żeby coś tu wygrać! –zakomunikował Skrypciarz Skrypciątku.

-Tato, ale już wiem o co chodzi, wiem jak ją podejść. Proszę, ostatni raz… Wiem, że mi się uda tym razem.

Jednak mimo krowich oczu Skrypciątka, Skrypciarz nie dał się ubłagać. W końcu jeżeli coś jest niemożliwe, to jest to niemożliwe. Koniec, kropka.

Wspominamy o tym tylko dlatego, że Skrypciarz do tej pory był również przekonany, iż nie da się programistycznie umieścić numeracji stron „X z Y” w stopce dokumentu Word. Aż do tego momentu, kiedy niemożliwe stało się możliwe. Oto cała sztuczka:

Set objWord = CreateObject("Word.Application")

objWord.Visible = True



Set objDoc = objWord.Documents.Add()



Set objRange = objDoc.Sections(1).Footers(1).Range



Set objTemplate = objDoc.AttachedTemplate

objTemplate.AutoTextEntries("Page X of Y").Insert objRange

Na czym zatem polega ta sztuczka? Za sekundę wyjaśnimy, najpierw jednak skupmy się na reszcie skryptu. Zaczynamy od utworzenia wystąpienia obiektu Word.Application i ustawieniu właściwości Visible na True. W ten sposób uruchamiamy wystąpienie programu MS Word w oknie widocznym na ekranie. Po skorzystaniu z metody Add w celu dodania nowego, pustego dokumentu do naszego wystąpienia programu Word, używamy następującego wiersza kodu, aby utworzyć obiekt Range, który powiązany jest z pierwszą stopką w pierwszej sekcji naszego dokumentu.

Set objRange = objDoc.Sections(1).Footers(1).Range

Ponieważ w dokumencie nie mamy innych sekcji ani stopek, oznacza to, że stopka „X z Y” będzie się odnosiła do całego dokumentu.

Następnym krokiem jest utworzenie wystąpienia obiektu Template, w tym celu łączymy się z właściwością AttachedTemplate:

Set objTemplate = objDoc.AttachedTemplate

Następnie wstawiamy jeden z wpisów z AutoTextEntries do szablonu, a dokładniej wpis Page X of Y:

objTemplate.AutoTextEntries("Page X of Y").Insert objRange

Nie jest to chyba zanadto skomplikowane. Łączymy się z kolekcją AutoTextEntries i używając metody Insert, ustalamy strony X z Y jako autotekst, który zostanie później dodany. Musimy jednak podać, gdzie chcemy umieścić nasz tekst. Tak, tak, dobrze się domysliliscie: objRange, czyli odwołanie do obiektu wskazujące na stopkę.

I już po wszystkim, aż dziw bierze.

No, może nie tak do końca, bo numery stron mają być pewnie w środku stopki, czy nie? Jeżeli tak, to musimy jeszcze dodać następujący wiersz kodu do końcówki naszego skryptu:

objRange.ParagraphFormat.Alignment = 1

I teraz już naprawdę po wszystkim.

Interesuje Was, jak Skrypciarz wpadł na ten pomysł? Otóż wiedząc, ze możliwe jest dodanie numeracji stron pod postacią „X z Y” używając interfejsu GUI, zaczął od utworzenia rejestracji makr, po czym dodał stopkę za pomocą zwykłego interfejsu użytkownika. Później włączył edycję makra, by zobaczyć jego kod. Przekopując się przez kod VBA, znalazł taki fragment:

NormalTemplate.AutoTextEntries("Page X of Y").Insert Where:=Selection. _

        Range, RichText:=True

Tego właśnie szukał. Podczas pisania skryptów wchodzących w interakcję z programem Microsoft Word trzeba pamiętać jednak o jednej rzeczy: jeśli nie wiadomo, co zrobić, najlepiej zarejestrować makro wykonujące daną czynność. Chociaż kod VBA może się wydawać trochę podejrzany, najczęściej poprowadzi nas w dobrym kierunku.

Czy po tym wszystkim nasz Skrypciarz nie ma wyrzutów sumienia, że nie sfinansował kolejnej próby wygrania supermaskotki? Nieszczególnie. Po pierwsze, Skrypciątku udaje się wyprosić pieniądze na wiele innych rzeczy, a po drugie (i chyba najważniejsze), te maskotki nie były wcale takie super. Co innego, gdyby można było wyłowić laleczkę Doktora Scripto lub skrypciarski zestaw upominkowy… Żadne sklepy, istnieją tylko dwa sposoby na zdobycie tak fantastycznych nagród:

  • Jeżeli jakimś cudem bierzecie udział w konferencji TechEd 2007 (j.ang.), wpadnijcie na stoisko CMP Media (stoisko nr 1301) i odnajdźcie Skrypciarzy, a zdobędziecie tym samym egzemplarz książeczki Dr. Scripto’s Fun Book. Jeżeli nie wiecie, po czym poznać Skrypciarzy, to ten facet w czapeczce baseballowej jest właśnie tym niedobrym, który poskąpił dziecku a na maskotkę..
  • Jeżeli jednak nie wybieracie się na TechEd 2007, możecie spróbować szczęścia przystępując do konkursu TechEd Challenge (j.ang.). Konkurs kończy się 30 czerwca, więc czasu wcale nie tak dużo.

Jak wygrać konkurs? Aż kusi, żeby powiedzieć: „Po prostu wyślijcie nam banknoty studolarowe, a my juz dołożymy starań żebyście wygrali.” No ale tak nie powiemy.

Chociaż jest się nad czym zastanawiać, no nie? (Nota od redakcji: Nie)

 Do początku strony Do początku strony

Centrum skryptów - Microsoft Office