makra

background image

Makrodefinicje i programowanie

http://til.scholaris.pl

-1-

Makrodefinicja (makro, makropolecenie) – to ciąg instrukcji i poleceń działające podobnie
jak pojedyncze polecenie, służące do automatycznego wykonania określonego zadania.
Dzięki stosowaniu makrodefinicji można znacznie przyspieszyć np. redagowanie tekstu, jak
również wyeliminować powtarzanie tych samych, często nużących i pracochłonnych
czynności. Makro można tworzyć na dwa sposoby:



Korzystając z rejestratora makr – wówczas wszystkie wykonywane czynności będą
rejestrowane



Korzystając z edytora języka Visual Basic

Makrodefinicje możemy stosować we wszystkich aplikacji pakietu Office

Aby

można

było

korzystać

z

własnych

makr

musisz

ustawić

w

menu

Narzędzia/Makra/Zabezpieczenia... poziom zabezpieczeń na średni lub niski

1)

Otwórz teraz plik zadanko.doc znajdujący się na dysku G w folderze zadania\makra

i wykonaj wskazane w nim zadanie. Następnie zamknij go.

2)

Utwórz nowy dokument w edytorze tekstu Word. Wpisz do niego tekst: „Uczę się

tworzyć

makra”.

Aby

utworzyć

nowe

makro

skorzystaj

z

opcji

Narzędzia/makro/Zarejestruj nowe makro. Pojawi się okienko dialogowe. Nadaj
nazwę makro1 tworzonej właśnie makrodefinicji. Następnie wybierz miejsce
przechowywania makra w bieżącym dokumencie i kliknij na przycisk OK. Od tego
momentu

rozpoczynasz rejestracje makra. Jest to sygnalizowane

innym kursorem oraz

minipaskiem

narzędzi.

W

trakcie

rejestracji

wykonujesz kolejno czynności, które mają składać się na makropolecenie. Wykonaj
następujące czynności: zmień kolor liter na czerwony, ustaw czcionkę na ARIAL o
rozmiarze 14 pt., litery pogrubione, kursywa. Zatrzymaj teraz działanie makra. Zaznacz
teraz np. słowo „Uczę ” i uruchom utworzone przed chwilą makro wybierając opcję
Narzędzia/Makro/Makra...


Rejestracja makropolecenia jest tak naprawdę napisaniem programu komputerowego, którego
kod generuje Visual Basic for Aplication (VBA). Zajmijmy się teraz przykładami, dzięki
którym poznasz podstawy tego języka. Na dysku G w katalogu zadania\makra znajdują się
gotowe projekty, które będziesz musiał umiejętnie uzupełnić o kilka instrukcji. Każde zadanie
ma nauczyć Ciebie czegoś innego: instrukcji podstawiania, warunkowych, pętli. Większość
projektów jest autorstwa p. Sławomira Żaboklickiego.

3)

Otwórz teraz plik if-then-else.doc. Z menu Narzędzia\Makra

wybierz opcję Edytor Visual Basic lub naciśnij kombinację
klawisz <alt> + <F11>. W oknie projektu (Project) otwórz
moduł IfThenElse. Celem tego ćwiczenia jest wyjaśnienie
zasady działania instrukcji If Then Else. Użytkownik wpisuje
dwie liczby w pola tekstowe A i B a następnie klika na przycisku
Oblicz. Jeśli spełniony jest warunek A>B, to tekst „Wynik.Text
= "A > B"
” zmienia swój kolor na czerwony. W przeciwnym
przypadku (gdy warunek nie jest spełniony, to tekst
Wynik.Text = "A <=B"” zmienia swój kolor na czerwony.
Pierwszy tekst przechowywany jest w formancie Wieksza zaś drugi w formancie
NieWieksza. Instrukcja:

Wieksza.ForeColor = &HFF&

Okno projektu

background image

Makrodefinicje i programowanie

http://til.scholaris.pl

-2-


powoduje zmianę koloru tekstu dla formantu Wieksza na kolor czerwony (w systemie RGB).
A oto gotowy kod procedury:

If A > B Then

Wieksza.ForeColor= &HFF&

' Zmiana koloru na czerwony

NieWieksza.ForeColor= &H0& ' Zmiana koloru na czarny

Else

Wieksza.ForeColor= &H0&

NieWieksza.ForeColor= &HFF&

End If

Przywołujemy teraz okno procedur klikając dwa razy na przycisku oblicz. Procedura jest
częściowo utworzona, wskazano nawet miejsce gdzie należy ją uzupełnić. Wpisujemy więc
powyższy kod starając się nie pomylić. Aby sprawdzić działanie naszej aplikacji możemy np.
z menu Run wybrać opcję Run Macro lub też nacisnąć klawisz F5.
Zapisz teraz dokument na własnym dysku sieciowym.
Zastanów się dlaczego trzeba zmieniać niektóre napisy na czarne, pomimo tego , że są one już
czarne?

4).

Czasami pewną grupę instrukcji należy wykonać wielokrotnie. Wykorzystując

instrukcję For Next operację sumowania kolejnych liczb naturalnych począwszy od 1 do
1000 można zapisać w postaci:

