O ile sumowanie liczb całkowitych było proste (co zaprezentowałem w poprzednim poście), o tyle suma liczb rzeczywistych wymaga dodatkowych zabiegów.
Osoby znające zagadnienie związane z wykorzystaniem znaków specjalnych w wyszukiwaniu (wildcards) lub techniki Regular Expresion z pewnością spodziewały się, że wystarczy minimalnie przerobić wzorzec wyszukiwania aby uzyskać oczekiwany efekt. Otóż nic bardziej mylnego, następujący zapis:
1 | .Text = "[0-9]{1;}[0-9,]{0;}" |
niestety nie sprawdza się w aplikacji Word. Po prostu nie jest dopuszczalne aby ilość znaków określić na 'zero lub więcej' co kryje się w zapisie {0;}.
Owszem, jesteśmy blisko rozwiązania tworząc następujący wzorzec:
tyle tylko, że powyższy schemat wyszuka również wszystkie przecinki w dokumencie i spróbuje je zsumować co w efekcie wygeneruje błąd. Pozostaniemy jednak przy tym rozwiązaniu i aby było skuteczne dodamy odpowiedni mechanizm obsługi błędów. Całość rozwiązania prezentuje poniższy kod.
01 | Sub SearchNumbers_Doubles() |
08 | .Replacement.Text = "" |
13 | .MatchWholeWord = False |
14 | .MatchAllWordForms = False |
15 | .MatchSoundsLike = False |
16 | .MatchWildcards = True |
21 | Do While Selection.Find.Execute |
23 | dblTmp = CDbl (Selection) |
24 | If Err.Number = 0 Then |
26 | Total = Total + dblTmb |
31 | Loop MsgBox "W dokumencie znajduje się " & Counter & _ |
32 | " liczb o łącznej wartości równej " & Total |