190 likes | 577 Views
Programowanie w VBA. Formularze. Elementy formularzy. Przyciski, etykiety, pola tekstowe. Tworzenie formularza. Tworzenie: prawym przyciskiem na eksploratorze projektu, Insert, UserForm; Wywołanie formularza: w Module tworzymy procedurę (sub) wywołującą formularz przez komendę:
E N D
Programowaniew VBA Formularze. Elementy formularzy. Przyciski, etykiety, pola tekstowe.
Tworzenie formularza • Tworzenie: prawym przyciskiem na eksploratorze projektu, Insert, UserForm; • 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; • TextBox – pole tekstowe – miejsce na wpisanie tekstu przez użytkownika, jak InputBox; • ComboBox – lista wyboru otwierana i zamykana po dokonaniu wyboru; • ListBox – lista wyboru o stałym rozmiarze, przesuwana; • Frame – ramka – ograniczenie graficzne na formularzu; • CommandButton – przycisk; • RefEdit – pole wpisywania zakresów, analogiczne do InputBox i Textbox, ale tylko do zakresów. Wartość pobieramy przez: Set zakres = Range(RefEdit1.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 (UserForm1) 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 TextBox_Change, Private Sub ListBox_Click);
Ogólne właściwości formantów • Każdemu formantowi (jak i formularzowi) można nadać nazwę (np. zamiast TextBox1, 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.: TextBox1.Value = „abc” wybranytekst = ListBox1.Value nr_wybranej_pozycji = ListBox1.ListIndex
Pole tekstowe • Podstawowe zdarzenia: - Change (dowolna zmiana); - AfterUpdate (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.: TextBox1.Value = „bum”
Dodatki • W czasie obsługi zdarzeń jak najbardziej można używać dowolnych komend VBA dotyczących formularza (a także InputBox, MsgBox, 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> <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. A1); • 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 CommandButton2_Click() If TextBox1.Locked Then TextBox1.Locked = False CommandButton2.Caption = "Zablokuj" Else TextBox1.Locked = True Cells(1, 1) = TextBox1.Text CommandButton2.Caption = "Odblokuj" End If End Sub
Pola wyboru • Formant wyboru – CheckBox – może być zaznaczony albo odznaczony niezależnie od innych – przyjmuje wartość True albo False; • Formant opcji – OptionButton – może być zaznaczony, ale jego zaznaczenie powoduje odznaczenie innych z tej samej grupy (właściwość GroupName) – 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 B2; - 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 A1 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 MsgBox; - 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 TextBoxy, oraz etykietą z wynikiem (stężenie molowe substancji); • przycisk uruchamia obliczenie stężenia i wprowadzenie wyniku obliczenia do etykiety z wynikiem; • przycisk zamyka formularz.