For i = 1 To 1000
Suma = Suma + i
Next i


Ogólna budowa instrukcji jest następująca:

For licznik = wartość początkowa To wartość końcowa
Instrukcje
Next licznik


Pod zmienną licznik podstawia jest wartość początkowa, a następnie sprawdzane jest, czy
nowa wartość zmiennej licznik nie jest większa od wartości końcowej. Jeżeli nie
jest większa, to są wykonywane Instrukcje. Po wykonaniu wszystkich instrukcji
następuje zwiększenie wartości zmiennej licznik o 1 i program wraca do wiersza
zaczynającego się od For. Tu ponownie sprawdza, czy licznik jest większy od
wartości końcowej

itd. Pętla jest wykonywana do momentu, aż wartość zmiennej

licznik

stanie się większa od wartości końcowej. Wtedy program przechodzi do

wykonania instrukcji zapisanej po wierszu zawierającym Next licznik.

Otwórz teraz plik for-next.doc i przejdź do edytora Visual Basic. Twoim celem będzie
obliczenie sumy kolejnych liczb naturalnych od 1 do N. Aby to zrobić musisz:

1)

Utworzyć (zadeklarować) 3 zmienne. Jedną do przechowywania bieżącej sumy, drugą

do przechowywania aktualnej wartości licznika, trzecią do przechowywania wartości
końcowej
Deklaracja zmiennych wygląda następująco:


Dim nazwa_zmiennej as typ_zmiennej

Nazwa zmiennej powinna zaczynać się od literki, nie zawierać odstępów i polskich
znaków diakrytycznych.

background image

Makrodefinicje i programowanie

http://til.scholaris.pl

-3-

Typ zmiennej określa rodzaj przechowywanej informacji (Integer – liczba całkowita,
Single – rzeczywista, String – ciąg znaków itd.)
Nasza deklaracja będzie miała postać:

Dim i as Integer
Dim Suma as Integer
Dim N as Integer

2)

Odczytać wartość liczbową z pola liczba i zapisać ją do zmiennej N

N=liczba.Value

3)

Utworzyć pętlę. Nasz pętla będzie miała postać:


Suma=0 'ustalamy warto
ść początkowa sumy
For i = 1 To N
Suma = Suma + i
Next i

4)

Zapisać wynik w polu Wynik

Instrukcja podstawienia


Wynik.Value=Suma

Powoduje przepisanie wartości zmiennej suma do pola tekstowego wynik

5).

Instrukcję For można wykorzystać jedynie wtedy, gdy wiadomo ile razy ma być

wykonywana pętla. Istnieje jednak cały szereg problemów, w których nie posiadamy
informacji o niezbędnej liczbie powtórzeń (np. „szukaj informacji dopoki jej nie znajdziesz”).
W takich sytuacjach wykorzystuje się pętle Do ... Loop Until lub While ... Do.
Pętla Do ... Loop Until ma budowę:

Do
Instrukcje
Loop Until

wyrażenie logiczne

Instrukcje wewnątrz pętli będą wykonywane dopóki wyrażenie logiczne nie przyjmie
wartości True. Oczywiście przynajmniej jedna z instrukcji wewnątrz pętli musi w pewnym
momencie zmienić wartość wyrażenia logicznego. W przeciwnym przypadku pętla będzie
wykonywana bez końca.
Instrukcja Do ... Loop Until wykorzystywana jest wtedy, gdy wpierw należy wykonać pewne
instrukcje, a dopiero potem można sprawdzać spełnienie wyrażenia logicznego.
Otwórz teraz plik do-loop.doc. Przejdź do edytora Visual Basic i wybierz formę DoLoop.

Aplikacja ta służy do demonstracji prostej
animacji. Po kliknięciu na przycisk „Start” ikony
psa i narciarza zaczynają się przesuwać w prawo,
z tym, że pies biegnie dwa razy szybciej. Po
osiągnięciu przez psa lewej krawędzi narciarza
ruch ustaje.
Ruch obrazków psa i narciarza uzyskiwany jest
poprzez zastosowanie metody Move. Na
przykład instrukcja:

background image

Makrodefinicje i programowanie

http://til.scholaris.pl

-4-

Narciarz.Left=Narciarz.Left+1

Powoduje przesunięcie obrazu narciarza o1. Właściwości Narciarz.Left i Pies.Left określają
współrzędne lewej krawędzi obrazków, a właściwość Narciarz.Width i Pies.Width ich
szerokość.


Algorytm jest następujący: należy powtarzać przesuwanie obrazka psa o dwie jednostki
i narciarza o jedną dopóki współrzędna prawej krawędzi psa będzie większa od współrzędnej
lewej części narciarza
Niestety ruch odbywa się zbyt szybko. Aby zatrzymać wykonywanie pętli na jakiś czas
wykorzystamy funkcję sleep, należącą do biblioteki API. Wstrzymuje ona działanie programu
na określoną liczbę milisekund (1sekunda to 1000 milisekund). Jej użycie jest następujące:

sleep 500 ‘ zatrzymuje działanie programu na 0,5 sekundy


