Jak wstawić tekst do istniejącego odsyłacza w dokumencie Microsoft Word?
Skrypciarze odpowiadają na Wasze pytania
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ć tekst do istniejącego odsyłacza w dokumencie Microsoft Word?
Cześć, Skrypciarze! Jak wstawić tekst do istniejącego odsyłacza w dokumencie Microsoft Word?
-- WM
Cześć, WM. Jeśli nie chcesz, możesz nie wierzyć, ale okazuje się, że skrypt dla Ciebie był najtrudniejszym, z jakim do tej pory miałem do czynienia. Nie żeby sam skrypt był skomplikowany – jak za chwilę zobaczysz, wcale tak nie jest. Problem w tym, że z jakiegoś dziwnego powodu absolutnie nie byłem w stanie wpisać słowa bookmarks, które powtarza się wiele razy w tekście. Jak bym się nie starał, zawsze wychodziło mi booksmarks, co powodowało zawieszenie się skryptu.
Na szczęście, jak każdy Skrypciarz, jestem może i nieuważny, ale przy tym też strasznie uparty. Tak więc po kilku dniach prób i paru tysiącach literówek, udało mi się złożyć do kupy poniższy skrypt:
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Set objDoc = objWord.Documents.Open("C:\Scripts\Test.doc")
Set objNetwork = CreateObject("Wscript.Network")
strUser = objNetwork.UserName
strDomain = objNetwork.UserDomain
strComputer = objNetwork.ComputerName
Set objRange = objDoc.Bookmarks("UserBookmark").Range
objRange.Text = strUser
objDoc.Bookmarks.Add "UserBookmark",objRange
Set objRange = objDoc.Bookmarks("DomainBookmark").Range
objRange.Text = strDomain
objDoc.Bookmarks.Add "DomainBookmark",objRange
Set objRange = objDoc.Bookmarks("ComputerBookmark").Range
objRange.Text = strComputer
objDoc.Bookmarks.Add "ComputerBookmark",objRange
Zobaczmy, czy uda się wyjaśnić, jak to działa, bez używania słowa booksmarks – to znaczy, bookmarks. Jak widać, zaczyna się prosto – tworzymy wystąpienie obiektu Word.Application, po czym ustawiamy właściwość Visible na True; dzieki temu widzimy na ekranie wystąpienie programu Microsoft Word. Teraz za pomocą poniższego wiersza kodu otwieramy dokument C:\Scripts\Test.doc:
Set objDoc = objWord.Documents.Open("C:\Scripts\Test.doc")
W tym momencie musimy się zatrzymać, by pokrótce omówić dokument Test.doc. Ponieważ pytanie WM dotyczyło modyfikowania istniejących odsyłaczy, plik Test.doc powinien ich kilka zawierać. Na potrzeby naszego przykładu zakładamy, że w dokumencie znajdują się następujące odsyłacze:
- UserBookmark
- DomainBookmark
- ComputerBookmark
Gdyby ktoś się zastanawiał, nasz przykładowy plik Test.doc wygląda tak, przy czym fragmenty w rodzaju <user name> wskazują lokalizację trzech odsyłaczy:
Jak się zapewne domyślacie, zastąpimy tekst owych trzech odsyłaczy nazwą użytkownika i domeny oraz komputera, na którym użytkownik jest zalogowany. W tym celu tworzymy najpierw wystąpienie obiektu Wscript.Network, a następnie przypisujemy wartości właściwości UserName, UserDomain i ComputerName zmiennym strUser, strDomain i strComputer. Odpowiada za to poniższy fragment:
Set objNetwork = CreateObject("Wscript.Network")
strUser = objNetwork.UserName
strDomain = objNetwork.UserDomain
strComputer = objNetwork.ComputerName
Kiedy to mamy już za sobą, możemy zmodyfikować odsyłacze. Aby zmienić tekst odsyłacza UserBookmark, użyjemy poniższego fragmentu kodu:
Set objRange = objDoc.Bookmarks("UserBookmark").Range
objRange.Text = strUser
objDoc.Bookmarks.Add "UserBookmark",objRange
Tak jak mówiliśmy, nie jest to wcale trudne. W pierwszym wierszu tworzymy obiekt Range, odpowiadający właściwości Range odsyłacza o nazwie UserBookmark. W tym celu łączymy się po prostu z kolekcją Bookmarks, a konkretnie z odsyłaczem UserBookmark:
Set objRange = objDoc.Bookmarks("UserBookmark").Range
Dlaczego właściwie musimy utworzyć obiekt Range, odpowiadający właściwości Range? No cóż, z jakiegoś powodu odsyłacze nie mają właściwości Text; każdy odsyłacz ma natomiast właściwość Range, która z kolei ma właściwość Text. To trochę okrężna droga, ale w celu zmiany tekstu odsyłacza musimy zmodyfikować tekst właściwości Range.
Przyznajmy, że brzmi to dość skomplikowanie, ale to akurat wypadek, gdy łatwiej zrobić niż powiedzieć. Okazuje się, że do zmiany wartości tekstowej odsyłacza UserBookmark na wartość zmiennej strUser wystarczy jeden wiersz kodu:
objRange.Text = strUser
Ostatni wiersz w naszym fragmencie kodu jest opcjonalny i w niektórych sytuacjach można go całkiem opuścić. Domyślnie każda zmiana tekstu odsyłacza powoduje usunięcie samego odsyłacza. Przeważnie, choć nie zawsze, może to być problemem. Jeśli nie chcemy usuwać odsyłacza, musimy zostawić ten wiersz:
objDoc.Bookmarks.Add "UserBookmark",objRange
No tak: trzeba jeszcze wspomnieć, że wiersz ten po prostu odtwarza odsyłacz UserBookmark, używając do tego metody Add i dwóch parametrów: nazwy nowego odsyłacza i zmiennej obiektu objRange, obejmującej zakres (tzn. lokalizację w dokumencie) odsyłacza.
Pozostała część skryptu po prostu powtarza te same procesy dla odsyłaczy DomainBookmark i ComputerBookmark. Na koniec plik Test.doc powinien wyglądać tak:
Fajnie, nie?
Przy okazji, przygotowaliśmy tu jeszcze jeden ciekawy skrypt, który może się przydać. Otwiera on dokument Test.doc, a następnie informuje o wszystkich znalezionych w nim odsyłaczach:
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Set objDoc = objWord.Documents.Open("C:\Scripts\Test.doc")
Set colBookmarks = objDoc.Bookmarks
For Each objBookmark in colBookmarks
Wscript.Echo objBookmark.Name
Set objRange = objDoc.Bookmarks(objBookMark.Name).Range
Wscript.Echo objRange.Text
Wscript.Echo objBookmark.Start
Wscript.Echo objBookmark.End
Wscript.Echo
Next
Większa część tego skryptu nie wymaga żadnych wyjaśnień, więc nie będziemy się nimi zajmować. Odpowiedzi na wszelkie ewentualne pytania można znaleźć w odpowiednim opisie języka VBA w Microsoft Word (j.ang.).
Mamy nadzieję, że to rozwiązuje Twoje problemy, WM. Koniec końców, szkoda byłoby, gdyby cały ten czas przeznaczony na napisanie skryptu poszedł na marne. Pozwolę sobie jeszcze zauważyć, że nieumiejętność napisania słowa bookmarks umieszcza mnie w bardzo ciekawym towarzystwie. Weźmy na przykład Alberta Einsteina. Miał tak wielkie kłopoty z tym słowem, że w jego dowodach zarówno na ogólną, jak i szczególną teorię względności słowo to nie pojawia się ani razu!
Do początku strony |