Formularze
VBA
Przykłady opisane w tej lekcji dostępne są w arkuszu Excela VBA.xls, tylko ich samodzielne przerobienie
daje gwarancję zapamiętania tej lekcji.
Przykłady dla wszystkich lekcji szkolenia Excel 2003: ExcelSzkolenie.pl
Cwiczenia Excel 2003.zip
Edytor VBA umożliwia łatwe –
graficzne tworzenie formularzy, dzięki którym możemy udostępnić użytkownikom
naszych makr dokonanie wyboru opcji i sposobu działania makra.
Aby dodać formularz, najpierw w
oknie Project Explorer edytora VBA zaznaczamy plik Excela, do którego formularz
ma być dodany, a następnie w wybieramy z menu ‘Insert’ polecenie ‘UserForm’.
Pusty formularz o nazwie ‘UserForm1’
został dodany do pliku VBA.xls, do kategorii w których do tej pory były:
Microsoft Excel Objects i Moduls, dodana została kategoria ‘Forms’ w której
jest nasz formularz.
Usuwanie formularzy VBA przebiega
tak samo jak usuwanie modułów, klikamy na formularzu prawym klawiszem myszy i
wybieramy polecenie ‘Remove [nazwa formularza]’.
Aby usunąć formularz w poniższym
oknie należy wybrać odpowiedź ‘Nie’, która oznacza że nie chcemy go przenieść
przed skasowaniem.
Wybierzmy polecenie Anuluj.
Jeżeli menu Toolbox nie wyświetli
się samo, przy utworzeniu formularza, możemy je pokazać klikając na ikonę
zaznaczoną na poniższym rysunku.
Dzięki temu menu możemy dodawać
opisy i różnego rodzaju pola do naszego formularza.
Wielkość Formularza możemy zmieniać
przeciągając kwadrat zaznaczony na poniższym rysunku czerwonym prostokątem.
Tytuł formularza zmieniamy w oknie
Properties (właściwości), Caption. Tytuł jest wyświetlany na górze formularza i
nie pokrywa się z nazwą formularza, która nie jest widoczna dla użytkowników
makra.
Nazwę formularza możemy zmienić
także w oknie Properties – (Name), w nazwie nie mogą się znajdować znaki
spacji.
Makro korzystające z naszego
formularza będzie tworzyć formatkę do przygotowywania nowych ofert.
Podczas zmiany tytułu formularza
zostało ukryte menu Toolbox, aby je ponownie zobaczyć wystarczy kliknąć lewym
klawiszem myszy na formularzu.
Dodajmy do formularza 5 checkboxów.
Parametry czcionki ich opisów możemy zmienić po wybraniu z Properties Font i
kliknięciu na mały kwadratowy przycisk z 3 kropkami (zaznaczony na poniższym
rysunku).
Standardowa czcionka jest bardzo
mała proponuję zmienić jej wielkość dla wszystkich checkboxów na 11.
Dodajemy pole tekstowe z poleceniem:
‘1. Wybierz kraj lub kraje’. Zmieniamy opisy checkboxów zgodnie z poniższym
rysunkiem.
Teraz dodamy drugi opis i 2
comboboxy, pierwszy będzie umożliwiał wybór roku, drugi miesiąca.
Dodamy teraz 2 przyciski
(CommandButton).
Napisy na nich wyświetlane
wprowadzamy w oknie Properties – Caption.
Dla wielu programistów (szczególnie
początkujących) bardzo ważne jest umieszczenie w stopce informacji kto i kiedy
utworzył makro, oraz oczywiście dodanie znaczka copyright :-)
Na tym etapie możemy też ostatecznie
dopasować wielkość formularza do jego zawartości.
W ten sposób utworzyliśmy bardzo
ładny formularz, niestety to dopiero początek, aby mógł on działać trzeba
będzie do jego aktywnych elementów dodać odpowiedni kod.
Zacznijmy od zmiany nazw, znacznie
łatwiej będzie nam pisać i zmieniać kod jeśli np. zamiast Combobox1 element ten
będzie nazywał się rok.
Proponuję ustawić następujące nazwy
(od góry): Wszystkie, Polska, Ukraina, Rosja, Rumunia, Rok, Miesiac, Utworz,
Anuluj. W nazwach nie używamy polskich znaków. Polskie znaki możemy bez
najmniejszego ryzyka problemów używać w opisach i polach tekstowych.
Czas napisać kilka makr, które
obsłużą nasz formularz.
Aby umieścić makra w formularzu,
najprościej będzie kliknąć dwukrotnie na jego obszarze nie zawierającym żadnych
elementów (wykropkowanym).
Umieścimy tu marko które będzie samo
się uruchamiać po pokazaniu formularza.
Wybieramy ‘UserForm’ i ‘Initialize’
po czym wprowadzamy kod makra, który wypełni dropdown menu: Rok i miesiąc odpowiednimi
wartościami.
Kod makra zamieszczam poniżej:
Private Sub UserForm_Initialize()
'Załadowanie listy argumentów do wyświetlenia
Rok.List = Array("2010", "2011", "2012",
"2013")
miesiac.List = Array("styczeń", "luty",
"marzec", "kwiecień", "maj",
"czerwiec", "lipiec", _
"sierpień", "wrzesień", "październik",
"listopad", "grudzień")
'Ustawienie wartości wyświetlanych domyślnie w okienku listy
przewijania
miesiac.ListIndex = 0
Rok.ListIndex = 0
End Sub
Po przejściu do widoku formularza i
kliknięciu w napis lub kwadracik ‘Wybierz Wszystkie’ VBA ponownie przeniesie
nas do makr formularza, wpisany zostanie początek i koniec makra.
Wprowadzamy pozostały kod, który w
tym przypadku ustawia wszystkie wartości krajów na True.
Warto zauważyć, że jest to
najprostsze możliwe rozwiązanie ponowne kliknięcie ‘Wybierz Wszystkie’ nie
odznaczy wszystkich krajów.
Private Sub Wszystkie_Click()
Polska.Value = True
Rosja.Value
= True
Ukraina.Value = True
Rumunia.Value =
True
End Sub
Operację tą powtarzamy dla
przycisków znajdujących się na formularzu.
Przycisk opisany jako ‘Utwórz
Ofertę’ uruchamia makro ‘Utworz’ znajdujące się w module ‘Formularze VBA’.
Polecenie ‘Unload Me’ ukrywa
Formularz.
Private Sub Utworz_Click()
Formularze_VBA.Utworz 'uruchomienie makra ‘Utworz’ znajdującego się w module
‘Formularze_VBA’, pomiędzy nazwą modułu i makra znajduje się kropka.
Unload Me
End Sub
Jeśli użytkownik kliknie przycisk
‘Anuluj’ nic nie powinno się stać, więc jedyną komendą jest ukrycie formularza.
Private Sub Anuluj_Click()
Unload Me
End Sub
Użytkownik naszego pliku z makrem
musi mieć możliwość jego prostego uruchomienia.
Proponuję wstawienie do arkuszu
przycisku z opisem ‘Uruchom Formularz VBA’.
Przycisk, którego nazwę możemy
pozostawić jako ‘CommandButton1’ powinien pokazywać nasz formularz.
W trybie projektowania (menu
‘Przybornik formantów’) klikamy przycisk prawym klawiszem i wybieramy polecenie
‘Wyświetl kod’.
Aby pokazać formularz VBA należy
wpisać jego nazwę, w naszym przypadku ‘UserForm1’ i po kropce użyć polecenia
Show.
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
Celem tej lekcji jest
zaprezentowanie formularzy VBA więc makro uruchamiane przez formularz nie
będzie robić nic skomplikowanego, po prostu wpisze co zostało wybrane do
arkusza Excela.
Sub Utworz()
Polska =
UserForm1.Polska.Value
Rosja = UserForm1.Rosja.Value
Ukraina =
UserForm1.Ukraina.Value
Rumunia = UserForm1.Rumunia.Value
Rok = UserForm1.Rok.Value
miesiac = UserForm1.miesiac.Value
'połączenie wybranych krajów w jeden tekst
If Polska Then wybrane_kraje = "Polska "
If Rosja Then wybrane_kraje = wybrane_kraje & "Rosja "
If Ukraina Then wybrane_kraje = wybrane_kraje & "Ukraina "
If Rumunia Then wybrane_kraje = wybrane_kraje & "Rumunia"
'wpisanie co wybrano
Range("b1").FormulaR1C1 = wybrane_kraje
Range("b2").FormulaR1C1
= Rok
Range("b3").FormulaR1C1 = miesiac
'kasowanie przycisku do
uruchamiania formularza
ActiveSheet.Shapes("CommandButton1").Select
Selection.Delete
End Sub
Jako ciekawostkę na końcu makra
umieściłem polecenie, które kasuje przycisk wyświetlający formularz.
Dzięki temu fragmentowi kodu w danym
pliku makro będzie mogło być użyte tylko raz przez osoby nie znające VBA.
Szkolenie Excel 2003 Szkolenie Excel 2007