Ponieważ procedura sleep jest zewnętrzna w stosunku do aplikacji, to musi być w odpowiedni
sposób zadeklarowana:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Po każdym przejściu pętli musimy odświeżyć okienko, w którym odbywa się ruch:

Ramka.Repaint


6.

Instrukcja While ... Wend jest w pewnym sensie odwrotna do instrukcji Do ... Loop

Until. Wpierw sprawdzana jest wartość wyrażenia logicznego i jeśli jest ono prawdziwe, to
wykonywane są instrukcje wewnątrz pętli. Umożliwia to realizację algorytmów typu: „jeżeli
jest zbyt zimno, to ogrzewaj pomieszczenie”. Budowa instrukcji While ... Wend jest
następująca:

While wyrażenie logiczne
Instrukcje
Wend


Otwórz teraz dokument while-wend.doc. Zasymulujesz w nim lądowanie promu
kosmicznego.
Ponieważ początek układu współrzędnych znajduje się w lewym górnym rogu (oś Y jest
skierowana w dół), więc lądowanie statku jest symulowane przez przesuwanie lewego
górnego rogu formantu Rakieta w dół:

Rakieta.Top=Rakieta.Top+1

Pętla ma działać dotąd, dopóki wysokość formantu ziemia będzie większa od sumy wysokości
rakiety i położenia jej lewego górnego rogu:


Ziemia.Height > (Rakieta.Top + Rakieta.Height)


Niestety, tak jak w poprzednim zadaniu lądowanie rakiety odbywa się zbyt szybko. Aby je
zwolnić wykorzystaj procedurę sleep.

Narciarz.Width

Narciarz.Left

Pies.Width

Pies.Left

background image

Makrodefinicje i programowanie

http://til.scholaris.pl

-5-

Aplikacja powinna być zabezpieczona przed błędami
u
żytkownika. Instrukcja On Error GoTo pozwala na
przechwycenie i obsług
ę

ędów

7.

Jeżeli VBA nie może wykonać jakiejś instrukcji, to przekazuje odpowiedni sygnał

o błędzie do edytora VBA i kończy działanie programu. Przyczyny błędu mogą być różne,
najczęściej jest to wina programisty, który źle przewidział działanie procedury. Mogą to też
być błędy użytkownika, który np. wpisze literę zamiast cyfry w pole tekstowe. W każdym
przypadku program nie powinien przerywać działania, a jedynie zasygnalizować pojawienie
się błędu i dać użytkownikowi możliwość jego poprawienia lub choćby zapisania wyników.
Właśnie do tego celu służy instrukcja On Error GoTo. Jej zadaniem jest przechwycić sygnał
o błędzie i nakazać przeskok do miejsca w programie, które zawiera instrukcje obsługi
błędów. Instrukcja On Error GoTo jest ściśle związana z sama procedurą i ma budowę:



Sub nazwa(parametry)
On Error GoTo Etykieta
Instrukcje wykonywane, gdy nie ma bł
ędu
Exit Sub
Etykieta:
Instrukcje wykonywane, gdy wyst
ąpił błąd
End Sub




Jeżeli w trakcie działania procedury
nie jest sygnalizowany błąd, to
wykonywane

instrukcje

po

wierszu On Error ..., a instrukcja
Exit

Sub

nakazuje

normalnie

zakończyć

działanie

procedury.

Jeżeli

przy

wykonywaniu

którejkolwiek

instrukcji

wystąpi

błąd, to VBA przerwie dalsze
wykonywanie instrukcji i zacznie
wykonywać instrukcje zapisane po
wierszu Etykieta:

Otwórz teraz dokument kantorek.doc.
Aplikacja jak na rysunku ma służyć do przeliczania kwoty z dolarów na złote
z wykorzystaniem obsługi błędów. Po kliknięciu na przycisk „Oblicz” w polu PLN ma
pojawić się obliczona wartość w złotych, aby to zrobić do właściwości Value kontrolki PLN
należy przypisać iloczyn wartości kursu i ilości dolarów:

PLN.Value = USD.Value * Kurs.Value


Aby poinformować użytkownika o błędzie wykorzystamy funkcję MsgBox, która wyświetla
komunikat w oknie. Funkcja ta ma postać:

MsgBox(Tekst_komunikatu, przyciski,Tytuł)

My wykorzystamy najprostszą jej postać:

Dim i as Integer
I = MsgBox(„Podałe
ś nieprawidłową liczbę”)

I umieścimy ją po wierszu Etykieta:

background image

Makrodefinicje i programowanie

http://til.scholaris.pl

-6-

8.

Aplikacja ma służyć do zamiany stopni w skali Celsjusza na stopnie w skali

Fahrenheita i odwrotnie. Lewy pasek przewijania i lewe pole etykiety dotyczą temperatur w
skali Celsjusza, prawy pasek przewijania i pole dotyczą temperatur w skali Fahrenheita.
Przesunięcie któregokolwiek paska przewijania powoduje odpowiednie przesunięcie suwaka
na drugim pasku i zmianę wartości wyświetlanych w etykietach.
Algorytm

