Zachodniopomorski uniwersytet technologiczny instytut technologii mechanicznej



Pobieranie 366.54 Kb.
Strona9/9
Data28.04.2016
Rozmiar366.54 Kb.
1   2   3   4   5   6   7   8   9

DODATEK


W dodatku zamieszczono wybrane informacje na temat języka Visual Basic for Applications, które należy sobie przyswoić w celu opracowania ćwiczeń. Wybór ten tylko w niewielkim stopniu określa podstawy tego języka.

  1. Zmienne

Każde makro lub funkcja VBA jest zapisem czynności, które wykonywane są na pewnym określonym zbiorze informacji, nazywanych danymi. Dane mogą być zapisane bądź w komórkach arkusza kalkulacyjnego bądź w pewnym odrębnym obszarze pamięci operacyjnej komputera, który z kolei wewnątrz makra reprezen­towany jest poprzez zmienne. Każda zmienna określona jest poprzez podanie nazwy, ta zaś tworzona jest z liter i cyfr (pierwszym znakiem w nazwie powinna być litera).

Podobnie jak komórki w programie Excel zmienne mogą przechowywać dane różnych typów, przy czym w Visual Basic różnorodność typów jest znacznie większa (co więcej można tworzyć własne typy danych, czego nie będziemy omawiać). Typy danych mają swoje nazwy. W tabeli poniżej wypisane są podstawowe typy danych dostępne w VBA.




typ

opis

operacje

operator

Byte


liczby całkowite:

od 0 do 255


dodawanie

odejmowanie

mnożenie


dzielenie całkowite

reszta z dzielenia


+

-



*

Div


Mod

Integer


liczby całkowite: od -32 768 do 32 767

Long


liczby całkowite: od
-2 147 483 648 do 2 147 483 647

Single


liczby rzeczywiste:

od ok.-3,41038 do ok. 3,41038


dodawanie

odejmowanie

mnożenie


dzielenie

potęgowanie


+

-



*

/

^



Double

liczby rzeczywiste:

od ok.-1,810308 do ok. 1,810308



Currency

liczby wyrażające walutę

-922 337 203 685 477,5808 do 922 337 203 685 477,5807



Boolean

wartości logiczne:

True (prawda), False (fałsz)



koniunkcja

alternatywa

alternatywa wykluczna

negacja


równoważność

implikacja



And

Or

Xor



Not

Eqv


Imp

String

łańcuchy znaków

łączenie łańcuchów

& , +

Date

daty i czas

specjalne funkcje daty i czasu




Variant

łączy w sobie wszystkie powyższe typy danych

jak dla Double, String, Boolean










operatory relacji

(wynik jest typu Boolean):



=,<,<=,>,>=,<>

W języku Visual Basic typ zmiennej można określić albo poprzez nadanie zmiennej określonej wartości albo za pomocą specjalnej instrukcji deklaracji Dim (patrz p.3.1). Przy pisaniu bardziej złożonych makr często trudno uniknąć pomyłek w wypisywaniu nazw zmiennych i tworzą się „nowe zmienne”. Błędy te są często trudne do wykrycia. Dlatego też w VB można wymusić, aby wszystkie zmienne były zadeklarowane za pomocą instrukcji Dim. Pozwala to w przypadku użycia zmiennej o błędnej nazwie odnaleźć ją jako niezadeklarowanej na etapie interpretacji kodu. Wymuszenie to uzyskuje się wypisując w pierwszej linii danego modułu napis Option Explicit.

Elementy struktury arkusza kalkulacyjnego są w Visual Basicu for Applications reprezentowane przez tzw. obiekty i opisywane za pomocą „specjalnych” zmiennych, służących do identyfikowania m.in. arkuszy, komórek czy zakresów komórek W niniejszym opracowaniu ograniczymy się do opisu trzech obiektów: Range, ActiveCell i Selection
ActiveCell.Value lub krótko ActiveCell - przechowuje wartość wybranej komórki,

ActiveCell.FormulaR1C1 - przechowuje formułę wybranej komórki,

Selection.Value lub krótko Selection - pozwala wpisać wartości do wybranego zakresu komórek,

Range("A1:C5").Value lub krótko Range("A1:C5") pozwala wpisać wartości do zakresu „A1:C5”,

