320 likes | 522 Views
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 _)
E N D
Programowaniew 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 X X XXX 128 64 32 16 8 4 2 1
X X X X X X X X 128 64 32 16 8 4 2 1 0 0 0 0 0 0 0 0 = 0 1 1 1 1 1 1 1 1 = 255 0 0 1 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
Do zapamiętywania łańcuchów danych (tekstu itp.) służą zmienne typu String. • Maksymalna liczba znaków w zmiennej typu String to 216 – 65536. • Znaki w pamięci przechowywane są w postaci binarnej – wartości od 1 do 255 przypisane są określonym znakom w standardzie ASCII • 1 ÷ 31 – znaki sterujące, niewyświetlane • 32 ÷ 127 – kod podstawowy • 128 ÷ 255 – kod rozszerzony
Dla operacji logicznych zarezerwowana jest zmienna typu Boolean – przyjmuje ona wartości TRUE (1) i FALSE (0) • Daty przechowywane są w zmiennych typu Date • 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 typuString 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ćtablicebędące zbiorem wartości tego samego typu. • Tablice VBA mogą mieć dowolny wymiar jednak głównie używa się: • 1-wymiarowych – wektorów • 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" => "JanKowalski„ "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...);
Relacje • Relacje to porównanie dwóch argumentów – wynik w formie wartości logicznej (0/1); • arg1 vs arg2 • 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 <wyr1> Then <instrukcje jeśli wyrażenie1=prawda> ElseIf <wyr2> Then <instrukcje jeśli wyr1=fałsz a wyr2=prawda> Else <instrukcje jeśli wyr1=fałsz i wyr2=fałsz> End If
wyr1 NIE TAK If <wyr1> Then <instrukcje1 jeśli wyrażenie1=prawda> ElseIf <wyr2> Then <instrukcje2 jeśli wyr1=fałsz a wyr2=prawda> Else <instrukcje3 jeśli wyr1=fałsz i wyr2=fałsz> End If wyr2 NIE TAK instrukcje1 instrukcje3 instrukcje2
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 zakres1_w_stosunku_do_zmiennej Blok instrukcji_1 Case zakres2_w_stosunku_do_zmiennej Blok instrukcji_2 Case Else Blok instrukcji_3 End Select
wyr1 CASE1 CASE else CASE2 instrukcje1 instrukcje2 instrukcje3 Select Case zmienna Case Is < 0 (jakieś wyrażenie nr1) 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