PROGRAMOWANIE W VBA – MICROSOFT ACCESS
LABORATORIUM 2
Ćwiczenie 1
W tym ćwiczeniu wykorzystasz podstawową strukturę sterującą, dzięki której jeśli określony warunek jest spełniony, to procedura może wykonać pewne określone zadanie.
If... Then... End If;
If... Then... Else... End If;
If... Then... ElseIf... Else... End If.
W tym przykładzie utworzysz prostą strukturę sterującą If... Then... End If do sprawdzania pojedynczego warunku i podejmowania określonych działań, jeśli testowany warunek jest spełniony. Warunek może przyjmować wartości Prawda lub Fałsz. Instrukcja taka może być odczytana w następujący sposób: "Jeśli warunek jest spełniony, to wykonaj określone działanie, po czym zakończ instrukcję warunkową".
UWAGA. Pamiętaj o użyciu instrukcji Option Explicit w sekcji deklaracji każdego z tworzonych modułów.
1. Utwórz bazę danych w katalogu ...\LAB02 i nazwij ją PrgFun.MDB.
Utwórz moduł. Wprowadź poniższy kod:
Sub Cwicz_1a ( )
Dim WarunekTestowy$
WarunekTestowy$ = "Pies"
If WarunekTestowy$ = "Pies" Then
MsgBox "Warunek jest spełniony!"
End If
End Sub
1. Uruchom procedurę, wprowadzając jej nazwę w Oknie bezpośrednim.
Zmienna WarunekTestowy$ zawiera ciąg znaków Pies, który jest porównywany z ciągiem znaków Pies, z prawej strony znaku równości. Dzięki temu warunek ma wartość Prawda i instrukcja znajdująca się po Then jest wykonywana - pojawia się okno komunikatu.
W tej części ćwiczenia dowiesz się jak określić, który przycisk został wybrany w oknie komunikatu.
Wykorzystaj funkcję MsgBox do dostarczenia wartości, którą można wykorzystać w strukturze If... Then... Else... End If.
I . Utwórz nową procedurę typu Sub o nazwie Cwicz_1 b
Sub Cwicz_lb
Dim PrzyciskiTakNie%, Odpowiedz
PrzyciskiTakNie = 4
Odpowiedz = MsgBox("Wybierz przycisk Tak lub Nie.",
PrzyciskiTakNie)
If Odpowiedz = 6 Then
MsgBox "Wybrałeś Tak!"
Else
MsgBox "Wybrałeś Nie!"
End If
End Sub
2. Uruchom procedurę.
UWAGA. Niektóre funkcje zawracają wartość 1 jako Prawda, a niektóre wartość -1. Pamiętaj, że zero to Fałsz, a nie zero to Prawda..
Tym razem użyjesz bardziej złożonej wersji podstawowej instrukcji If... Then. Jeśli pierwszy warunek nie jest spełniony możesz ponownie sprawdzić ten sam lub inny warunek i podjąć w związku z tym odpowiednie działania. Istnieje możliwość zagnieżdżenia kilku bloków EIseIf wewnątrz zewnętrznej struktury If... Then... End If. Możesz także wprowadzić końcową instrukcję Else, która jest realizowana w przypadku, gdy żaden z wcześniejszych warunków nie zostanie spełniony.
Wykorzystanie instrukcji If... Elself... Else... End If
1. Utwórz nową procedurę o nazwie Cwicz_1c.
Sub Cwicz_1c ()
Dim PrzyciskiTakNieAnuluj%, ZnakZapytania%, Odpowiedz%
PrzyciskiTakNieAnuluj = 3
ZnakZapytania = 32
Odpowiedz = MsgBox("Wybierz przycisk Tak, Nie lub Anuluj.", _
PrzyciskiTakNieAnuluj + ZnakZapytania)
If Odpowiedz = 6 Then
MsgBox " Wybrałeś Tak!"
ElseIf Odpowiedz = 7 Then
MsgBox " Wybrałeś Nie!"
ElseIf Odpowiedz = 2 Then
MsgBox " Wybrałeś Anuluj, albo nacisnąłeś przycisk" & _
" Esc, lub też zamknąłeś okno komunikatu używając" & _
" pola menu sterowania!"
End If
' Inne instrukcje mogą zostać umieszczone w tym miejscu
End Sub
2. Uruchom kilkakrotnie powyższą procedurę, wybierając różne przyciski i obserwując rezultaty. Jak można zauważyć, wybór każdego z przycisków w pierwszym oknie zwraca inną wartość. Przykładowo, przycisk Anuluj zwraca wartość 2. Zachowaj moduł jako Ćwiczenie_lc.
Wykorzystanie struktury sterującej Select Case
W ćwiczeniu tym dowiesz się jak tworzyć instrukcje z Select Case.
Utwórz nowy moduł i wprowadź poniższy kod:
Sub Cwicz_2a ( )
Dim NazwaProcedury$, Odpowiedz$
NazwaProcedury = "Przykład z Select Case"
Odpowiedz = InputBox$("Wpisz Tak lub Nie", NazwaProcedury$)
Select Case Odpowiedz$
Case "Tak"
MsgBox "Wpisałeś Tak!"
Case "Nie"
MsgBox "Wpisałeś Nie!"
Case Else
MsgBox "Spróbuj jeszcze raz!"
End Select
End Sub
1. Uruchom procedurę.
W oknie dialogowym wpisz Tak. Uruchom procedurę jeszcze raz, wpisując w oknie dialogowym Nie. Uruchom procedurę po raz trzeci i tym razem wpisz Brak decyzji . Zwróć uwagę na wyniki. Jeśli wpiszesz cokolwiek innego niż Tak lub Nie, albo pozostawisz okno dialogowe puste, to instrukcja Case Else przyjmuje wartość Prawda i wyświetlane jest okno z komunikatem Spróbuj jeszcze raz. W tym przykładzie musisz wpisywać tekst dokładnie aby otrzymać odpowiednią odpowiedź. Użycie instrukcji Case Else nie jest w procedurze konieczne, jeśli zachodzi pewność, że zawsze któryś z warunków Case będzie przyjmował wartość Prawda.
WSKAZÓWKA. Lepiej wprowadzać jest wiersz Case Else w każdej użytej strukturze Select Case.
Aby instrukcja Case przyjęła wartość Prawda wystarczy spełnić jeden z kilku warunków, co czyni tę strukturę bardziej elastyczną.
1. Wprowadź poniższy kod:
Sub Cwicz_2b ( )
Dim Odpowiedz$
Select Case Odpowiedz$
Case "Tak" "t"
MsgBox "Wpisałeś Tak, TAK, tak, T lub t!"
Case "Nie" "n" NIE, nie, N lub n!"
MsgBox "Wpisałeś Nie,
Case Else
MsgBox "Spróbuj jeszcze raz!"
End Select
End Sub
Uruchom procedurę i sprawdź jej działanie przy różnych odpowiedziach wpisywanych do okna dialogowego. Jak pokazano powyżej, możliwe jest sprawdzanie kilku warunków w jednej instrukcji Case.
Poniższy przykład wykorzystuje strukturę sterującą Select Case do badania wartości zmiennej numerycznej.
Sub Cwicz_2c()
Dim Odpowiedz
Odpowiedzi = 9 'Wybierz liczbę pomiędzy 1 a 10
Select Case Odpowiedz
Case 1, 2, 3
MsgBox "Twoja liczba jest między 1 i 3!"
Case 3 * 3
MsgBox "Czy Twoją liczbą jest 3 do kwaratu?"
Case 4 To 10
MsgBox "Wiem, że jest ona pomiędzy 4 i 10."
Case Else
End Select
End Sub
1. Uruchom procedurę Cwicz_2c.
Zauważ, że zarówno druga jak i trzecia instrukcja Case przyjmuje wartość Prawda, ale ponieważ druga instrukcja jest przed trzecią, to druga jest jedyną, która zostaje wykonana i wyświetlony zostaje jedynie komunikat 3 do kwadratu. Uruchom procedurę Cwicz_2c jeszcze kilka razy, zmieniając za każdym razem wartość zmiennej Odpowiedz i obserwując wyniki. Zamknij moduł i zachowaj go pod nazwą Ćwiczenie_2c.
W tym punkcie będziesz ćwiczył określanie rozmiarów i deklarowanie zmiennych tablicowych. Zmienne, których używałeś do tej pory mogły przechowywać tylko jedną wartość, tekstową bądź numeryczną. Zmienne tablicowe mogą przechowywać wiele wartości.
1. Utwórz nowy moduł i zadeklaruj dwukolumnową tablicę do przechowywania trzech elementów.
2. W sekcji deklaracji globalnych modułu, po instrukcjach
Option Compare Database
Option Explicit
wpisz
Dim MojaPierwszaTablica$(2,1)
UWAGA. Numerowanie elementów tablicy zaczyna się od zera. Trzyelementowa tablica zawiera elementy 0, 1 oraz 2 (dlatego pierwszym argumentem jest 2), pierwsza kolumna ma numer 0, a druga 1 (dlatego drugim argumentem jest 1 ). Aby utworzyć tablicę jednokolumnową należy opuścić drugi argument.
3. Przypisz ciągi znaków do każdego elementu tablicy z pierwszej (o numerze zero) kolumny. Utwórz nową procedurę typu Sub o nazwie Cwicz_3a i wpisz poniższy kod:
MojaPierwszaTablica$(0,0) - "Wiersz zero, kolumna zero - pies"
MojaPierwszaTablica$(1,0) - "Wiersz jeden, kolumna zero - giez"
MojaPierwszaTablica$(2,0) - "Wiersz dwa, kolumna zero - bies"
Przypisz ciągi znaków do każdego elementu tablicy z drugiej (o numerze jeden) kolumny. Po
MojaPierwszaTablica$(2,0) - "Wiersz dwa, kolumna zero - bies"
wpisz:
MojaPierwszaTablica$(0,1) - "Wiersz zero, kolumna jeden - kot”
MojaPierwszaTablica$(1,1) - "Wiersz jeden, kolumna jeden – pot”
MojaPierwszaTablica$(2,1) - "Wiersz dwa, kolumna jeden – młot”
4. Utwórz okno komunikatu, wyświetlające zawartość jednego z elementów tablicy. Po MojaPierwszaTablica$(2,1) - "Wiersz dwa, kolumna jeden – młot”
wpisz
MsgBox MojaPierwszaTablica$(2,0)
End Sub
5. Uruchom procedurę Cwicz_3a i zaobserwuj rezultat jej działania.
1. Zmień wartości w argumencie MojaPierwszaTablica.$ instrukcji wyświetlającej okno dialogowe. Zastąp:
MsgBox MojaPierwszaTablica$(2,0)
instrukcją
MsgBox MojaPierwszaTablica$(2,1)
2. Uruchom procedurę Cwicz_3a. Zmieniając numer wiersza i kolumny możesz oglądać różne elementy tablicy.
3. Ponieważ będziesz potrzebował powyższej procedury w następnym ćwiczeniu, zachowaj ją pod nazwą Cwicz_3a.
Ćwiczenie 4
Konstrukcję pętli For...Next stosuje się w sytuacji, gdy zachodzi konieczność wykonania pewnych operacji ściśle określoną ilość razy. Procedura może realizować serię poleceń przy każdym "przebiegu" przez pętlę.
W pierwszym przykładzie napiszesz prostą pętlę, która będzie wyświetlać okno komunikatu przy każdym przebiegu procedury przez tę pętlę. Okno komunikatu będzie informować, który raz pętla została wykonana. W ćwiczeniu tym będziesz określał, ile razy pętla ma zostać wykonana, poprzez ustawianie odpowiednich wartości zmiennych występujących w procedurze.
4. Wprowadź poniższy kod do tego samego modułu, którego używałeś w poprzednim ćwiczeniu:
Sub Cwicz_4a
NumerPoczatkowy = 1
NumerKoncowy = 10
WielkoscKroku = 2
TytulProcedury$ _ "Licznik puli"
For i = NumerPoczatkowy To NumerKoncowy Step WielkoscKroku
MsgBox "Licznik pętli ma wartość " + Str$(i), 0, _ TytulProcedury$
Next i
End Sub
5. Uruchom procedurę Cwicz_4a. Przy każdym przebiegu przez pętlę klikaj w oknie komunikatu na przycisku OK. i obserwuj rezultaty.
6. Ustaw wartości zmiennych w następujący sposób:
NumerPoczątkowy = 21
NumerKoncowy = 1
WielkoscKroku = -3
Ponownie uruchom procedurę i obserwuj rezultaty. Zauważ, że tym razem pętla liczy wstecz, od 21 do 3.
Dowiedziałeś się już, że jedna zmienna tablicowa może przechowywać kilka wartości w wierszach i kolumnach tabeli. Pętla bardzo dobrze nadaje się do wykonywania różnych operacji na tablicy.
1. Otwórz procedurę Cwicz_3a, którą utworzyłeś w poprzednim ćwiczeniu.
2. Utwórz pętlę, która wyświetli wszystkie trzy elementy z kolumny 1 zmiennej MojaPierwszaTablica$. Zastąp:
MsgBox MojaPierwszaTablica$(2,1)
instrukcją
For i = 0 To 2
MsgBox MojaPierwszaTablica$(i,1)
Next i
3. Uruchom procedurę Cwicz_3a i obserwuj rezultaty.
Pętla w tym przykładzie jest tak ustawiona, by wykonała się trzy razy (taka jest ilość pozycji w tablicy). Liczbę, od której rozpocznie się odliczanie pętli, możesz określić przypisując zmiennej, w tym przypadku i, odpowiednią wartość. Ponieważ pierwszy wiersz tabeli oznaczony jest indeksem 0, zmiennej i przypisano wartość 0. Każda iteracja pętli odpowiada jednemu wierszowi tabeli. Przy pierwszym przebiegu pętli i ma wartość 0, przy drugim 1, a przy ostatnim 2.
Jeśli nie jesteś w stanie dokładnie określić, ile razy ma zostać wykonane określone działanie, to nie możesz zastosować wykorzystywanej w ostatnim ćwiczeniu pętli For...Next. Musisz skorzystać z pętli While...Wend. Z konstrukcji tej korzysta się w sytuacji, gdy realizacja określonych akcji ma być kontynuowana tak długo, jak długo odpowiedni warunek lub warunki są spełnione.
W tym przykładzie na ekranie będzie wyświetlane okno dialogowe do momentu wpisania właściwego tekstu.
1. Utwórz nową procedurę o nazwie Cwicz_Su. 2. Wpisz poniższy kod:
Sub Cwicz_5a
Klucz$ = "Klucz"
While Not Haslo$ = Klucz$
Haslo$ = InputBox$("Jakie jest tajne słowo?", "Sprawdź " _ & Klucz)
Wend
End Sub
3. Uruchom procedurę.
Jeśli nie wpiszesz nic do zmiennej Klucz$, to okno dialogowe będzie się wciąż pokazywać. Wybór przycisku Anuluj lub klawisza [Esc] nie da możliwości opuszczenie pętli, ponieważ procedura ignoruje wszystkie błędy. Tylko wpisanie poprawnego hasła powoduje, że warunek przy While przyjmuje wartość Fałsz i następuje zatrzymanie pętli.
UWAGA. Tworząc pętle, upewnij się zawsze, czy przypadkiem nie stworzyłeś pętli nieskończonej. Jeśli warunek po While zawsze będzie spełniony, to pętla nigdy się nie zatrzyma, chyba że przerwiesz działanie programu.
Zmodyfikuj procedurę Cwicz_3a, umieszczając w niej dodatkową pętlę, tak by wyświetlała w oknie komunikatu wszystkie elementy tablicy.