Selection.Cells(1,2).Value lub krótko Selection(1,2) pozwala wpisać wartości do komórki w pierwszym wierszu i drugiej kolumnie w wybranym obszarze.

Range("A1:C5").Cells(5).Value lub Range("A1:C5")(5) pozwala wpisać wartości do 5-tej komórki w zakresie „A1:C5” tj. komórki B2.

Range("A1:C5").Cells.Count
podaje liczbę komórek w zakresie, w tym przypadku 15.

Range("A1:C5").Columns.Count


podaje liczbę kolumn w zakresie, w tym przypadku 3.

Range("A1:C5").Rows.Count


podaje liczbę wierszy w zakresie, w tym przypadku 5.


  1. Wyrażenia

Wyrażenia tworzymy podobnie jak formuły w arkuszu, z tym, że zamiast adresów komórek wstawiamy zmienne. W wyrażeniach możemy wykorzystywać operatory, funkcje wewnętrzne Visual Basic, wszystkie funkcje Excela (w wersji angielskiej), a także istnieje możliwość definiowania własnych funkcji. Przy tworzeniu wyrażeń należy zwrócić szczególną uwagę na zgodność typów zmiennych, funkcji i używanych operatorów.




  1. Instrukcje

Czynności, które ma realizować makro zapisujemy w postaci tzw. instrukcji. Instrukcje zapisujemy w kolejnych liniach. Jeśli chcemy kilka instrukcji zapisać w jednej linii oddzielamy je dwukropkami. Uwaga: napisy zaczynające się od apostrofu nie są instrukcjami lecz komentarzami. Omówimy kilka najważniejszych instrukcji.




    1. Instrukcja deklaracji

Instrukcja ta przydziela pamięć zmiennej i określa jej typ i jest następującej postaci:


Dim zmienna1 As typ1, zmienna2 As typ2, ...
Przykład:

Poniżej zadeklarowano3 zmienne: pierwszą typu Variant (typ domyślny), drugą typu Double, trzecią typu String.


Dim liczba, numer As Double, napis As String


    1. Instrukcja przypisania

Instrukcja ta ma postać:


zmienna = wyrażenie
W wyniku wykonania instrukcji zmienna otrzymuje wartość wyrażenia.
Przykłady:
d = b^2 – 4*a*c

i = i + 1

ActiveCell.FormulaR1C1 = "Jaś"
Pierwsza instrukcja nadaje zmiennej d wartość wyrażenia b^2 – 4*a*c , gdzie a,b,c są zmiennymi. Druga powiększa wartość zmiennej i o jeden. Trzecia wstawia do aktywnej komórki napis "Jaś" .


    1. Instrukcja wywołania procedury

Instrukcja ta ma postać:


parametr1, parametr2,...
Przykład:
MsgBox "Czas na naukę pisania makr!"
Instrukcja ta wyświetla komunikat "Czas na naukę pisania makr!" wykorzyst­ując procedurę Visual Basica MsgBox.


    1. Instrukcja warunkowa

Instrukcja ta może występować w składni jednowierszowej lub składni blokowej. Instrukcja ta wykonuje ciąg instrukcji w zależności od wartości logicznej wyrażenia –warunku lub kilku wyrażeń – warunków. Składnia jednowierszowa:



If warunek Then instrukcje Else instrukcje_else

lub w wersji krótszej:



If warunek Then instrukcje

wykonywane są instrukcje w przeciwnym przypadku instrukcje_else. W wersji krótszej gdy warunek nie jest spełniony następuje przejście do instrukcji następnej po If. W składni jednowierszowej instrukcje oddziela się dwukropkami.

Inną możliwością jest zastosowanie składni blokowej. Pozwala ona na kolejne sprawdzanie wielu warunków.
If Warunek_1 Then

Ciąg instrukcji wykonywany gdy Warunek_1 jest prawdziwy

[ElseIf Warunek_2 Then



Ciąg instrukcji wykonywany gdy Warunek_2 jest prawdziwy

[ElseIf Warunek_3 Then



Ciąg instrukcji wykonywany gdy Warunek_3 jest prawdziwy

...

[ElseIf Warunek_n Then]]]



Ciąg instrukcji wykonywany gdy Warunek_n jest prawdziwy (poprzednie nie są prawdziwe)

