Użycie zmiennych w procedurze
description
Transcript of Użycie zmiennych w procedurze
Elementy programowania 1
Użycie zmiennych w procedurzeSub ObliczWiek() 'deklaracja zmiennych Dim ImieNazwisko As String Dim DataUrodzenia As Date Dim Wiek As Integer ImieNazwisko = "Jan Kowalski" DataUrodzenia = #1/3/1967# 'obliczenie wieku Wiek = Year(Now()) - Year(DataUrodzenia) 'wydrukowanie wyniku w oknie Instrukcji bezpośrednich Debug.Print ImieNazwisko & " ma " & Wiek & " lat."End Sub
Elementy programowania 2
Użycie zmiennych i stałych w procedurzeSub obliczenia () 'deklaracja zmiennych liczba1, liczba2 i stałej liczba0 Dim liczba1 As Single Dim liczba2 As Single Const liczba0 =5‘przypisanie zmiennym wartości liczba1 = 10 liczba2 = 20‘obliczenia liczba3 = liczba0 + liczba1 + liczba2 liczba4 = liczba2 – liczba2 * liczba0 liczba5 = liczba1/liczba2^liczba0End Sub
Elementy programowania 3
Wymuszenie deklarowania zmiennychDeklarowanie wszystkich zmiennych wymusza na programiście wprowadzona na początku modułu instrukcja Option Explicit.
Jej zaletą jest automatyczne wychwycenie błędów w pisowni zmiennych w chwili kompilacji.
Elementy programowania 4
Zasięg zmiennych związany jest ściśle ze sposobem deklaracji
zmiennych, zmienna zadeklarowana w procedurze jest lokalna
dla tej procedury (w innych procedurach może istnieć zmienna o takiej samej nazwie ale przechowująca odmienne wartości),
aby zmienna była dostępna dla innych procedur należy zadeklarować ją na poziomie modułu na początku, przed jakąkolwiek funkcją lub procedurą.
Elementy programowania 5
Zasięg zmiennychKażda zmienna w programie Visual Basic ma
jeden z następujących zasięgów: Prywatny poziom procedury, Prywatny poziom modułu, Publiczny poziom modułu, Przesłanianie zmiennych.
Elementy programowania 6
Zmienne na prywatnym poziomie procedury zmienna jest widoczna dla jej procedury macierzystej -
procedury, w której została zadeklarowana, na przykład, jeżeli mamy trzy różne procedury, w
których została zadeklarowana zmienna Liczba, możemy zmodyfikować Liczba w dowolnej procedurze bez wpływu na Liczba w pozostałych procedurach,
aby utworzyć zmienną na prywatnym poziomie procedury należy ją zadeklarować w procedurze ze słowem kluczowym Dim,
wszystkie zmienne na poziomie procedury są prywatne.
Elementy programowania 7
Zmienne prywatnego poziomu modułu widzialne są dla wszystkich procedur w ich macierzystym
formularzu lub module, ale nie dla innych formularzy lub modułów,
na przykład, jeżeli zadeklarowano Liczba jako zmienną prywatnego poziomu modułu, każdy wiersz kodu w tym formularzu, który odnosi się do Liczba, będzie odnosił się do tej zmiennej,
aby utworzyć zmienną prywatnego poziomu modułu, należy użyć słowa kluczowego Private w celu zadeklarowania zmiennej prywatnej w części General Declarations formularza lub ogólnego modułu,
zmienne poziomu modułu są przydatne do obliczeń, których wyniki mają być wspólne dla różnych procedur w jednym formularzu lub module.
Elementy programowania 8
Zmienne publicznego poziomu modułu widziane są dla każdej procedury w każdym formularzu w
całym projekcie. Jeżeli zadeklarowano Komunikat jako zmienną publicznego poziomu modułu, każdy wiersz kodu w każdym formularzu i module, który ma dostęp do Komunikat, będzie miał dostęp do tej zmiennej.
aby utworzyć zmienną publicznego poziomu modułu, należy użyć instrukcji Public w celu zadeklarowania zmiennej publicznej w części General Declarations typowego modułu (ale nie formularza).
zmienne publicznego poziomu modułu są przydatne do obliczeń, których wyniki powinny być wspólne dla całości projektu ze wszystkimi formularzami i/lub modułami.
Elementy programowania 9
Przesłanianie zmiennych VB umożliwia deklarowanie tej samej nazwy dla zmiennych lub
stałych symbolicznych różnych zasięgów, np., można zadeklarować dwie zmienne Liczba w ogólnym
module: jedną zmienną publiczną, a drugą zmienną prywatną. Która z tych dwóch zmiennych będzie używana w Visual Basic zależy od tego, która część kodu została uruchomiona, kiedy została zastosowana zmienna (jeżeli procedura, w której zadeklarowaliśmy prywatną zmienną Liczba, została uruchomiona, Visual Basic będzie używał zmiennej prywatnej Liczba, jeżeli ta procedura nie została uruchomiona, Visual Basic zastosuje zmienną publiczną Liczba),
zmienne publiczne zostają przesłonięte przez zmienne prywatne o tej samej nazwie. Wartość zmiennej publicznej nie ulegnie zmianie, a każde odwołanie do zmiennej będzie się odnosiło do zmiennej prywatnej. Visual Basic zawsze używa zmiennej, która jest bliższa uruchomionemu kodowi.
Elementy programowania 10
Zasięg zmiennych - podsumowanieSłowo
kluczoweMiejsce
deklaracjiZasięg zmiennej lub stałej
Dim Procedura Dostępna tylko w procedurze
Dim ModułDostępna dla wszystkich
procedur modułu
Private ModułDostępna dla wszystkich
procedur modułu
Public ModułDostępna dla wszystkich procedur we wszystkich
modułach bieżącego skoroszytu
Elementy programowania 11
Zmienne statyczneDeklaracja: Static NazwaZmiennej As TypZmiennej zmienna tak deklarowana nie traci swojej wartości po zakończeniu
wykonywania instrukcji, po powrocie do danej procedury zmienna statyczna nadal ma
wartość, jaką miała w chwili zakończenia procedury, zmienne poziomu procedury mogą być statyczne lub nie, w
zależności od sposobu ich zadeklarowania, zmienne poziomu modułu są zawsze statyczne. Visual Basic
automatycznie zatrzymuje je w pamięci na czas działania programu. Jeżeli spróbujemy użyć słowa kluczowego Static w celu zadeklarowania zmiennej poziomu modułu, pojawi się komunikat o błędzie. Zamiast tego należy użyć Dim, Private lub Public,
Przykład
Elementy programowania 12
Zmienne obiektowe nie przechowują danych, muszą być typu obiektu z którym są skojarzone.
Użycie Dim, Private, Public, Static tylko deklaruje zmienną, która odnosi się do obiektu. Żaden obiekt nie jest skojarzony z nią dopóki nie zostanie użyta instrukcja Set do skojarzenia z określonym obiektem,
informują tylko gdzie dane się znajdują, np. za pomocą zmiennej obiektowej można przekazać, że dane znajdują się w komórkach A1:E10 w aktywnym arkuszu:
Dim zakres As ObjectSetzakres=Worksheets(„Arkusz1”).Range(Cells(1,1),Cells(10,5)).Selectzakres.ColorIndex=6zakres.Pattern=xlSolid
Kojarzy odwołanie do obiektu ze zmienną lub właściwością
Elementy programowania 13
Zmienne obiektowe można również definiować zmienne jako określony
typ obiektu, np.Dim zakres As Range
Dim arkusz As Worksheet
Set arkusz=Worksheets(„Market”) jeśli zmienna obiektowa nie jest już potrzebna
można zerwać połączenie zmiennej z obiektem:
Set zmienna=Nothing
Elementy programowania 14
Przykład zmiennej obiektowejSub UzycieZmObiektowej() Dim zakres As Object Set zakres = Worksheets("Arkusz1").Range(Cells(1, 1), Cells(10, 5)) zakres.BorderAround Weight = xlMedium With zakres.Interior .ColorIndex = 6 .Pattern = xlSolid End With Set zakres = Worksheets("Arkusz1").Range(Cells(12, 5), Cells(12, 10)) zakres.Value = 54 Debug.Print IsObject(zakres)End Sub
Elementy programowania 15
Instrukcje wyboru If... Then If...Else If...ElseIf Select Case Select Case...Case Is Select Case...Case To
Elementy programowania 16
If... Then – składnia instrukcjipostać blokowa:
If warunek Then blok instrukcjiEnd If
postać liniowa:
If warunek Then instrukcja1 [:instrukcja2 [:… [:instrukcja N]…]]
Elementy programowania 17
If... Then najprostsza instrukcja wyboru,
po napotkaniu przedstawionej komendy program sprawdza warunek znajdujący się po słowie If,
jeżeli warunek jest prawdziwy (ma wartość logiczną True) program wykonuje polecenia znajdujące się po słowie Then, a następnie przechodzi do kolejnej linii programu,
jeżeli warunek jest nieprawdziwy - fałszywy (ma wartość logiczną False) program od razu przechodzi do następnej linii. Instrukcje znajdujące się po słowie Then nie zostaną wykonane,
Elementy programowania 18
Przykład użycia instrukcji If... Thenw postaci blokowej:
If Zysk > 1200 Then Podatek = 20 Komunikat = MsgBox(„Zapłacisz większy podatek”)End If
w postaci liniowej:
If Zysk > 1200 Then Podatek = 20 : Komunikat = MsgBox(„…”)
Elementy programowania 19
Decyzje oparte na więcej niż jednym warunku
If warunek1 And warunek2 Then blok instrukcjiEnd If
If warunek1 Or warunek2 Then
blok instrukcji
End If
Elementy programowania 20
Przykład If… Then z dwoma warunkamiIf cena = 120 And sztuki >= 50 Then
rabat = (cena * sztuki) * 0.1
MsgBox(„Rabat wynosi: ” & rabat )
End If
If cena = 120 Or sztuki < 50 Then
MsgBox(„Rabat wynosi: ” & 50 - sztuki & „sztuk(i)”)
End If
Elementy programowania 21
Struktura If...Then...Elsepostać liniowa:
If warunek Then instrukcja1a [:… [:instrukcja N]…]Else instr.2a [:… [:instr.N]…]
postać blokowa:
If warunek Then
blok instrukcji
Else
blok instrukcji
End If
Elementy programowania 22
Struktura If...Then...Else po napotkaniu przedstawionej komendy program sprawdza
warunek znajdujący się po słowie If, jeżeli warunek jest prawdziwy (ma wartość logiczną True)
program wykonuje polecenia znajdujące się pomiędzy słowami Then i Else, a po ich wykonaniu wykonuje polecenie znajdujące się bezpośrednio po słowie kluczowym End If ,
jeżeli warunek jest nieprawdziwy - fałszywy (ma wartość logiczną False) program od razu przechodzi do instrukcji znajdujących się po słowie Else, a po ich wykonaniu wykonuje polecenie znajdujące się bezpośrednio po słowie kluczowym End If,
Elementy programowania 23
Przykład struktury If...Then...Else
If Zysk > 1200 ThenPodatek = 20Wiadomosc = MsgBox(„Musisz zapłacić większy podatek”)
ElsePodatek = 7Wiadomosc = MsgBox(„Możesz zapłacić mniejszy podatek”)
End If
Elementy programowania 24
Struktura If...Then...ElseIfIf warunek1 Then blok instrukcjiElseIf warunek2 Then blok instrukcji[ElseIf warunekx Then blok instrukcji][Else blok instrukcji]End If
Nie ma ograniczenia co do ilości zagłębień, ale powyżej 2 warunków zaleca się stosowanie struktury Select Case
25
Struktura If...Then...ElseIf jeżeli warunek (warunek1) jest prawdziwy (ma wartość logiczną
True) program wykonuje polecenie znajdujące się pomiędzy słowami Then i ElseIf, a po ich zakończeniu realizuje dalszy ciąg programu (po słowie EndIf),
jeżeli warunek jest nieprawdziwy (ma wartość logiczną False) program od razu przechodzi do sprawdzenia warunku2 po ElseIf,
jeżeli ten warunek (warunek2) jest prawdziwy (ma wartość logiczną True) program wykonuje polecenie znajdujące się pomiędzy słowami Then i Else, a po ich zakończeniu realizuje dalszy ciąg programu (po słowie EndIf),
jeżeli warunek po ElseIf jest nieprawdziwy - fałszywy (ma wartość logiczną False) program od razu przechodzi do: instrukcji po słowie Else jeżeli to słowo istnieje, instrukcji po słowach End If,
Elementy programowania 26
Przykład If...Then...ElseIfIf Zysk > 1200 Then
Podatek = 20Wiadomosc = MsgBox(„Musisz zapłacić olbrzymi podatek”)
ElseIf Zysk > 700 ThenPodatek = 16Wiadomosc = MsgBox(„Musisz zapłacić 16% podatku”)
ElseIf Zysk > 400 ThenPodatek = 7Wiadomosc = MsgBox(„Musisz zapłacić 7% podatku”)
ElseIf Zysk > 200 ThenPodatek = 4Wiadomosc = MsgBox(„Masz mało ale i tak płać!”)
ElsePodatek = 0Wiadomosc = MsgBox(„Z czego Ty żyjesz?”)
End If
Elementy programowania 27
Instrukcja Select CaseSelect Case wyrażenie
Case wartość1 blok instrukcji, gdy wyrażenie = wartość1Case wartość2 blok instrukcji, gdy wyrażenie = wartość2 [Case wartość3 blok instrukcji, gdy wyrażenie = wartość3] . . .[Case Else instrukcje gdy poprzednie wartości nie pasowały]
End Select
Elementy programowania 28
Instrukcja Select Case struktura Select Case umożliwia wykonanie jednego
z kilku bloków instrukcji w zależności od wartości podanego wyrażenia,
wartości przeglądane są po kolei, i pierwsza spełniająca regułę powoduje przejście do wykonania odpowiednich instrukcji i opuszczenie struktury Select Case,
z operatorami: >, <, >=, <=, <>, stosowane jest słowo Is,
do określenia zakresu używane jest słowo To,
Przykład Select CaseSelect Case Zysk
Case 1000 To 1200 Podatek = 20 Wiadomosc = MsgBox(„Musisz zapłacić olbrzymi podatek”) Case 700 Podatek = 16 Wiadomosc = MsgBox(„Musisz zapłacić 16% podatku”) Case Is < 400 Podatek = 7 Wiadomosc = MsgBox(„Musisz zapłacić 7% podatku”) Case (100+100) Podatek = 4 Wiadomosc = MsgBox(„Masz mało ale i tak płać!”) Case Else Podatek = 0 Wiadomosc=MsgBox(„Twój zysk jest inny niż 1200, 1000, 700 i 200.”)
End Select
Uwaga! Ponieważ wartości w instrukcji przeglądane są po kolei, i pierwsza spełniająca regułę powoduje przejście do wykonania odpowiednich instrukcji, gdy zostaną podane wartości < 400 zawsze będzie komunikat „Musisz zapłacić 7% podatku” – nigdy nie będzie wykonana instrukcja dla 200 i pozostałych przypadków
Elementy programowania 30
Zasady stosowania instrukcji wyboru jeżeli chcesz podać tylko jeden warunek wybierz
prostą instrukcję If...Then, jeżeli potrzebujesz dwóch lub więcej warunków
wybierz If...Then..Else lub If...Then...ElseIf..Then...Else lub Select Case; pamiętaj, że Select Case ma przejrzystą strukturę, łatwo dodać następne warunki,
jeżeli zamierzasz łączyć wiele warunków to zastosuj Select Case,
Elementy programowania 31
Instrukcja GoToInstrukcja Goto nakazuje programowi wykonanie skoku do określonej linii kodu wewnątrz procedury. Składnia komendy jest następująca: Goto etykietaArgument etykieta jest nazwą etykiety, do której ma nastąpić skok.Po napotkaniu komendy Goto program wykonuje skok do linii, w której znajduje się etykieta. W dalszej kolejności wykonywane jest polecenie znajdujące się bezpośrednio za etykietą lub gdy takiego nie ma to od następnej linii po linii z etykietą. Skok może nastąpić w przód (do linii znajdującej się za komendą Goto) lub w tył (do linii znajdującej się przed komendą Goto).
32
Etykieta- etykieta linii to nazwa linii, którą można przypisać do każdej linii,- etykieta linii jest dowolnym tekstem z zachowaniem zasad
obowiązujących przy nazywaniu zmiennych,- musi znajdować się na samym początku linii, tzn.: pierwszy znak
nazwy (etykiety) musi być pierwszym znakiem w linii,- po etykiecie musi występować znak dwukropka ( : ),- w obrębie procedury nie mogą znajdować się dwie takie same
etykiety,- po etykiecie może wystąpić polecenie języka VBA (po dwukropku),- odmianą etykiety jest numer linii,- należy pamiętać o zasadach numerowania linii:
- numer linii musi znajdować się na samym początku linii,- po numerze musi znajdować się znak dwukropka ( : ).
Elementy programowania 33
Rodzaje instrukcji pętli
For… Next powtarzanie określoną ilość razy
Do UntilDo...Loop Until
powtarzanie dopóki fałsz
pętle z warunkiemDo While
Do...Loop While powtarzanie dopóki prawda
Exit DoExit For
opuszczenie pętli
Elementy programowania 34
Pętla For… Next
For licznik = początek To koniec [Step krok]
[blok instrukcji]
[Exit For]
[blok instrukcji]
Next [licznik]
• Pozwala na wielokrotne powtarzanie bloku instrukcji
• Powtarzanie wykonywane jest ściśle określoną ilość razy (powtórzenia zwane są iteracjami pętli)
35
Opis elementów pętli For… Nextlicznik element obowiązkowy, zmienna numeryczna, która
pełni rolę licznika pętli (nie może mieć typu Boolean ani być elementem tablicy)
początek element obowiązkowy; wartość początkowa licznika
koniec element obowiązkowy; wartość końcowa licznika
krok element nieobowiązkowy; wielkość, o jaką zwiększany lub zmniejszany jest licznik przy każdym wykonaniu pętli (wartość domyślna wynosi 1),
Exit For element nieobowiązkowy; napotkanie tej instrukcji powoduje natychmiastowe opuszczenie pętli (zostanie wykonana instrukcja po słowie Next)
36
Przykłady pętli For… NextSuma = 0For Licznik = 2 To 100 Step 2 Suma = Suma + LicznikNext Licznik
For i = 1 To 10
MsgBox „Aktualna wartość wynosi” + str(i)Next i
Str(i) – zwraca wartość typu String reprezentującą wartość numeryczną
Elementy programowania 37
Pętla Do While… Loop
Do While warunek
blok instrukcji
[Exit Do]
blok instrukcji
Loop
instrukcje
Elementy programowania 38
Do While… Loop pętla ta wymaga zastosowania wyrażenia porównania
(wykorzystuje do tego celu operatory porównania), w pętli może znajdować się jedna instrukcja lub cały blok
instrukcji VB. Blok ten jest wykonywany tak długo jak długo podany warunek jest prawdziwy. Ważne jest więc, aby w ciele pętli umieścić instrukcje, które doprowadzą do tego, że podany warunek kiedyś stanie się fałszywy. W przeciwnym razie pętla się nie zakończy,
jeżeli warunek jest fałszywy już na samym początku przed wykonaniem pętli, to blok instrukcji w ciele pętli nie zostanie wykonany ani razu,
jeżeli program napotka wewnątrz pętli komendę Exit Do to następuje natychmiastowe przerwanie wykonywania pętli,
Elementy programowania 39
Przykład pętli Do While… Loop
Liczba = 0
Do While (Liczba < 100)
Liczba = InputBox("Wpisz liczbę > 100")
Loop
Pętla będzie wykonywana tak długo, jak będzie podawana liczba < 100
Elementy programowania 40
Pętla Do Until… Loop
Do Until warunek
blok instrukcji
[Exit Do]
blok instrukcji
Loop
instrukcje
Elementy programowania 41
Do Until… Loop jest to pętla podobną do Do While… Loop (jedyna różnica polega
na tym, że pętla Do Until… Loop wykonuje zawarty w niej blok rozkazów tak długo, jak długo podany warunek jest fałszywy),
pętla wymaga zastosowania wyrażenia porównania, w ciele pętli może znajdować się jedna instrukcja lub cały blok
instrukcji (blok ten jest wykonywany tak długo jak długo podany warunek jest fałszywy). Ważne jest więc, aby w ciele pętli umieścić instrukcje, które doprowadzą do tego, że podany warunek kiedyś stanie się prawdziwy. W przeciwnym razie pętla się nie zakończy,
jeżeli warunek jest prawdziwy już na samym początku przed wykonaniem pętli, to blok instrukcji w pętli nie zostanie wykonany ani razu,
jeżeli program napotka wewnątrz pętli komendę Exit Do to następuje natychmiastowe przerwanie wykonywania pętli,
Elementy programowania 42
Przykład pętli Do Until… Loop
Liczba = 0
Do Until Liczba > 100
Liczba = InputBox(„Wpisz liczbę > 100”)
Loop
Pętla będzie wykonywana tak długo, jak będzie podawana liczba <= 100
Elementy programowania 43
Pętla Do Loop… While
Do
blok instrukcji
[Exit Do]
blok instrukcji
Loop While warunek
instrukcje
Elementy programowania 44
Do Loop… While pętla wymaga zastosowania wyrażenia porównania, w pętli może znajdować się jedna instrukcja lub cały blok
instrukcji. Blok ten jest wykonywany tak długo jak długo podany warunek jest prawdziwy. Ważne jest więc, aby w ciele pętli umieścić instrukcje, które doprowadzą do tego, że podany warunek kiedyś stanie się fałszywy. W przeciwnym razie pętla się nie zakończy.
pętla ta wykona blok instrukcji zawarty w jej ciele nawet jeżeli warunek jest fałszywy już na samym początku, ponieważ jego prawdziwość jest sprawdzana na końcu pętli,
charakterystyczne dla pętli jest to, że wykona się ona na pewno przynajmniej raz,
jeżeli program napotka wewnątrz pętli komendę Exit Do to następuje natychmiastowe przerwanie wykonywania pętli,
Elementy programowania 45
Przykład Do Loop… While
Do Liczba = InputBox("Wpisz liczbę > =100")Loop While (Liczba < 100)
Pętla będzie wykonywana tak długo, jak będzie podawana liczba < 100
Elementy programowania 46
Pętla Do Loop… Until
Do
blok instrukcji
[Exit Do]
blok instrukcji
Loop Until warunek
instrukcje
Elementy programowania 47
Do Loop… Until pętla wymaga zastosowania wyrażenia porównania, w pętli może znajdować się jedna instrukcja lub cały blok
instrukcji VB. Blok ten jest wykonywany tak długo jak długo podany warunek jest fałszywy. Ważne jest więc, aby w pętli umieścić instrukcje, które doprowadzą do tego, że podany warunek kiedyś stanie się prawdziwy. W przeciwnym razie pętla się nie zakończy.
pętla wykona blok instrukcji zawarty w jej ciele nawet jeżeli warunek jest prawdziwy już na samym początku, ponieważ jego prawdziwość jest sprawdzana na końcu pętli,
charakterystyczne dla pętli jest to, że wykona się ona na pewno przynajmniej raz,
jeżeli program napotka wewnątrz pętli komendę Exit Do to następuje natychmiastowe przerwanie wykonywania pętli,
Elementy programowania 48
Przykład Do Loop… Until
Do Liczba = InputBox("Wpisz liczbę < 100")Loop Until (Liczba < 100)
Pętla będzie wykonywana tak długo, jak będzie podawana liczba >= 100