Kodowanie (proceduralne)

Transkrypt

Kodowanie (proceduralne)
(C)2005 RoG@j
2005-04-07
Kodowanie
(proceduralne)
Przekazywanie danych
Lokalne kontra globalne
ByVal kontra ByRef
Kodowanie Sub i Function
Przekazywanie argumentów
(danych)
!
Najprostszym i chyba najgorszym, bo
najmniej uniwersalnym sposobem
przekazywania argumentów (danych) to
przekazywanie przez zmienne globalne w
obrębie modułu
!
!
Do tej pory deklarowaliśmy zmienne w Sub – były
to zmienne lokalne
Zmienne zadeklarowane w sekcji General modułu
– zmienne globalne
ByVal kontra ByRef
!
VBA pozwala na przekazywanie argumentów
!
!
!
Przekazywanie ByRef polega na wskazaniu
fizycznego adresu, pod którym znajduje się
zmienna – wywołana procedura pracuje
bezpośrednio na tej zmiennej i może ją
zmienić
!
VBA 26
Przez referencję (ByRef) – sposób domyślny
Przez wartość (ByVal)
Funkcje
!
!
!
Function działa podobnie jak Sub –
podstawowa różnica polega na tym, że
Function zwraca wartość
Wywołując funkcję trzeba zadbać, by
„odebrać” od niej zwracaną wartość
Najprostsze funkcje to funkcje będące
kombinacjami funkcji wbudowanych, np.
postaci x*sin(2*x-1)
Lokalne kontra globalne
!
Jeśli będziemy używać jedynie zmiennych
lokalnych części programu nie będą mogły
wymieniać między sobą danych
!
!
!
Zmienne lokalne są widoczne jedynie wewnątrz
procedury (podprogramu), gdzie zostały
zadeklarowane
Zmienne globalne pozwalają na wymianę
danych, ale „usztywniają” program
Będziemy więc wykorzystywać… argumenty
(parametry)
ByVal kontra ByRef
!
!
Przekazywanie ByVal uniemożliwia zmianę
wartości przekazywanych wartości
Sprowadza się do przekazaniu konkretnych
wartości i niejako pracy na lokalnych kopiach
tych zmiennych
!
!
Jest to sposób bardziej bezpieczny
Czasami jednak chcemy z premedytacją zmienić
wartości parametrów (argumentów)
Czasami tak musi być, czasami jest to groźne…
1
(C)2005 RoG@j
Czytanie danych
!
Argumenty, które powinny zostać zmienione
!
!
Wektor a, do którego czytamy dane
Argumenty, które nie powinny się zmienić
!
!
Liczba elementów wektora n
Numer kolumny k
Liczenie minimum w wektorze
!
!
Wynikiem jest jedna wartość – czyli
najwygodniej jest zakodować funkcję
Argumenty (oddzielane przecinkami)
!
!
!
Zwracana wartość
!
!
Liczba wyrazów w wektorze
Wektor
Najmniejszy wyraz w wektorze
Ta funkcja nie może i nie powinna zmieniać
argumentów!!!
Kilka uwag…
!
!
!
VBA 26
Zadeklarowane w Sub i Function zmienne
(indeksy pętli) są lokalne i będą widoczne
jedynie wewnątrz Sub i Function
Jeśli argumentem jest tablica „sygnalizujemy”
to za pomocą nawiasów () – nie podajemy
wymiarów tablicy
Jeśli jesteśmy pewni, że nie zmieniamy
wartości argumentów możemy pominąć
ByVal (domyślnie będzie ByRef), ale…
2005-04-07
Kodowanie Sub
Sub Czytaj (ByVal n As Long,
ByVal k As Long,
ByRef a() As Double)
Dim i As Long
For i = 1 To n
a(i) = Cells(i, k)
Next i
End Sub
Function Min
Function Min(ByVal n As Long,
ByRef a() As Double) As Double
Dim i As Long
Min = a(1)
For i = 2 To n
If a(i) < Min Then Min = a(i)
Next i
End Function
ByRef kontra ByVal
Sub Zmiany()
Dim k As Long
k = 7
Call BezZmiany(k)
MsgBox k
Call ZeZmiana(k)
MsgBox k
End Sub
Sub
n
n
End
ZeZmiana(ByRef
As Long)
= 2 * n
Sub
Sub
n
n
End
BezZmiany(ByVal
As Long)
= 2 * n
Sub
2

Podobne dokumenty