VISUAL BASIC - tryba.cba.pl · VISUAL BASIC Poprawne nazewnictwo zmiennych i obiektów: Nazwa...

14
VISUAL BASIC Poprawne nazewnictwo zmiennych i obiektów: Nazwa powinna rozpoczynać się od litery; wewnątrz nazwy można używać znaku podkreślenia nazwa nie może zawiera znaków interpunkcyjnych:! @ & ‘$ # ? , * . { } ( ) [ ] = + -^ % / \~ < > : ; ” nazwa nie może zawierać spacji; nie wskazane jest stosowanie w nazwach polskich liter; nazwa zmiennej może maksymalnie zawierać255 znaków; nazwa formularza lub formantu może zawierać do 40 znaków; nazwa nie może być taka sama jak nazwa funkcji, instrukcji lub metody wbudowanej; moduł kodu nie może zawierać procedur o tych samych nazwach; nazwy zmiennych mogą się powtarzać, gdy są deklarowane lokalnie w procedurach, a nie w sekcji deklaracji modułu należy zwrócić uwagę, że VBA nie rozróżnia wielkich i małych liter. Typy zmiennych: Opis Schemat Deklaracje zmiennych deklaracja nazwa As typ_zmiennej deklaracja Dim, Private zasięg lokalny - Public zasięg globalny Zmienne i typy danych Liczby całkowite: BYTE [0..255] INTEGER [-32768..32767] LONG [-2mld..2mld] Liczby rzeczywiste: SINGLE pojedyncza dokładność DOUBLE podwójna dokładność Tekst: STRING długość dynamiczna (max ok 2mld znaków) STRING*D stała dł. D = 0..65535 Logiczne: BOOLEAN 2 wartości: True, False Operatory 1) Operatory porównawcze: = równa się/przypisanie wartości zmiennej > większe

Transcript of VISUAL BASIC - tryba.cba.pl · VISUAL BASIC Poprawne nazewnictwo zmiennych i obiektów: Nazwa...

VISUAL BASIC

Poprawne nazewnictwo zmiennych i obiektów:

Nazwa powinna rozpoczynać się od litery;

wewnątrz nazwy można używać znaku podkreślenia

nazwa nie może zawiera znaków interpunkcyjnych:! @ & ‘$ # ? , * . { } ( ) [ ] = + -^ % / \~ < > : ; ”

nazwa nie może zawierać spacji;

nie wskazane jest stosowanie w nazwach polskich liter;

nazwa zmiennej może maksymalnie zawierać255 znaków;

nazwa formularza lub formantu może zawierać do 40 znaków;

nazwa nie może być taka sama jak nazwa funkcji, instrukcji lub metody wbudowanej;

moduł kodu nie może zawierać procedur o tych samych nazwach;

nazwy zmiennych mogą się powtarzać, gdy są deklarowane lokalnie w procedurach, a nie w sekcji

deklaracji modułu

należy zwrócić uwagę, że VBA nie rozróżnia wielkich i małych liter.

Typy zmiennych:

Opis Schemat

Deklaracje

zmiennych

deklaracja nazwa As typ_zmiennej

deklaracja – Dim, Private – zasięg lokalny

- Public – zasięg globalny

Zmienne i typy

danych

Liczby całkowite:

BYTE [0..255]

INTEGER [-32768..32767]

LONG [-2mld..2mld]

Liczby rzeczywiste:

SINGLE pojedyncza dokładność

DOUBLE podwójna dokładność

Tekst:

STRING długość dynamiczna (max ok 2mld znaków)

STRING*D stała dł. D = 0..65535

Logiczne:

BOOLEAN 2 wartości: True, False

Operatory

1) Operatory porównawcze:

= równa się/przypisanie wartości zmiennej

> większe

>= większe równe

< mniejsze

<= mniejsze równe

<> różne

2) Operatory arytmetyczne:

+ dodawanie

– odejmowanie

* mnożenie

/ dzielenie

^ potęgowanie

\ dzielenie całkowite

MOD reszta z dzielenia całkowitego

3) Operatory łączenia tekstów:

+ łączy dwa teksty

& wymusza łączenie tekstu z innym typem danych

Wyrażenie

ZWF [operator ZWF operator ZWF ...] gdzie:

ZWF – zmienna lub wartość lub funkcja

operator – operator inny niż logiczny

Operatory logiczne

NOT() zaprzeczenie

() AND () koniunkcja

() OR () alternatywa

Wyrażenie logiczne

(Warunek)

1) pojedynczy:

wyrażenie operatorP wyrażenie gdzie:

wyrażenie – opisano wcześniej

operatorP – operator porównawczy