[Else



Ciąg instrukcji wykonywany gdy żaden z poprzednich warunków nie jest prawdziwy]

End If
Uwaga: nawiasy […] oznaczają opcjonalną część instrukcji.










    1. Instrukcja wyboru Select Case


Select Case jest instrukcją, która zastępuje zagnieżdżone instrukcje If...ElseIf, gdy konieczne jest wybieranie pomiędzy wieloma dostępnymi opcjami. Select Case sprawdza podane warunki i wybiera tylko jeden odpowiedni blok kodu. Składnia:
Select Case Wyrażenie

Case Wartość_1

Ciąg instrukcji wykonywany gdy Wyrażenie = Wartość_1

Case Wartość_2

Ciąg instrukcji wykonywany gdy Wyrażenie = Wartość_2

...

Case Wartość_n

Ciąg instrukcji wykonywany gdy Wyrażenie = Wartość_n

[Case Else



Ciąg instrukcji wykonywany gdy Wyrażenie jest różne od wszystkich Wartości od 1 do n. ]

End Select
Uwaga: nawiasy […] oznaczają opcjonalną część instrukcji.

    1. Instrukcja pętli For


For licznik = początek To koniec Step krok

instrukcje

Next licznik
licznik jest zmienną numeryczną, początek i koniec są wartościami początkowymi i końcowymi licznika. Wykonywane są instrukcje, po każdym wykonaniu licznik zwiększany jest o wartość krok lub o 1 gdy fraza Step jest pominięta. Wykonywanie zostanie przerwane gdy licznik przekroczy wartość koniec. Działanie pętli for można dodatkowo przerwać instrukcją Exit For umieszczoną wewnątrz pętli.


    1. Instrukcja pętli Do

Instrukcja ta maże mieć następujące warianty składni:


Do While warunek

instrukcje

Loop

albo

Do Until warunek

instrukcje

Loop

albo



Do

instrukcje

Loop While warunek

albo

Do

instrukcje

Loop Until warunek

Jedna lub kilka instrukcji oznaczonych przez instrukcje powtarzanych jest tak długo, jak długo warunek jest spełniony – wariant ze słowem While - albo dopóki nie stanie się prawdziwy - wariant ze słowem Until, przy czym warunek można sprawdzać na początku lub na końcu.




    1. Tablice – deklaracje tablic

Tablice to zbiory danych tego samego typu, odpowiednio uporządkowane za pomocą wartości numerycznych zwanych indeksami. Określa się wymiar tablicy jako ilość indeksów porządkujących tablicę. W poniższym wierszu zadeklarowano tablicę


2-wymiarową o elementach typu Integer
Dim MojaTab(1 To 10,1 To 10) As Integer
Tę tablicę możemy interpretować jako macierz 10 na 10: pierwszy z tych indeksów określa wiersze, drugi kolumny. Tablica składa się ze 100 elementów. Ten sposób deklaracji określa nam tzw. tablicę statyczną o stałej ilości elementów.

Jeśli w chwili deklaracji trudno określić wielkość tablicy, można użyć deklaracji tablicy dynamicznej. Nie ma ona rozmiaru do chwili użycia instrukcji ReDim. Sama deklaracja ma postać:


Dim NowaTab() As String

W miejscu kodu, w którym tablica jest faktycznie wykorzystywana, umieszczamy instrukcję ReDim określającą rozmiar tablicy. Instrukcja


ReDim NowaTab(l To 7)

ustala rozmiar tablicy wstępnie zadeklarowanej jako dynamiczna na siedem elementów.




  1. Procedury i Funkcje

Każde makro w Excelu jest zapisywane jako procedura Visual Basic. Podczas pisania bardziej rozbudowanych makr często zdarza się, że taki sam lub podobny fragment makra występuję w kilku miejscach. Można wówczas taki powtarzający się fragment zapisać w postaci dodatkowej procedury lub funkcji.

Procedura lub funkcja - wyodrębniona sekwencja instrukcji, stanowiąca pewną całość, posiadająca jednoznaczną nazwę i ustalony sposób wymiany informacji z pozostałymi częściami programu lub makra.