Poniższa procedura obsługuje pasek przewijania SuwCels. Położenie suwaka określa liczbę
stopni w skali Celsjusza (wyświetlaną w etykiecie StCels) oraz jest przeliczane na stopnie w
skali Fahrenheita. Obliczona wartość w skali Fahrenheita (zmienna Fahren) zmienia położenie
suwaka w pasku SuwFahr i jest wyświetlana w etykiecie StFahr.

Private Sub SuwCels_Change()
Dim Fahren As Single
StCels.Caption = Format$(SuwCels.Value, "0.00")
Fahren = (SuwCels.Value * 9 / 5) + 32
StFahr.Caption = Format$(Fahren, "0.00")
SuwFahr.Value = Fahren
End Sub

Przebieg ćwiczenia

1.

Wczytaj projekt stopnie.doc

2.

Uzupełnij kod procedury Sub SuwFahr-

Change ( )

.

Private Sub SuwFahr_Change()
Dim Cels As Single
' Tu nale
ży uzupełnić procedurę

End Sub

Procedura powinna:

w etykiecie StFahr wyświetlić wartość w
skali Fahrenheita odpowiadającą
położeniu suwaka w pasku SuwFahr;

obliczyć wartość w skali Celsjusza z
położenia suwaka w pasku SuwFahr;

wyświetlić wartość w skali Celsjusza w okienku StCels;

zmienić położenie suwaka w pasku SuwCel s tak, żeby odzwierciedlił on zmianę w
skali Fahrenheita.

Sprawdź działanie aplikacji. Jeżeli nie działa ona poprawnie, spróbuj zlokalizować błąd
zawieszając wykonanie ostatnich instrukcji przez
umieszczenie przed nimi znaku komentarza.

9.

W systemie RGB dowolny kolor jest

określany jako suma trzech kolorów podstawowych:
czerwonego, zielonego i niebieskiego. Intensywność
każdej składowej określa się w przedziale [0, 255]. W
projektowanej aplikacji odbywa się to za pomocą

trzech pasków przewijania. Kolor wynikowy jest
prezentowany w ramce poniżej, a aktualna wartość
intensywności

jest

wyświetlana

w

okienkach

oznaczonych "R", "G", "B".

background image

Makrodefinicje i programowanie

http://til.scholaris.pl

-7-

Algorytm

Paski przewijania noszą w programie nazwy Czerw, Ziel i Nieb. Odczytanie wprowadzonej
wartości np. koloru czerwonego, następuje przy użyciu instrukcji

C = Val(Czerw.Value)

Ramka do wyświetlenia koloru wynikowego nazywa się Kolor. Instrukcja:

Kolor.BackColor = RGB(Czerwony, Zielony, Niebieski)

ustawia kolor tła ramki w zależności od wartości składowych. Funkcja RGB oblicza numer
koloru wypadkowego. Pola etykiet do wyświetlania wartości kolorów składowych noszą
nazwy WR, WG i WB. Dla każdego z pasków przewijania należy:

odczytać wartości ich położeń (będą się one mieścić w zakresie [0,255]);

zmienić kolor tła ramki Kolor zgodnie z odczytanymi wartościami;

wyświetlić w odpowiednim polu etykiet wartość koloru składowego, np.

WR.Caption = Str$(C).

Przebieg ćwiczenia

1.

Wczytaj projekt KoloryRGB.doc

2.

Dla każdego paska przewijania uzupełnij związaną z nim procedurę tak, żeby

realizowała ona powyższy algorytm.

Private Sub Czerw_Change()
Dim C, Z, N As Integer
C = Val(Czerw.Value)
Z = Val(Ziel.Value)
N = Val(Nieb.Value)
'Tu nale
ży uzupełnić procedurę

End Sub


3.

Sprawdź działanie aplikacji.


10.

Działanie aplikacji ma być następujące:

w pole "Rmin" należy wpisać promień najmniejszego okręgu;
w pole "Rmax" należy wpisać promień największego okręgu;
w pole "dR" należy wpisać liczbę określającą wielkość przyrostu

promienia okręgu;

na koniec należy kliknąć na przycisku Rysuj, co spowoduje

narysowanie okręgów.

Algorytm

Dane z pól tekstowych są czytane do lokalnych zmiennych (z ograniczeniem promienia do
400 px):

Rmin = Val(R0.Text)
Rmax = Val(RM.Text)
If Rmax>400 Then Rmax=400
dR = Val(Przyrost.Text)

W aplikacji wykorzystuje się procedurę :

ActiveDocument.Shapes.AddShape msoShapeOval, R, R, 300, 300

rysującą okrąg w punkcie o współrzędnej X=300, Y=300 i mającego promień R.

Należy rysować okręgi, zmieniając ich promień od Rmax do Rmin z krokiem dR.

background image

Makrodefinicje i programowanie

http://til.scholaris.pl

-8-

Przebieg ćwiczenia

1.

Wczytaj projekt okregi.doc.

2.

Uzupełnij procedurę związaną z przyciskiem Rysuj tak, żeby realizowała powyższy

algorytm.

Private Sub Rysuj_Click()
Dim Rmin, Rmax, dR As Integer
Rmin = Val(R0.Text)
Rmax = Val(RM.Text)
If Rmax>400 Then Rmax=400
dR = Val(Przyrost.Text)
'Tu nale
ży uzupełnić procedurę

