cognity

Programowanie VBA . Poznaj najlepsze praktyki programowania w języku VBA

Wszystkich tych z Państwa, którzy chcą przyspieszyć swoją pracę oraz optymalizować zadania wykonywane w programie Excel zapraszamy do lektury krótkiego poradnika, który przedstawi 5 najlepszych praktyk w stosowaniu języka VBA w Excelu.

24 listopada 2017
blog

Programowanie VBA: Stosuj wcięcia!

Proszę spojrzeć na poniższy kod realizujący dokładnie to samo zadanie, jednak w inny sposób napisany

Rys. 1. Przykładowe kody

Kod nr 1 (rys. 1) jest znacznie bardziej czytelny od kodu nr 2, ponieważ widać kiedy otwierane są instrukcje a także kiedy i czy są zamknięte, dzięki czemu programista jest w stanie na pierwszy „rzut” oka ocenić, gdzie może powstać potencjalny błąd.

Zasadą którą powinni stosować początkujący programiści, to wstawianie odstępu dla elementów podrzędnych. 

Analizując kod nr 1 można powiedzieć, że nadrzędną instrukcją jest to, co jest w pierwszej linii (For i = 1 To 10). Zamknięcie tej instrukcji następuje w ostatniej linii (Next). Instrukcja w drugiej linii (For j = 1 To 10) jest podrzędna dla instrukcji w pierwszej linii oraz jednocześnie jest nadrzędną w stosunku do tej z trzeciej linii (If i = j Then). Oczywiście analogiczna analiza pozwoli na określenie hierarchii instrukcji języka VBA w powyższym kodzie. Warto tutaj podkreślić fakt, że odstępy nie wpływają na hierarchię wykonywanych poleceń, ale mają na celu ułatwienie analizy kodu. Przykładem niech będzie kod przedstawiony na rys. 2. Kod jest nie wskazuje prawidłowej hierarchii pomiędzy instrukcjami, ponieważ wg tego zapisu elementem nadrzędnym jest instrukcja If, co nie jest prawdą.

Rys. 2. Nieuporządkowany kod

Programowanie VBA: Używaj zmiennych lokalnych

Wykorzystanie zmiennych globalnych zarówno w projekcie jak i w module może prowadzić do nieoczekiwanych sytuacji. Przykładem niech będzie kod przedstawiony poniżej (rys. 3).

Rys. 3. Zmienne lokalne i globalne

Oto wyniki wyświetlane po pierwszym uruchomieniu makra:

