59
Elementy programowania 1 Pętla While… Wend While warunek blok instrukcji Wend instrukcje

Pętla While… Wend

  • Upload
    cara

  • View
    61

  • Download
    0

Embed Size (px)

DESCRIPTION

Pętla While… Wend. While warunek blok instrukcji Wend instrukcje. While… Wend. pętla ta wymaga zastosowania wyrażenia porównania, - PowerPoint PPT Presentation

Citation preview

Page 1: Pętla While… Wend

Elementy programowania 1

Pętla While… Wend

While warunek

blok instrukcji

Wend

instrukcje

Page 2: Pętla While… Wend

Elementy programowania 2

While… Wend pętla ta wymaga zastosowania wyrażenia porównania, w pętli może znajdować się jedna instrukcja lub cały blok

instrukcji VB. Blok ten jest wykonywany tak długo jak długo podany warunek jest prawdziwy. Ważne jest więc, aby w ciele pętli umieścić instrukcje, które doprowadzą do tego, że podany warunek kiedyś stanie się fałszywy. W przeciwnym razie pętla się nie zakończy,

jeżeli warunek jest fałszywy już na samym początku przed wykonaniem pętli, to blok instrukcji w ciele pętli nie zostanie wykonany ani razu,

Page 3: Pętla While… Wend

Pętle z warunkiemDo While… Loop sprawdza warunek

na początkuwykonuje pętlę jeżeli warunek jest prawdziwy (powtarzanie dopóki prawda)

Do Until… Loop sprawdza warunek na początku

wykonuje pętlę jeżeli warunek jest nieprawdziwy (powtarzanie dopóki fałsz)

Do… Loop While sprawdza warunek na końcu

wykonuje pętlę jeżeli warunek jest prawdziwy (powtarzanie dopóki prawda)

Do… Loop Until sprawdza warunek na końcu

wykonuje pętlę jeżeli warunek jest nieprawdziwy (powtarzanie dopóki fałsz)

While… Wend sprawdza warunek na początku

wykonuje pętlę jeżeli warunek jest prawdziwy

Page 4: Pętla While… Wend

Elementy programowania 4

Procedury i funkcjeProcedura to wydzielony fragment programu, który zostaje wykonany po wywołaniu nazwy procedury.Dzielenie programu na procedury ułatwia nawigację po programie i kontrolę błędów. Głównym zadaniem procedur jest jednak umożliwienie wielokrotnego wykonywania tego samego fragmentu kodu w różnych częściach programu. Zamiast w każdym z tych miejsc wpisywać ten sam fragment kodu, można umieścić go w procedurze i wywoływać procedurę w żądanych miejscach. Skraca to zapis programu i w przypadku błędu pozwala na dokonanie zmian tylko w jednym miejscu.

Page 5: Pętla While… Wend

Elementy programowania 5

Procedury i funkcje procedury zdarzeniowe - są uruchamiane, kiedy pojawi się

określone zdarzenie (np. wciśnięcie klawisza lub przesunięcie myszki),

procedury ogólne - są uruchamiane, kiedy zostaną wywołane przez inne procedury,

procedury Sub - wykonują określone zadania, ale nie zwracają wartości, kod takiej procedury może rezydować w module formularza, ogólnym lub klasy,

procedury funkcyjne (funkcje) - podobnie jak w procedurze typu Sub, kod procedury funkcyjnej może rezydować w formularzu standardowym lub module klasy, w przeciwieństwie do procedur Sub, zwracają wartość do procedury, która ją wywołała,

Page 6: Pętla While… Wend

6

Tworzenie funkcji

Function nazwa_funkcji ([lista_parametrów])

instrukcje

nazwa_funkcji = wartość

End Function

lista parametrów – opcjonalna; lista zmiennych reprezentujących argumenty, które są przekazywane do funkcji podczas wywołania; nazwy zmiennych powinny być oddzielone przecinkami;

nazwa_funkcji = wartość – wartość zwracana przez funkcję

Page 7: Pętla While… Wend

Elementy programowania 7