End Sub

Uwaga: Aby uzyskać efekt taki jak na rysunku powyżej należy rysować okręgi od tego o
największym promieniu do tego o najmniejszym
3.

Sprawdź działanie aplikacji.


11.

Projekt jak na rysunku obok służy do

demonstracji animacji. Po kliknięciu na
przycisk „Ruszaj” ikona traktora zaczyna
się przesuwać w prawo. Po osiągnięciu
przez ciągnik lewej krawędzi ikony drzewa
ruch ustaje (w wyniku działania traktorzysty
a nie zderzenia z drzewem;-))
Algorytm

Ruch obrazka traktora uzyskiwany jest przez przesunięcie ikony traktora o 1:

Traktor.Left=Traktor.Left+1

Właściwości Traktor.Left i Drzewo.Left określają współrzędne lewej krawędzi
obrazków, a właściwości Traktor.Width i Drzewo.Width ich szerokości.

Algorytm jest następujący: należy powtarzać przesunięcie obrazka traktora o jedną jednostkę
dopóki współrzędna prawej krawędzi traktora będzie mniejsza od lewej współrzędnej
drzewa.
Aby spowolnić nieco ruch możesz w pętli wykorzystać instrukcje:

Sleep(x) powodującą zamrożenie wykonania instrukcji na x milisekund oraz instrukcję
Droga.Repaint, która odrysuje ponownie komponent Droga, po którym porusza się
ciągnik.

Przebieg ćwiczenia

1.

Wczytaj projekt rolnik.doc

2.

Uzupełnij procedurę związaną z przyciskiem Ruszaj tak, żeby realizowała powyższy

algorytm.

Private Sub Ruszaj_Click()
' Tu nale
ży uzupełnić procedurę


End Sub

3.

Sprawdź działanie aplikacji.

background image

Makrodefinicje i programowanie

http://til.scholaris.pl

-9-

12.

Działanie aplikacji ma być następujące:

w pole tekstowe należy wpisać dowolną liczbę naturalną;

następnie należy kliknąć na przycisku Oblicz silnię. Jako

wynik działania aplikacji pojawi się wartość silni wprowadzonej

liczby.

Po kliknięciu na przycisk Wklej wynik do arkusza do aktywnej

komórki arkusza zostaje wklejony wynik obliczenia silni dla podanej liczby.

Algorytm

Silnia liczby naturalnej n jest definiowana następująco:
n!=1*2*3*...*n
na przykład 5! = l. 2 . 3 . 4 . 5 = 120. Algorytm powinien uwzględnić, że 0! = l.

W pętli należy wykonać mnożenie kolejnych liczb całkowitych, a kolejne wyniki
przechowywać w zmiennej Si.
Przebieg ćwiczenia

1.

Wczytaj projekt silnia.xls.

2.

Dla przycisku Oblicz n! uzupełnij procedurę Sub Oblicz_Click ( ) tak, aby

realizowała powyższy algorytm. -

Private Sub Oblicz_Click()
Dim n, i As Integer
Dim Si As Double
n = Val(WartoscN.Text)
' Sygnalizacja zbyt du
żej liczby
If n > 170 Then
n = 170
WartoscN.ForeColor = &HFF
WartoscN.Text = Str$(n)
End If
'Tu nale
ży uzupełnić procedurę

End Sub


3.

Dla przycisku Wklej wynik do arkusza uzupełnij procedurę Wklej_Click()

ActiveCell.Value = Wynik.Text

4.

Sprawdź działanie aplikacji. Zobacz, jaką największą liczbę możesz uzyskać.



13.

Otwórz znów wzorcowy arkusz silnia.xls

Tym razem wykorzystamy wbudowaną do arkusza kalkulacyjnego formułę Fact (która
wyznacza silnię).
Aby to zrobić w procedurze Sub Oblicz_Click ( ) posłuż się następującym wpisem:

Wynik.Text = Application.WorksheetFunction.Fact(WartoscN)


Zapisz arkusz jako silnia1.xls na swoim dysku sieciowym.

background image

Makrodefinicje i programowanie

http://til.scholaris.pl

-10-

14.

Aplikacja jak na rysunku ma służyć do

przybliżonego wyznaczania liczby π
Działanie aplikacji ma być następujące:

w pole tekstowe "Dokładność=" należy wpisać

wymaganą dokładność obliczenia wartości liczby π

(np. 0.01),

wybrać przycisk "Oblicz". Wynik pojawi się w

oknie "pi=", a poniżej (w oknie "i =") liczba

zsumowanych składników.

Algorytm

Wartość liczby π z zadaną dokładnością wyznacza się wykorzystując rozwinięcie liczby π w
szereg:


Sumowania dokonuje się w pętli do momentu, aż kolejny składnik T

i

stanie się mniejszy od

zadanej dokładności. Algorytm obliczenia liczby π jest przedstawiony na formularzu
aplikacji. Należy go uzupełnić wewnątrz pętli instrukcjami wyświetlania obliczonych
wartości zmiennych:

