Centrum Skrypciarzy - Microsoft Office

Jak wstawić tekst do istniejącego odsyłacza w dokumencie Microsoft 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ć tekst do istniejącego odsyłacza w dokumencie Microsoft Word?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak wstawić tekst do istniejącego odsyłacza w dokumencie Microsoft Word?

-- WM

Cześć Skrypciarze! Odpowiedź

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 Do początku strony

Centrum Skrypciarzy - Microsoft Office