poniedziałek, 25 marca 2013

MS Word- liczba słów w dokumencie odpowiadających formatowaniu

Jakiś czas temu pomagałem jednemu z forumowiczów rozwiązać problem zliczania słów, które spełniają określone kryterium formatowania. Makro miało działać dla dużego dokumentu liczącego kilkadziesiąt stron, miało być oczywiście stworzone dla Worda.
Jak to zrobić?? Jeżeli pierwszą myślą jest 'pętla dla każdego słowa' to powiem ok, taka była też pierwsza myśl pytającego. Nie mniej dla 50 stron działało to dość długo, a w dodatku nie przynosiło oczekiwanych rezultatów. Lepszym rozwiązaniem jest wykorzystać owo 'A w VBA' (o czym piszę osobno) czyli sięgnąć po mechanizm 'Szukaj'.
Poniżej gotowy kod dla bieżącego dokumentu liczący słowa pogrubione i (standardowo) podkreślone oraz nie wyróżnione kolorem. Inne opcje wyszukiwania mogą zostać zastosowane przez analogię.

Osobom początkującym zwrócę uwagę na nieskończoną pętlę Do Loop- proszę pamiętać, że taka konstrukcja jest możliwa o ile gdzieś w kodzie, w celu uniknięcia nieskończonego zapętlenia, występuje parametr kończący działanie pętli Exit Do.
01Sub CountWords()
02    Dim rngWords As Range
03    Set rngWords = ActiveDocument.Content
04    
05    Dim boldUnderCount As Long
06 
07Do
08    With rngWords.Find
09        .Highlight = False
10        .Font.Bold = True
11        .Font.Underline = True
12        .Forward = True
13        .Execute
14    End With
15    
16    If rngWords.Find.Found = True Then
17        'opcjonalnie gdy chcemy śledzić efekt
18        rngWords.Select
19        boldUnderCount = boldUnderCount + _
20                   rngWords.ComputeStatistics(wdStatisticWords)
21    Else
22        Exit Do
23    End If
24Loop
25  
26    MsgBox "Znaleziono " & boldUnderCount & " słów."
27End Sub

Brak komentarzy:

Prześlij komentarz