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.

środa, 20 marca 2013

Funkcja Format

Muszę przyznać, że funkcja Format należy do tych, których nie doceniam. No, może bez przesady, po prostu nie miałem okazji zbyt często sięgać po nią mając na podorędziu zestaw funkcji VBA oraz inne umiejętności programistyczne. Wobec jednak faktu, że funkcja oferuje wiele korzyści związanych z formatowaniem zwracanych wartości poświęcę jej niniejszy wpis skupiając się na wybranych i najbardziej praktycznych przypadkach.

1. Formatowanie daty to najczęstsze skojarzenie z funkcją format. Zobaczmy kilka możliwych konstrukcji i zwracane z ich wykorzystaniem wartości:


a ponadto cały zestaw dat krótki, fragmentów godziny, itp. Wszystko oczywiście ukryte w parametrach funkcji odpowiednio umieszczonych w cudzysłowach.

2. Formatowanie liczb. Tu oczywiście do dyspozycji mamy cały zestaw możliwości. Sięgnijmy więc po przykład dla liczby Pi.

3. Przykład przedostatni dotyczy formatowania tekstu.


4. Ostatni zestaw przykładów to dodatkowe możliwości formatowania wartości liczbowych ze względu na znak liczby i opcjonalny wynik zero.

No dobrze, dla osób, które dobrnęły do końca 2 ważne informacje- tradycyjnie informacja dobra i zła. Ta dobra jest taka, że konstrukcja parametrów formatowania jest tożsama z tą, którą większość z osób zna z Excela jako niestandardowe formatowanie komórek. A zła informacja jest taka, że funkcja Format zwraca... tekst (String), nawet wtedy gdy formatowaniu poddajemy wartości liczbowe.

czwartek, 14 marca 2013

Obszar komórek Range 3D

Technika pracy z obszarami 3D posiada swoje odniesienie do standardowych rozwiązań znanych z Excela. Po jednoczesnym zaznaczeniu kilku arkuszy wprowadzając wartości do jednego z nich automatycznie tworzymy adekwatne wpisy do tych samych zakresów komórek we wszystkich zaznaczonych arkuszach.

Podobną technikę możemy zastosować korzystając z VBA. Poniższy przykład generuje wpisy we wszystkich 3 arkuszach zaznaczonych poleceniem Select.


Co jednak ważne- powyższa technika wymaga zaznaczenia komórek przed ich wypełnieniem. Poniższy przykład, choć intuicyjnie zgodny z powyższym nie daje identycznego rezultatu.

Inne adekwatne rozwiązanie prezentuje poniższy przykład wykorzystujący specjalną właściwość obiektu Worksheet.

piątek, 8 marca 2013

Nie zapomnieć o A w VBA...

Swego czasu trafiłem na obszerny artykuł napisany przez specjalistę od VBA poświęcony roli 'A' w 'VBA'... Niestety nie zapisałem linku do owego artykułu, być może można go odnaleźć w sieci. Niemniej treść owego można by skrócić do kilku prostych zdań, z którymi bardzo się zgadzam.

Nie twórzmy makr wszędzie tam, gdzie istnieją proste rozwiązania dostępne po stronie samej aplikacji Excel (czy innej aplikacji Office). A jeżeli już musimy tworzyć makro, to w pierwszej kolejności wykorzystajmy funkcjonalność gotowych rozwiązań, które znamy z aplikacji Excela.

Jednym z najprostszych i najważniejszych przypadków owego A w VBA jest kwestia wykorzystania funkcji arkuszowych, do których mamy dostęp z pomocą kolekcji WorksheetFunction... i temu tematowi, kwestii wykorzystania instrukcji WorksheetFunction poświęcę wkrótce kilka osobnych wpisów.

piątek, 1 marca 2013

Wybrany wiersz z tablicy Array

Na ostatnim szkoleniu padło pozornie proste pytanie: w jaki sposób pobrać jeden wybrany wiersz tablicy Array i zwrócić go w całości do wskazanego wiersza arkusza Excel?

Oto i rozwiązanie, w którym tworzona jest dwuwymiarowa tabela Array 10x10 (wypełniona następnie kolejnymi wartościami). Następnie korzystając z funkcji arkuszowej Index pobieramy 5 wiersz bazowej tablicy Array (w wyniku czego tworzona jest tablica pośrednia), która trafia do kolejnych komórek arkusza względem bieżącej komórki aktywnej.

Tytułem wstępu

To nie ma być klasyczny blog choć powstaje w oparciu o klasyczną technologię przeznaczoną dla bloggerów. Taki wybór podyktowany jest z jednej strony wygodą twórcy niniejszej strony- o wiele prościej zarządzać tekstami, łatwo można wykorzystać gadżety stworzone specjalnie dla tego typu rozwiązań.

Z drugiej jednak strony forma tego typu redakcji jest znana, powszechna i akceptowana przez szerokie rzesze współczesnych internautów, w tym przez potencjalnych czytelników tej strony, przyszłych poszukiwaczy rozwiązań, o których informacje będą tu zamieszczane.

A o czym będę pisał? Z niegwarantowaną regularnością o wszystkim, co w jakiś sposób wyda mi się: istotne, pomijane choć ważne, zapomniane a warte przypomnienia, ciekawe lub bardzo oryginalne.
Będę pisał w tematach związanych z tematyką Visual Basic for Application (VBA), głównie VBA dla Excela lecz także VBA dla innych aplikacji pakietu Office. Z pewnością wspomnę także o SQL, C# (C Sharp), LINQ, .NET, COM, DLL, może o XLL, RAD, Excel DNA, itp.

I tak wiem, zgadzam się z większością z Was, chyba wszystko zostało już napisane. Sam często poszukuję rozwiązań w internecie. I najczęściej je tam znajduję. Strona ta ma w dużej mierze wspomagać w procesie edukacji z obszarów VBA wszystkich moich dotychczasowych kursantów, a być może zachęcić innych do uczestnictwa w prowadzonych przeze mnie kursach. Będę starał się w sposób ciekawy przedstawiać najciekawsze przykłady ze szkoleń, wywołane przez uczestników szkoleń, znalezione w sieci, opracowane przeze mnie.