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