WartoscT.Caption = T
WartoscPi.Caption = Pi
WartoscI.Caption = i

Przebieg ćwiczenia

1.

Wczytaj projekt pi.xls.

2.

Dla przycisku "Oblicz" uzupełnij treść procedury Sub OBLICZ_Click() tak, aby

realizowała ona powyższy algorytm.

Private Sub Oblicz_Click()
Dim i As Integer
Dim Dokladnosc, T, Pi As Single

Dokladnosc = Val(Dokl.Text)
If Dokladnosc > 0 Then
Pi = 0
i = 1
T = 1
'Tu nale
ży uzupełnić procedurę

End If
End Sub

3.

Uruchom aplikację. W pole tekstowe wpisz dokładność 0.01

4.

Sprawdź działanie aplikacji. Jaka jest zależność liczby składników sumy od założonej

dokładności?

background image

Makrodefinicje i programowanie

http://til.scholaris.pl

-11-

14(a). Otwórz znów wzorcowy arkusz pi.xls

Wykorzystując wbudowana do arkusza formułę wyznaczającą liczbę

π

π

π

π

wyznacz jej wartość

z dokładnością dostępną w arkuszu kalkulacyjnym.
Pracę zapisz jako pi1.xls

15.

Informatyczne jednostki miary podawane są

zwykle

jako

krotności

potęgi

2

np. 1 Kb = 2

10

B = 1024 B. Aplikacja, jak na rysunku

ma służyć do przeliczania KB, MB, GB, itd. na bajty.
Użytkownik wpisuje w oknie tekstowym liczbę, z
listy rozwijanej wybiera jednostkę i klika na
przycisku „Bajtów”.

W odpowiedzi aplikacja

wyświetla liczbę bajtów.

Algorytm

Do wczytania liczby służy pole tekstowe Wartosc. Instrukcja:

Wczytana = CDbl(Wartosc.Text)

wczytuje wpisaną liczbę i podstawia ją pod zmienną Wczytana. Instrukcja:

Jednostka = Jedn.ListIndex

wczytuje wybraną prze użytkownika jednostkę (potęgę, do której należy podnieść 1024)
i podstawia ją pod zmienną Jednostka. Należy uzupełnić procedurę o instrukcję
obliczania liczby bajtów (wg wzoru Liczba = Wczytana * 1024

Jednostka

).

WSK: Potęgę w VBA zapisujemy w postaci „^” np.: 3

4

przyjmie postać: 3^4

Przebieg ćwiczenia

1.

Wczytaj projekt bajty.xls

2.

Dla przycisku "Oblicz" uzupełnij treść procedury Sub OBLICZ_Click() tak, aby

realizowała ona powyższy algorytm.


Private Sub Oblicz_Click()
' tu nale
ży uzupełnić Procedurę

End Sub

3.

Uzupełnić procedurę Sub Wklej_Click() wklejająca do aktywnej komórki arkusza

wynik

Private Sub Wklej_Click()
'tu te
ż należy uzupełnić procedurę

End Sub

4.

Sprawdź działanie aplikacji

5.

Przeanalizuj również procedurę Sub UserForm_Initialize(), która odpowiada za

poprawne wczytanie wielokrotności Bajta podczas

uruchamiania formularza. Być może będzie to dla

ciebie ciekawa lektura ;-)

background image

Makrodefinicje i programowanie

http://til.scholaris.pl

-12-

16.

Działanie aplikacji ma być następujące: należy wpisać pięć liczb w pola tekstowe,

wybrać przycisk „Znajdź największą”. Jako wynik działania aplikacji w okienku
"Największa" pojawi się wartość największej z wpisanych liczb.

Algorytm

W tym ćwiczeniu wykorzystamy po raz pierwszy strukturę danych zwaną tablicą. Tablica jest
to zestawienie zmiennych jednego typu, do których odwołujemy się podając ich indeks
(numer). Numeracja zaczyna się od liczby 0. Jej deklaracja jest następująca:

Dim tablica(ilość_elementów) as typ_zmiennej

np.:

Dim liczby(2) as Double

określa dwuelementową tablicę liczb rzeczywistych (a właściwie pewnego ich podzbioru).
W pierwszym kroku obliczeń do komórek 5–elementowej tablicy wprowadzimy wartości z
poszczególnych okienek tekstowych:

liczba(0) = CInt(Liczba1.Text)
liczba(1) = CInt(Liczba2.Text)
liczba(2) = CInt(Liczba3.Text)
liczba(3) = CInt(Liczba4.Text)
liczba(4) = CInt(Liczba1.Text)

W następnym kroku chwilowo za maksymalną (zmienna Max) liczbę wpisana do pierwszego
okienka tekstowego:

Max = liczba(0)

Następnie w pętli należy wykonać następujące operacje:
porównać zmienną Max z następnym elementem tablicy Liczba. Jeżeli następny

element tablicy ma wartość większą od chwilowej maksymalnej, to jest ona przyjmowana za

chwilową maksymalną:

Max = liczba(indeks)

W efekcie, po przeszukaniu wszystkich wpisanych liczb, wartość chwilowej maksymalnej jest
równa największej z nich. Wartość zmiennej Max wyświetla się w polu etykiet