Funkcje są dostępne dla wszystkich procedur modułu, mogą być rekurencyjne (mogą wywoływać siebie, jednak

rekurencja może powodować błędy (stack overflow)), cały wykonywalny kod musi być umieszczony wewnątrz procedur

(nie można stworzyć funkcji wewnątrz innej funkcji), funkcję wywołuje się przez podanie jej nazwy z listą argumentów

do przekazania (można wywoływać również przez użycie rozkazu Call),

aby zwrócić wartość z funkcji, należy podstawić tę wartość pod nazwę funkcji, dowolna liczba takich podstawień może się znajdować w dowolnych miejscach funkcji; jeżeli żadna wartość nie zostanie podstawiona pod nazwa_funkcji, funkcja zwróci wartość domyślną: funkcje numeryczne zwracają 0, funkcje łańcuchowe zwracają łańcuch zerowej długości ("") funkcje Variant zwracają Empty,

Page 8: Pętla While… Wend

Elementy programowania 8

Przykład funkcjifunkcja dodająca dwie liczby:

Function sumaliczb(n,m)

sumaliczb = n + m

End Function

Page 9: Pętla While… Wend

9

Odtwarzanie funkcji funkcji napisanej w VBA nie można odtworzyć z okna

makr i edytora VBA, funkcję można umieścić w dowolnej formule w arkuszu:

lub wykorzystać w innej procedurze VBA:Sub Uzycie_funkcji () a = 23 b = 14 MsgBox ("Suma liczb wynosi: " & sumaliczb(a, b))End Sub

Page 10: Pętla While… Wend

Elementy programowania 10

Odtwarzanie funkcji z arkuszafunkcja utworzona w VBA zachowuje się jak funkcja wbudowana Excela stąd odtwarzamy ją następująco:

wywołujemy polecenie Funkcja… z menu Wstaw, szukamy naszej funkcji, i… używamy

Page 11: Pętla While… Wend

Elementy programowania 11

Dostęp do utworzonych funkcji funkcja dostępna jest tylko dopóki otwarty

jest skoroszyt, w którym jest ona przechowywana,

aby dostępna była zawsze można: zachować funkcję w skoroszycie makr

osobistych, zachować skoroszyt zawierający funkcję w

folderze XLStart,

Page 12: Pętla While… Wend

Elementy programowania 12

Przekazywanie argumentów przez zmienne argumentami nazywamy jedną lub więcej

wartości koniecznych do zadziałania funkcji, rezultat funkcji zależy od argumentów, poniższy przykład pokaże jak można

przekazać funkcji sumaliczb pewne wartości z innej procedury (zadanie: oblicz ilość liter w imieniu i nazwisku dowolnej osoby):

Page 13: Pętla While… Wend

Elementy programowania 13

Przykład 1Sub liczbaliter() Dim i As Integer, n As Integer i = Len(InputBox("Podaj imię")) n = Len(InputBox("Podaj nazwisko")) MsgBox ("Imię i nazwisko mają liter: " & sumaliczb(i, n))End Sub

Uwaga! procedurę liczbaliter umieszczamy w tym samym module co funkcję sumaliczb

Page 14: Pętla While… Wend

Elementy programowania 14

Przykład 2Function lacz_tekst(k, o) lacz_tekst = k + " " + oEnd Function

Sub podaj_tekst() Dim i As String, n As String, r As String i = InputBox("Podaj imię:") n = InputBox("Podaj nazwisko:") r = lacz_tekst(i, n) MsgBox rEnd Sub

Page 15: Pętla While… Wend

Elementy programowania 15

Czego funkcje nie potrafią? nie mogą wykonywać poleceń menu, np.:

zawierać instrukcji formatowania danych, wymazywać, wstawiać danych, zawierać instrukcji otwierania pliku, zmieniać wyglądu ekranu itp.

Page 16: Pętla While… Wend

Elementy programowania 16

Typy argumentów funkcje wykonują obliczenia i operacje w oparciu o dane

otrzymane w postaci argumentów, nazwy argumentów podawanych w nawiasach pełnią rolę

