Programowanie w VBA Programowanie obiektowe Obiekty metody i
Programowanie w VBA Programowanie obiektowe. Obiekty – metody i właściwości. Formularze. Elementy formularzy: przyciski, etykiety, pola tekstowe, pola wyboru i opcji
Programowanie obiektowe • Tworzenie programów z obiektów – elementów posiadających właściwości i metody (zachowanie); • Program składa się z obiektów komunikujących się ze sobą i/bądź wykonujących swoje zadania;
Obiekty • Excel też jest obiektem – zawierającym obiekty takie jak skoroszyty (w nich arkusze, a w nich z kolei komórki), przyciski, formularze (np. przy uruchamianiu makr); • Obiekty są zhierarchizowane – mogą posiadać obiekty wewnątrz siebie (pasek narzędzi ma przyciski, listy, itd. , formularz ma napisy i przyciski, miejsca do wpisania, jak Input. Box);
Obiekty c. d. • Obiekt Application to Excel (w przypadku VBA), dalej mamy Worksheets (arkusze), Cells (komórki), zaznaczenia (Selection), itd. Hierarchia adresowania obiektów jest od najwyższego (np. Application), do najniższego (Cells, Font), a za tym jeszcze są metody/właściwości (wszystko oddzielone kropką, np. Selection. Rows. Count); Application i Worksheets, jeśli nie podane, są domyślne (przy czym Worksheets domyślny to ten aktualnie wybrany). Application. Worksheets(„Arkusz 1”). Cells(1, 1). Font. Size = „ 20” Application. Worksheets(„Arkusz 1”). Cells(1, 1). Value = „abc” Cells(2, 2). Value=„abc”
Metody i właściwości • Metody to „czynności” które może mieć obiekt (np. być załadowanym do pamięci, pokazać się albo zniknąć); • Właściwości to stany – widoczność obiektu, opis tekstowy, wartość (value – dla komórki); Każda właściwość może mieć tylko jeden stan na raz; • Właściwości możemy ustawiać ręcznie lub przez program; • Każdy obiekt ma przypisany swój zbiór metod i właściwości.
Obiekty c. d. • Obiekty mogą być tworzone przez użytkownika, np. formularze, zawierające inne obiekty – przyciski, etykiety (opisy), pola tekstowe (miejsca do wpisywania), itd. • Właściwości formularza pozwalają na przechwytywanie działań użytkownika na wyświetlanym formularzu i uruchamianie związanych z danym działaniem podprogramów; • Formularze są obiektami w grupie obiektów User. Forms (np. : Application. User. Forms. User. Form 1).
Formularze • Ponieważ wszystkie elementy formularzy są również obiektami, posiadają na przykład swoje miejsce na formularzu jako właściwość (koordynaty x, y w pixelach od rogu formularza), można również np. tworzyć i rysować elementy formularza z poziomu programu (aczkolwiek jest to mało wygodne);
Formularze • Obsługa zdarzeń – zdarzenie dla obiektu (np. przycisku) to na przykład „kliknięcie” na przycisk; • Programowanie w językach programowania typu „Visual” polega w głównej mierze na projektowaniu „wizualnej” strony (rozmieszczenia graficznych reprezentacji obiektów w aplikacji (VB)/formularzu(VBA)), a następnie oprogramowaniu zdarzeń poprzez odpowiednie programy uruchamiane przez zdarzenia i ich podprogramy/funkcje;
Formularze c. d. • Formularz zanim się pojawi, należy zaprojektować, a makro uruchamiające formularz powinno zawierać komendy ładujące formularz do pamięci (load), pokazujące (metoda. show), ewentualnie deklarujące zmienne ogólnodostępne dla procedur obsługujących zdarzenia w formularzu – w programie initialize (inicjalizacja formularza – obsługa zdarzenia uruchamiana w momencie pojawienia się formularza);
Tworzenie formularza • Tworzenie: prawym przyciskiem na eksploratorze projektu, Insert, User. Form; • Wywołanie formularza: w Module tworzymy procedurę (sub) wywołującą formularz przez komendę: <nazwa_formularza>. Show • Formularz chowamy komendą: <nazwa_formularza>. Hide
Elementy formularza (formanty) • Label - Etykieta – napis na formularzu, dowolnie formatowany, można zmieniać zawartość tekstu, ale tylko z poziomu programu; • Text. Box – pole tekstowe – miejsce na wpisanie tekstu przez użytkownika, jak Input. Box; • Combo. Box – lista wyboru otwierana i zamykana po dokonaniu wyboru; • List. Box – lista wyboru o stałym rozmiarze, przesuwana; • Frame – ramka – ograniczenie graficzne na formularzu; • Command. Button – przycisk; • Ref. Edit – pole wpisywania zakresów, analogiczne do Input. Box i Textbox, ale tylko do zakresów. Wartość pobieramy przez: Set zakres = Range(Ref. Edit 1. Value); • Inne;
Właściwości i układ formularza • Tylko formanty stanowią zawartość formularza; • Właściwości formularza (tło, rysunek w tle, rozmiary, itd. ) są dowolnie ustawiane; • Wybór kolorów, czcionek, rozmiarów wszystkich formantów także należy do programisty; • Każdy formant można ustawić, czy jest widoczny (visible); • Formularz można pokazać (<formularz>. Show) z poziomu głównego programu, a schować z poziomu obsługi zdarzenia (np. przycisnięcie na przycisk); • Formularz można zmieniać z poziomu głównego programu przed pokazaniem go (show);
Formularz • Formularz (User. Form 1) ma dodatkowe zdarzenia związane z jego uruchomieniem i zamknięciem: - Initialize – wywoływane w momencie załadowania (Load); - Activate – wywoływane w momencie pokazania (Show); - Deactivate – wywoływane w momencie chowania (Hide);
Interakcja formularza z użytkownikiem • Dowolna czynność użytkownika w polu formularza może (ale nie musi) powodować wykonanie procedury obsługującej to zdarzenie (o ile taka istnieje); • „Zdarzenie” to wybranie czegoś na liście, najechanie myszką na etykietę, naciśnięcie przycisku, „zjechanie” myszką z etykiety, z przycisku, itd. • Aby obsłużyć dane zdarzenie, należy stworzyć w kodzie formularza (prawy przycisk myszy na formularzu w eksploratorze projektu i wybór View Code) stosowną procedurę (Private Sub Text. Box_Change, Private Sub List. Box_Click);
Ogólne właściwości formantów • Każdemu formantowi (jak i formularzowi) można nadać nazwę (np. zamiast Text. Box 1, w którym użytkownik ma wpisać imię można dać nazwę Imie); • Caption – opis (na etykiecie, przyciskach) • Można nadać informację o używalności i widoczności elementu, a także czcionkę (np. dla Caption), kolor czcionki, tła; • Każdy formant ma swój zestaw właściwości charakterystycznych dla niego i jego funkcji;
Układanie formantów • Użytkownik sam decyduje o wymiarach formularza, a także o wymiarach i położeniu formantów na nim; • W celu dokładnego ustawienia formantów, można wybrać ich grupę, a następnie w menu Format wybrać odpowiednie rodzaje dostosowania wielkości, ustawienia, itd. (ikonki opisują rodzaj operacji);
Wymiana informacji między formularzem a procedurami • W kodzie przy odpowiednich obsługach zdarzeń można korzystać z odwołań do aktualnego stanu formularza, poprzez odwołania z odpowiednich metod (a także nadawać wartości pozycji w listach lub tekstów w Etykietach/Polach tekstowych); np. : Text. Box 1. Value = „abc” wybranytekst = List. Box 1. Value nr_wybranej_pozycji = List. Box 1. List. Index
Pole tekstowe • Podstawowe zdarzenia: - Change (dowolna zmiana); - After. Update (po skończeniu wpisywania, np. wciśnięcie enter albo kliknięcie na coś innego w obrębie formularza); • Właściwości: - Text – to co jest wpisane do okienka domyślnie (nie można tego pobrać przez value); - Value – to co wpisze użytkownik; - Locked – true/false – zablokowanie pola tekstowego; - Visible – true/false – czy element jest widoczny; np. : Text. Box 1. Value = „bum”
Dodatki • W czasie obsługi zdarzeń jak najbardziej można używać dowolnych komend VBA dotyczących formularza (a także Input. Box, Msg. Box, itd. ); • Aby edytować obsługę zdarzeń dla danego formantu, należy na niego dwukrotnie kliknąć w edycji formularza; • Aby zmienić rodzaj obsługiwanego wydarzenia należy wybrać odpowiednią pozycję z menu na górze po prawej; • Makro uruchamiające formularz przerywa działanie po komendzie Userform. Show, a wznawia działanie po tej komendzie po zamknięciu formularza;
Plan działania • Wstawiamy formularz w eksploracji projektu; • Tworzymy formularz (jego wygląd) o nazwie <formularz>; • Tworzymy moduł i w nim makro pokazujące formularz (Load <formularz>. Show Unload <formularz>); • Tworzymy obsługę zdarzeń formularza (dwukrotne kliknięcie na dany formant lub też prawy przycisk na formularzu/formancie i „View Code”); • W ramach obsługi zdarzeń gdzieś należy umieścić polecenie zamknięcia (schowania) formularza - <formularz>. Hide;
Zadanie 1 • Stworzyć formularz z etykietą i dwoma przyciskami; • Kliknięcie na 1. przycisk wpisuje do etykiety zawartość jakiejś komórki arkusza (np. A 1); • Kliknięcie na 2. przycisk zamyka formularz;
Zadanie 2 • Stworzyć pojawiający się formularz (w wyniku uruchomienia makra), w którym znajdą się dwa przyciski i pole tekstowe: 1. przycisk (kliknięcie na niego) blokuje pole tekstowe i wpisuje jego zawartość wpisaną przez użytkownika do arkusza, przy czym ponowne naciśnięcie na ten przycisk odblokowuje pole tekstowe (i odpowiednio do tego zmieniają się nazwy przycisku – „Odblokuj” i „Zablokuj” stosownie do aktualnego działania; 2. przycisk zamyka formularz;
Rozwiązanie Zadania 2 Private Sub Command. Button 2_Click() If Text. Box 1. Locked Then Text. Box 1. Locked = False Command. Button 2. Caption = "Zablokuj" Else Text. Box 1. Locked = True Cells(1, 1) = Text. Box 1. Text Command. Button 2. Caption = "Odblokuj" End If End Sub
Pola wyboru • Formant wyboru – Check. Box – może być zaznaczony albo odznaczony niezależnie od innych – przyjmuje wartość True albo False; • Formant opcji – Option. Button – może być zaznaczony, ale jego zaznaczenie powoduje odznaczenie innych z tej samej grupy (właściwość Group. Name) – przyjmuje wartość True albo False; • Odczytanie: <polewyboru>. Value
Zadanie 3 - domowe Utworzyć formularz (ładnie wyglądający – tło, czcionki, odpowiednie opisy przycisków, pokolorowane i w ramkach wszystko), w którym będą 3 przyciski, etykieta i pole tekstowe: - Pole tekstowe domyślnie będzie zawierało zawartość komórki B 2; - Kolejne zakończone wpisy tekstu do pola tekstowego będą automatycznie kopiowały jego zawartość do kolejnych komórek w arkuszu poczynając od komórki A 1 i w dół (w ramach kolumny A); - 1. przycisk przekopiuje zawartość pola tekstowego do etykiety; - 2. przycisk zablokuje możliwość wpisywania do pola tekstowego i schowa przycisk 1. (a ponowne wciśnięcie odblokuje pole i pokaże przycisk 1. ) i wyświetli zawartość etykiety w Msg. Box; - 3. przycisk zamknie formularz;
Dodatkowe informacje do zadania 3 • Aby stworzyć licznik potrzebny w zadaniu nr 3 należy w module utworzyć ten licznik, ale jeszcze przed makrem wywołującym formularz: Public licznik As Integer taka zmienna jest wspólna dla wszystkich makr; • Początkową wartość licznika ustalamy w makrze wywołującym formularz, natomiast zwiększamy go gdzie chcemy (w procedurze obsługującej zdarzenie) – tak więc gdziekolwiek nie zmienimy jego wartości, to zmienia się ona globalnie (wszystkie procedury mają do niej dostęp i mogą ją zmienić tak, że inne procedury widzą tą zmianę);
Zadanie 4 - domowe • Stworzyć formularz z 2 przyciskami, dwoma Textboxami (ilość moli i objętość rozpuszczalnika), etykietami opisującymi odpowiednio Text. Boxy, oraz etykietą z wynikiem (stężenie molowe substancji); 1. przycisk uruchamia obliczenie stężenia i wprowadzenie wyniku obliczenia do etykiety z wynikiem; 2. przycisk zamyka formularz.
- Slides: 27