Kurs VBA – cz. 21 – Formularze – Wstęp

Cały kurs VBA zaczyna się generalnym wstępem i instrukcją napisania pierwszego programu, bez wchodzenia w szczegóły. Rozdział o formularzach też tak rozpocznę. Poniżej trochę teorii i ogólników, w następnej części napiszemy pierwszy program używający formularzy. Da nam to generalne pojęcie o temacie.

Do tej pory użytkownik przekazywał programowi informacje głównie przez wypełnianie komórek Excela. W ten sposób trudno jest programiście zapanować nad tym gdzie,co i kiedy użytkownik wpisuje.

Formularze są przeznaczone do sformalizowanej komunikacji z użytkownikiem. Sami decydujemy kiedy taki formularz ma się pokazać. Planujemy ile jakich pól będzie się na nim znajdować, czyli co użytkownik  będzie mógł wpisać. Formularze umożliwiają też strukturyzowanie informacji dla użytkownika w formę o wiele bardziej zaawansowaną niż zwykły arkusz kalkulacyjny z wykresami i tabelkami. Czytaj więcej...

Kurs VBA – cz. 20 – Debugging

W ramach kursu napisaliście już nie jeden program i na pewno spotkaliście się z niejednym błędem, który sprawiał, że program nie działał jak powinien. Wszystkie rodzaje błędów jakie możecie napotkać opisałem w cz. 18 – Obsługa błędów. Kiedy już znajdziemy błąd, uporanie się z nim jest stosunkowo proste. Właśnie szukanie ich zajmuje programistom dużo czasu i przyprawia o siwiznę.=&0=&. Nazwa jest może trochę niefortunna, ale powszechnie używana w Polsce. Jest to proces uruchamiania programu krok po kroku w celu znalezienia błędów (bugów) lub po prostu przeanalizowania działania programu.

Powyższa, nieco lakoniczna definicja może być niezrozumiała. Spróbujmy więc debugowania samodzielnie, krok po kroku.

Stwórzmy nowy skoroszyt z najprostszym makrem:

Powyższy program przegląda dziesięć komórek i wpisuje numer wiersza lub losową liczbę, zależnie, czy numer wiersza jest parzysty, czy nie. Po uruchomieniu makra w ułamku sekundy komórki wypełniają się liczbami i pojawia się komunikat. Chcielibyśmy jednak krok po kroku przeanalizować działanie programu. Czytaj więcej...

Kurs VBA – cz. 19 – Nazywanie zmiennych

O zmiennych pisałem już w dziesiątej części. Jeżeli uczciwie przeszedłeś cały kurs to pewnie już dość swobodnie się nimi posługujesz w podstawowym zakresie. Dzisiaj napiszę o często ignorowanym ale bardzo ważnym elemencie zmiennych i stałych, czyli ich nazwie.

Już teraz nadmienię, że koncepcji nazywania zmiennych jest mnóstwo. Poniższa działa dla mnie i proponuję ją stosować oraz ewentualnie później modyfikować. Ostatecznie ważne jest, żeby w ramach jednego projektu konsekwentnie korzystać z jednej konwencji. Czytaj więcej...

Kurs VBA – cz. 18 – Obsługa błędów

Niezależnie jak dokładnie będziemy pisać program i ile do niego przygotowywać, zawsze pojawią się jakieś błędy. Istnieje szereg czynności, które pozwolą nam się do nich przygotować i lepiej z nimi radzić. Czasem możemy nawet świadomie je wywoływać. Najważniejsze jest jednak, żeby w przypadku błędów program zachowywał się w sposób przewidywalny, tak jak to sobie zaplanowaliśmy. Jest to tak samo ważne jak projektowanie samych procedur.

Do najważniejszych zasad należą:
  1. Dokładne projektowanie programu.
  2. Automatyczne sprawdzanie składni (patrz niżej).
  3. Włączenie Option Explicit (patrz niżej)
  4. Tworzenie małych części kodu.
  5. Tworzenie komentarzy
  6. Testowanie aplikacji
Punktowi numer 6 poświęcona zostanie osobna część kursu.
Poniżej zajmiemy się sytuacjami, w których błąd już się pojawił.

Błędy podczas projektowania