podobną do zmiennych, podobnie jak zmienne funkcje mogą być różnego typu (np.

rezultatem funkcji może być ciąg znaków):

Function nazwa_funkcji (argumenty) As typ_funkcji

(jeśli nie podamy typu danych VBA przypisze typ Variant)

Page 17: Pętla While… Wend

Elementy programowania 17

PrzykładFunction iloczyn1(licz1, licz2) As Integer iloczyn1 = licz1 * licz2End Function

Sub mnozenie() Dim licz1 As Single Dim licz2 As Single Dim wynik As Single licz1 = 45.33 licz2 = 19.24 wynik = iloczyn1(licz1, licz2) MsgBox wynikEnd Sub

Ponieważ funkcja iloczyn1 ma typ Integer wynik będzie podany jako liczba całkowita

Page 18: Pętla While… Wend

18

Przekazywanie argumentówprzy wywołaniu procedury (lub funkcji) można przekazać do niej

argumenty na dwa sposoby: przez referencję (domyślny) – do procedury przekazana jest sama

zmienna jako argument procedury. Jeżeli wywołana procedura zmienia wartość argumentu, ta zmiana pozostanie, kiedy sterowanie powróci do procedury wywołującej. Aby określić, że argument będzie przekazywany przez referencję w nagłówku Sub wywoływanej procedury należy zadeklarować zmienną ze słowem ByRef. Ponieważ jest to domyślny sposób przekazywania parametrów, można słowo ByRef pominąć.

przez wartość - przekazana zostaje „kopia” zmiennej jako argument procedury. Jeżeli wywołana procedura zmienia argument, ta zmiana nie pozostanie, kiedy sterowanie powróci do procedury wywołującej. Aby określić, że argument ma być przekazany przez wartość w nagłówku Sub wywoływanej procedury należy użyć słowa kluczowego ByVal, aby zadeklarować zmienną.

Page 19: Pętla While… Wend

Elementy programowania 19

Przykład przekazania argumentu przez wartośćFunction srednia1(ByVal licz1, ByVal licz2, ByVal licz3) licz1 = licz1 + 1 srednia1 = (licz1 + licz2 + licz3) / 3End Function

Sub trzyliczby1() Dim licz1 As Integer, licz2 As Integer, licz3 As Integer licz1 = 10 licz2 = 20 licz3 = 30 MsgBox srednia1(licz1, licz2, licz3) MsgBox licz1 MsgBox licz2 MsgBox licz3End Sub

Page 20: Pętla While… Wend

Elementy programowania 20

Argumenty opcjonalne umieszcza się je na końcu listy argumentów,

które są obowiązkowe, poprzedza słowem kluczowym Optional, można tych argumentów nie użyć w

procedurze, nie można określić typu danych za pomocą

słowa kluczowego As w sposób jawny (w VBA mają domyślny typ Variant),

Page 21: Pętla While… Wend

21

PrzykładFunction srednia3(licz1, licz2, Optional licz3) Dim ileliczb As Integer ileliczb = 3 If IsMissing(licz3) Then licz3 = 0 ileliczb = ileliczb - 1 End If srednia3 = (licz1 + licz2 + licz3) / ileliczbEnd Function

Sub argumentopcjonalny() licz1 = CSng(InputBox("Podaj pierwszą liczbę")) licz2 = CSng(InputBox("Podaj drugą liczbę")) licz3 = CSng(InputBox("Podaj trzecią liczbę")) MsgBox ("Średnia z dwóch pierwszych liczb: " & srednia3(licz1, licz2)) MsgBox ("Średnia z trzech liczb: " & srednia3(licz1, licz2, licz3))End Sub

IsMissing – funkcja sprawdzająca czy przekazano opcjonalny argument procedury;CSng – konwersja wartości na Single

Page 22: Pętla While… Wend

Elementy programowania 22

Funkcje wbudowanelistę funkcji VBA można obejrzeć w Pomocy lub przeglądarce obiektów VBA:

Page 23: Pętla While… Wend

Elementy programowania 23

Funkcje matematyczneAbs (X) wartość bezwzględna

Sgn (X) znak liczby

Int (X) część całkowita

