piątek, 7 marca 2014

Environ- dane systemowe w kodzie VBA

Całkiem użyteczną funkcją zaimplementowaną w języku VBA jest funkcja Environ, której celem jest pozyskiwanie wybranych informacji o systemie operacyjnym, w którym w danym momencie pracujemy. Warto jednak zwrócić uwagę na fakt, że są to 'wybrane informacje'. Niestety, nie będziemy w stanie pobrać każdego parametru związanego z systemem operacyjnym.

Zanim więc zaprezentuję relatywnie wąską listę dostępnych opcji spójrzmy tylko na samą składnię funkcji:


gdzie:
ZmiennaSystemowa reprezentowana jest przez tekst lub odpowiednią wartość numeryczną. Należy też pamiętać, że wynikiem zwracanym przez funkcję Environ również jest tekst.

Do najbardziej przydatnych przykładów zastosowania funkcji Environ należy zaliczyć:


Kilka innych przydatnych parametrów:



Wszystkich zainteresowanych pełną listą zmiennych systemowych dostępnych z pomocą funkcji Environ odsyłam do tego linku. Znaleźć tam można gotowe do przekopiowania i uruchomienia makro, które w wyniku zwróci listę szukanych wartości w arkuszu Excela.

poniedziałek, 3 marca 2014

Wywołanie akcji w następstwie filtrowania

Zacznijmy od pytania: czy można wywołać akcję w wyniku zmiany parametrów filtrowania?
Doświadczeni programiści od razu zastanowią się, czy można zastosować odpowiednie zdarzenie w celu wykonania tej operacji lecz niestety, przynajmniej na moment tworzenia tego wpisu nie istnieje zdarzenie powiązane z działaniem filtra.

W jaki sposób moglibyśmy obejść ten problem? Odpowiedź jest dość prosta- należy wykorzystać inne zdarzenie, a konkretnie zdarzenie Calculate. W praktyce bowiem, przy każdej zmianie filtra następuje przeliczanie formuł komórkowych. Inne zdarzenia typu SelectionChange lub Change nie dadzą oczekiwanych rezultatów choćby dlatego, że filtr można wywołać samą myszą bez zmiany bieżącego zaznaczenia.

Zanim zaprezentuję kolejne etapy tego rozwiązania postawmy sobie cel: chcemy wywołać proste okno MsgBox z informacją, czy wynik filtrowania zwrócił jakieś dane czy też nie.

Krok 1. Nasze dane testowe, przyjmijmy, że mają następującą postać.



Krok 2. W arkuszu z danymi wstawmy przynajmniej jedną funkcję arkuszową, no chyba, że formuły już tam istnieją. Ja wstawię w komórce AA1 prostą funkcję zwracającą bieżącą datę i godzinę: = TERAZ()

Krok 3. Tworzymy zdarzenie Calculate dla arkusza z danymi. Proszę zwrócić uwagę na dodatkowe szczególne kryteria, parametry i założenia, które powinniśmy uwzględnić. Zaprezentowane zostały w postaci komentarzy w poniższym kodzie.


Krok 4. Wynik działania procedur prezentują poniższe zrzuty ekranu.




Uwaga końcowa! Co oczywiste wariant ten nie jest ani idealny, ani jedyny możliwy. W praktyce bowiem każde przeliczenie formuł również będzie skutkować wywołaniem powyższego zdarzenia. W zależności od okoliczności niezbędne będzie więc rozbudowanie mechanizmu o dalsze warunki i parametry.