VISUAL BASIC Poprawne nazewnictwo zmiennych i obiektów

Transkrypt

VISUAL BASIC Poprawne nazewnictwo zmiennych i obiektów
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
Deklaracje
zmiennych
Schemat
deklaracja nazwa As typ_zmiennej
deklaracja – Dim, Private – zasięg lokalny
- Public – zasięg globalny
Liczby całkowite:
BYTE
[0..255]
INTEGER
[-32768..32767]
LONG
[-2mld..2mld]
Liczby rzeczywiste:
Zmienne i typy
danych
SINGLE
pojedyncza dokładność
DOUBLE
Tekst:
podwójna dokładność
STRING
długość dynamiczna
(max ok 2mld znaków)
STRING*D stała dł. D = 0..65535
Logiczne:
BOOLEAN 2 wartości: True, False
1) Operatory porównawcze:
Operatory
= 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
ZWF [operator ZWF operator ZWF ...] gdzie:
Wyrażenie
ZWF – zmienna lub wartość lub funkcja
operator – operator inny niż logiczny
NOT()
zaprzeczenie
Operatory logiczne
() AND () koniunkcja
() OR ()
alternatywa
1) pojedynczy:
wyrażenie operatorP wyrażenie gdzie:
wyrażenie – opisano wcześniej
Wyrażenie logiczne
(Warunek)
operatorP – operator porównawczy
2) złożony:
(warunek1) operatorL (warunek2) …gdzie:
warunek1, warunek2 – warunki pojedyncze
operatorL – operator logiczny
IF warunek1 THEN
ciąg instrukcji
[ELSEIF warunek2 THEN
Instrukcja
warunkowa
ciąg instrukcji]
[ELSE
ciąg instrukcji]
END IF
SELECT CASE parametr
CASE wartość1
ciąg instrukcji
[CASE wartość2
ciąg instrukcji]
Instrukcja wyboru
[…………………
……………….]
[CASE ELSE
ciąg instrukcji]
END SELECT
FOR licznik = wp TO wk [STEP wartość]
ciąg instrukcji
NEXT licznik
Pętla FOR
wp-wartość początkowa
wk-wartość końcowa
wartość – liczba całkowita dodatnia
DO [WHILE/UNTIL warunek]
Pętla DO/LOOP
ciąg instrukcji
LOOP [WHILE/UNTIL warunek]
S As STRING
Wbudowane funkcje
liczbowe
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)
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
Wbudowane funkcje
tekstowe
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
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
MsgBox
vbExclamation – wykrzyknik
vbCritical – znak krytycznego błędu
przyciski:
vbOKOnly – tylko OK (można pominąć
vbOKCancel – OK/Anuluj
vbYesNo – Tak/Nie
vbYesNoCancel – Tak/Nie/Anuluj
InputBox
vbAbortRetryIgnore – Przerwij/Ponów/Zignoruj
… = InputBox(komunikat)
deklaracja SUB nazwa(parametry)
ciąg instrukcji
END SUB
deklaracja – rodzaj deklaracji procedury (zasięg działania):
Procedura
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.
dekl. FUNCTION nazwa(parametry) As typ
Funkcja
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