Sqr (X) pierwiastek kwadratowy

Log (X) logarytm naturalny

LogN(X) = Log(X) / Log (N) logarytm o podstawie N

Page 24: Pętla While… Wend

Elementy programowania 24

Funkcje daty i czasuDate zwraca aktualną datę

DateDiff liczy czas między dwoma datami

DateValue zwraca datę z wyrażenia

Day zwraca dzień z daty

Hour zwraca godzinę z czasu

Now zwraca bieżąca data i czas

Time zwraca bieżący czas

Weekday zwraca dzień tygodnia z daty

Page 25: Pętla While… Wend

25

Funkcje tekstoweChr(kodznaku) kod ASCII na znak

np. Chr(10) - zwróci znak przejścia do nowej linii

Val(łańcuch) zwraca wartość zawartą w łańcuchu String jako wartość numeryczną

np. Val(„1615 198numer”) zwróci wartość 1615198

Str(wartość) zwraca wartość typu String reprezentującą wartość numeryczną

np. Str(459)  zwróci wartość tekstową „459”

LCase(łańcuch) konwertuje łańcuch (tekst) na małe litery

np. LCase(„Jasio IDZIE do kina na 18”) – zwróci tekst „jasio idzie do kina na 18”

Page 26: Pętla While… Wend

Elementy programowania 26

Funkcje tekstowe cd.UCase(łańcuch) konwertuje łańcuch (tekst) na duże litery

Len(łańcuch) zwraca długość łańcucha

LTrim(łańcuch) usuwa początkowe spacje

RTrim(łańcuch) usuwa końcowe spacje

Trim(łańcuch) usuwa początkowe i końcowe spacje

np. RTrim("    - tekst -    ") zwróci wartość "    - tekst -"

Page 27: Pętla While… Wend

Elementy programowania 27

Funkcje wejścia-wyjściaMsgBox wyświetla okno komunikatu

InputBox wyświetla okno wprowadzania danych

Dir[(ŚcieżkaDostępu [, Atrybuty])]

zwraca nazwę szukanego pliku lub folderu

FileLen(ŚcieżkaDoPliku)

zwraca rozmiar pliku

Page 28: Pętla While… Wend

28

Funkcje konwersji danychCBool(wyrażenie) konwertuje wyrażenie do typu Boolean

CByte(wyrażenie) konwertuje wyrażenie do typu Byte

CCur(wyrażenie) konwertuje wyrażenie do typu Currency

CInt(wyrażenie) konwertuje wyrażenie do typu Integer

CLng(wyrażenie) konwertuje wyrażenie do typu Long

CSng(wyrażenie) konwertuje wyrażenie do typu Single

CStr(wyrażenie) konwertuje wyrażenie do typu String

Page 29: Pętla While… Wend

Funkcje testujące daneIIf(wyrażenie, GdyTrue, GdyFalse) zwraca jedną z dwóch wartości w

zależności od wartości podanego wyrażenia

IsDate(wyrażenie) zwraca wartość typu Boolean, określającą czy badane wyrażenie może być konwertowane do typu Data

IsNumeric(wyrażenie) zwraca wartość typu Boolean, określającą czy badane wyrażenie może być konwertowane na liczbę

IsEmpty(wyrażenie) zwraca wartość typu Boolean, określającą czy badana zmienna została zainicjowana

Page 30: Pętla While… Wend

Elementy programowania 30

Funkcje testujące daneIsNull(wyrażenie) zwraca wartość typu Boolean, określającą

czy wyrażenie zawiera poprawne dane czy wartość Null

IsMissing(NazwaArgumentu) zwraca wartość typu Boolean, określającą czy opcjonalny argument typu Variant został przekazany do procedury

VarType(NazwaZmiennej) zwraca wartość typu Integer określającą typ zmiennej (dla zmiennej Integer liczbę 2, dla Single 4 itd.)

TypeName(NazwaZmiennej) zwraca wartość typu String zawierającą informacje na temat zmiennej o podanej nazwie

Page 31: Pętla While… Wend