Najwieksza.Caption = Max

Przebieg ćwiczenia

1.

Wczytaj projekt max.xls

2.

Dla przycisku z napisem "Znajdź największą" uzupełnij procedurę realizującą powyższy

algorytm.

Private Sub Znajdz_Click()
Dim liczba(5), bl, Max As Integer
On Error GoTo blad
liczba(0) = CInt(Liczba1.Text)
liczba(1) = CInt(Liczba2.Text)
liczba(2) = CInt(Liczba3.Text)
liczba(3) = CInt(Liczba4.Text)
liczba(4) = CInt(Liczba1.Text)

' Tu nale
ży uzupełnić procedurę

Exit Sub

3.

Sprawdź działanie aplikacji,

4.

Zmień procedurę tak, żeby szukała najmniejszej z wpisanych liczb. Sprawdź działanie

aplikacji.

background image

Makrodefinicje i programowanie

http://til.scholaris.pl

-13-

17.

Działanie aplikacji ma być następujące. Należy

odgadnąć ukryte słowo, zgadując kolejno litery, z których się
ono składa. Po wpisaniu w okienku" Wpisz literę" kolejnej
litery należy kliknąć na przycisku Czy jest? Jeżeli litera

znajduje się w słowie, to zostanie ona wyświetlona na swojej
pozycji. W każdym przypadku (czy się zgadnie, czy nie)
zwiększa się o l wskazanie pola "Licznik".
W globalnej tablicy UkryteSlowo (8) jest ukryte
ośmioliterowe słowo. Cecha Zgadywana.Text zawiera
zgadywaną literę. Odgadnięte litery są wyświetlane w tablicy etykiet SzukaneSlowo.
Po wpisaniu litery i kliknięciu na przycisku Czy jest? aplikacja powinna przeszukać tablicę
UkryteSlowo. Jeżeli litera występuje w ukrytym słowie (Zgadywana.Text =
UkryteSlowo(i))

, to powinna być ona wyświetlona na odpowiedniej pozycji

(SzukaneSlowo(i).Tekst = Zgadywana.Text).
W każdym przypadku należy zwiększyć o l wskazanie licznika (Ile = Ile + 1).
Przebieg ćwiczenia

1.

Wczytaj projekt Slowo.xls.

2.

Przyciskowi CzyJest? przypisz procedurę Sub CzyJest_Click( ), działającą

według powyższego algorytmu.

Private Sub CzyJest_Click()
Dim i As Integer
'Tu nale
ży uzupełnić procedurę

Zgadywana.Text = ""
Wynik.Caption = CStr(Ile) + " próba"
Zgadywana.SetFocus
End Sub

3.

Sprawdź działanie aplikacji.

4.

Zmodyfikuj działanie „aplikacji”, tak aby pobierała ona ośmioliterowe słowo

z komórki A1 (kolor czcionki komórki A1 jest taki sam jak kolor tła, więc „ukrytego”

słowa nie będzie widać). W procedurze Sub UserForm_Initialize() posłuż się

instrukcją:

Slowo=Cells(1,1).Value

5.

Wpisz słowo komputer do komórki A1 i sprawdź działanie

aplikacji.

18.

Aplikacja jak na rysunku ma służyć nauce pisania na

klawiaturze. Jej działanie ma być nastepujące:

Użytkownik po kliknięciu na przycisk Start wstukuje

z klawiatury znaki, które pojawiają się w etykiecie o nazwie

Litera powyżej. Po wprowadzeniu 10 znaków wyświetlany jest wynik będący procentową

wartością poprawnych odpowiedzi.

background image

Makrodefinicje i programowanie

http://til.scholaris.pl

-14-

Algorytm

W zmiennych globalnych ile_popr, ile przechowywane są wartości odpowiednio:

poprawnych odpowiedzi i wszystkich udzielonych już odpowiedzi.

Procedura Sub start_Click() zawiera warunki początkowe dla zmiennych

ile_popr i ile oraz losuje liczbę naturalną z przedziału 65 ...122 będą numerem znaku w tzw.

kodzie ASCII. Np. kod o numerze 65 odpowiada literze „A”.

kodASCII = Int((57 * Rnd) + 65)

Następnie kod zamieniany jest na znak za pomocą instrukcji Chr

Litera.Caption = Chr(kodASCII)

Na pole tekstowe znak, w którym wprowadzamy litery nakładany jest tzw. fokus, czyli pole

to pozostaje cały czas aktywne:

znak.SetFocus

Procedura Sub znak_KeyPress(....) jest uaktywniana w chwili naciśnięcia

dowolnego klawisza. Wówczas należy zwiększyć wartość zmiennej ile o 1 (ile=ile+1).

Jeśli wciśnięty znak jest równy znakowi z etykiety Litera

If Chr(KeyAscii) = Litera.Caption ...

Zwiększamy ilość poprawnych odpowiedzi o jedną.
Jeśli udzieliliśmy już dziesięć odpowiedzi (ile=10) to:

uaktywniany jest przycisk start (Start.Enabled=true), zaś pole znak staje się

nieaktywne (Znak.Enabled=false)

