Programowanie w VBA

Post on 20-Mar-2016

60 views 0 download

description

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: , (), :, ;, itp. (dopuszczalny znak podkreślenia _) - PowerPoint PPT Presentation

Transcript of Programowanie w VBA

ProgramowanieProgramowaniew VBAw VBA

Podstawy. Zmienne. Stałe.Podstawy. Zmienne. Stałe.Operatory. Relacje.Operatory. Relacje.

Wyrażenia. Warunki.Wyrażenia. Warunki.

Nazwy zmiennych/stałychNazwy 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ęciPrzechowywanie danych w pamięciPodstawową jednostką informacji jest bit. Bit może przyjąć jeden z dwóch stanów:- zapalony 1- zgaszony 0Osiem uporządkowanych bitów to bajt.Bajt może przyjąć jeden z 256 (28) stanów0-255

X X X X X X X X128 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 = 01 1 1 1 1 1 1 1 = 2550 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

Typ Zakres wartości Liczba bajtów

Byte 0-255 (28 -1) 1

Integer -32768 ÷ 32767 (- 215 ÷ 215 -1) 2

Long - 2147483648 ÷ 2147483647 (- 231 ÷ 231 -1) 4

Single ±(1,5E-45 ÷ 3,4E38) 4

Double ±(5E-324 ÷ 1,7E308) 8

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 ASCIIo 1 ÷ 31 – znaki sterujące, niewyświetlaneo 32 ÷ 127 – kod podstawowyo 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 zmiennychDeklaracje zmiennychDim 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

TabliceTabliceZł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ę: 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?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

ZadaniaZadania• 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 deklaracjachBłę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);

ZmienneZmienne• Zmienna "String * <liczba>" wypełniona ilością

znaków mniejszą niż <liczba> powoduje że pozostałe znaki są spacjami!Dim a As String * 6a = "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łychDeklaracje 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?Po co definiować stałe?

• porządek dla programisty – łatwiejsze zmiany i poprawki

• skrócenie kodu• mniejsza szansa na błędy

Wyrażenia i operatoryWyraż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ść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 tekstachOperacje na tekstach• Konkatenacja – łączenie tekstów:

+ lub & • Np.:

"Jan" + "Kowalski" => "JanKowalski„ "Jan" & Chr(32) & "Kowalski" => „Jan Kowalski”

"A" & Chr(98) & "c" => „Abc”ALE1 + 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 logiczneOperacje 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 prawdyTablica prawdyx 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 0 1 1

0 1 1 0 0 1 1 0 1

1 0 0 1 0 1 1 0 0

1 1 0 0 1 1 0 1 1

RelacjeRelacje• Relacje to porównanie dwóch argumentów

– wynik w formie wartości logicznej (0/1);• arg1 vs arg2• operatory: =, <>, <, >, <=, >=;

Zgodność typówZgodność 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 warunkoweInstrukcje 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 warunkoweInstrukcje 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

wyr2

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

instrukcje1

instrukcje2instrukcje3

NIE

NIE

TAK

TAK

Intrukcje warunkoweIntrukcje 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 wyboruInstrukcje wyboruSelect Case zmienna

Case zakres1_w_stosunku_do_zmiennejBlok instrukcji_1

Case zakres2_w_stosunku_do_zmiennejBlok instrukcji_2

Case ElseBlok instrukcji_3

End Select

wyr1

instrukcje3

CASE1 CASE else

instrukcje2instrukcje1

CASE2

Select Case zmiennaCase Is < 0 (jakieś wyrażenie nr1)

Blok instrukcji_1Case 1,3,4 (jakieś wyrażenie nr 2)

Blok instrukcji_2( Case 6 To 10

Blok instrukcji_3 )Case Else

Blok instrukcji_4End Select

Korzystamy z pomocy (Help)!Korzystamy z pomocy (Help)!