Najprostszy i najczęstszy błąd to zwykła literówka. VBE podczas pisania kodu sprawdza czy wszystkie pisane instrukcje są rozpoznawalne. Wszystkie słowa kluczowe są domyślnie kolorowane na niebiesko. Na tym etapie nie są jeszcze sprawdzane funkcje i nazwy zmiennych.
Jeżeli składnia nie będzie odpowiadać VBE, linia zostanie zaznaczona na czerwono, dodatkowo domyślnie pojawi się msgbox z odpowiednią informacją.
Szybko okazuje się, że ten MsgBox jest bardzo irytujący i jeżeli jeszcze go nie wyłączyłeś to można to zrobić w Tools/Options/Auto Syntax Check. Po wyłączeniu tej opcji nieprawidłowe linie wciąż będą się zaznaczać na czerwono, jednak będziemy mogli łatwo przerwać pisanie linii kodu (na przykład, żeby zadeklarować jakąś zmienną).

Błędy podczas uruchamiania

Podczas uruchamiania programu sprawdzane są nazwy wszystkich procedur. Jeżeli gdzieś w kodzie napiszemy funkcję, która nie jest ani wbudowana, ani napisana przez nas to pojawi się ostrzeżenie i uruchamianie zatrzyma się na nazwie uruchamianej procedury.

Option Explicit

Jeżeli chcemy, żeby w tym momencie Excel sprawdzał także poprawność zmiennych, należy na początku modułu napisać instrukcję Option Explicit. Jest do absolutnie kluczowa rzecz, o czym napiszę za chwilę. Jeżeli chcemy, żeby ta instrukcja pojawiała się automatycznie możemy włączyć: Tools/Options/require Variable Declaration i bezwględnie każdy to powinien zrobić.
Po włączeniu tej opcji każda zmienna / stała musi być zadeklarowana przy pomocy instrukcji odpowiednio Dim lub Const, zanim zostanie użyta. Odpowiedni komunikat pojawi się jeżeli użyjemy zmiennej nie zadeklarowanej. Co się stanie, jeżeli nie włączymy tej opcji? Nie musimy deklarować żadnej zmiennej. Odpowiednie miejsce w pamięci zostanie dla niej zajęte w momencie pierwszego użycia i przyjmie typ Variant. Na pierwszy rzut oka może być to wygodne. Jednak:
  • Tracimy kontrolę nad typami zmiennych.
  • Przede wszystkim: Narażamy się na błędy związane z literówkami

Spójrzmy na poniższy kod, option explicit nie zostało użyte. Nie musiałem deklarować zmiennej text.

Przy braku Option Explicit powyższy kod wykona się, jednak nic nie pojawi się w okienku MsgBox ponieważ zostaną utworzone dwie różne zmienne: Text i tekst. Przy włączonym zabezpieczeniu VBE ostrzeże nas, że nie zadeklarowaliśmy zmiennej Text, a chcemy z nią cos robić. Czytaj więcej...

Kurs VBA – cz. 17 – Dobre praktyki programowania

=&0=&W poprzedniej części napisałem jak przygotować się do pisania programu, najwyższy czas się tym zająć. Jak jednak programować łatwo i przyjemnie? Postaram się przedstawić różne aspekty programowania w VBA i programowania w ogóle, które ułatwią wejście w ten pozornie zawiły świat i mam nadzieję zaoszczędzą dużo kłopotów początkującym programistom.

Na początek napiszę się co sprawia, że dobry kod jest dobry. Później przejdę do praktycznych elementów programowania.

Poszczególne fragmenty są mniej lub bardziej powiązane. Nie odważę się powiedzieć, że pewne zasady są ważniejsze niż inne. Zdecydowanie należy przyswoić sobie je wszystkie i zacząć stosować bez wyjątku. Zaoszczędzicie sobie tym dużo czasu i nerwów. Zapewniam, że wcześniej czy później każda z nich zemści się, jeżeli o niej zapomnimy.

Cechy dobrego kodu Czytaj więcej...

Kurs VBA – cz. 16 – Projektowanie programu

Poznaliśmy już wszystkie istotne elementy kodu. Możemy już napisać większość programów w VBA. Oczywiście dobry murarz potrzebuje nie tylko cegieł ale i umiejętności ich układania w spójną i bezpieczną całość. Poniższy tekst należy raczej traktować bardziej jako lekturę do poduszki niż ścisły kurs techniczny.

Na temat projektowania oprogramowania napisano tysiące książek i opracowano setki metodyk. Poniżej ledwie pływam po powierzchni tego problemu, mam jednak nadzieję, że po przeczytaniu tego tekstu początkujący programista VBA będzie lepiej przygotowany na to, co przyniesie przygoda z programowaniem. Czytaj więcej...

Kurs VBA – cz. 15 – funkcje wbudowane