2) złożony:

(warunek1) operatorL (warunek2) …gdzie:

warunek1, warunek2 – warunki pojedyncze

operatorL – operator logiczny

Instrukcja

warunkowa

IF warunek1 THEN

ciąg instrukcji

[ELSEIF warunek2 THEN

ciąg instrukcji]

[ELSE

ciąg instrukcji]

END IF

Instrukcja wyboru

SELECT CASE parametr

CASE wartość1

ciąg instrukcji

[CASE wartość2

ciąg instrukcji]

[…………………

……………….]

[CASE ELSE

ciąg instrukcji]

END SELECT

Pętla FOR

FOR licznik = wp TO wk [STEP wartość]

ciąg instrukcji

NEXT licznik

wp-wartość początkowa

wk-wartość końcowa

wartość – liczba całkowita dodatnia

Pętla DO/LOOP

DO [WHILE/UNTIL warunek]

ciąg instrukcji

LOOP [WHILE/UNTIL warunek]

Wbudowane funkcje

liczbowe

S As STRING

X As DOUBLE

STR(X) -zamienia liczbę na tekst

SIN(X), COS(X), TAN(X) f-cje trygonom. (X – kąt w radianach)

ATN(X) -arcus tangens – wynik w rad.

SQR(X) -pierwiastek kwadratowy (X>=0)

ABS(X) -wartość bezwzględna

SGN(X) (-1 dla X<0, 0 dla X=0, 1 dla X>0)

FIX(X) -zwraca część całkowitą z X

INT(X) -jw ale ujemne zaokrągla w dół

RND -losuje liczbę rzeczywistą <0, 1>

LOG(X) -logarytm naturalny z X

EXP(X) -odwrotność LOG(X)

Wbudowane funkcje

tekstowe

S, S1 As STRING

K, L As INTEGER

VAL(S) -zamienia tekst na liczbę

LEN(S) -długość tekstu/liczba znaków

LEFT(S, L) -wycina L pierwszych znaków

RIGHT(S, L) -wycina L ostatnich znaków

MID(S, K, L) -wycina L znaków z poz. K

INSTR(S, S1) -szuka pozycji S1 w S

INSTR(K, S, S1) -jw ale zaczyna od poz K

TRIM(S) -obcina spacje na pocz. i końcu

LCASE(S) -zamienia na małe litery

UCASE(S) -zamienia na wielkie litery

MsgBox

1) Jako procedura:

MsgBox tekst1, ikona+przyciski, tekst2

2) Jako funkcja:

…=MsgBox(tekst1, ikona+przyciski, tekst2)

tekst1 – komunikat pojawiający się w oknie

tekst2 – tytuł okienka

ikona: vbInformation – ikonka informacyjna

vbQuestion – znak zapytania

vbExclamation – wykrzyknik

vbCritical – znak krytycznego błędu

przyciski:

vbOKOnly – tylko OK (można pominąć

vbOKCancel – OK/Anuluj

vbYesNo – Tak/Nie

vbYesNoCancel – Tak/Nie/Anuluj

vbAbortRetryIgnore – Przerwij/Ponów/Zignoruj

InputBox … = InputBox(komunikat)

Procedura

deklaracja SUB nazwa(parametry)

ciąg instrukcji

END SUB

deklaracja – rodzaj deklaracji procedury (zasięg działania):

Private – widoczna tylko w części kodu, w której jest deklarowana;

Public – widoczna w całym programie;

nazwa – procedurę wywołuje się za pomocą zadeklarowanej nazwy;

parametry – zmienne podawane przy wywołaniu procedury.

Funkcja

dekl. FUNCTION nazwa(parametry) As typ

ciąg instrukcji

nazwa = wynik

END FUNCTION

dekl. – rodzaj deklaracji (patrz wyżej)

nazwa, parametry – patrz wyżej

wynik – nazwie funkcji musi być przypisane jakieś wyrażenie

obliczające wynik działania funkcji związany z jej typem.

Okno Edytora

Środowisko edytora składa się z następujących elementów:

pasek poleceń i menu z opcjami „file”, „edit”, „view” itd.,

przybornik - daje dostęp do formantów systemu Visual Basic,

okno właściwości - umożliwia zmianę właściwości obiektów,

okno eksploratora projektu - umożliwia przełączanie się między składnikami projektu,

okno projektu - w nim znajduje się obiekt z rozmieszczonymi formantami,

okno kodu - w nim wpisujemy kod programu.

Początek Moduły-nowy-

Nadawanie nazwy: zaznaczyć nazwę _w oknie Properties tak, jak to widać na rysunku, i wpisać inną

nazwę. Na pasku narzędziowym klik na przycisk Save. Nazwę modułu można również zmienić

klikając ją prawym przyciskiem myszy w oknie dialogowym Baza danych i wybierając z menu

podręcznego polecenie Zmień nazwę.

Zapis kodu

Kod VBA jest zapisywana w blokach zwanych procedurami. Dzielimy je na dwa rodzaje:

procedury typu Sub (podprogramy) i procedury typu Function. Podprogramy wykonują zadania, ale

nie zwracają wartości, funkcje zwracają wartość.

Na górze modułu widać: Option Compare Database. Są to deklaracje ogólne modułu.

Zapis ten umożliwia wybranie jednego z trzech sposobów sortowania łańcuchów znakowych

wewnątrz kodu:

Option Compare Database powoduje sortowanie w takim samym porządku jak sortowanie rekordów

bazy danych i jest to opcja najczęściej stosowana.

Zadanie

Ustaw ToolsOptions-require variables aby wymusić deklarowanie zmiennych przed ich użyciem.

Napisz Sub addNumbers() i naciśnij Enter zostanie dodana zdania zamykające End Sub

rozpoczynanie nazwy od małej litery

wcinania kod procedur

staranne komentowanie , komentarza rozpoczynamy od apostrofu, zostaje on wyróżniony na

zielono

Co oznaczają poszczególne kolory, można zobaczyć, w Tools/Options.

Po otwarciu okna dialogowego Options karta Editor Format pokaże znaczenie poszczególnych

kolorów i pozwoli na dokonanie zmian schematu

Deklarowanie zmiennych

Deklarując zmienną określa się typ danych jaki może przyjmować ta zmienna. Aby to zrobić, należy

użyć instrukcji Dim. Słowo Private określa deklarowanie zmiennej prywatnej a Public zmiennej

publicznej.

Nadawanie wartości zmiennym

NazwaZmiennej = Wyrażenie

Przykład użycia operatora podstawienia:

intLiczba = 1

intKomunikat = MsgBox ("To jest komunikat")

Zmiennej intLiczba przypisywana jest wartość 1. Zmiennej intKomunikat przypisywany jest wynik

działania funkcji MsgBox() (najpierw wykonywana jest funkcja, a po jej zakończeniu otrzymany z

funkcji wynik jest przypisywany zmiennej).

Typ danych zapisywanego wyrażenia musi być zgodny z typem danych zmiennej

NazwaZmiennej = NazwaZmiennej operator Wyrażenie

Operator jest operatorem matematycznym, logicznym lub łańcuchowym (w zależności od typu

zmiennej). Ponieważ najpierw jest wykonywane działanie po prawej stronie, więc najpierw zostanie

obliczona wartość tam występująca a dopiero potem nowa wartość zostanie podstawiona pod zmienną

NazwaZmiennej.

Przykład:

intLiczba = 10

ntLiczba = intLiczba + 5

Zmiennej intLiczba przypisywana jest wartość 10. Wartość zmiennej intLiczba zostanie zwiększona

później o 5 (10+5) i przypisana zmiennej intLiczba. Po wykonaniu podstawienia zmienna intLiczba

będzie miała wartość 15.

Zmienne prywatnego poziomu modułu

Zmienne z zasięgiem prywatnego poziomu modułu są widzialne dla wszystkich procedur w ich

macierzystym formularzu lub module, ale nie dla innych formularzy lub modułów. Przykład

zadeklarować sngLiczba jako zmiennej Single prywatnego poziomu modułu:

Private sngLiczba As Single

Zmienne poziomu modułu są przydatne do obliczeń, których wyniki mają być wspólne dla różnych

procedur w jednym formularzu lub module.

Zmienne publicznego poziomu modułu

Zmienne z zasięgiem publicznego poziomu modułu są widzialne dla każdej procedury w każdym

formularzu w całym projekcie

Public strKomunikat As String

Zmienne publicznego poziomu modułu są przydatne do obliczeń, których wyniki powinny być

wspólne dla całości projektu ze wszystkimi formularzami i/lub modułami.

Przesłanianie

Visual Basic umożliwia deklarowanie tej samej nazwy dla zmiennych lub stałych symbolicznych

różnych zasięgów. Na przykład, można zadeklarować dwie zmienne intNumber w ogólnym module:

jedną zmienną publiczną, a drugą zmienną prywatną. Która z tych dwóch zmiennych będzie używana

w Visual Basic zależy od tego, która część kodu została uruchomiona, kiedy została zastosowana

zmienna. Jeżeli procedura, w której zadeklarowaliśmy prywatną zmienną intNumber, została

uruchomiona, Visual Basic będzie używał zmiennej prywatnej intNumber. Jeżeli ta procedura nie

została uruchomiona, Visual Basic zastosuje zmienną publiczną intNumber. Zmienne publiczne

zostają przesłonięte przez zmienne prywatne o tej samej nazwie. Wartość zmiennej publicznej nie

ulegnie zmianie a każde odwołanie do zmiennej będzie się odnosiło do zmiennej prywatnej. Visual

Basic zawsze używa zmiennej, która jest bliższa uruchomionemu kodowi.

Stałe

Jeżeli w programie używać będziemy zmiennej posiadającej jedną-niezmienną wartość wówczas

zadeklarujemy ją jako stałą.

Const nazwa_stalej = wartosc

Możemy zadeklarować stale publiczne lub prywatne wraz z wskazaniem typu.

[Public | Private] Const nazwa_stalej [As type] = wartosc

Zadanie

Wpisz:

Sub addNumbers()

'deklaracja zmiennych

Dim intNumber1 As Integer

Dim intNumber2 As Integer

Dim intSun As Integer

End Sub

Zostaną zapamiętane dwie liczby. Po dodaniu ich suma zostanie zapamiętana w zmiennej intSun

Variant

Variant pozwala VBA na samodzielne określanie, jaki typ danych jest zapamiętywany. Jest to

domyślny typ zmiennych, jeżeli w deklaracji zmiennej pominiemy klauzule As Integer. Wielu

programistów uważa, że użycie zbyt wielu zmiennych typu varianyt powoduje zbędne zajmowanie

pamięci i spowalnia działanie kodu

Użycie funkcji InputBox

Wpisz

Sub addNumbers()

'deklaracja zmiennych

Dim intNumber1 As Integer

Dim intNumber2 As Integer

Dim intSun As Integer

'uzycie InputBox do wprowadzenia liczb

intNumber1 = InputBox("Wpisz pierwszą liczbę")

intNumber2 = InputBox("Wpisz drugą liczbę")

End Sub

Uruchom kod, klikając przycisk Run: Spowoduje to wyświetlenie pokazanego tu okna dialogowego

do wprowadzenia pierwszej liczby (do wprowadzenia drugiej liczby zostanie wyświetlone oddzielne

okno).

Jeżeli dodamy zapis:

'Wyjście informacji

Debug.Print "Podane liczby to " & intNumber1 & " i " & intNumber2

To podane liczby pokażą się na dole w oknie Immediat. Jeśli go nie ma, to View-Immediate.

Innym sposobem formatowania wyjścia jest użycie okna komunikatów

Struktura decyzyjna

Wpisz

Sub ifTekst()

Dim intNum As Integer

Dim strMessage As String

intNum = 12

If intNum > 10 Then

strMessage = "Liczba jest równa " & intNum

End If

Debug.Print strMessage

End Sub

Wynik działania: Liczba jest równa 12

Poprawiamy kod

Zadanie

Użyj funkcji wbudowanych do wprowadzania liczby i wyświetlania wyjściowego komunikatu

Sub ifTekst()

Dim intNum As Integer

Dim strMessage As String

'uzycie InputBox do wprowadzenia liczby

intNum = InputBox("Wpisz liczbę")

If intNum > 10 Then

strMessage = "liczba jest większa od 10"

Else

strMessage = "liczba jest mniejsza lub równa 10"

End If

Debug.Print strMessage

'Komunikator

MsgBox "Podana " & strMessage & " ‘’

End Sub

Warunki złożone

Zmodyfikuj kod, opisz działanie programu

Option Compare Database

Option Explicit

Private intNum As Integer

Sub ifTekst()

Dim strMessage As String

'uzycie InputBox do wprowadzenia liczby

intNum = InputBox("Wpisz liczbę od 1 do 15")

If intNum >= 1 And intNum <= 15 Then

ifTest2

Else

MsgBox "Liczba musi byc z przedziału od 1 do 15"

End If

End Sub

Sub ifTest2()

If intNum > 10 Then

MsgBox intNum & " jest większa od 10"

Else

MsgBox intNum & " jest mniejsza lub równa 10"

End If

End Sub

Zadeklarowano zmienną intNum jako globalną

Instrukcja ElseIf

Option Compare Database

Option Explicit

Sub ifTekst()

Dim intNum As Integer

intNum = 12

If intNum = 1 Then

Debug.Print "To jest najmniejsza liczba"

ElseIf intNum = 15 Then

Debug.Print "To jest największa liczba"

Else

Debug.Print "To jest liczba większa od 1 i mniejsza od 15"

End If

End Sub

Instrukcja Select Case

Zastępuje wielokrotne używanie instrukcji ElseIf