ten Formularz rezerwacji kursu to prosty formularz ilustrujący zasady projektowania UserForm i związane z nim kodowanie VBA.
Wykorzystuje wybór kontrolek, w tym pola tekstowe, pola kombi, przyciski opcji zgrupowane w ramce, pola wyboru i przyciski poleceń.
Gdy użytkownik kliknie przycisk OK, jego dane wejściowe są wprowadzane do następnego dostępnego wiersza w arkuszu.
Opis formularza Excela:
Istnieją dwa proste pola tekstowe (Nazwa: oraz Telefon:), w które użytkownik może wpisać dowolny tekst, oraz dwa pola kombi (dział oraz Kierunek), które pozwalają użytkownikowi wybrać pozycję z listy.
Istnieją trzy przyciski opcji (Wstęp, Mediator oraz Zaawansowany) zgrupowane w ramce (Poziom), aby użytkownik mógł wybrać tylko jedną z opcji.
Istnieją dwa pola wyboru (Obiad wymagany oraz Wegetariański), ponieważ nie są one zgrupowane w ramce, w razie potrzeby można je wybrać. Jeśli jednak osoba dokonująca rezerwacji nie życzy sobie obiadu, nie musimy wiedzieć, czy jest on wegetarianinem. Więc Wegetariański pole wyboru jest wyszarzone, dopóki nie jest wymagane.
Istnieją trzy przyciski poleceń (ok, Anulować oraz Czysta forma), z których każdy po kliknięciu wykonuje określoną funkcję.
Ustawienia właściwości kontrolki:
Kontrola | Rodzaj | Nieruchomość | Ustawienie |
Formularz użytkownika | Formularz użytkownika | Nazwa | frmCourseRezerwacja |
Podpis | Formularz rezerwacji kursu | ||
Nazwa | Pole tekstowe | Nazwa | txtName |
Telefon | Pole tekstowe | Nazwa | txtPhone |
dział | Pole kombi | Nazwa | cboDepartament |
Kierunek | Pole kombi | Nazwa | cboKurs |
Poziom | Rama | Nazwa | fraLevel |
Podpis | Poziom | ||
Wstęp | Przycisk opcji | Nazwa | optWprowadzenie |
Mediator | Przycisk opcji | Nazwa | optŚredniozaawansowany |
Zaawansowany | Przycisk opcji | Nazwa | optZaawansowane |
Obiad wymagany | Pole wyboru | Nazwa | chkLunch |
Wegetariański | Pole wyboru | Nazwa | chkWegetariański |
Włączony | Fałszywe | ||
ok | Przycisk polecenia | Nazwa | cmdOk |
Podpis | ok | ||
Domyślny | Prawdziwe | ||
Anulować | Przycisk polecenia | Nazwa | cmdAnuluj |
Podpis | Anulować | ||
Anulować | Prawdziwe | ||
Czysta forma | Przycisk polecenia | Nazwa | cmdClearForm |
Tworzenie formularzy w Excelu
Jeśli chcesz samodzielnie zbudować formularz, po prostu skopiuj układ pokazany na powyższej ilustracji. Wykonaj poniższe kroki:
1. Otwórz skoroszyt, do którego ma należeć formularz (formularze użytkownika, takie jak makra, które muszą być dołączone do skoroszytu) i przejdź do Edytora Visual Basic.
2. W Edytorze Visual Basic kliknij Wstaw formularz użytkownika przycisk (lub przejdź do Wstaw > Formularz użytkownika).
3. Jeśli przybornik nie pojawia się sam (najpierw kliknij formularz, aby upewnić się, że się nie chowa) kliknij Przybornik przycisk (lub przejdź do Widok > Przybornik).
4. Aby umieścić kontrolkę na formularzu, kliknij odpowiedni przycisk w przyborniku, a następnie kliknij formularz. Kontrolki można przesuwać, przeciągając je za krawędzie, lub zmieniać ich rozmiar, przeciągając przyciski po ich obwodzie.
5. Aby edytować właściwości kontrolki, upewnij się, że wybrana kontrolka jest wybrana, a następnie dokonaj odpowiednich zmian w Nieruchomości okno. Jeśli nie widzisz okna właściwości, przejdź do Widok > Okno właściwości.
6. Aby usunąć kontrolkę z formularza, zaznacz ją i kliknij Kasować klawisz na klawiaturze.
UserForm w rzeczywistości nic nie zrobi, dopóki nie zostanie utworzony kod, który steruje formularzem i jego różnymi kontrolkami. Następnym krokiem jest napisanie kodu, który steruje samym formularzem.
Dodawanie kodu: 1 Inicjalizacja formularza
Inicjalizacja formularza:
Większość formularzy wymaga pewnego rodzaju konfiguracji po otwarciu. Może to być ustawienie wartości domyślnych, upewnienie się, że pola są puste lub budowanie list pól kombi. Ten proces nazywa się Inicjalizacja formularza i jest obsługiwane przez makro o nazwie UserForm_Initialize (na wypadek, gdybyś był zdezorientowany moją różną pisownią słowa „initialis(z)e”, to dlatego, że mówię po angielsku, a VBA mówi po amerykańsku - ale nie martw się, VBA będzie przeliteruj to za ciebie!). Oto jak zbudować kod do inicjalizacji Formularza rezerwacji kursu:
1. Aby wyświetlić okno kodu formularza przejdź do Widok > Kod lub kliknij F7.
2. Kiedy okno kodu otwiera się po raz pierwszy, zawiera pustą UserForm_Click() procedura. Użyj list rozwijanych u góry okna kodu, aby wybrać Formularz użytkownika oraz Zainicjuj. To stworzy procedurę, której potrzebujesz. Możesz teraz usunąć procedurę UserForm_Click().
3. Wprowadź do procedury następujący kod:
Private Sub UserForm_Initialize() txtName.Value = "" txtPhone.Value = "" With cboDepartment .AddItem "Sprzedaż" .AddItem "Marketing" .AddItem "Administracja" .AddItem "Projekt" .AddItem "Reklama" .AddItem "Dispatch AddItem "Transport" Zakończ z cboDepartment.Value = "" Z cboCourse .AddItem "Dostęp" .AddItem "Excel" .AddItem "PowerPoint" .AddItem "Word" .AddItem "FrontPage" Zakończ z cboCourse.Value = "" chkLunch = False chkVegetarian = False txtName.SetFocus End Sub
Jak działa kod inicjujący:
Celem procedury UserForm_Initialize() jest przygotowanie formularza użytkownika w VBA do użycia, ustawienie wartości domyślnych dla różnych kontrolek i utworzenie list, które będą wyświetlane w polach kombi.
Te wiersze ustawiają zawartość dwóch pól tekstowych na pustą:
txtName.Value = "" txtPhone.Value = ""
Dalej przychodzą instrukcje dotyczące pól kombi. Przede wszystkim określana jest zawartość listy, a następnie wartość początkowa pola kombi jest ustawiana na pustą.
Z cboDepartment .AddItem "Sprzedaż" .AddItem "Marketing" (tyle ile potrzeba… ) Koniec z
cboDepartment.Value = ""
W razie potrzeby można dokonać wstępnego wyboru z grupy opcji, w tym przypadku:
optWprowadzenie = Prawda
Oba pola wyboru są ustawione na Fałsz (tj. Brak zaznaczenia). Ustaw na Prawda, jeśli chcesz, aby pole wyboru było już zaznaczone:
chkLunch = Fałsz
chkWegetariański = Fałsz
Na koniec fokus zostanie przeniesiony na pierwsze pole tekstowe. Spowoduje to umieszczenie kursora użytkownika w polu tekstowym, aby nie musieli klikać pola przed rozpoczęciem wpisywania:
txtName.SetFocus
Dodawanie kodu: 2 Sprawianie, by przyciski działały
W formularzu znajdują się trzy przyciski poleceń i każdy musi być zasilany przez własną procedurę. Zaczynając od prostych…
Kodowanie przycisku Anuluj:
Wcześniej używaliśmy okna Właściwości, aby ustawić Anulować właściwość przycisku Anuluj, aby Prawdziwe. Ustawienie właściwości Anuluj przycisku polecenia na True powoduje „kliknięcie” tego przycisku, gdy użytkownik naciśnie wyjście klawisz na klawiaturze. Ale samo to nie spowoduje, że nic się nie stanie z formą. Musisz utworzyć kod zdarzenia kliknięcia przycisku, który w tym przypadku zamknie formularz. Oto jak:
1. Gdy UserForm jest otwarty do edycji w Edytorze Visual Basic, kliknij dwukrotnie przycisk Anuluj. Okno kodu formularza otwiera się za pomocą cmdCancel_Click() procedura gotowa do edycji.
2. Kod do zamknięcia formularza jest bardzo prosty. Dodaj wiersz kodu do procedury, aby wyglądał tak:
Subskrypcja prywatna cmdCancel_Click() Wyładuj mnie Zakończ sub
Kodowanie przycisku Wyczyść formularz:
Dodałem przycisk, aby wyczyścić formularz na wypadek, gdyby użytkownik chciał zmienić zdanie i wszystko zresetować, a także aby było łatwiej, gdyby miał kilka rezerwacji jednocześnie. Wystarczy ponownie uruchomić procedurę Initialise. Makro może zostać poinstruowane, aby uruchomiło inne makro (lub serię makr, jeśli to konieczne), używając przycisku Połączenie słowo kluczowe:
1. Kliknij dwukrotnie przycisk Wyczyść formularz. Okno kodu formularza otwiera się za pomocą cmdClearForm_Click() procedura gotowa do edycji.
2. Dodaj wiersz kodu do procedury, aby wyglądał tak:
Private Sub cmdClearForm_Click() Wywołaj UserForm_Initialize End Sub
Kodowanie przycisku OK:
Jest to fragment kodu, który ma za zadanie przenieść wybory użytkownika i dane wejściowe do arkusza roboczego. Kiedy ustawiamy właściwość Cancel przycisku Anuluj na True, ustawiamy również przycisk OK Domyślny własność do Prawdziwe. Polega to na kliknięciu przycisku OK, gdy użytkownik naciśnie Wejść (lub Powrót) na klawiaturze (pod warunkiem, że nie używali swoich Patka klawisz do tabulatora do innego przycisku). Oto kod, który sprawi, że przycisk będzie działał:
1. Kliknij dwukrotnie przycisk OK. Okno kodu formularza otwiera się za pomocą cmdOK_Click() procedura gotowa do edycji.
2. Edytuj procedurę, aby dodać następujący kod:
Private Sub cmdOK_Click() ActiveWorkbook.Sheets("Rezerwacje kursów").Activate Range("A1").Wybierz Do If IsEmpty(ActiveCell) = FalseThen ActiveCell.Offset(1, 0).Wybierz End If Loop Until IsEmpty(ActiveCell) = True ActiveCell.Value = txtName.Value ActiveCell.Offset(0, 1) = txtPhone.Value ActiveCell.Offset(0, 2) = cboDepartment.Value ActiveCell.Offset(0, 3) = cboCourse.Value If optIntroduction = True Then ActiveCell.Offset(0, 4).Value = "Intro" ElseIf optIntermediate = True Then ActiveCell.Offset(0, 4).Value = "Intermed" Else ActiveCell.Offset(0, 4).Value = "Adv" End If If chkLunch = True Then ActiveCell.Offset(0, 5).Value = "Tak" Else ActiveCell.Offset(0, 5).Value = "Nie" End If If chkVegetarian = True Then ActiveCell.Offset(0, 6). Value = "Tak" Inaczej If chkLunch = False Then ActiveCell.Offset(0, 6).Value = "" Inaczej ActiveCell.Offset(0, 6).Value = "Nie" End If End If Range("A1"). Wybierz Koniec Sub
Jak działa kod CmdOK_Click:
Pierwsze dwa wiersze zapewniają, że prawidłowy skoroszyt jest aktywny i przenosi zaznaczenie do komórki A1:
ActiveWorkbook.Sheets("Rezerwacje kursów").Activate Range("A1").Select Kilka następnych wierszy przesuwa zaznaczenie w dół arkusza, aż znajdzie pustą komórkę: Do If IsEmpty(ActiveCell) = False Then ActiveCell.Offset(1 , 0). Wybierz opcję Zakończ, jeśli pętla dopóki nie zostanie opróżniona(ActiveCell) = Prawda
Kolejne cztery wiersze zaczynają pisać zawartość formularza w arkuszu, używając aktywnej komórki (która znajduje się w kolumnie A) jako odniesienia i przesuwając wzdłuż rzędu komórka na raz:
ActiveCell.Value = txtName.Value ActiveCell.Offset(0, 1) = txtPhone.Value ActiveCell.Offset(0, 2) = cboDepartment.Value ActiveCell.Offset(0, 3) = cboCourse.Value
Teraz dochodzimy do przycisków opcji. Zostały one umieszczone w ramce na formularzu, dzięki czemu użytkownik może wybrać tylko jeden. Instrukcja IF służy do instruowania programu Excel, co ma zrobić dla każdej opcji:
If optIntroduction = True Then ActiveCell.Offset(0, 4).Value = "Intro" ElseIf optIntermediate = True Then ActiveCell.Offset(0, 4).Value = "Intermed" Else ActiveCell.Offset(0, 4).Value = Koniec „Adv”, jeśli
Instrukcje VBA JEŻELI są znacznie łatwiejsze w zarządzaniu niż funkcja JEŻELI w programie Excel. Możesz mieć tyle opcji, ile chcesz, po prostu wstaw dodatkowe W przeciwnym razie dla każdego. Gdyby były tylko dwie opcje, nie potrzebowałbyś W przeciwnym razie, tylko Gdyby oraz W przeciwnym razie wystarczy (nie zapomnij - wszyscy potrzebują an Zakończ, jeśli).
Dla każdego pola wyboru istnieje inna instrukcja IF. W przypadku pola wyboru Wymagany lunch zaznaczenie oznacza „Tak”, osoba wymaga obiadu, a brak zaznaczenia oznacza „Nie”.
If chkLunch = True Then ActiveCell.Offset(0, 5).Value = "Tak" Else ActiveCell.Offset(0, 5).Value = "Nie" End If
Moglibyśmy użyć podobnego stwierdzenia IF dla pola wyboru Wegetarianin, ale jeśli dana osoba nie potrzebuje obiadu, nie ma znaczenia, czy jest wegetarianinem, czy nie. W każdym razie błędem byłoby założyć, że nie byli wegetarianami tylko dlatego, że nie potrzebowali obiadu. Instrukcja IF zawiera zatem drugą, zagnieżdżoną instrukcję if:
If chkVegetarian = True Then ActiveCell.Offset(0, 6).Value = "Tak" Else If chkLunch = False Then ActiveCell.Offset(0, 6).Value = "" Else ActiveCell.Offset(0, 6).Value = „Nie” Koniec jeśli Koniec jeśli
Zaznaczenie w polu oznacza „Tak”, osoba jest wegetarianinem. Jeśli w polu nie ma zaznaczenia, zagnieżdżona instrukcja IF sprawdza pole wyboru Wymagany lunch. Jeśli pole wyboru Obiad wymagany jest zaznaczone, brak zaznaczenia w polu Wegetariański oznacza, że dana osoba nie jest wegetarianinem, więc wstawia się „Nie” do komórki. Jeśli jednak pole wyboru Obiad wymagany nie ma zaznaczenia, nie wiemy, czy dana osoba jest wegetarianinem (to i tak nie ma znaczenia), więc komórka pozostaje pusta („”).
Na koniec wybór jest cofany na początek arkusza roboczego, gotowy do następnego wpisu:
Zakres ("A1"). Wybierz
Dodawanie kodu 3: Manipulowanie formularzem
Na koniec przykład, w jaki sposób można manipulować kontrolkami w formularzu, gdy jest on używany. Po ustawieniu właściwości kontrolki, Włączony właściwość pola wyboru Wegetariańska została ustawiona na Fałszywe. Gdy sterowanie nie jest włączone, użytkownik nie może wprowadzić do niego wartości, chociaż może przechowywać wartość, która już tam była, a VBA może dodawać, usuwać lub zmieniać wartość.
Nie musimy wiedzieć, czy dana osoba jest wegetarianinem (nawet jeśli jest!), jeśli nie zamawia lunchu. Tak więc pole wyboru Wegetariański pozostaje wyłączone, chyba że zaznaczono pole wyboru Wymagany lunch. Następnie użytkownik może zaznaczyć pole wyboru Wegetariański, jeśli chce. Jeśli zaznaczą to, będziemy wiedzieć, że odpowiedzieli „Tak”, a jeśli nie, wiemy, że odpowiedzieli „Nie”.
Możemy przełączyć Włączony nieruchomość z Fałszywe do Prawdziwe dzięki procedurze, która jest uruchamiana automatycznie po każdej zmianie wartości pola wyboru Wymagany lunch. Na szczęście więcej elementów sterujących ma Reszta procedura i ta, której tutaj używamy, to chkLunch_Change(). Wykorzystamy to, aby włączyć pole wyboru Wegetariański, gdy pole wyboru Wymagany lunch jest zaznaczone, i wyłączyć je, gdy pole wyboru Wymagany lunch nie jest zaznaczone.
Jest jeszcze jedna rzecz, którą musimy zrobić. Przypuśćmy, że ktoś zaznaczył pole wyboru Obiad wymagany, a także pole wyboru Wegetariański. Następnie zmienili zdanie i usunęli zaznaczenie z pola wyboru Obiad wymagany. Pole wyboru Wegetariańskie byłoby wyłączone, ale zaznaczony wcześniej haczyk pozostanie.
Dodatkowa linia kodu może sprawić, że zaznaczenie zostanie usunięte, gdy pole jest wyłączone. Oto całość:
Private Sub chkLunch_Change() If chkLunch = True Then chkVegetarian.Enabled = True Else chkVegetarian.Enabled = False chkVegetarian = False End If End Sub
Otwarcie formularza
Formularz jest teraz gotowy do użycia, więc należy go otworzyć za pomocą prostego makra. Można go dołączyć do niestandardowego przycisku paska narzędzi, przycisku polecenia narysowanego w arkuszu lub dowolnej grafiki (kliknij grafikę prawym przyciskiem myszy i wybierz Przypisz makro). W razie potrzeby utwórz nowy moduł dla skoroszytu i dodaj tę procedurę:
Sub OpenCourseBookingForm() frmCourseBooking.Show End Sub
Jeśli podobały Ci się nasze blogi, podziel się nimi ze znajomymi na Facebooku. A także możesz śledzić nas na Twitterze i Facebooku.
Chcielibyśmy usłyszeć od Ciebie, daj nam znać, jak możemy ulepszyć, uzupełnić lub unowocześnić naszą pracę i uczynić ją lepszą dla Ciebie. Napisz do nas na stronie e-mail