Utworzenie interfejsu graficznego za pomocą formularza
Transkrypt
Utworzenie interfejsu graficznego za pomocą formularza
Utworzenie interfejsu użytkownika w VBA graficznego za pomocą formularza Po co? Potrzebne jest nam makro, które będzie wykonywać pewne czynności w osobnym oknie w Excelu. Do tego celu wykorzystamy element UserForm (formularz użytkownika) w VBA Zadanie 1. Utwórz formularzy użytkownika moment, który będzie obliczać moment bezwładności I przekroju prostokątnego, na podstawie danych jego wymiarów b i h, opisany wzorem: I= bh 3 12 Rozwiązanie Zadania 1. Nasz cel: utworzenie przycisku w arkuszu oraz programu działającego po naciśnięciu przycisku. Wtedy pojawia się okno z formularzem, gdzie uzupełniamy dane i uzyskujemy odpowiedź (wartość momentu bezwładności). Najpierw dodajemy przycisk w arkuszu korzystając z Narzędzia: Deweloper -> Wstaw –> Formanty formularza –> Przycisk. Możemy też zmienić jego opis na Moment bezwładności. Efekt Przechodzimy do edytora VBA (Deweloper – Wyświetl kod lub Alt+F11) i dodajemy jeden moduł (Insert –> Module) i jeden formularz użytkownika (Insert –> UserForm) Zmieniamy w formularzu (UserForm) jego nazwę (Name) na moment oraz opis (Caption) na Moment bezwładności (patrz czerwone podkreślenia) W module (Module) dodajemy makro, które będzie wyświetlać formularz użytkownika po naciśnięciu przycisku w arkuszu. W moim przypadku przycisk nazywa się Przycisk1_Kliknięcie i taka jest też nazwa makra, które się do niego odnosi. Nazwę przycisku można sprawdzić po najechaniu na przycisk w arkuszu i wybraniu spod prawego klawisza myszy opcji Przypisz makro. To jest jedyne polecenie, które umieszczamy w module (Modules –> Module 1), pozostałe umieszczamy w formularzu (Forms -> moment). Następnie korzystając z Toolbox’a dodajemy do formularza poniższe elementy: • 3 x etykiety (Label) • 3 x okienka (TextBox) • 3 x przyciski (CommandButtton) aby w efekcie otrzymać: teraz modyfikujemy cechy wstawionych elementów (Properties): Element: Label1 Label2 Label3 TextBox1 TextBox2 TextBox3 CommandButton1 CommandButton2 CommandButton3 Nazwa (Name) b1 h1 moment1 Licz_moment1 Czysc_moment1 Opusc_moment1 Opis (Caption) Wymiar b Wymiar h Moment bezwładności przekroju prostokątnego Oblicz Wyczyść Wyjście Efekt Teraz musimy powiązać ze sobą elementy formularza (okienka b1, h1, moment1 i przyciski Licz_moment1, Czysc_moment1, Opusc_moment1). Najpierw przygotowujemy makro czyszczące formularz. Podwójnie klikamy na obszarze formularza moment (powyżej, tam gdzie czerwona strzałka–> na kropeczkach) i wpisujemy: Private Sub UserForm_Initialize() b1.Value = "" h1.Value = "" moment1.Value = "" End Sub Opcja Initialize powoduje, że nasze makro jest uruchamiane razem z otwarciem formularza (UserForm) za pomocą przycisku w arkuszu. Pozostało nam skonfigurowanie co będą robić przyciski Oblicz, Wyczyść i Wyjście. Podwójnie klikając kolejno na przyciski wpisujemy poniższe polecenia. Pod przyciskiem Oblicz znajdują się obliczenia momentu bezwładności pod warunkiem, że pola b1 i h1 nie są puste, wtedy wyświetla się informacja w polu moment1 o treści "Wstaw liczby w pola wymiarów b i h". Private Sub Licz_moment1_Click() If b1.Value = "" And h1.Value = "" Then moment1 = "Wstaw liczby w pola b i h" Else moment1 = (b1 * h1 ^ 3) / 12 End If End Sub Pod przyciskiem Wyczyść znajduje się odwołanie do procedury UserForm_Initialize, która czyści zawartość okienek b1, h1 i moment1. Private Sub Czysc_moment1_Click() Call UserForm_Initialize End Sub Pod przyciskiem Wyjście znajduje się komenda zamykająca cały formularz. Private Sub Opusc_moment1_Click() Unload Me End Sub Przetestujmy program (wpisywanie danych, działanie przycisków): Ewentualnie możemy dodać pod przyciskiem Oblicz funkcję zaokrąglającą Round (liczba, ilość miejsc po przecinku), aby wynik nie miał tylu cyfr. W tym przykładzie zaokrąglamy do 4 miejsc po przecinku. Private Sub Licz_moment1_Click() If b1.Value = "" And h1.Value = "" Then moment1 = "Wstaw liczby w pola b i h" Else moment1 = Round((b1 * h1 ^ 3) / 12, 4) End If End Sub Efekt Można też zabezpieczyć przed wartościami nieliczbowymi oraz liczbami mniejszymi lub równymi 0 (w końcu b i h to wymiary) jak na przykładzie poniżej. Jeśli tekst informacji o błędzie się nie mieści to można poszerzyć okienka TextBox w formularzu. Private Sub Licz_moment1_Click() If b1.Value = "" And h1.Value = "" Then moment1 = "Wstaw liczby w pola b i h" Else If IsNumeric(b1.Value) And IsNumeric(h1.Value) Then If b1.Value > 0 And h1.Value > 0 Then moment1 = Round((b1 * h1 ^ 3) / 12, 4) Else moment1 = "Wymiary muszą być większe od 0" End If Else moment1 = "Wymiary muszą być liczbami" End If End If End Sub Efekt