Na początku tworzona jest zmienna o nazwie x. Zadeklarowana zmienna jest typu Variant. Procedura polacz_makra zawiera odwołanie do trzech makr co oznacza, że po jej uruchomieniu najpierw zostanie wywołane Makro1, później Makro2 a na końcu Makro3. W procedurze Makro1 zostanie wyświetlony komunikat Makro1 (start). W związku z tym, że zmienna x nie ma przypisanej wartości i jest zmienną typu Variant, Excel przypisuje jej domyślną wartość dla zmiennych typu Variant (czyli pusty ciąg znaków. Linia x = 5 oznacza przypisanie wartości pięć do zmiennej x, czego dowodem jest wyświetlenie komunikatu Makro1 (koniec): 5. Po zakończeniu tego makra interpreter wraca do procedury o nazwie polacz_makra, a następnie przechodzi do wykonania Makro2. W tym makrze następuje deklaracja zmiennej o nazwie x typu Long. 

Uwaga!To nie jest ta sama zmienna co zmienna x w procedurze Makro1. Zmienna x typu Long przesłania zmienną typu Variant zadeklarowaną w pierwszej linijce kodu. Dowodem na tą operację jest komunikat Makro2 (start): 0. 

Później następuje przypisanie do zmiennej x wartości trzy, po czym Excel wyświetla komunikat Makro2 (koniec): 3. Wychodząc z procedury zmienna x typu Long zostaje przez interpreter zniszczona, przy czym przechodząc do procedury polacz_makra mamy dostęp do zmiennej x typu Variant. Dowodem tego jest komunikat Makro3 (start). Oczywiście przypisanie do zmiennej x wartości siedem nie jest czymś zaskakującym.

Programowanie VBA: Zarządzaj pamięcią i ułatwiaj sobie życie!

Pierwszą rzeczą jaką powinni robić programiści przy tworzeniu makr to deklarowanie zmiennych. Niewątpliwymi korzyściami tego rozwiązania są zarządzanie pamięcią oraz możliwość wybrania nazwy zmiennej z podpowiadacza (IntelliSense). Prozę spojrzeć na krótki kod z rys. 4:

Rys. 4. Użycie podpowiadacza

Dzięki temu, że zadeklarowano dwie zmienne typu prostego, to możemy użyć podpowiadacza przy pomocy kombinacji klawiszy Ctrl + Spacja. Bez jawnej deklaracji zmiennych nie można skorzystać z tego ułatwienia.

Rys.5. Komunikat dla zadeklarowanych zmiennych

Uruchomienie kodu z rys. 5 wskazuje na bardzo ważną rzecz: zadeklarowanie zmiennych w jednej linii nie oznacza, że będą one tego samego typu. Zmienna liczba_wierszy jest typu Variant, natomiast zmienna liczba_kolumn jest typu Long. Podany kod uświadamia, że należy deklarować każdą zmienną w osobnej linii. Co więcej, jeśli deklarujemy wszystkie zmienne, to warto wykorzystywać opcję Option Explicit, dzięki której Excel wyświetli nazwę wszystkich niezadeklarowanych jawnie zmiennych, co umożliwi zwiększenie szybkości poprawiania kodu. Przykładowy kod działania instrukcji Option Explicit jest przedstawiony na rys. 6.

Rys. 6. Kod wykorzystujący instrukcję Option Explicit

Bez tej instrukcji niemożliwe jest komunikatu błędu. 

Programowanie VBA: Określ reguły i stosuj je!

Język programowania ma reguły, których nie można złamać (ponieważ powstanie błąd). Do tych zasad warto dopisać swoje własne np. stosowanie opisowych nazw zmiennych, stosowanie wielkich liter dla nazw stałych itp. Aby uświadomić sobie potęgę niepisanych reguł spróbuj przeanalizować kod z rys. 7:

Rys. 7. Działające makro bez zastosowania opisowych nazw zmiennych

Słowa liczba1, liczba2, liczba3 oraz Makro1 nie pomagają w odgadnięciu do czego służy makro. Co więcej, bardzo łatwo popełnić błąd w poprawie tego makra. Proszę spojrzeć na kod z rys. 8.

Rys. 8. Makro obliczające silnię

Makro ma nazwę, z której można wywnioskować, co robi dana procedura. Analizując całą procedurę wiemy, że makro ma na celu obliczenie silni. Kolejną zmienną której przeznaczenie łatwo odgadnąć to zmienna wynik (ma na celu przechowywanie końcowegorezultatu). Ogólna zasada stosowania jednoliterowych nazw zmiennych stosowana jest do pętli. Po analizie trzech pierwszych deklaracji można domyślać się, że liczba będzie tym, co pochodzi od użytkownika. W tym przypadku możliwości są co najmniej trzy: 

  • przy pomocy podanej liczby będzie trzeba obliczyć wynik silni, czyli po podaniu liczby trzy użytkownik otrzyma liczbę sześć, 
  • użytkownik podaje wynik silni, natomiast makro podaje największą liczbę której silnia jest mniejsza lub równa od wyniku danej silni, np. użytkownik podaje liczbę osiem, to otrzymuje liczbę trzy,
  • użytkownik podaje wynik silni, natomiast makro podaje najmniejszą liczbę której silnia jest większa lub równa od wyniku danej silni, np. użytkownik podaje liczbę osiem, to otrzymuje liczbę cztery

Po dalszej analizie kodu można wywnioskować, że pierwsza opcja jest prawidłowa. Oczywiście w przypadku kodów programista zrozumie co robi makro, jednak czas poświęcony na analizę będzie krótszy w przypadku kodu z rys. 8. 

Programowanie VBA: Deklaruj zmienne i stałe

Zadanie: Napisz funkcję obliczającą podatek do zapłaty Urzędowi Skarbowemu w zależności od dochodów osoby. Poniżej przedstawiono tabelę wg której należy obliczać podatek:

Proszę spojrzeć na pierwsze rozwiązanie z rys. 9:

Rys. 9. Funkcja obliczająca podatek

Funkcja poprawnie obliczy podatek, jednak w przypadku zmiany oprocentowania lub progu podatkowego należy zmienić każdą liczbę. Przykładowo zmiana oprocentowania z 20% na 19% spowoduje konieczność zmiany w trzech miejscach. Proszę spojrzeć na kod z rys. rys. 10.

Rys. 10. Obliczenie podatku z wykorzystaniem stałych

Dzięki temu, że w kodzie wykorzystano stałe, to zmiana ich w aplikacji nie wymaga tak dużo czasu, jak w przypadku, gdy z tych stałych nie korzystaliśmy.

cena
od  zł + VAT dla szkoleń otwartych
szkolenia zamknietę
Zapytaj o cenę dla szkoleń zamkniętych
...
Kurs VBA (Visual Basic for Applications) w Microsoft Excel - tworzenie i zarządzanie makropoleceniami oraz posługiwanie się kodem napisanym w języku Visual Basic - poziom przekrojowy
początkujący
cena
od 2200 zł + VAT dla szkoleń otwartych
szkolenia zamknietę
Zapytaj o cenę dla szkoleń zamkniętych
Kurs VBA w Microsoft Excel - tworzenie i zarządzanie makropoleceniami...
Kurs VBA (Visual Basic for Applications) w Microsoft Word - wykorzystanie języka programowania do automatyzacji zadań w dokumencie tekstowym
początkujący
cena
od 4100 zł + VAT dla szkoleń otwartych
szkolenia zamknietę
Zapytaj o cenę dla szkoleń zamkniętych
Kurs VBA w Microsoft Word - wykorzystanie języka programowania...
cena
od  zł + VAT dla szkoleń otwartych
szkolenia zamknietę
Zapytaj o cenę dla szkoleń zamkniętych
...
icon

Formularz kontaktowyContact form

Imię *Name
NazwiskoSurname
Adres e-mail *E-mail address
Telefon *Phone number
UwagiComments