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