480 likes | 663 Views
Użycie zmiennych w procedurze. Sub 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)
E N D
Użycie zmiennych w procedurze Sub 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
Użycie zmiennych i stałych w procedurze Sub 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^liczba0 End Sub Elementy programowania
Wymuszenie deklarowania zmiennych Deklarowanie wszystkich zmiennych wymusza na programiście wprowadzona na początku modułu instrukcja OptionExplicit. Jej zaletą jest automatyczne wychwycenie błędów w pisowni zmiennych w chwili kompilacji. Elementy programowania
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
Zasięg zmiennych Każ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
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
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
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
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
Zasięg zmiennych - podsumowanie Elementy programowania
Zmienne statyczne Deklaracja: StaticNazwaZmiennejAsTypZmiennej • 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
Kojarzy odwołanie do obiektu ze zmienną lub właściwością 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: DimzakresAs Object Set zakres=Worksheets(„Arkusz1”).Range(Cells(1,1),Cells(10,5)).Select zakres.ColorIndex=6 zakres.Pattern=xlSolid Elementy programowania
Zmienne obiektowe • można również definiować zmienne jako określony typ obiektu, np. DimzakresAs Range DimarkuszAs Worksheet Setarkusz=Worksheets(„Market”) • jeśli zmienna obiektowa nie jest już potrzebna można zerwać połączenie zmiennej z obiektem: Setzmienna=Nothing Elementy programowania
Przykład zmiennej obiektowej Sub UzycieZmObiektowej() Dim zakres AsObject 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
Instrukcje wyboru • If... Then • If...Else • If...ElseIf • Select Case • Select Case...Case Is • Select Case...Case To Elementy programowania
If... Then – składnia instrukcji postać blokowa: If warunek Then blok instrukcji End If postać liniowa: If warunek Then instrukcja1 [:instrukcja2 [:… [:instrukcja N]…]] Elementy programowania
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
Przykład użycia instrukcji If... Then w 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
Decyzje oparte na więcej niż jednym warunku If warunek1 And warunek2 Then blok instrukcji End If If warunek1 Or warunek2 Then blok instrukcji End If Elementy programowania
Przykład If… Then z dwoma warunkami If 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
Struktura If...Then...Else postać 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
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
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
Struktura If...Then...ElseIf If warunek1 Then blok instrukcji ElseIf 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 Elementy programowania
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,
Przykład If...Then...ElseIf If Zysk > 1200 ThenPodatek = 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
Instrukcja Select Case Select Case wyrażenieCase 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] . . .[CaseElse instrukcje gdy poprzednie wartości nie pasowały] End Select Elementy programowania
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: >, <, >=, <=, <>, stosowanejest słowo Is, • do określenia zakresu używane jest słowo To, Elementy programowania
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 Przykład Select Case Select Case ZyskCase 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
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
Instrukcja GoTo Instrukcja Goto nakazuje programowi wykonanie skoku do określonej linii kodu wewnątrz procedury. Składnia komendy jest następująca: Goto etykieta Argument 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). Elementy programowania
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 ( : ).
Rodzaje instrukcji pętli Elementy programowania
Pętla For… Next Forlicznik = początekTokoniec [Stepkrok] [blok instrukcji] [ExitFor] [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) Elementy programowania
Przykłady pętli For… Next Suma = 0For Licznik = 2 To 100 Step 2 Suma = Suma + LicznikNext Licznik For i = 1To10 MsgBox „Aktualna wartość wynosi” + str(i) Next i Str(i) – zwraca wartość typu String reprezentującą wartość numeryczną
Pętla Do While… Loop Do Whilewarunek blok instrukcji [Exit Do] blok instrukcji Loop instrukcje Elementy programowania
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
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
Pętla Do Until… Loop Do Untilwarunek blok instrukcji [Exit Do] blok instrukcji Loop instrukcje Elementy programowania
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
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
Pętla Do Loop… While Do blok instrukcji [Exit Do] blok instrukcji Loop Whilewarunek instrukcje Elementy programowania
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
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
Pętla Do Loop… Until Do blok instrukcji [Exit Do] blok instrukcji Loop Untilwarunek instrukcje Elementy programowania
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
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 Elementy programowania