Programowanie w VBA Podstawy Zmienne Stae Operatory Relacje
Programowanie w VBA Podstawy. Zmienne. Stałe. Operatory. Relacje. Wyrażenia. Warunki.
Nazwy zmiennych/stałych • ciągi liter i cyfr • nie powinny zawierać znaków narodowych • nie mogą zawierać znaków specjalnych: <spacja>, (), : , ; , itp. (dopuszczalny znak podkreślenia _) • mogą mieć dowolną długość • wielkie i małe litery NIE są rozróżniane • nazwa MUSI rozpoczynać się literą • wskazane jest nadawanie nazw znaczących • Zmienne i stałe nazywamy najlepiej za pomocą małych liter, bez polskich znaków
Przechowywanie danych w pamięci Podstawową jednostką informacji jest bit. Bit może przyjąć jeden z dwóch stanów: - zapalony 1 - zgaszony 0 Osiem uporządkowanych bitów to bajt. Bajt może przyjąć jeden z 256 (28) stanów 0 -255 X X X XX 128 64 32 16 8 4 2 1
X X X X 128 64 32 16 8 4 2 1 0 0 0 0=0 1 1 1 1 = 255 0 0 1 1 0 1 = 45
• System binarny/dwójkowy nie określa znaku liczby (z założenia wszystkie są dodatnie) i precyzji – wszystkie są całkowite. • Do określenia znaku liczby wykorzystuje się najmłodszy bit ciągu. • Obliczenia precyzyjne wykonywane są w trybie zmiennoprzecinkowym.
• Aby przechowywać dane trzeba wydzielić dla nich odpowiedni obszar pamięci zależny od ich wielkości. • Aby operować zmiennymi/stałymi trzeba określić ich typ – przeznaczyć dla nich odpowiednią ilość pamięci Typ Zakres wartości Liczba bajtów 0 -255 (28 -1) 1 -32768 ÷ 32767 (- 215 ÷ 215 -1) 2 Long - 2147483648 ÷ 2147483647 (- 231 ÷ 231 -1) 4 Single ±(1, 5 E-45 ÷ 3, 4 E 38) 4 Double ±(5 E-324 ÷ 1, 7 E 308) 8 Byte Integer
o Do zapamiętywania łańcuchów danych (tekstu itp. ) służą zmienne typu String. o Maksymalna liczba znaków w zmiennej typu String to 216 – 65536. o Znaki w pamięci przechowywane są w postaci binarnej – wartości od 1 do 255 przypisane są określonym znakom w standardzie ASCII o 1 ÷ 31 – znaki sterujące, niewyświetlane o 32 ÷ 127 – kod podstawowy o 128 ÷ 255 – kod rozszerzony
o Dla operacji logicznych zarezerwowana jest zmienna typu Boolean – przyjmuje ona wartości TRUE (1) i FALSE (0) o Daty przechowywane są w zmiennych typu Date o Kwoty przechowywane są w zmiennych typu Currency
Operuje się: – liczbami całkowitymi – liczbami zmiennoprzecinkowymi – ciągami znaków – wartościami logicznymi – datami – kwotami • Niezależnie od ustawień regionalnych separatorem dziesiętnym w VB jest. <kropka>
• Jeśli nie zadeklarowany jest typ zmiennej zostanie ona przypisana do typu Variant, który może przechowywać dowolne wartości. • Aby wymusić deklarowanie zmiennych w programie na początku programu umieszcza się polecenie: Option Explicit
Deklaracje zmiennych Dim nazwa_zmiennej As typ_zmiennej np. : Dim delta As double Długość łańcucha znaków przechowywanego w zmiennej typu String można ograniczać: Dim tekscik As String * 25 Definiuje zmienną tekscik typu String o długości do 25 znaków
Tablice Złożone operacje na dużej ilości zmiennych tego samego typu mogą spowalniać wykonywanie programu. W celu przyspieszenia oraz wygody można definiować tablice będące zbiorem wartości tego samego typu. Tablice VBA mogą mieć dowolny wymiar jednak głównie używa się: v 1 -wymiarowych – wektorów v 2 -wymiarowych – macierze Tablice definiuje się: Dim wektor (indeks_1_el to indeks_ost_el) As typ_elementu Dim macierz (i_1_el_1 to i_ost_el_1, i_1_el_2 to i_ost_el_2) As typ_elementu
Po co definiować zmienne? • oszczędność pamięci • porządek dla programisty – łatwiejsze zmiany i poprawki • przyspieszenie wykonywania programu • prawidłowe przechowywanie i operacje na danych
Zadania • Zadeklaruj możliwie oszczędnie zmienne do przechowywania następujących danych: – Liczba studentów w Twojej grupie; – Nazwisko studenta z Twojej grupy; – Masa cząstki elementarnej; – Ilość włosów na głowie (100 000 -150 000); – Adres studenta z Twojej grupy.
Błędy przy deklaracjach • Rodzaje błędów: – Błąd przepełnienia zmiennej; – Błąd niezgodności typów; – Błędy sygnalizowane i niesygnalizowane; • Przepełnienie to również zaokrąglanie w górę wartości ułamkowych dla zmiennych typu Byte; • Przepełnienie/niezgodność typów: np. Byte+Byte=Integer (ale suma Byte wyższa niż 255);
Zmienne • Zmienna "String * <liczba>" wypełniona ilością znaków mniejszą niż <liczba> powoduje że pozostałe znaki są spacjami! Dim a As String * 6 a = "abc" -> a nie jest równe "abc", tylko "abc " • Początkowo każda zmienna liczbowa domyślnie jest równa 0. • Zmienne, które istnieją po zadeklarowaniu w procedurze i istnieją aż przestanie się wykonywać jakikolwiek inny kod (nawet po zakończeniu działania tej jednej procedury) deklarujemy za pomocą słowa kluczowego "Static" (zamiast Dim)
Deklaracje i używanie stałych • Stała to pewna wartość (niekoniecznie liczbowa) przypisana określonej nazwie. • Deklaruje się ją podobnie do zmiennej z tą różnicą, że oprócz deklaracji typu nadaje się jej od razu wartość: Const nazwa As typ = wartość Const Rconst As Single = 8. 31451 Const Uczelnia As String = „Politechnika Warszawska”
Po co definiować stałe? • porządek dla programisty – łatwiejsze zmiany i poprawki • skrócenie kodu • mniejsza szansa na błędy
Wyrażenia i operatory • Wyrażenie – operacja wykonywana w celu uzyskania wartości; • Składowe wyrażenia: zmienne, stałe, funkcje, wartości (tekstowe, liczbowe, logiczne), operatory; • Operatory: +, -, *, / (dzielenie), ^ (potęgowanie), = (przypisanie), (dzielenie całkowite), Mod (reszta z dzielenia całkowitego) Sqr (funkcja obliczająca pierwiastek argumentu);
Operatory - kolejność • Kolejność wykonywania operatorów: zmiana znaku, tożsamość, potęgowanie, mnożenie (*, /, , mod), dodawanie (+/-), przypisanie (=); • Nawiasy – kolejność wykonywania od najgłębiej zagnieżdżonego – nie ma ograniczeń w zagnieżdżeniu! Warto używać nawiasów dla pewności, że operacje będą wykonywane w żądanej kolejności; • Np. : x = (((x^(x-4*(3+2)))/(x mod 4))3)
Operacje na tekstach • Konkatenacja – łączenie tekstów: + lub & • Np. : "Jan" + "Kowalski" => "Jan. Kowalski„ "Jan" & Chr(32) & "Kowalski" => „Jan Kowalski” "A" & Chr(98) & "c" => „Abc” ALE 1 + 2 = "3" 1 & 2 = "12" (gdzie liczby mogą być też w postaci zmiennych typu string/variant) • Uwaga, operator + może być używany tylko do zmiennych tego samego typu (liczbowy/tekstowy), na potrzeby konkatenacji Variant liczy się jak string, o ile dodawany jest do stringa.
Operacje logiczne • Operacje logiczne mają wynik PRAWDA (true, 1) lub FAŁSZ (false, 0); • Operacje mogą być prowadzone na zmiennych typu Boolean lub liczbach całkowitych (czyli porównywanie ciągów reprezentacji binarnych tych liczb); • Operatory logiczne: not (negacja - nie) and (koniunkcja - i) or (alternatywa - lub) xor (alternatywa symetryczna – suma mod 2) eqv (równoważność) imp (implikacja – jeśli. . . to. . . );
Tablica prawdy x y Not x Not y x And y x Or y x Xor y x Eqv y x Imp y 0 0 1 1 0 0 1 1 0 0 1 1
Relacje • Relacje to porównanie dwóch argumentów – wynik w formie wartości logicznej (0/1); • arg 1 vs arg 2 • operatory: =, <>, <, >, <=, >=;
Zgodność typów • UWAGA! Do większości porównań (relacji) można używać różnych typów liczbowych, ale do przypisań muszą być one kompatybilne!
Instrukcje warunkowe • Służą do kierowania programem zależnie od wartości wyrażenia logicznego (wyniku operacji logicznej); • Jeśli wyrażenie jest fałszywe, to program wykonuje instrukcje od komendy Else; • Blok instrukcji może być pusty; • Po zakończeniu wykonywania instrukcji z danego bloku program wykonuje instrukcje dalej już po komendzie End If; • Można zagnieżdżać warunki bez ograniczeń;
Instrukcje warunkowe • If <wyr 1> Then <instrukcje jeśli wyrażenie 1=prawda> Else. If <wyr 2> Then <instrukcje jeśli wyr 1=fałsz a wyr 2=prawda> Else <instrukcje jeśli wyr 1=fałsz i wyr 2=fałsz> End If
NIE instrukcje 3 wyr 2 wyr 1 TAK instrukcje 1 instrukcje 2 If <wyr 1> Then <instrukcje 1 jeśli wyrażenie 1=prawda> Else. If <wyr 2> Then <instrukcje 2 jeśli wyr 1=fałsz a wyr 2=prawda> Else <instrukcje 3 jeśli wyr 1=fałsz i wyr 2=fałsz> End If
Intrukcje warunkowe • Istnieje wersja skrócona bloku If w przypadku jednolinijkowego bloku dla spełnionego warunku i braku komend w przypadku niespełnionego warunku: If <warunek> then <polecenie> • W tym przypadku (jako jedynym) nie pisze się ani słowa „Else” ani „End If”, jest to zamknięta konstrukcja jednolinijkowa.
Instrukcje wyboru Select Case zmienna Case zakres 1_w_stosunku_do_zmiennej Blok instrukcji_1 Case zakres 2_w_stosunku_do_zmiennej Blok instrukcji_2 Case Else Blok instrukcji_3 End Select
CASE 1 wyr 1 CASE else CASE 2 instrukcje 1 instrukcje 2 instrukcje 3 Select Case zmienna Case Is < 0 (jakieś wyrażenie nr 1) Blok instrukcji_1 Case 1, 3, 4 (jakieś wyrażenie nr 2) Blok instrukcji_2 ( Case 6 To 10 Blok instrukcji_3 ) Case Else Blok instrukcji_4 End Select
Korzystamy z pomocy (Help)!
- Slides: 32