Makropolecenia – podstawy

Transkrypt

Makropolecenia – podstawy
Makropolecenia – podstawy
1 Uruchom program Excel. Otwórz nowy dokument i przejdź do menu Deweloper.
2 Makropolecenie (w skrócie makro) to sekwencja czynności którą możemy powtarzać
automatycznie. Najprostszą metodą tworzenia makropoleceń jest ich nagrywanie.
Stworzymy makropolecenie generujące sześć liczb losowych ze zbioru {1,2,3, …, 49}.
W tym celu:
a. Uruchom przycisk Zarejestruj makro,
b. Wprowadź własną nazwę makra zawierającą cyfrę 1 np. Zbyszek1 (unikaj
nazw automatycznie proponowanych w stylu Moje1, Makro1 itp.), wybierz
Przechowuj makro w: Ten skoroszyt, potwierdź OK.,
c. W komórce B2 wprowadź formułę =Zaokr.do.całk(49*los()+1) – funkcja ta
losuje liczbę całkowitą ze zbioru {1,…,49},
d. Skopiuj całą formułę do pięciu kolejnych komórek poniżej przeciągając prawy
dolny róg,
e. Następnie:
i. zaznacz blok 6 komórek, które właśnie wypełniłeś,
ii. wybierz kopiuj,
iii. kliknij prawym klawiszem myszki i wybierz wklej specjalne (na tym
samym bloku komórek B2:B7),
iv. zaznacz Wartości,
v. potwierdź OK,
vi. naciśnij klawisz Esc.
f. Wybierz przycisk Zatrzymaj rejestrowanie.
Twoje Makropolecenie zostało zapisane.
3 Wyczyść całą zawartość arkusza. Sprawdź działanie Twojego Makra.
a. Aby uruchomić Makro należy wybrać przycisk Makra, zaznaczyć swoje Makro i
przycisk Uruchom. Jeżeli Makro nie działa poprawnie powtórz punkt 2.
4 Zapisz plik, pamiętaj aby wybrać typ pliku Skoroszyt Excel z obsługą makr.
5 Zamknij Excela. Ponownie uruchom Excela, otwórz zapisany plik i uruchom Makro.
Jeżeli Makra nie ma, prawdopodobnie nie wybrałeś w punkcie 4 typu pliku z obsługą
Makr. W takiej sytuacji musisz ponownie wykonać punkty 2-4.
Ogólne informacje
1. Zasady budowy Makropolecenia:
a. makro zaczynamy od komendy Sub NazwaMakra, a kończymy End Sub,
b. w jednej linijce znajduje się nie więcej niż jedna komenda, ale jedna komenda
może zajmować wiele linijek,
c. Linijka poprzedzona znakiem ‘ jest ignorowana przez program, znaku tego
używamy w dwóch celach:
i. aby umieścić własny komentarz w programie np.
‘ to makro stworzyłem dnia 1 października 2012,
ii. modyfikując makra, nie usuwamy starej wersji komend ale
poprzedzamy je znakiem ‘ . Jeżeli po modyfikacji makro nie działa
poprawnie, łatwo jest przywrócić poprzednią wersję usuwając znaki ‘.
2. Podstawowe komendy składają się z dwóch członów oddzielonych kropką, np.
Range(”A7”).Select – pierwszy człon - Range(”A7”) wskazuje miejsce (tu komórkę
B7), drugi człon Select określa działanie (tu zaznaczenie komórki). W tym wypadku
cała komenda odpowiada zaznaczeniu (kliknięciu) komórki B7.
Ogólnie:
a. Pierwszy człon (nazwany obiektem) często wskazuje miejsce wykonania
operacji, zaliczają się tu:
i. Range(”…. ”) –wskazuje komórkę lub zakres komórek zapisanych w
nawiasie między znakami ” ”,
ii. ActiveCell –jest to adres zaznaczonej komórki, z poziomu pisania
makra, może być zmieniona np. poleceniem Select (patrz poniżej),
iii. Selected – obszar zaznaczony – określany podobnie jak ActiveCell,
b. Drugi człon (nazwany metodą) określa rodzaj operacji do wykonania:
i. Select –zaznacza komórkę lub blok wskazany w pierwszym członie, po
wykonaniu tej komendy Selected wskazuje na ten blok, a ActiveCell na
pierwszą komórkę w bloku,
ii. FormulaR1C1 – jedna z opcji wprowadza formuł do komórek,
iii. Value – wprowadzanie wartości do komórek,
iv. "=INT(49*RAND()+1)"- jest to zawartość =Zaokr.do.całk(49*los()+1) –
polecenia INT i RAND są przetłumaczeniem funkcji z Excela do VB
v. Copy – kopiuj,
vi. Paste – wklej,
vii. Clear – wyczyść zawartość,
viii. Delete – usuń komórki.
Uwaga ! Nie wszystkie obiekty współpracują z wszystkimi metodami.
Przykłady:
1. Ustaw się poniżej nagranego makropolecenia, i wpisz Sub Przykład1
(potwierdź Enter). Następnie pomiędzy liniami Sub a End Sub dopisz dwie linie
aby uzyskać:
Sub Przykład1()
Range(”B7”).Select
ActiveCell.Value=”Jan Kowalski”
End Sub
Pierwsza linia deklaruje makro,
Druga linia powoduje przejście do komórki B7 ( odpowiada to kliknięciu na
komórce B7 w Excelu). Od tego momentu ActiveCell wskazuje na komórkę A7,
Trzecia linia wpisuje do komórki aktywnej (a więc w tym wypadku A7) - Jan
Kowalski.
Czwarta linia zamyka Makropolecenie.
2. Napisz kolejne makropolecenie:
Sub Przykład2()
Range(”B7”).Value=”Jan Kowalski”
End Sub
Podobnie jak poprzedni do komórki B7 zostanie wpisany tekst, ale bez
przechodzenie do tej komórki.
3. Celem tego punktu jest zaprezentowanie działania obiektu ActiveCell. Przejdź
do Excela, usuń całą zawartość arkusza, ustaw się w komórce A1 i uruchom
makro Przykład2, a następnie napisz abc. Tekst „abc” powinien pojawić się w
komórce A1. Następnie usuń całą zawartość arkusza, uruchom makro
Przykład1, a następnie napisz tekst abc. Tekst powinien pojawić się w
komórce B7, usuwając Jan Kowalski.
4. Makropolecenie nagrane powinno być zbliżone do poniższego:
Sub Makro1()
'
' Makro1 Makro
'
'
Range("B2").Select
ActiveCell.FormulaR1C1 = "=INT(49*RAND()+1)"
Range("B2").Select
Selection.AutoFill Destination:=Range("B2:B7"), Type:=xlFillDefault
Range("B2:B7").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
5. Komenda Range(„…”).Value pozwala zarówno wprowadzać, jak i pobierać
wartości z/do komórki:
a. Range(„B1”).Value=”xxx” wprowadza xxx do komórki B1,
b. …= Range(„B1”).Value użyje zawartości komórki B1 do wyrażenia po
lewej stronie np.
Range(„B2”).Value= Range(„B1”).Value wprowadzi do komórki B2
wartość z komórki B1, usuwając starą zawartość B2
6. Wprowadzając wartość do komórki przy użyciu komendy Range(„…”).Value
możemy używać prostych formuł jak dodawanie wartości również tekstu.
Testy łączymy znakiem & np.
a. Komendy
Range(„B1”).Value=”xxx”
Range(„B2”).Value= “y” & Range(„B1”).Value & “z”
spowoduje wpisanie do komórki B2 tekstu “yxxxz”.
b. Komenda
Range(„B2”).Value= Range(„B2”).Value & Range(„B1”).Value
spowoduje dołączenie do zawartości komórki B2 zawartość komórki
B1
7. Napisz makropolecenie o nazwie ankieta które wprowadzi do komórki C10
Twoje imię, a do komórki D10 Twoje nazwisko. Następnie w komórce C11
imię i nazwisko przedzielone spacją jako sumę komórek C10 i D10.
8. (*) Na podstawie instrukcji opisanych poniżej napisz makropolecenie które
pobiera z komórki A15 imię i nazwisko rozdzielone spacją, a następnie wpisuje
do komórki A16 samo imię a do komórki B16 samo nazwisko.
InStr(„tekst źródłowy”, „tekst szukany”) wyszukuje pozycji jednego
tekstu w drugim.
Len(”tekst”) zwraca długość tekstu.
Left(„tekst”,n) lub Right(„tekst”,n) odcinają n znaków licząc
odpowiednio od początku lub końca.
Visual Basic - Zmienne
1.
2.
Pisząc makropolecenia lub funkcje obliczone wartości przechowujemy w zmiennych.
Zmienne deklarujemy komendą:
Dim nazwa_zmiennej As typ zmiennej,
Gdzie:
nazwa zmiennej to nazwa własna, np. x lub dane
typ_zmiennej – rodzaj wartości (tekstowe, liczbowe itd.) szczegóły na drugiej stronie
Przykłady:
Dim X As Integer
–
zarezerwuje nazwę X dla liczb całkowitych.
Dim X, Y As Double –
zarezerwuje nazwy X oraz Y dla liczb rzeczywistych.
3.
Napiszemy makropolecenie o nazwie Ankieta2 które pobiera od użytkownika Imię i
nazwisko, a następnie zwraca go jako komunikat:
a.
Zadeklarujemy zmienne:
Dim imie, nazwisko, osoba As String
b.
Pobierzemy dane od użytkownika:
Imie=InputBox("Podaj swoję imię", "Dane osobowe")
c.
W analogiczny sposób zapytaj o nazwisko
d.
Połącz pobrane dane komendą
Osoba=imie & „ ” & nazwisko
e.
Zwróć w formie komunikatu wynik komendą
MsgBox(osoba)
UWAGA!
Zasadniczo każdy program składa się z trzech etapów:
I – pobranie danych (operacje wejścia),
II – Wykonanie obliczeń lub inne działanie programu,
III – Zwrócenie wyniku (operacje wyjścia).
Dane możemy pobierać/zwracać również z/do komórek:
X=Range(„ „).Value – wprowadzi do zmiennej X zawartość komórki,
Range(„ „).Value=X – wprowadzi do komórki zawartość zmiennej X.
4.
Napisz Makropolecenia o nazwie Przekrój obliczające pole przekroju rury o zadanej
średnicy. Wynik ma być wprowadzony do wybranej komórki. W tym celu:
a.
Zadeklaruj zmienne D i P typu rzeczywistego podwójnej precyzji (komenda Dim),
b.
Pobierz wartość argumentu D komendą InputBox (użyj stosownych opisów),
c.
Oblicz wartość funkcji za pomocą formuły P=3,14*D^2/4 (jeżeli chcemy użyć
dokładniejszej wartości π, użyj Excel.WorksheetFunction.Pi).
d.
Wprowadź wynik do wybranej komórki (np. B2) komendą Range(”…”).Value=P.
5.
Napisz Makropolecenie obliczające średnią z dwóch liczb.
a.
NIE deklaruj zmiennych x, y typu Double,
b.
Pobierz wartości x, y od użytkownika,
c.
Oblicz wartość średniej do komórek B6 i B7 formułami:
Range("B6").Value = (0 + x + y) / 2
Range("B7").Value = (x + y) / 2
d.
Sprawdź działanie makropolecenia na liczbach 1 i 2,
e.
Zapoznaj się z działaniem instrukcji CTyp – część teoretyczna, a następnie
popraw makropolecenie.
f.
Usuń instrukcje CDbl, ale zadeklaruj zmienne x,y typu Double.
6.
(*) Napisz makropolecenie zamieniające miejscami zawartość komórek F10 i F12.
Podstawa teoretyczna
1.
2.
3.
4.
Typy zmiennych:
a.
Boolean – typ logiczny – możliwe dwie wartości True (prawda) lub False (fałsz),
b.
Integer – typ całkowity tak zwany krótki - liczby od -32 768 do 32 767,
c.
Long – typ całkowity tzw. długi – liczby około od – 2 mld do 2 mld,
d.
Single – typ rzeczywisty pojedynczej precyzji – mniejsza dokładność,
e.
Double – typ rzeczywisty podwójnej precyzji – większa dokładność,
f.
Date – typ Daty,
g.
Currency – typ walutowy,
h.
String*n – typ łańcuchowy – łańcuch znaków czyli tekst, gdzie n po * jest liczbą
określającą długość tekstu,
i.
Range – zmienna typu tablicowego – wielowartościowa.
Instrukcja InputBox powoduje wyświetlenie okna w którym użytkownik może
wprowadzić dane
Dane=InputBox(”Tekst z okienka” ; „Tekst z nagłówka”)
Tekst wewnątrz okna ma poinformować użytkownika jakiego rodzaju dane ma podać
(np. w jakich jednostkach itd.)
Instrukcja Val(s) zamienia tekst na liczbę.
Program Visual Basic „nie trzyma typu zmiennej”. Pomimo wcześniejszej deklaracji,
może zmienić typ zmiennej z liczbowego na tekstowy. Wówczas np. 1+2=12. Z tego
powodu istnieją instrukcje konwersji typu. Ogólna składnia to:
CTyp(…)
( Convert to Typ). Np.
x=CDbl(x) – zamienia x na wartość rzeczywistą podwójnej precyzji,
y=CInt(y) – zamienia wartość na wartość liczbową całkowitą.
Visual Basic – Komunikaty
1. Do wzajemnego komunikowania się programu z użytkownikiem służy komenda:
MsgBox( "Treść komunikatu", Przyciski, "Tytuł okna”),
Jest to komunikacja dwustronna: użytkownik czyta komunikat (odbiera informację) a
następnie wybiera przycisk (przekazuje informacje). Program odpowiedź użytkownika
musi gdzieś zapamiętać. Dlatego komendę MsgBox poprzedzamy zmienną
np. x=MsgBox(……
Później możemy sterować działanie programu na zasadzie „ jeżeli x = 6 (czyli „Tak”
patrz druga strona) to zrób …”
2. Aby sterować działaniem programu w zależności od reakcji użytkownika potrzebne są
instrukcje warunkowe:
If warunek Then
Instrukcje które mają być wykonane gdy warunek jest spełniony
Else: instrukcje gdy warunek niespełniony
End If
2. W makro Ankieta 2 usuń linię MsgBox(osoba) a dopisz na końcu linie:
I = MsgBox("Pan/Pani " & imie & " " & nazwisko, 4, "Potwierdź dane")
If i=6 Then
MsgBox(„Dziękuję za podanie danych”)
Else
MsgBox(„Popraw dane”)
End If
Dobrze napisany program w przypadku poprawki powinien sam ponownie wywołać
okno wprowadzania danych. Na początku wybranej linii możemy wpisać nazwę
własną a następnie dwukropek. Dopisz przed linią pobierającą imię np.
Ta_linia: Imie=Inpu……
Jeżeli następnie w dowolnym miejscu programu użyjemy komendy
GoTo Ta_linia
Program przeskoczy do linii pobierania imienia.
Dopisz taką linię po komendzie MsgBox(„Popraw dane”).
3. Ćwiczenie: Napisz makropolecenie które pobiera wartość stężenia zanieczyszczenia/
poziom rzeki etc. A następnie w oparciu o wybrane granice zwraca odpowiedni z
komunikatów:
a. Poziom w normie,
b. Poziom podwyższony,
c. Stan alarmowy.
Zaopatrz okna komunikatów o stosowne ikony.
Podstawa teoretyczna
1. Komenda
MsgBox( "Treść komunikatu", Przyciski, "Tytuł okna”),
Pozwala zaprojektować wygląd okna, w zależności od tego jaką liczbę zawiera
parametr Przyciski. Liczba ta jest sumą trzech liczb odpowiadających za:
i. Ilość i rodzaj przycisków:
 0
tylko przycisk OK,
 1
przycisk OK i Anuluj,
 2
przyciski: Przerwij, Ponów próbę, Zignoruj,
 3
przyciski: Tak, Nie, Anuluj,
 4
przyciski: Tak i Nie,
 5
przyciski: Ponów próbę i Anuluj.
ii. Ikona obok komunikatu:

0

16

32

48

64
iii. Przycisk domyślny:
 0
pierwszy przycisk,
 256 drugi przycisk,
 512 trzeci przycisk.
Przykłady:
MsgBox("Treść komunikatu", 257, "Tytuł okna")
MsgBox("Treść komunikatu", 4 + 32 + 0, "Tytuł okna")
257=1+0+256 (przyciski OK i Anuluj, bez ikony,
domyślny przycisk Anuluj)
4 + 32 + 0 (przyciski Tak i Nie, ikona „?”,
domyślny przycisk Tak)
3. Po wprowadzeniu komendy
i= MsgBox( "Treść komunikatu", Przyciski, "Tytuł okna”)
Odpowiedź użytkownika jest zapisywana do zmiennej i zgodnie ze wzorcem:
OK
–
1
Przerwij3
Zignoruj
-5
Anuluj 2
Ponów próbę - 4
Tak - 6,
Nie -7
Zmienna i powinna być uprzednio zadeklarowana jako typ całkowity (integer).
Funkcje - Ogólne informacje
1.
Deklaracja funkcji:
Function Nazwa_funkcji (Argument_1 As Typ, Argument_2 As Typ, …)
As Typ
……
Instrukcje
…….
End Function
UWAGA!!!!!!!!!!!
Funkcje zapisujemy zawsze w modułach. Funkcja zapisana w arkuszu nie będzie w
ogóle dostępna. Jeżeli część Modules jeszcze nie istnieje w danym pliku (zeszycie)
należy wybrać Insert/Module.
2.
Przeanalizuj poniższy przykład
Function PierwiastekIloczynu (x,y As integer) As Double
PierwiastekIloczynu=sqr(x*y)
End Function
3.
Linie deklaracji Function i End Function są pisane zamiast (!) Sub i End Sub. Ponadto
linia Function spełnia wiele ról:
i. Nazwa funkcji (w przykładzie ) jest jednocześnie zmienną typu
zadeklarowanego za nawiasem. Jest to domyślna zmienna w której zostanie
zapisana obliczona wartość funkcji.
ii. Ponadto w nawiasie znajdują się zadeklarowane zmienne odpowiedniego
typu będące argumentami funkcji. W przykładzie zadeklarowaliśmy dwie
zmienne x i y typu całkowitego.
Uwaga deklaracja zmiennych odbywa się dokładnie tak jak w
makropoleceniach z tą różnicą, że nie piszemy komendy Dim.
iii. Po uruchomieniu funkcji w Excelu linia deklaracji wywoła okno podobnie do
komendy InputBox gdzie należy podać argumenty funkcji.
UWAGA!
Napisanie funkcji polega na wprowadzeniu lini obliczającej
nazwa_funkcji= obliczenia wartości funkcji
W przykładzie jest to linia
PierwiastekIloczynu=sqr(x*y)
Jeżeli funkcja za każdym razem oblicza 0 sprawdź czy nie ma różnicy (literówki) między
nazwą funkcji po Function i nazwą zmiennej w linii obliczającej.
Funkcje
1. Zapoznaj się z częścią teoretyczną. Następnie przepisz przykład z punktu 2, przejdź do
Excela i uruchom kreatora funkcji jak pokazano na rysunku.
Jeżeli funkcja została napisana w module, pojawi się kategoria funkcji użytkownika.
Znajdziesz w niej swoją funkcję.
2. Napisz funkcję obliczającą pole przekroju rury o zadanej średnicy – Makropolecenie z
poprzednich ćwiczeń, ale jako funkcja.
3. Każda funkcja utworzona w Excelu posiada krótki opis. Aby dodać opis funkcji przejdź do
Excela, wybierz przycisk Makra. Pomimo, że lista zawiera tylko makra, okno to obsługuje
również funkcje. Po wpisaniu w okno na górze nazwy funkcji, uaktywni się przycisk opcje –
tam można dodać opis.
4. Dodaj sensowny opis działania stworzonej poprzednio funkcji.
5. (*) Napisz funkcję obliczającą wypływ przez przelew trójkątny, niezatopiony zgodnie ze
wzorem Q  1.331tg 2 
0.996
H 2.47 gdzie
.
Funkcja tangens to Tan( kąt). Ważne, funkcje trygonometryczne w Excelu liczą przy użyciu
radianów. Dodaj stosowny opis funkcji mówiący o konieczności zamiany stopni na radiany
i zakresach dla zmiennych.
6. Zwróć uwagę, że w przypadku funkcji nazwa zmiennej pojawia się w okienku
wprowadzania danych. Dlatego powinna ona sugerować użytkownikowi co oznacza.
Zdefiniuj funkcję o nazwie S_wazona2 obliczającą średnią ważoną dwóch liczb.
b.
Funkcja zależy od czterech argumentów typu Double, nazwijmy je:
Liczba1,
Waga1,
Liczba2,
Waga2.
c.
Wartość funkcji jest typu Double.
d.
Wzór na średnią ważoną
Zmienne tablicowe i pętle - Ogólne informacje
1.
Wprowadzanie danych dla średniej ważonej 3,4 lub więcej liczb byłoby dość uciążliwe.
Wygodniej będzie podać wszystkie dane jako blok komórek – podobnie jak jest to
robione np. dla funkcji suma służy do tego zmienna wielowymiarowa (typu
tablicowego).
Dim Zmienna As Range.
Wartości zmiennej typu Range to bloki komórek. Tym samym zawierają wiele
wartości. Do komórki w i-tym wierszu i j-tej kolumnie bloku (odpowiednik w macierzy
aij) odwołujemy się przez
Zmienna.Cells(i,j)
Jeżeli blok komórek to np. B4:F8 to komórka zmienna. Cells(2,1) odwołuje się do
komórki C4.
Projektując funkcję/ makropolecenie nie wiemy jakiej wielkości blok zaznaczy
użytkownik. Ta wielkość jest również zapisana w zmiennej jako:
Zmienna.Rows.Count – liczba wierszy
Zmienna.Columns.Count – liczba kolumn.
2.
Pętle.
Pętle służą do wykonywania sekwencji instrukcji pewną liczbę razy która
może nie być zadany z góry.
For licznik=początek To koniec step krok
Instrukcje pętli
Next licznik
Jeżeli koniec jest zmienną, krotność wykonania pętli jest zmienna. W szczególności
pętla
For licznik=początek To zmienna.Rows.Count step krok
Instrukcje pętli
Next licznik
Zostanie wykonana tyle razy ile wierszy zaznaczy użytkownik.
Funkcje 2 - Zmienne tablicowe i pętle
1.
2.
Zdefiniuj nową funkcję obliczającą średnią ważoną trzech liczb. Funkcja taka wymaga
podania aż sześciu wartości, dlatego użyjemy zmiennej tablicowej typu Range.
a.
Zadeklaruj funkcję zależącą od jednego argumentu typu Range i o wartościach
typu double
b.
Ustal, że pierwsza kolumna to liczby a druga to wagi (należy tę informację
umieścić później w opisie funkcji).
c.
Wykorzystaj wzór analogiczny do średniej ważonej 2 liczb (do różnych wartości
odnosimy się zmieniając odpowiednio numery w Cells.
d.
Dodaj opis funkcji
e.
Przejdź do Excela i wypełnij stosowny blok komórek liczbami i wagami.
f.
Sprawdź działanie funkcji.
Napisz funkcję liczącą długość wektora w dowolnym wymiarze zgodnie ze wzorem
a.
b.
c.
3.
Zadeklaruj funkcję zależącą od jednego argumentu wektor typu Range i o
wartościach typu double
Wektor będzie zadawany jako blok komórek w jednym wierszu. Zwróć uwagę, że
liczba zmiennych (wartość wymiaru) n to liczba komórek. Jeżeli zmienna nazywa
się wektor to wartość wymiaru n ukryta jest w wektor.Rows. Count
Jak stworzyć sumę nieznanej liczby wartości (n się zmienia)? Należy stworzyć
pętlę która wykona się n razy za każdym razem dodając jeden element. W
naszym wypadku będzie to następująca pętla
For i=1 To n
Suma=suma+wektor.cells(1,i)^2
Next i
Docelową wersją funkcji średniej ważonej jest średnia ważona dowolnej ilości liczb. W
takim przypadku nie wiemy z góry jak powinien wyglądać wzór (z ilu liczb należy liczyć
średnią).
Postępuj podobnie jak w punkcie 1 nazywając jeden argument tablicowy dane
jednak wzór musimy podać z wykorzystaniem pętli:
For i = 1 To dane.Rows.Count Step 1
Suma_iloczynow = Suma_iloczynow + dane.Cells(i, 1) * dane.Cells(i, 2)
suma_wag = suma_wag + dane.Cells(i, 2)
Next i
S_wazona = Suma_iloczynow / suma_wag
Visual Basic – Obsługa błędu
1. Uruchom makropolecenie przekrój z poprzednich zajęć, ale zamiast liczby wprowadź
za średnicę dowolny tekst. Celem ćwiczenia jest skontrolowanie zachowania
programu w przypadku zauważenia błędu.
2. Przeczytaj i przeanalizuj działanie przykładowego programu z obsługą błędu z drugiej
strony. Przeanalizuj tabelkę. Następnie dodaj w podobny sposób obsługę błędu do
makropolecenia przekrój.
Dodatkowo makro powinno zareagować na ujemną wartość średnicy. Zmień
komunikat błędu na „Należy podać wartość liczbową dodatnią.” Zwróć uwagę,
matematycznie wzór jest prawidłowy dla wartości ujemnych, więc sama obsługa
błędu nie zareaguje na wartość ujemną. Należy dopisać linię (instrukcja If) która
przekieruje do linii błędu dla wartości ujemnych.
3. Sprawdź w teorii czym jest typ Variant a następnie przepisz poniższą funkcję:
Function odwrotna(x As Double) As Variant
On Error GoTo blad
odwrotna = 1 / x
Exit Function
blad: odwrotna = "nieskończoność"
End Function
Sprawdź działanie funkcji dla 0, liczby różnej od zera i tekstu. Następnie zamień typ
double na Variant i ponownie sprawdź działanie funkcji dla 0, liczby różnej od zera i
tekstu. Czy jesteś w stanie wyjaśnić różnice w działaniu funkcji po zmianach?
4. Udoskonalimy makro przekrój, tak aby po wykryciu błędu program nie tylko zgłaszał
komunikat błędu ale również pytał czy użytkownik chce wprowadzić zmiany.
Przeprojektuj komendę
blad: i= MsgBox("Nie podałeś wartości liczbowej", 48, „uwaga”)
tak aby zadawała stosowne pytanie z przyciskami Tak/ Nie. Dopisz linię (instrukcja If)
która w zależności od odpowiedzi opuści makropolecenie lub przekieruje do
ponownego wprowadzenia danych.
Podstawa teoretyczna
1. Sterowanie programem
a. Nazywamy linie - na początku wybranych linii możemy wpisać nazwy własne
z dwukropkiem np.
okienko: i= MsgBox("Nie podałeś wartości liczbowej", 48, „uwaga”)
b. Jeżeli w dowolnym miejscu programu wpiszemy instrukcję
GoTo okienko
program przeskoczy do tej linii.
c. Dalsze sterowanie programem odbywa się przy użyciu funkcji jeżeli.
2. Obsługa błędu
Jeżeli nie chcemy aby w wypadku błędnie wprowadzonych danych program reagował
w sposób niezrozumiały dla użytkownika, możemy zadeklarować konkretne działanie
w wypadku wystąpienia błędu instrukcją
On Error polecenia
Np. program
Sub Makro()
On Error GoTo blad
X = InputBox("x=", "pobieranie zmiennej")
Y=2*X+5
Range("A5").Value = Y
Exit Sub
blad: i= MsgBox("Nie podałeś wartości liczbowej", 48, „uwaga”)
End Sub
Jak to działa?
On Error GoTo blad
Linia ta określa procedurę jaką program ma wypełnić gdy zauważy błąd. W
tym wypadku jest to przejście do linii oznaczonej blad: (i dalsze działanie).
UWAGA: sama linia nie powoduje natychmiastowych efektów, jest to
deklaracja w stylu: gdybyś kiedyś zauważył błąd to wtedy przejdź do linii…..
X = InputBox("x=",
Użytkownik podaje wartość. Są dwie możliwości:
"pobieranie zmiennej")
Użytkownik wprowadził
Użytkownik nie wprowadził wartości
wartość liczbową.
Y=2*X+5
Range("A5").Value = Y
Exit Sub
blad: MsgBox("Nie
podałeś wartości
liczbowej", 48, „Uwaga”)
Oblicza i wstawia za
zmienną Y wartość
wyrażenia.
Wprowadza wartość
zmiennej Y do komórki A5.
Opuszcza makropolecenie.
Linia nie jest wykonywana.
Makropolecenie zostało
zakończone linię wcześniej.
liczbowej, w szczególności nie wprowadził
żadnej wartości.
Program próbując podstawić do formuły
zauważa błąd. Zgodnie z wcześniejszą
deklaracją przeskakuje do linii blad:
Trzy linie programu są pomijane.
Zgłasza komunikat – „Nie podałeś wartości
liczbowej”.
UWAGA!
Zauważ różnicę: Exit Sub to inna instrukcja niż End Sub.
3. Zmienna typu Variant, jest to rodzaj Jokera – uniwersalny typ który
dopasowuje się do wprowadzonych danych.
4. Spróbuj popełnić błąd w makropoleceniu przekrój po raz drugi. Problem polega na
tym, że deklaracja On Error działa jednorazowo. Należy zatem po wykonaniu
procedury błędu ponownie zadeklarować instrukcję On Error. Jest to możliwe tylko
po ponownym uruchomieniu makropolecenia. Osiągniemy to poprzez rozbicie
Makropolecenia Przekrój na dwa makropolecenia.
5. Wprowadź dwa makropolecenia:
Sub PrzekrójGlowne()
start: Call blad
If n = 6 Then GoTo start
MsgBox(“Wynik =”&P)
End Sub
Sub blad()
n=1
On Error GoTo blad
D = InputBox("…………….")
P=……
Exit Sub
blad: n = MsgBox(………..)
End Sub
Instrukcja Call blad powoduje uruchomienie wykonania makra blad. Przeanalizuj
działanie programu:
Makro Przekrój przywołuje makro blad, podejmuje działanie w zależności od
rezultatu działania makra blad. Jeżeli odpowiedz użytkownika brzmiała Tak, makro
główne ponownie uruchamia makro blad.
UWAGA!
Visual Basic traktuje zmienne lokalnie. Oznacza to, że dla programu n=6 w makro
blad, ale niekoniecznie w makro Przekrój (są to dla VB różne zmienne). Podobny
problem dotyczy zmiennej P. Dlatego chcąc „przenosić” wartości pomiędzy
makropoleceniami należy zadeklarować tzw. Zmienne globalne. W tym celu
wybieramy w prawym górnym rogu Declarations i piszemy deklaracje Dim poza
makrami:
Zadeklaruj stosowne zmienne globalnie. UWAGA! – nie wolno powtórzyć deklaracji
zmiennej w makropoleceniu.

Podobne dokumenty