wyświetlany jest procentowy wynik wszystkich poprawnych odpowiedzi:

wyn = MsgBox(" Twój wynik to: " & ile_popr / ile * 100 & " % ", _
vbInformation, "WYNIK")

Jeśli liczba odpowiedzi jest mniejsza od dziesięciu wówczas:

czyścimy pole znak:

znak.Text = ""

Losujemy nowy kod, zamieniamy go na znak i wprowadzamy do kontrolki Litera:

Litera.Caption = Chr(Int((57 * Rnd) + 65))

Przebieg ćwiczenia

1.

Wczytaj arkusz Mistrz_Klawiatury.xls

2.

Uzupełniamy procedurę

Sub znak_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

zgodnie z powyższym algorytmem.

3.

Sprawdzamy działanie aplikacji.

19.

W tym ćwiczeniu zdefiniujemy własną formułkę (funkcję) arkusza, która będzie

dostępna w kategorii funkcji Użytkownika.

Funkcje zazwyczaj pobierają argument (lub argumenty) i zwracają wynik. Możemy je

utożsamiać z funkcjami znanymi z lekcji matematyki.

background image

Makrodefinicje i programowanie

http://til.scholaris.pl

-15-

Stworzymy funkcję o nazwie OcenaSlownie. Pobierała będzie ona liczbę naturalną (ocenę

w postaci liczbowej) i zwracała napis będący opisem słownym oceny. Np.: wynikiem funkcji

OcenaSlownie(4)

będzie wartość dobry.

Algorytm

Funkcję zdefiniujemy następująco:

OcenaSlownie(ocena as Integer) as String

Oznacza ona, że funkcja pobiera argument typu całkowitego i zwraca napis.
Ponieważ skala ocen jest sześciostopniowa, więc stosowanie instrukcji IF ... THEN
... ELSE

będzie kłopotliwe. Wykorzystamy więc instrukcję języka VBA postaci

SELECT CASE ...

Dzięki niej uprościmy sprawdzanie warunków:

Select Case ocena

Case 1

OcenaSlownie=”niedostateczny”

Case 2

OcenaSlownie=”dopuszczający”

Case 3

OcenaSlownie=”dostateczny”

Case 4

OcenaSlownie=”dobry”

Case 5

OcenaSlownie=”bardzo dobry”

Case 6

OcenaSlownie=”celujacy”

Case Else

OcenaSlownie=”Nie ma takiej oceny!”

End Select


Przebieg ćwiczenia

1.

Utwórz nowy arkusz kalkulacyjny i zapisz go pod nazwą ocena.xls

2.

Przejdź do Edytora Visual Basica

3.

Z menu Edytora wybierz Insert/Module

4.

Zdefiniuj funkcję OcenaSlownie zgodnie z powyższym algorytmem.

5.

Zapisz zmiany i przejdź do arkusza kalkulacyjnego

6.

Sprawdź działanie nowej formuły zaznaczając kategorię funkcji Użytkownika z menu

Wstaw/Funkcja.

background image

Makrodefinicje i programowanie

http://til.scholaris.pl

-16-

20(*). To już ćwiczenie trudniejsze.

Utwórz funkcję użytkownika o nazwie LiczbaSlownie, która dla podanej liczby

naturalnej będzie zwracała słowny zapis jej cyfr np.:

Wynikiem

wywołania

formuły

LiczbaSlownie(123)

powinien

być

napis:

jeden-dwa-trzy, zaś wywołanie LiczbaSlownie(7) jest napis: siedem.

WSK: Musisz posłużyć się tutaj instrukcją DIV i MOD. Pierwsza z nich realizuje dzielenie

całkowite, zaś druga zwraca resztę z dzielenia, np.:

7 DIV 3 = 2

12 DIV 4 = 3

6 MOD 3 = 2

13 MOD 2 = 1

To już koniec.

Ż

yczę satysfakcji w wymyślaniu i testowaniu własnych „aplikacji”

RAFAELLO


Wyszukiwarka

Podobne podstrony:
linia 4 punkty 2 punkty jeden kolor, makra zwcad
pyt egz makra, Wykłady rachunkowość bankowość
zajecia 5, Wykłady, Makroekonomia, makra, Makroekonomia
kostka 3DSolid Box, makra zwcad
Poprawa wielkości liter za pomocą makra, excel
makra
Łatwe usuwanie duplikatów z wykorzystaniem makra
makro-egzamin-wszystko, Wykłady, Makroekonomia, makra, Makroekonomia
zajecia 4, Wykłady, Makroekonomia, makra, Makroekonomia
Microsoft Excel 2010 PL Jezyk VBA i makra Akademia Excela e21vba
Cofanie makra, excel
sciagi ekonomi, makra - opracowanie pytań WŁASNE, 1
ACCESS CW6-MAKRA 2007
Makra
Cwiczenia 20-folie, Wykłady, Makroekonomia, makra, Makroekonomia, slajdy ćwiczenia
WYKLAD NR 3, Wykłady, Makroekonomia, makra, Makroekonomia, wyklady makra 2-13
Makra programowanie w Visual Basic

więcej podobnych podstron