Funkcja MsgBoxMsgBox(Komunikat [, Przyciski] [, Tytuł]

[, PlikHelp, HelpContext])Argument Opis

Komunikat (Wymagany) Wyrażenie łańcuchowe wyświetlane jako wiadomość w oknie dialogowym. Maksymalna długość łańcucha może wynosić 1024 znaki, w zależności od szerokości używanych znaków. Jeżeli łańcuch ten zawiera więcej niż jedną linię, można oddzielać je używając znaków powrotu karetki (Chr(13)) i podziału linii (Chr(10)), lub połączenia (Chr(10) & Chr(13)), pomiędzy poszczególnymi liniami.

Przyciski (Opcjonalny) Wyrażenie numeryczne , które jest sumą wartości (lub stałych VB) określających numer i typ przycisków, które mają być wyświetlane, styl wyświetlanej ikony i modalność okna wiadomości. Jeżeli zostanie ominięty przyjmowana jest domyślna wartość 0.

Page 32: Pętla While… Wend

Elementy programowania 32

Funkcja MsgBoxArgument Opis

Tytuł (Opcjonalny) Wyrażenie łańcuchowe wyświetlane na pasku tytułowym okna dialogowego. Jeżeli zostanie pominięty, na pasku tytułowym zostanie wyświetlona nazwa aplikacji.

PlikHelp (Opcjonalny) Wyrażenie łańcuchowe określające plik pomocy (Help), który ma być użyty do przeszukiwania pomocy kontekstowej dla okna dialogowego. Jeżeli zostanie wprowadzona nazwa pliku pomocy, musi zostać wprowadzony argument HelpContext.

HelpContext (Opcjonalny). Wyrażenie numeryczne określające numer kontekstowy skojarzony z tematem pomocy przez autora pomocy. Jeżeli argument ten zostanie określony, musi zostać określony argument PlikPomocy.

Page 33: Pętla While… Wend

Argument Przyciski funkcji MsgBoxPrzyciski

Stała Wartość Opis

vbOKOnly 0 Wyświetla tylko przycisk OK.

vbOKCancel 1 Wyświetla przyciski OK i Anuluj

vbAbortRetryIgnore 2 Wyświetla przyciski Przerwij, Ponów próbę i Zignoruj

vbYesNoCancel 3 Wyświetla przyciski Tak, Nie i Anuluj

vbYesNo 4 Wyświetla przyciski Tak i Nie

vbRetryCancel 5 Wyświetla przyciski Ponów próbę i Anuluj

Page 34: Pętla While… Wend

Elementy programowania 34

Stała Wartość Opis ikon

vbCritical 16 Wyświetla ikonę wiadomości krytycznej

vbQuestion 32 Wyświetla ikonę pytania

vbExclamation 48 Wyświetla ikonę wiadomości ostrzegawczej (wykrzyknik)

vbInformation 64 Wyświetla ikonę Komunikat informacyjny

Argument Przyciski funkcji MsgBox

Page 35: Pętla While… Wend

Argument Przyciski funkcji MsgBox

StałaWartoś

ćOpis

vbDefaultButton1 0 Pierwszy przycisk jest domyślny

vbDefaultButton2 256 Drugi przycisk jest domyślny

vbDefaultButton3 512 Trzeci przycisk jest domyślny

vbDefaultButton4 768 Czwarty przycisk jest domyślny

Page 36: Pętla While… Wend

Elementy programowania 36

Argument Przyciski funkcji MsgBoxStała Wartość Opis

vbApplicationModal 0Okno modalne dla aplikacji, użytkownik musi

zareagować na wiadomość

vbSystemModal 4096 Okno modalne dla systemu, wszystkie aplikacje są zawieszone dopóki użytkownik nie zareaguje

na wiadomość

vbMsgBoxHelpButton 16384 Wyświetla przycisk Pomoc

VbMsgBoxSetForeground 65536 Okno wiadomości będzie oknem na wierzchu

vbMsgBoxRight 524288 Tekst jest wyrównany do prawej

Page 37: Pętla While… Wend

Elementy programowania 37

Wartości i stałe zwracane przez funkcję MsgBox