Poznaliśmy już większość klocków potrzebnych do budowania standardowych programów w VBA. Poprzednia część kursu wprowadziła szczególnie dużo informacji. Dzisiaj lżejszy temat, funkcje wbudowane. Jest to swego rodzaju skrzynka narzędziowa, pozwalająca wykonywać różna operacje na liczbach, ciągach znaków i datach.

Funkcje takie używa się tak jak funkcje napisane przez nas. Nie znajdziemy jednak nigdzie ich kodu. Oczywiście nie trzeba uczyć się ich na pamięć. Warto jednak o nich pamiętać. Dokładne informacje o każdej funkcji znajdziemy w pomocy (przycisk F1 przy włączonym VBE). Wystarczy napisać w procedurze daną funkcję, zaznaczyć ją i nacisnąć F1.

Funkcje można podzielić na:

  • matematyczne
  • znakowe
  • daty i czasu
  • inne
Poniższe przykłady przedstawiłem z nawiasami. Trzeba jednak pamiętać, nawiasy umieszczamy, jeżeli funkcja jest argumentem innej. Nie umieszczamy nawiasów, jeżeli jest to pierwsza funkcja w danej linii. Poniżej zastosowana została funkcja replace. Funkcja MsgBox została użyta bez nawiasów. Replace już wymaga nawiasów, bo jest argumentem dla MsgBox.

Matematyczne

=&0=&Zwraca wartość bezwzględną liczby. np: Abs(- 10) zwraca 10, Abs(10) zwraca 10.

Int(liczba), Fix(liczba) – Obie funkcje zwracają część całkowitą liczbyInt(99.8) zwraca 99

W przypadku liczb ujemnych Int zwraca pierwszą liczbę całkowitą mniejszą lub równą liczbie, Fix zwraca dla liczb ujemnych pierwszą większą lub równą liczbę. Czytaj więcej...

Kurs VBA – cz. 14 – Pętle

W poprzedniej części poznaliśmy metodę sterowania programem przy pomocy instrukcji warunkowych. Teraz do sterowania programem użyjemy konstrukcji zwanych pętlami. Pozwalają one wykonywać ten sam fragment kodu kilka razy. Oczywiście ilością powtórzeń możemy sterować i może być inna przy każdym wykonaniu tego samego programu. Kod wewnątrz pętli może nawet wcale się nie wykonać. Przerwaniem lub zakończeniem pętli nazywamy przejście od wykonywania kodu wewnątrz pętli do wykonywania instrukcji bezpośrednio po niej. Iteracja  jest jednorazowym wykonaniem pętli.


Do until / Do while

Ta pętla służy do wykonania fragmentu kodu pewną ilość razy. Najprostsza wersja składa się tylko z klamry Do…loop. Nie uruchamiaj tego kodu!

 

Jest to przykład tak zwanej nieskończone pętli, która będzie omówiona później. Jej działanie nigdy nie będzie przerwane. Kolejne przykłady można już bezpiecznie testować.

Do pętli możemy dodać warunki while lub until, które mogą przerwać wykonywanie.

  Czytaj więcej...

Kurs VBA – cz. 13 – Instrukcje warunkowe If, Case


W poprzednich częściach kursu poznaliśmy zmienne i metody pracy z nimi. Czas przejść do ostatniego elementu układanki, czyli wspomnianego już wcześniej sterowania programem. Podstawową instrukcją sterowania w prawie każdym języku programowania jest IF, czyli „jeżeli”. Może ona być używana na kilka sposobów, każdy jednak ogranicza się do sprawdzania, czy jakieś wyrażenie jest prawdziwe lub nie i wykonania odpowiedniego kodu, przyporządkowanego do jednej z tych dwóch wartości. Czytaj więcej...

Kurs VBA – cz. 12 – Podstawowe wejście i wyjście

 

 

W poprzednich częściach kursu nauczyliśmy się o zmiennych, jak na nich operować i jak przypisywać im wartości. Siłą jakiegokolwiek programu komputerowego jest możliwość interakcji z użytkownikiem i sterowania programem w zależności od otrzymanych danych. Już niedługo pokażę jak sterować programem przy pomocy różnych instrukcji warunkowych. Dzisiaj omówimy sobie podstawowe metody odbierania danych od użytkownika.

 

 

Formularze

Na pewno najbardziej elegancką i potężną metodą komunikacji z użytkownikiem są formularze. Mogą zawierać przeróżne kontrolki, od przycisków, poprzez suwaki, wykresy, obrazki itp. Tworzenie formularzy nie jest specjalnie trudne jednak jest to temat na osobną cześć kursu. Czytaj więcej...