Moje doświadczenia z Excelem, Accesem i programowaniem w VBA
VBA
piątek, 20 października 2017
Scripting.FileSystemObject to obiekt służący do zarządzania plikami i folderami. Wprawdzie w kodzie VBA są dostępne proste i przyjemne funkcje Dir, MkDir itp., ale przy odwołaniach do folderów sieciowych niestety zawodzą. Wówczas pozostaje wykorzystanie właśnie obiektu FileSystemObject, popularnie nazywanym FSO. Dostępne są tu następujące właściwości i metody:
Opis i praktyczne ich wykorzystanie w kodzie VBA będzie tematem kolejnych notek.
wtorek, 21 lutego 2017
Przez ostatnich kilka lat współpracowałam z jednym z portali elearningowych. Publikowałam tam swoje autorskie szkolenia z VBA w Excelu. Niestety, kilka miesięcy temu portal zniknął z sieci, nawet nie udało mi się wyśledzić co się z nim stało. I tym sposobem pozostały mi materiały (nie wszystkie, ale sporo), które w tej chwili są zupełnie niewykorzystywane. Trochę mi ich szkoda - po małych przeróbkach można je wykorzystać, może się komuś przydadzą? A ponieważ większość z tych materiałów to filmiki, na swoim koncie YouTube założyłam kanał, gdzie będę je sukcesywnie publikować. Na początek kurs "VBA dla początkujących" czyli kurs dla tych, którzy chcieliby zacząć swoją przygodę z VBA. Link jest tu: Zapraszam do subskrypcji. Wyobraźmy sobie arkusz Excela z kodem reagującym na zdarzenia arkusza. W zależności od tego, jaki jest to kod, jego wykonywanie bardzo łatwo może generować kolejne i zupełnie niepotrzebne zdarzenia arkusza.
W trakcie wykonywania kodu, po wstawieniu wartości w kolumnie B następuje wykrycie zdarzenia "przy zmianie" i następuje ponowne uruchomienie makra (mimo, że pierwsze nie doszło jeszcze do końca). W tym przypadku akurat może być praktycznie niezauważalne, ale jeżeli takich zmian jest więcej - owszem. W ekstremalnym przypadku może to doprowadzić do zapętlenia kodu. Chcąc tego uniknąć musimy na czas wykonywania kodu po prostu wyłączyć obsługę wykrywania zdarzeń. Wykorzystujemy do tego właściwość obiektu Application - EnableEvants. Jest to właściwość typu Boolean czyli może przybierać wartość Prawda lub Fałsz. Ustawiamy ją tak: Application.EnableEvents=False 'wyłączenie obsługi zdarzeń Application.EnableEvents=True 'włączenie obsługi zdarzeń Wykorzystując w kodzie makra jw. mamy więc:
I już. Na czas wykonywania kodu obsługa zdarzeń jest wyłączona - wstawienie daty w komórce sąsiadującej nie wywoła w tym przypadku ponownej reakcji na zdarzenie.
wtorek, 17 stycznia 2017
Poprzednia notka na blogu poświęcona była dobrym praktykom przy tworzeniu aplikacji Access, tym razem kilka rad jakich zasad trzymać się przy pisaniu kodu VBA (czy to w Accessie czy w Excelu). Na wszelki wypadek uprzedzam, że są to rady wynikające z moich własnych doświadczeń - stosuję je na co dzień i sprawdzają się. Generalnie jednak uważam, że nie ma jedynie słusznego sposobu tworzenia oprogramowania, choć pewne zasady powodują, że kod jest bardziej optymalny, a aplikacja działa szybciej i wydajniej.
To takie podstawy. Ja wykorzystuję na co dzień i się sprawdzają.
poniedziałek, 24 października 2016
Jak z poziomu kodu VBA (w Excelu lub Accessie) zmienić nazwy plików w określonym folderze? Służy do tego metoda (dość stara, ale ciągle użyteczna) Name .... As .... Przykład kod z jej wykorzystaniem wygląda tak:
I już, nazwa pliku zapisanego na dysku została zmieniona - nie ma już pliku o nazwie Obrazek, jest za to Kwiatki. Warto zwrócić tu uwagę na to, że nie ulegają zmianie wartości przypisane do zmiennych, a jedynie nazwy plików. Za pomocą tej metody można zmieniać nie tylko nazwy plików, ale również ich rozszerzenie. Jeżeli mamy na przykład pliki tekstowe z nietypowym rozszerzeniem (pochodzące np. z jakichś innych programów) np. *.abc - można też je zmienić np. na txt. W takim przypadku trzeba wyznaczyć nazwę podstawową pliku (wykorzystując funkcję InstrRev odszukującą położenie ostatniej kropki w nazwie pliku i zastępującą to, co po kropce - rozszerzeniem txt). Moim zdaniem może mieć naprawdę szerokie zastosowanie.
środa, 24 sierpnia 2016
Tworząc bardziej rozbudowane aplikacje w Excelu czy Accessie, często korzystamy z kilku różnych modułów. Z pewnością pozwala to na uporządkowanie procedur i funkcji. Ponieważ jednak część z nich może być wywoływana z innych modułów, konieczne będzie zadeklarowanie ich jako funkcji/procedur publicznych. Oznacza to jednak, że będą one także widoczne z poziomu skoroszytu - w okienku makr oraz w funkcjach użytkownika, co nie zawsze jest dobrym wyjściem. Gdy zdecydujemy się na ich "ukrycie" czyli ustawimy jako procedury czy funkcje prywatne - będą one możliwe do wywołania tylko w obrębie modułu, w którym się znajdują. W takiej sytuacji optymalnym wyjściem jest zadeklarowanie modułu jako prywatnego.
Zasady te obowiązują zarówno VBA w Excelu, jak i Access.
czwartek, 18 sierpnia 2016
Zarówno funkcje jak i procedury utworzone w kodzie VBA mogą mieć charakter prywatny jak i publiczny. Co to oznacza? Funkcje (procedury) prywatne są widoczne tylko w obrębie modułu, w którym zostały umieszczone, nie można się do nich odwołać z innych modułów. Nie są także widoczne w okienku makr w skoroszycie czy na liście funkcji zdefiniowanych przez użytkownika. W kodzie poprzedzone są słowem Private.
Funkcje (procedury) publiczne są dostępne i mogą być wywołane zarówno z innych modułów, jak i z poziomu skoroszytu (lista makr i lista funkcji zdefiniowanych przez użytkownika. W kodzie poprzedzone są słowem Public lub w ogóle nie mają oznaczenia - domyślną opcją jest charakter publiczny.
Zasady te obowiązują w VBA zarówno w Excelu , jak i Accessie.
wtorek, 26 lipca 2016
Do najczęściej spotykanych opcji modułów VBA należy Option Explicit. Dotyczy ona modułów ogólnych, arkuszy i skoroszytu w Excelu oraz wszystkich modułów w bazie Access, ma więc charakter bardzo uniwersalny. Co oznacza? Option Explicit to wymaganie deklaracji wszystkich zmiennych występujących w module. Nie muszą mieć one zadeklarowanych typów, ale poprzedzoną słowem kluczowym Dim nazwę - tak. Jeżeli któraś ze zmiennych nie będzie zadeklarowana - to przy kompilacji (lub przy uruchomieniu procedury pojawi się komunikat błędu kompilacji i mak0ro nie zostanie wykonane. Bez Option Explicit - kod skompilowałby się prawidłowo. Mimo tego - warto stosować tę opcję. Głównie dlatego, że pozwoli na wyłapanie i eliminację błędów już na etapie debugowania, a nie dopiero przy wykonywaniu kodu. Przede wszystkim stanowi skuteczną barierę przed literówkami w kodzie - od razu je wskaże. Oczywiście sama deklaracja zmiennych (obowiązkowa lub nie) też ma bardzo duże znaczenie, zarówno do kontroli danych jak i oszczędzania pamięci. Warto. Option Explicit można wpisać ręcznie na początku każdego modułu, ale można też ustawić jako opcję domyślną. W kolejnym okienku zaznaczamy opcję Require Variable Declaration.
niedziela, 23 sierpnia 2015
W trakcie pracy w Excelu zdarza się, że na ekranie pojawiają się komunikaty ostrzegawcze. Najczęściej dotyczą one np.nieodwracalności usunięcia danych, łączy itp. Dobrze, że są, gdyż stanowią ochronę przed przypadkowym skasowaniem ważnych elementów aplikacji. Gorzej jednak, gdy komunikaty te pojawiają się w trakcie wykonywania kodu VBA - takie potwierdzanie nie tylko wydłuża czas wykonywania makra, ale dodatkowo jeszcze sprawia, że obsługa staje się uciążliwa. Ustawienie właściwości Application.DisplayAlerts na False powoduje wyłączenie komunikatów systemowych. Po wykonaniu ciągu instrukcji, włączamy je ponownie korzystając z tej samej właściwości ustawionej na True.
poniedziałek, 17 sierpnia 2015
Często zdarza się, że w trakcie wykonywania makra czy procedury zapisanej w kodzie VBA, "miga" ekran. Wygląda to mało ciekawie - ciąg instrukcji powinien się wykonywać raczej w tle, bez odświeżania (a tym samym - migania) ekranu po każdym wykonanym kroku. Ustawienie właściwości na False powoduje wyłączenie odświeżania ekranu - zostaje on "zamrożony". Po wykonaniu ciągu instrukcji odświeżamy ekran korzystając z tej samej właściwości ustawionej na True.
|
Zakładki:
Dobre, tanie programy
Kanały Yotube
Tu warto kupować
Zajrzyj tu:
Tagi
Książki warte polecenia ![]() ministat liczniki.org Napisz do mnie!
|