Programowanie w VBA

13
Programowanie Programowanie w VBA w VBA Komunikacja z arkuszem. Komunikacja z arkuszem. Iteracje. Funkcje. Iteracje. Funkcje.

description

Programowanie w VBA. Komunikacja z arkuszem. Iteracje. Funkcje. Komunikacja z arkuszem. ActiveCell – oznacza aktualnie wybraną komórkę, jeśli wybrany jest zakres, to jest to komórka od której zaczęto zaznaczać; Selection – wybrany zakres komórek; - PowerPoint PPT Presentation

Transcript of Programowanie w VBA

Page 1: Programowanie w VBA

ProgramowanieProgramowaniew VBAw VBA

Komunikacja z arkuszem.Komunikacja z arkuszem.Iteracje. Funkcje.Iteracje. Funkcje.

Page 2: Programowanie w VBA

FunkcjeFunkcje

• Funkcja to podstawowy sposób wykonywania operacji na komórkach w MS Excel;

• Funkcja przenosi wartość przez swoją nazwę, a więc funkcja Abc wewnątrz swojego kodu musi zawierać instrukcję:

Abc = <zwracana do komórki wartość funkcji>

Page 3: Programowanie w VBA

Funkcja jednej i więcej Funkcja jednej i więcej zmiennychzmiennych

• Pobiera argument(y), które są potrzebne do obliczenia i zwrócenia jej wartości;

• Funkcja powinna mieć przypisany typ, wtedy trudniej o błąd;

Function T_absolutna(T_Celsjusz) As Single T_absolutna = T_Celsjusz + 273.15End Function

Page 4: Programowanie w VBA

Funkcja stałaFunkcja stała• Zwraca wartość stałą, np. funkcja:

Function Avogadro() Avogadro = 6.022E+23End Function

Po wpisaniu do komórki „=Avogadro()” otrzymamy wynik: „6.022E+23”

Page 5: Programowanie w VBA

IdiotoodpornośćIdiotoodporność• Idiotoodporność (foolproof)! – warto stosować, abyśmy

sami mogli stwierdzić, gdzie leży błąd w programie;• Na czym polega? Należy przewidzieć wszystkie

potencjalne błędy i możliwości, jakie mogą wystąpić przy przyjmowaniu danych wejściowych do programu. Każdą potencjalną opcję sprawdzać instrukcją warunkową i w przypadku wystąpienia błędu nie dopuszczać do jego wystąpienia, tylko odsyłać, na przykład, do wypisania własnego tekstu informującego o błędzie i z czego on wynika;

• Aby móc używać tej „techniki”, trzeba możliwie szeroko definiować zmienne wejściowe – np. poprzez typ Variant, a w miarę upewniania się co do prawidłowości danej zawartej w takiej zmiennej (przez komendy typu Is...) – przenosić ją do kolejnych bardziej zawężonych typów i operacji wykonywanych na niej.

Page 6: Programowanie w VBA

FunkcjeFunkcjePrzydatne komendy:• IsNumeric(<zmienna>) – zwraca prawdę, jeśli zmienna

jest liczbą (jeśli jest, można zmienną wsadzić do typu liczbowego);

• IsArray(<zmienna>) – prawda, jeśli zmienna jest tablicą (wektorem);

• IsEmpty(<komórka>) – prawda, jeśli komórka jest pusta (zmienna typu Range);

• IsDate (<zmienna>) – prawda, jeśli zmienna może być zapisana jako data;

• Len(<string>) – zwraca długość ciągu znaków;• Rnd() – zwraca liczbę losową z zakresu <0;1)

Page 7: Programowanie w VBA

PrzykładPrzykładFunction przyklad(zakres As Variant) As StringDim tablica As RangeIf IsArray(zakres) Then Set tablica = zakres przyklad ="Liczba wierszy: " & tablica.rows.countEnd IfEnd Function

Page 8: Programowanie w VBA

PrzykładPrzykładFunction przyklad(liczba As Variant) As StringIf IsNumeric(liczba) Then If liczba = liczba \ 1 Then przyklad = "calkowita" Else przyklad = "niecalkowita" End IfEnd IfEnd Function

Page 9: Programowanie w VBA

Zadania do domuZadania do domuNapisz funkcję:• Obliczającą sumę liczb od 1 do n (gdzie n jest argumentem

funkcji);• Obliczającą ciśnienie jednego mola gazu doskonałego na

podstawie temperatury i objętości (dwa argumenty);• Obliczającą n-ty element ciągu Fibonaciego;

Napisz program:• Wypełniający zakres komórek (kolejne komórki w zakresie

rzędami) kolejnymi liczbami zaczynając od 1 używając pętli typu „for each element in zakres”;

• Wypełniający zakres komórek (kolejne komórki w zakresie rzędami) kolejnymi liczbami zaczynając od 1 używając pętli typu „For i = 1 to zakres.rows.count”;

Page 10: Programowanie w VBA

• Dim tablica(1 to 10) As Long• Dim tablica(10) = Dim tablica(0 to 10)• Dim tablica() – nieokreślony wymiar

(deklaracja Dim przyjmuje tylko liczby)– ReDim tablica(0 to 10)– Array tablica("a", "b", "c")

tożsame z: ReDim tablica(0 to 2)tablica(0) = "a"tablica(1) = "b"tablica(2) = "c"

Deklaracje tablicDeklaracje tablic

Page 11: Programowanie w VBA

Wstęp do funkcji blokówWstęp do funkcji bloków• UBound(<tablica>, <wymiar>) – zwraca

ostatni indeks tablicy w podanym wymiarze (1 to wiersze (y), 2 to kolumny (x));

• LBound(<tablica>, <wymiar>) – zwraca pierwszy indeks tablicy w podanym wymiarze;

• Wymiar tablicy to (UBound-LBound+1);

Page 12: Programowanie w VBA

Funkcje bloków komórek Funkcje bloków komórek (wektorów, tablicy)(wektorów, tablicy)

• Funkcja bloku:

Function przyklad(zakres As Variant) As StringDim tablica As VariantDim x As IntegerDim y As IntegerIf IsArray(zakres) Then tablica = zakres x = UBound(tablica, 2) – LBound(tablica, 2) + 1 y = UBound(tablica, 1) – LBound(tablica, 1) + 1 przyklad = "Tablica ma " & x & " kolumn i " & y & " wierszy"Else przyklad = "Argument nie jest zakresem."Endif

Page 13: Programowanie w VBA

Funkcje bez zdefiniowanej liczby Funkcje bez zdefiniowanej liczby argumentówargumentów

• Używa się ich na przykład do operacji na rozdzielonych blokach komórek i innych zastosowań, gdy nie chcemy mieć ograniczonej liczby argumentów (Optional daje możliwość użycia mniejszej liczby argumentów, ale nie większej);

• Funkcja opiera się na tablicy ParamArray;Function <nazwa>(Paramarray <zmienna>) As <typ>

• Np.:Function Przyklad(Paramarray parametry()) As String ‘() bo musi być typu Variant Dim arg1 As Variant Dim arg2 As Variant Dim arg3 As Variant If IsArray(parametry) Then If (Ubound(parametry,1)-LBound(parametry,1)+1) > 3 Then Przyklad = "Za duzo argumentów." Else arg1 = parametry(0) arg2 = parametry(1) arg3 = parametry(2) Przyklad = "Argument 1: " & arg1 & ", Argument 2: " & arg2 & ", Argument 3: " & arg3 End If Else Przyklad = "Brak argumentów." End IfEnd Function