czwartek, 25 września 2014

Komórka w tabeli dokumentu Word- wstawianie tekstów i obiektów

Myślę, że warto dodać jeszcze jeden wpis dot. Word VBA i pracy z komórkami tabeli w dokumencie Word. Przeglądając ostatnio kilka forów dostrzegłem, że niekiedy problemy sprawia dodawanie zawartości do komórki tabeli.

Przyjmijmy na początek następującą referencję do komórki w tabeli w aktywnym dokumencie:
Komórka.Range.Text = "Hello World"
Próba dodania prostego tekstu do komórki nie stanowi problemu:


Problemem jednak okazuje się dodanie do komórki np. pola z datą. Poniższy kod wygeneruje błąd (Run-time error '4605'):


Powyższy problem wynika z faktu, ze wewnątrz komórki występuje znak końca komórki, który widać po włączeniu wyświetlania znaków specjalnych:




W tego typu sytuacjach rozwiązaniem problemu jest wstawienie obiektu z pominięciem znaku końca komórki. Wykonać to można najprościej przed określenie początku i końca  obszaru wstawiania:


Warto zwrócić na wartość -1 w powyższym kodzie- dzięki tej korekcie pomijamy problematyczny symbol końca komórki.

piątek, 19 września 2014

Usuwanie stron w MS Word z pomocą VBA 2/2

Kontynuując poprzedni wpis dot. stron dokumentu warto dodać, że istnieje jeszcze jeden ze sposobów odnajdywania strony dokumentu- przez wykorzystanie zakładki "\page". Poniższe odwołanie spowoduje, że zaznaczony zostanie obszar strony na której znajduje się bieżące zaznaczenie:


a stąd już blisko do usunięcia całej strony przez minimalna modyfikację powyższego kodu:


Jak widać wykorzystanie obiektu Bookmarks("\page") domyślnie weryfikuje układ dokumentu przez pryzmat widoku o czym pisałem w poprzednim wpisie.

Przy okazji warto zwrócić uwagę na zakładki specjalne występujące w dokumencie gdyż często okazują się być niezmiernie przydatne. Określane są one mianem zakładek predefiniowanych i pozwalają m.in. na:
  • odnalezienie początku dokumentu \StartOfDoc
  • odnalezienie końca dokumentu \EndOfDoc
  • odnalezienie początku lub końca bieżącego zaznaczenia : \StartOfSel, \EndOfSel
itp. Kompletną listę znaleźć można pod tym linkiem.

Przy okazji serdecznie zapraszam na jesienne szkolenia z VBA dla aplikacji Excel. Nasze kursy organizowane są w Warszawie, Krakowie i Wrocławiu na różnych poziomach zaawansowania.  Szczegółowe informacje na naszej stronie www.SzkoleniaVBA.pl.

poniedziałek, 15 września 2014

Usuwanie stron w MS Word z pomocą VBA 1/2

Każdy kto kiedykolwiek miał styczność z VBA dla Worda ma świadomość, że nie istnieje jednoznacznie definiowany obiekt odpowiadający stronie dokumentu. Od razu wyjaśnię dlaczego tak jest dla tych osób, które są zaskoczone tym faktem- dokument traktowany jest bowiem jako ciąg tekstu o zdefiniowanych początku i końcu. Trudno na etapie obiektowej analizy zawartości dokumentu (sprawdzając ilość słów, paragrafów czy zdań)  jednoznacznie określić ile on zajmie stron skoro użytkownik ostatecznie będzie mógł zastosować czcionkę różnej wielkości, zastosuje inny format papieru, itp., a przez to wpłynie na różną ilość stron dokumentu.

Nie jest jednak tak źle- pojecie strony pojawia się wtedy, gdy zaczynamy się odwoływać do dokumentu przez pryzmat bieżącego widoku. I tak na przykład aby sprawdzić ilość stron dokumentu możemy zastosować następujące zapytanie:


W powyższym przykładzie jesteśmy w stanie odnaleźć kolekcję Pages odpowiadającą stronie dokumentu. Ale kolekcja ta pojawia się jako element widoku, który reprezentowany jest przez obiekt okna Window (ActiveWindow).

Powyższy sposób nie jest jedynym na określenie ilości stron dokumentu. O wiele bardziej popularny sposób to odwołanie się do właściwości .Information obiektu Range, która zwraca szereg informacji dot. pliku Word:


W kolejnym wpisie zaprezentuję jeszcze jeden sposób odnajdywania strony, a technikę tą zaprezentuję w kontekście usuwania całej strony pliku.

poniedziałek, 8 września 2014

Podświetlanie wierszy parzystych i nieparzystych w Excelu z wykorzystaniem formatowania warunkowego



Relatywnie często wykorzystywanym rozwiązaniem jest naprzemienne podświetlenie  wierszy parzystych i nieparzystych. Podstawowej sposoby uzyskania tego efektu to:

  1. wypełnienie komórek i skopiowanie formatowania do wskazanego obszaru, co wymaga pracy i jednocześnie staje się problematyczne w momencie gdy dodamy kolejny wiersz   
  2. zastosowanie obiektu Tabela (ListObject po stronie obiektów VBA), co wiąże się z umiejętnością wykorzystania obiektu Tabela

Do tej listy chciałbym dodać jeszcze relatywnie prostą choć niezbyt popularną technikę formatowania warunkowego. W tym celu:

Krok 1- zaznaczamy obszar, w którym ma funkcjonować podświetlanie wiersza- w naszym przykładzie A1:K20 (ważne, obszar zaznaczamy od komórki A1 w kierunku K20, nie odwrotnie)..

Krok 2- ustawiamy formatowanie warunkowe: Menu >> Narzędzia Główne >>Formatowanie Warunkowe >> Nowa Reguła… >> Użyj formuły do określenia komórek… >> w miejsce formuły wstawiamy =MOD(WIERSZ(A1);2)=0 >> określamy formatowanie po wciśnięciu przycisku >>Formatuj… >> Akceptujemy wszystkie ustawienia.



Warto wspomnieć o dwóch podstawowych korzyściach z zastosowania tej techniki: po pierwsze- nie likwiduje ona formatowania wynikającego z wypełnienia komórek innym kolorem. Należy jednak pamiętać, że formatowanie warunkowe ma przewagę nad zwykłym wypełnieniem obszaru. Po drugie- dodanie nowych wierszy w obszarze formatowania spowoduje zastosowanie tej samej reguły, a przez to automatycznie nowe wiersze będą uwzględniały efekt formatowania.