Stała Wartość Opis

vbOK 1 OK

vbCancel 2 Anuluj

vbAbort 3 Przerwij

vbRetry 4 Ponów próbę

vbIgnore 5 Zignoruj

vbYes 6 Tak

vbNo 7 Nie

Page 38: Pętla While… Wend

Elementy programowania 38

Przykład funkcji MsgBoxDim Wcisniety As VariantWcisniety = MsgBox("Czy chcesz kontynuowac?",

vbYesNo+vbCritical+vbDefaultButton2, "Pytanie", "DEMO.HLP", 10)

Page 39: Pętla While… Wend

Funkcja InputBoxInputBox(Pytanie [, Tytuł] [, DomyślnyTekst] [, XPos]

[, YPos] [,PlikPomocy, HelpContext])

Argument Opis

Pytanie (Wymagany) Wyrażenie łańcuchowe wyświetlane jako wiadomość w oknie dialogowym. Maksymalna długość łańcucha może wynosić 1024 znaki, w zależności od szerokości używanych znaków. Jeżeli łańcuch ten zawiera więcej niż jedną linię, można oddzielać je używając znaków powrotu karetki Chr(13) i podziału linii Chr(10)

Tytuł (Opcjonalny) Wyrażenie łańcuchowe wyświetlane na pasku tytułowym okna dialogowego. Jeżeli zostanie pominięty, na pasku tytułowym zostanie wyświetlona nazwa aplikacji

Page 40: Pętla While… Wend

Argumenty funkcji InputBoxArgument Opis

DomyślnyTekst (Opcjonalny) Wyrażenie łańcuchowe wyświetlane w oknie wprowadzania danych jako domyślna odpowiedź, jeżeli nie zostanie wprowadzony inny tekst. Jeżeli zostanie ominięty, okno wprowadzania danych zostanie wyświetlone puste.

XPos (Opcjonalny) Wyrażenie numeryczne określające, w jednostach zwanych „twips”, poziomą odległość między lewym brzegiem okna dialogowego, a lewym brzegiem ekranu. Jeżeli zostanie pominięty, okno dialogowe zostaje wycentrowane poziomo.

YPos (Opcjonalny) Wyrażenie numeryczne określające, w jednostkach zwanych „twips”, pionową odległość między górnym brzegiem okna dialogowego, a górą ekranu. Jeżeli zostanie pominięty, okno dialogowe zostaje umieszczone na 1/3 wysokości.

Page 41: Pętla While… Wend

Elementy programowania 41

Argumenty funkcji InputBoxArgument Opis

PlikPomocy (Opcjonalny) Wyrażenie łańcuchowe określające plik pomocy (Help), który ma być użyty do przeszukiwania pomocy kontekstowej dla okna dialogowego. Jeżeli zostanie wprowadzona nazwa pliku pomocy, musi zostać wprowadzony argument HelpContext.

HelpContext (Opcjonalny). Wyrażenie numeryczne określające numer kontekstowy skojarzony z tematem pomocy przez autora pomocy. Jeżeli argument ten zostanie określony, musi zostać określony argument PlikPomocy.

Page 42: Pętla While… Wend

42

Przykład użycia funkcji InputBoxDim Liczba, Tekst As Variant

Liczba = InputBox("Wprowadz liczbe", "Okno wprowadzania", "1")

Tekst = InputBox("Wpisz tekst", , , 100, 100, "DEMO.HLP", 10)

Page 43: Pętla While… Wend

Elementy programowania 43

Listy i tablice w VBA definicja przykłady:

jednowymiarowa: Miasto(3)

Miasto(1) Warszawa

Miasto(2) Poznań

Miasto(3) Kraków

2-wymiarowa: Wymiana(4,3)

Kanada 1CAD 2.5269

Szwajcaria 1CHF 2.4357

USA 1USD 2.9758

W. Brytania 1GBP 5.7363

Page 44: Pętla While… Wend

44

Deklarowanie tablicy

Dim NazwaTablicy (wymiar) As TypDanych

np.

Dim DniTyg(7) As String

Dim Miasto(3) As String

