Około 3 miesięcy temu opublikowałem pierwszy przykład wykorzystania metody .Find w aplikacji Word. Teraz chciałbym zaprezentować kolejny z przykładów pochodzący z konkretnej 'życiowej' sytuacji.
Niekiedy zdarza się, że importujemy do dokumentu MS Word treść innego dokumentu pochodzącego z innego systemu lub aplikacji. W wyniku takiej operacji utworzony dokument zawiera szereg wpisów (linii, paragrafów), które stanowią symbole podziału sekcji, stron, znaki specjalne pochodzące z tamtego systemu, itp. Generalnie uznać je można za błędne wpisy, które chcemy szybko i skutecznie usunąć. Jak pozbyć się niechcianych paragrafów szybko i skutecznie? Z pomocą przyjdzie nam oczywiście metoda .Find.
Krok 1. Utwórzmy nowy losowy dokument zgodnie z opisem z poprzedniego posta wpisując na jego początku =Lorem(30,1) i wciskając enter. Dodajmy kilka linijek zaczynających się od symboli specjalnych, np. [+], [-]. Całość mogłaby prezentować się następująco:
Krok 2. Określmy parametry początku linii, które chcemy usunąć i umieśćmy je w tablicy Array naszego dokumentu. W naszym przykładzie chcemy usunąć: wszystkie linie (paragrafy) zaczynające się od słowa "Donec", liter "In" oraz symboli "[+]" i "[-]". W rozwiązaniu, które wykona tą operację szczególnie warto zwrócić uwagę na rzędy, w których występują znaki typu []()+- itp. Są to symbole specjalne stosowane w technice Find i dlatego w sposób szczególny musimy je wyróżnić. W tym celu przed każdym z tych znaków musimy wstawić symbol backslash: "\".
Poniższe makro wykona za nas operację usuwania wskazanych, niechcianych wierszy. Dodatkowe uwagi umieszczone zostały w postaci komentarzy w treści kodu.
03 | Dim arrRemove As Variant |
05 | jako kolejne elementy tablicy |
06 | arrRemove = Array( "Donec" , "In" , "\[+\]" , "\[\-\]" ) |
09 | For i = 0 To UBound(arrRemove) |
11 | wracamy na początek dokumentu dla każdego _ |
12 | elementu naszej tablicy |
13 | ActiveDocument.Range(0, 0). Select |
15 | Selection.Find.ClearFormatting |
17 | .Text = arrRemove(i) & "*^13" |
18 | .Replacement.Text = "" |
21 | .Wrap = wdFindContinue |
23 | .MatchWildcards = True |
25 | Selection.Find.Execute Replace:=wdReplaceAll |
Brak komentarzy:
Prześlij komentarz