Pokazywanie postów oznaczonych etykietą PowerPoint VBA. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą PowerPoint VBA. Pokaż wszystkie posty

piątek, 28 listopada 2014

Konwersja tekstu na mowę (2 z 2)

Kontynuując poprzedni wpis dot. konwersji tekstu na mowę zaprezentuję sposób wykonania tej operacji z innej niż Excel aplikacji z pakietu Office. Istnieją dwa sposoby rozwiązania tego problemu.

Wariant A. Odczyt paragrafu z aplikacji MS Word z wykorzystaniem Excela.
W tym wariancie wystarczy z poziomu aplikacji MS Word utworzyć referencję do aplikacji Excel (dla prostoty działania z wykorzystaniem wiązania późnego) a następnie wykorzystać obiekt Speech dostępny w Excelu. Poniższy kod prezentuje takie właśnie działanie. Co ważne, nie musimy wyświetlać aplikacji Excel przez co osoba postronna nie zorientuje się, że odczyt następuje z poziomu innej niż Word aplikacji.


Wariant B. Wykorzystanie zewnętrznej biblioteki do odczytu tekstu
W tym wariancie wykorzystamy bibliotekę o nazwie Microsoft Speech Object Library, do której należy ustawić odpowiednią referencję w Menu >> Tools >>References... Biblioteka ta daje nam dostęp do rozszerzonej wersji generatora mowy. Dzięki szeregu właściwości i metod możemy wpłynąć na jakość dźwięku czy też wybrać odpowiedni język i głos (o ile biblioteka posiada odpowiednie dodatkowe zestawy głosów i języków).
Prosty przykład wykorzystania w/w biblioteki w celu odczytania pierwszego paragrafu z dokumentu MS Word przedstawia poniższa procedura:


Po dodatkowe informacje odsyłam do strony MSDN poświęconej tej bibliotece.

piątek, 24 października 2014

Interakcja pomiędzy aplikacjami MS Office (4 z ...wielu)

Tym razem kilka słów na temat integracji aplikacji Excel z aplikacją PowerPoint. Zaprezentuję prostą operację polegającą na wkopiowaniu do PowerPointa obiektów pochodzących z arkusza Excel:
  • tabeli danych
  • wykresu
oraz ustawimy odpowiednie pozycje  i wymiary dla powyższych elementów slajdu.

Warto zwrócić szczególną uwagę w poniższym kodzie na edycję z wykorzystaniem zmiennych obiektowych. Zabieg ten jest przeprowadzony celowo w celu poprawienia czytelności kodu oraz wyraźnego wydzielenia, które operacje-obiekty dotyczą Excela, a które PowerPoint'a. Jedyną wada tego rodzaju zapisu to wydłużenie całej procedury o szereg linii związanych z deklaracją zmiennych i ich ustawieniem (linie Dim i Set).

Cała poniższa procedura działa dla prostego pliku Excela, gdzie w arkuszu Arkusz1 (nazwa kodowa arkusza) znajduje się jeden wykres oraz zakres danych wykresu znajduje się w komórkach A1:C4. Pozostałe ważne informacje i wskazówki znaleźć można w poniższym kodzie w postaci komentarzy.


Efektem działania powyższej procedury jest poniższy przykładowy slajd w prezentacji PowerPoint.


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.