Dim Wymiana(4,3) As Variant

deklaracje tablic jednowymiarowych

deklaracja tablicy dwuwymiarowej

Page 45: Pętla While… Wend

Elementy programowania 45

Tablice - indeksowanieUWAGA! VBA ustawia indeks tablicy od 0, stąd tablica

zadeklarowana: Dim Miasto(3) As String

ma 4 elementy a nie 3!

aby uniknąć indeksowania od 0 można: podać górną i dolną granicę wymiaru:

Dim Miasto(1 To 3) As String Dim Tabela (5 To 15)

w polu deklaracji General (lub w Module) wpisać instrukcję Option Base 1

Page 46: Pętla While… Wend

Elementy programowania 46

TablicePrzykład, jak można odnieść się do elementu tablicy w

kodzie:

Miasto (1) = „Warszawa”‘ Ta instrukcja ustawia 1-szy (lub 2-gi) element tablicy Miasto na wartość Warszawa

Tabela (3) = 28759

‘ Ta instrukcja ustawia 3-ci (lub 4-ty) element tablicy Tabela na wartość 28759

Page 47: Pętla While… Wend

Elementy programowania 47

Tablice statyczne i dynamiczne statyczne – tablice o z góry zadeklarowanym

wymiarze, dynamiczne – wymiar może ulegać

wielokrotnym zmianom w trakcie wykonywania programu (wymiar takiej tablicy nie jest określany),

Page 48: Pętla While… Wend

Elementy programowania 48

Deklaracja tablicy dynamicznejDim NazwaTablicy () As TypDanychpo czym po określeniu, która zmienna przechowuje wymiar,

ponownie w kodzie definiujemy tablicę następująco:

ReDim NazwaTablicy (zmienna) As TypDanych

lub

ReDim NazwaTablicy (Wymiary) [As Typ] [, NazwaTablicy (Wymiary) [As Typ]]...

Page 49: Pętla While… Wend

Elementy programowania 49

Przykłady deklaracji tablic dynamicznych

Dim TablicaDynamiczna ()   'deklaracja tablicy dynamicznej

ReDim TablicaDynamiczna (10)   'ustalenie rozmiarów tablicy

...

ReDim TablicaDynamiczna (15)   'zmiana rozmiarów tablicy

Page 50: Pętla While… Wend

Elementy programowania 50

Przykład tablicy dynamicznejSub tablice_dynamiczne() Dim licznik As Integer Dim zbior() As Integer ‘ deklaracja tablicy k = CSng(InputBox("Podaj rozmiar")) ReDim zbior(k) ‘ ustalenie rozmiaru tablicy For licznik = 1 To k zbior(licznik) = licznik + 1 MsgBox (licznik & " element tablicy wynosi: " & zbior(licznik)) Next licznikEnd Sub

procedura wpisuje do tablicy o rozmiarze k elementy o wartości k +1

Page 51: Pętla While… Wend

Elementy programowania 51

Funkcje dla tablictablicami można manipulować za pomocą następujących funkcji:

Array, IsArray, Erase, LBound, UBound.

Page 52: Pętla While… Wend

Elementy programowania 52

Funkcja Array umożliwia utworzenie tablicy w trakcie wykonywania

kodu procedury bez konieczności deklarowania tablicy, funkcja zwraca zawsze tablicę dynamiczną typu

Variant, składnia funkcji:

Array(ListaArgumentów), argument ListaArgumentów jest wymagany, jest to lista

wartości, oddzielonych od siebie przecinkami, które mają wypełnić tablicę; jeżeli nie zostanie podana lista argumentów zostanie stworzona tablica o zerowej długości.

Page 53: Pętla While… Wend

Elementy programowania 53

Przykład użycia funkcji ArraySub tablice_array()

Dim auto As Variant

auto = Array("Ford", "Czarny", "1999")

MsgBox auto(2) & " " & auto(1) & " " & auto(3)

auto(2) = "4-drzwiowy"

MsgBox auto(2) & " " & auto(1) & " " & auto(3)

End Sub

Page 54: Pętla While… Wend

Elementy programowania 54

