Kurs VBA – cz. 22 – Formularze – Pierwszy program

Poniżej napiszemy błyskawicznie pierwszy program używający formularzy. Wiemy już jak używać edytora VBE i pisać kod, skupię się więc na elementach tworzenia formularzy. Napiszemy program dodający jednocześnie kilka arkuszy. Formularz będzie zawierał dwa pola. W pierwszym będę wpisywał ilość arkuszy do dodania. W drugim pierwszy człon nazwy. Kolejne arkusze będę się nazywać: nazwa_1, nazwa_2, nazwa_3 itd. Dodam też przycisk uruchamiający samo dodawanie oraz przycisk anulowania. Przyciski i pola na formularzu są często nazywane kontrolkami. Rozpoczynamy od otworzenia nowego skoroszytu. Otwieram VBE , dodaję nowy formularz i zmieniam jego nazwę oraz nagłówek.
Dodawanie nowego formularza
Chciałbym teraz dodać dwa pola i jeden przycisk. Listę kontrolek do dodania znajdę w przyborniku toolbox. Włączę go w górnym menu view/toobox. 
Przybornik zawierający podstawowe kontrolki
Przy pomocy graficznego edytora dodam dwa pola tekstowe. Nie zapominam o nadaniu im odpowiednich nazw. Tak jak to opisałem w przypadku zmiennych, tutaj też jest bardzo istotne aby każdy element miał odpowiednią nazwę. Każde pole musi być odpowiednio opisane, żeby użytkownik wiedział co powinien wpisać. Dodam dwie kontrolki label. Na koniec dodam dwa przyciski z odpowiednimi nazwami i napisami. Zmienię jeszcze rozmiar formularza i mogę go już uruchomić przy pomocy przycisku Play (F5). Formularz można zamknąć krzyżykiem w prawym, górnym rogu. Naciskanie przycisków nic nie da, ponieważ nie dodaliśmy do nich żadnych zdarzeń. Zostało nam tylko dodać kod do przycisków. Znacznie mniej kodu będzie pod przyciskiem Anuluj. Wystarczy kliknąć dwa razy w przycisk Anuluj. Otwiera się edytor z automatycznie utworzonym zdarzeniem: Dodam tutaj jedną instrukcję. Wywołanie specjalnej instrukcji zamykania formularza. Możemy już zamknąć formularz przyciskiem anuluj. Przejdziemy teraz do sedna. Tak samo jak przed chwilą dodajemy zdarzenie cmdAdd_Click(). Jeżeli mamy otwarte okno kodu to możemy przejść do edycji samego formularza klikając dwa razy w jego pozycję w drzewie z lewej strony. Nie będę tutaj analizował powyższego kodu, jest on już dla was na pewno zrozumiały. Teraz uruchamialiśmy formularz z edytora VBE. Musimy udostępnić możliwość wygodnego uruchamiania formularza przez użytkownika. Służy do tego metoda Show formularza. Powyższą instrukcję możemy uruchomić na różne sposoby. Tym razem stworzę w nowym module kodu najprostszą procedurę: Dodam skrót klawiaturowy uruchamiający procedurę ShowForm. Od teraz naciśnięcie ctrl + y pokazuje nasz formularz.

Podsumowanie

 Powyższy kod wykonuje tylko podstawową zaplanowaną funkcjonalność. Oczywiście program można (nawet należy) jeszcze znacznie poprawić, na przykład dodać sprawdzanie czy podana ilość arkuszy ma rozsądną wartość (nie za dużą lub za małą) lub czy nazwa nie zawiera niedozwolonych znaków. W tej chwili pojawi się błąd, jeżeli program spróbuje dodać arkusz o nazwie, która już występuje.

Wstęp Spis treści Uruchamianie

Czytaj więcej...

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...

Wyprzedaż książek o Office

Do niedzieli trwa wyprzedaż książek dotyczących pakietu Office w księgarni Helion.pl. Można znaleźć wiele ciekawych pozycji dotyczących Excela, Worda, Outlook i innych.

Oferta książek do 40% taniej.

W promocji można znaleźć najlepszą moim zdaniem książkę na temat VBA (promocja obejmuje wydanie w formie ebooka):

 

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...