piątek, 17 stycznia 2014

Metoda Find w aplikacji MS Word- Przykład 2

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.
01Sub Usuwanie_linii()
02 
03    Dim arrRemove As Variant
04        'wszystkie inne kryteria początku linii dodajemy _
05        jako kolejne elementy tablicy
06        arrRemove = Array("Donec", "In", "\[+\]", "\[\-\]")
07 
08    Dim i!
09    For i = 0 To UBound(arrRemove)
10        'aby usuwanie kolejnych elementów było skuteczne _
11         wracamy na początek dokumentu dla każdego _
12         elementu naszej tablicy
13        ActiveDocument.Range(0, 0).Select
14        
15        Selection.Find.ClearFormatting
16        With Selection.Find
17            .Text = arrRemove(i) & "*^13"
18            .Replacement.Text = ""  'replace with nothing
19            
20            .Forward = True
21            .Wrap = wdFindContinue
22            .MatchCase = False
23            .MatchWildcards = True
24        End With
25        Selection.Find.Execute Replace:=wdReplaceAll
26        
27    Next i
28    
29End Sub

Brak komentarzy:

Prześlij komentarz