Funkcja IsArray sprawdza, czy dana zmienna jest tablicą, zwraca wartość logiczną True, jeśli zmienna

jest tablicą (False, gdy nie jest), składania funkcji:

IsArray(NazwaZmiennej)

Page 55: Pętla While… Wend

55

Przykład użycia funkcji IsArraySub tablice_isarray() Dim KolejneLiczby() ‘ deklaracja tablicy dynamicznej Dim IloscLiczb As Integer Dim licznik As Integer

IloscLiczb = InputBox("Podaj ile elementów ma mieć tablica liczb") ReDim KolejneLiczby(1 To IloscLiczb) ‘ ustalenie rozmiaru tablicy

For licznik = 1 To IloscLiczb KolejneLiczby(licznik) = licznik MsgBox ("Element tablicy to: " & KolejneLiczby(licznik)) Next licznik

If IsArray(KolejneLiczby) Then MsgBox "Zmienna KolejneLiczby jest tablicą" MsgBox ("Tablica ma " & IloscLiczb & " elementy(-ów).") End IfEnd Sub

Page 56: Pętla While… Wend

Elementy programowania 56

Funkcja Erase służy do usuwania danych z tablicy, dla tablic dynamicznych po usunięciu danych zwalnia pamięć

przeznaczoną do przechowywania elementów tablicy, dla tablic statycznych:

gdy elementami były wartości liczbowe – ustawia wartość każdego elementu na zero,

gdy elementy były łańcuchowe - ustawia każdy element na łańcuch o zerowej długości (""),

gdy elementy były łańcuchowe ale o stałej długości – ustawia każdy element na zero,

składania funkcji:Erase (ListaTablic)

Page 57: Pętla While… Wend

57

Przykład użycia funkcji EraseSub funkcja_erase() Dim TablicaLiczb(10) As Integer Dim TablicaLancuchow(10) As String Dim TablicaLancuchow10Znakowych(10) As String * 10 Dim TablicaDynamiczna() As Integer

ReDim TablicaDynamiczna(10) 'ustalenie rozmiaru tablicy dynamicznej

Erase TablicaLiczb 'Każdy element ustawia na 0 Erase TablicaLancuchow 'Każdy element ustawia na 'zerowej długości łańcuch ("") Erase TablicaLancuchow10Znakowych 'Każdy element ustawia na 0 Erase TablicaDynamiczna 'zwalnia pamięć używaną przez tablicęEnd Sub

Page 58: Pętla While… Wend

58

Funkcje LBound i Ubound funkcje zwracają liczby całkowite typu Long

odpowiadające dolnemu i górnemu zakresowi wymiaru tablicy,

składnie funkcji:LBound(NazwaTablicy [,NumerWymiaru]) UBound(NazwaTablicy [,NumerWymiaru])

argument NumerWymiaru jest opcjonalną wartością typu Long, wartość ta określa numer wymiaru tablicy, którego górny zakres ma być zwrócony; wymiary numerowane są od 1; jeżeli argument ten nie wystąpi w wywołaniu funkcji zostanie przyjęta domyślna wartość 1,

Page 59: Pętla While… Wend

59

Przykład funkcji LBound i UBoundSub funkcje_tabl() Dim TablicaTo(1 To 10, -3 To 8, 30 To 105) As Variant Dim Tablica(20) As Variant Dim DolnyZakres As Variant Dim GornyZakres As Variant DolnyZakres = LBound(TablicaTo, 1) 'DolnyZakres=1 DolnyZakres = LBound(TablicaTo, 2) 'DolnyZakres=-3 DolnyZakres = LBound(TablicaTo, 3) 'DolnyZakres=30 DolnyZakres = LBound(Tablica) 'DolnyZakres=0 lub 1 w zależności od

'ustawień OptionBase GornyZakres = UBound(TablicaTo, 1) 'GornyZakres=10 GornyZakres = UBound(TablicaTo, 2) 'GornyZakres=8 GornyZakres = UBound(TablicaTo, 3) 'GornyZakres=105 GornyZakres = UBound(Tablica) 'GornyZakres=20End Sub