piątek, 24 maja 2013

Ukryte elementy systemu IntelliSense

W czasie szkoleń staram się podkreślać znaczenie i uczyć korzystania  w pełni z systemu IntelliSense. Ta prosta funkcjonalność edytora IDE bardzo wyraźnie potrafi przyspieszyć edycję kodu VBA, wspomóc proces debugowania, itp.

Zasadniczo jednak IntelliSense jest pierwszym etapem w szukaniu pomocy i rozwiązań na etapie wykonywania danej operacji. Ot np. nie zawsze pamiętam jaka jest pełna składnia danej funkcji, czy dana metoda czy właściwość jest dostępna w danym kontekście czy może w sposób okrężny z wykorzystaniem pośredniej referencji do innego obiektu.

Okazuje się jednak, że szereg metod i właściwości (a czasem obiektów) pozostaje ukrytych z poziomu systemu IntelliSense, a przez to kodowanie staje się lekko utrudnione. Zanim ujawnię jak pominąć tą niedogodność jedno warto ustalić- to, że coś jest ukryte zapewne nie jest przypadkiem. Nie chcę teraz rozstrzygać przyczyn schowania wybranych opcji VBA przed programistą. Warto jednak przyjąć dwa proste założenia:
a) zanim sięgnę po to narzędzie sprawdzę poprawność jego działania (na liście ukrytych właściwości znajdziemy np. obiekt FileSearch, który przez błąd twórców Office przestał być dostępny od wersji 2007)
b) nawet jeżeli funkcjonalność działa teraz niekoniecznie będzie działać w nowszej wersji pakietu Office.

Pomimo powyższych obaw uważam, że warto przeczytać pozostałą część niniejszego posta. Podejdźmy do sprawy przez pryzmat 2 problemów:

Problem A- jak wyeksportować i zapisać kształt lub inny obiekt (np. tabelę) z prezentacji PowerPoint jako plik typu JPG.
Problem B- jak sprawnie przeprowadzić edycję kodu w pracy z obiektami formularza ActiveX znajdującymi się w arkuszu.

Zanim zaczniemy szukać rozwiązań w sieci skorzystajmy z systemu IntelliSense. Wpisujemy kolejno dla naszych problemów przykładowy kod:
Problem A:
ActivePresentation.Slides(1).Shapes(3).   i tu pomoc systemu IS kończy się, trudno odnaleźć właściwą metodę
Problem B- w celu weryfikacji ilości formantów danego typu:
Arkusz1.  i tu pomoc IS kończy się, jedyny kierunek to wykorzystać kolekcję OLEObjects, ale co dalej...

Czas więc na rozwiązanie...W środowisku edytora VBA musimy

1. wywołać przeglądarkę obiektów Object Browser, w tym celu wybieramy F2 na klawiaturze
2. klikamy prawym klawiszem myszy w obszarze Object Browser
3. zaznaczamy pozycję Show Hidden Members

a teraz cieszymy się z dodatkowych funkcjonalności, metod i właściwości, które odkrywa przed nami IntelliSense. Wracamy szybko do naszych problemów i...

Problem A, okazuje się, że istnieje metoda .Export dla kształtów, która w łatwy sposób umożliwia nam utworzenie następującego kodu:

ActivePresentation.Slides(1).Shapes(3).Export "alfa.jpg",ppShapeFormatJPG

Problem B, okazuje się, że istnieją ukryte kolekcje poszczególnych typów obiektów ActiveX formularza, co pozwala nam na łatwą edycję przykładowego kodu:

Debug.Print Arkusz1.CheckBoxes.Count
Debug.Print Arkusz1.Buttons.Count

Na koniec dwa oczywiste spostrzeżenia:

1. wszystkie ukryte metody, właściwości i obiekty są lekko wyszarzone,  łatwo więc odnaleźć te z nich, które standardowo są niedostępne i na które należy uważać,
2. łatwo dostrzec jak wiele potencjalnych możliwości zostało ukryte przed programistami. Warto więc eksperymentować, testować i korzystać z tych opcji.

Brak komentarzy:

Prześlij komentarz