Stosowanie procedur i funkcji na ogół skraca zapis, a także ułatwia pisanie dużych rozbudowanych makr dzięki podzieleniu go na odrębne logicznie spójne części. Różnica pomiędzy procedurą a funkcją polega na sposobie przekazywania wartości końcowych i sposobie ich wywoływania. Procedury wywoływane są specjalną instrukcją (patrz p.3) natomiast funkcje wykorzystuje się do budowania wyrażeń. Procedury i funkcje definiuje się przy pomocy instrukcji Sub i Function:


Sub nazwa(lista_argumentów)

instrukcje



End Sub
Function nazwa(lista_argumentów) As typ

instrukcje



nazwa = wyrażenie

End Function
lista_argumentów jest listą zmiennych oddzielonych przecinkami i jest nieobowiąz­kowa podobnie jak typ, który określa typ zwracanego wyniku przez funkcję. W definicji funkcji typ wyrażenia (wyrażenie) powinien być zgodny z typem funkcji . Ponadto w definicji procedury i funkcji mogą się pojawić instrukcje Exit Sub i odpowiednio Exit Function przerywające działanie procedury lub funkcji.

Szczególnym przypadkiem funkcji są funkcje tablicowe, które poprzez swoją nazwę zwracają zamiast pojedynczej wartości całą tablicę:


Function nazwa(lista_argumentów)

instrukcje



nazwa = tablica

End Function
Funkcje można używać w formułach w Excelu i można je odnaleźć jako funkcje użytkownika. Funkcje tablicowe wykorzystujemy w formułach tablicowych wprowadzanych za pomocą kombinacji klawiszy Ctr-Shift-Enter. Uwaga: każda funkcja aby była widoczna w Excelu musi być wypisana w nowym module VB.
Przykład 3.
Makro Main wywołuje dwie procedury: Sygnał, która wysyła krótkie sygnały dźwiękowe (procedura Beep) w ilości określonej przez parametr i procedurę Komunikat , która wypisuje napis "Czas na kolejny przykład!".
Sub Main()

'źródło: plik pomocy Visual Basic

Sygnał 100

Komunikat



End Sub
Sub Sygnał(ile_dźw)

For licznik = 1 To ile_dźw

Beep

Next licznik



End Sub
Sub Komunikat()

MsgBox "Czas na kolejny przykład!"



End Sub

Przykład 4


Makro rozwiązuje równanie kwadratowe w liczbach rzeczywistych. Współczynniki a,b,c należy wpisać do komórek A1,B1,C1. Pierwiastki, jeśli są, wypisane będą w komórkach A3 i A4. Makro zawiera jawną deklarację zmiennych instrukcją Dim, bez której makro będzie działać, lecz zmienne a,b,c i delta będą typu Variant.
Sub równanie_kwadratowe()

Dim a As Single, b As Single, c As Single, delta As Single

a = Range("A1")

b = Range("B1")

c = Range("C1")

delta = b ^ 2 - 4 * a * c

If a = 0 Then

MsgBox "To nie jest równanie kwadratowe"



Exit Sub

End If

If delta < 0 Then MsgBox "Nie ma rozwiązań": Exit Sub

If delta = 0 Then

Range("A3") = -b / (2 * a)



Else

Range("A3") = (-b + Sqr(delta)) / (2 * a)

Range("A4") = (-b - Sqr(delta)) / (2 * a)

End If

End Sub

Przykład 5

Makro w kolumnie A mnoży po kolei przez 2 każdą liczbę, aż do napotkania komórki pustej.


Sub Podwajaj()

i = 1


Do While Range("A1").Cells(i, 1) <> ""

Range("A1").Cells(i, 1) = 2 * Cells(i, 1)

i = i + 1

Loop

End Sub

Przykład 6


Funkcja wyznacza normę euklidesową wektora o współrzędnych x,y,x. Funkcja ta jest dostępna w arkuszu jako funkcja użytkownika. Należy pamiętać aby w formule Excela parametry funkcji oddzielać średnikami.
Function Norma(x As Single,y As Single,z As Single) _

As Single

Norma = Sqr(x ^ 2 + y ^ 2 + z ^ 2)



End Function
Uwaga: Podkreślenie poprzedzone spacją oznacza kontynuację instrukcji w następnym wierszu.






1   2   3   4   5   6   7   8   9


©absta.pl 2016
wyślij wiadomość

    Strona główna