#W procedurze umieszczonej wewnątrz zakresu tablicy instrukcja ReDim może służyć do zmiany liczby wymiarów, definiowania liczby elementów oraz definiowania górnego i dolnego ograniczenia dla każdego z wymiarów. Instrukcja ReDim może być stosowana do zmiany tablicy dynamicznej dowolnie często. Każda jednak taka operacja powoduje utratę isniejących danych w tablicy. Aby powiększyć tablicę i zachować jej dotychczasowe dane, należy użyć polecenia ReDim Preserze. Na przykład, poniższa instrukcja powiększa tablicę varTab o 10 elementów bez utraty bieżących wartości oryginalnych elementów.
#ReDim Preserze warta(UBound(VarTab)+10)
#Uwaga stosując słowo kluczowe Preerve dla tablicy dynamicznej można zmienić jedynie górne ograniczenie ostatniego wymiaru, nie można jednak zmienić liczby wymiarów. Można również używać zmiennych.
Kod programu może być umieszczony w jednym z modułów VB:
module formy
module standardowym
module klasy.
Public Z=true <= dostępna dla wszystkich procedur w projekcie Deklarowania przez Public
Modul Y=100 <= dostępna dla wszystkich procedur w module, deklarowana przez Dim lub Private w General Declaration modułu
Procedura lub funkcja X=10 <= Dostępna jedynie we wnętrzy procedury lub funkcji. Zmienna deklarowana poprzez Dim we wnętrzu procedury
Zmienne publiczne zadeklarowane w module formy muszą być poprzedzone nazwą formy gdy są wywoływane przez procedurę innej formy (frmForm1.Z)
PRZEKAZYWANIE ARGUMENTÓW
#Wszystkie argumenty są przekazywane do procedury przez odwołanie, chyba że zostanie to określone inaczej. Metoda ta jest efektywna , fyż czas przekazywania w ten sposób wszystkich argumentów jest taki sam i zajmują one tę samą wielkość pamięci (4 bajty) wewnątrz procesy niezależnie od typu danych.
#Jeżeli w deklaracji procedury zostanie dodane słowo kluczowe ByVal, wskazany argument będzie przekazywany przez wartość. Argumenty przekazywane przez wartość zajmują w procedurze od 2 do 16 bajtów, zależnie od typu danych argumentów. Większe typy danych (np. String i Wariant) są przekazywane przez wartość nieco dłużej niż małe.
Przekazanie argumentu przez wartość powoduje skopiowanie oryginalnej zmiennej. Zmiany dokonane w arugmencie wewnątrz procedury nie są odzwierciedlane w oryginalnej zmiennej.
#Ponieważ ByVal tworzy kopię argumentu, pozwala to przekazać zmienną typu Wariant do funkcji. Nie można przekazywać zmiennej typu wariant przez odwołanie, jeśli procedura deklarująca argument przyjmuje inny typ danych.
PRZEKAZYWANIE ARGUMENTÓW PRZYKŁAD
Function Silnia (ByVal MojaZm As Integer) ‘Deklaracja funkcji
MojaZm = MojaZm – 1
If MojaZm = 0 then
Silnia = 1
Exit Function
End If
Silnia = Silnia (MojaZm) * (MojaZm + 1)
End Function
‘wywołanie funkcji Silnia dla zmiennej S.
S=5
Debug.Print Silnia(S) ‘wyświetla 120(5!)
Debug .Print S `wyświetla 5
Gdyby nie dodano słowa ByVal w deklaracji funkcji w tym przykładzie zwróci się zamiast 120, 0.
ARGUMENTY OPCJONALNE PROCEDYRY LUB FUNKCJI
#Argument opcjonalny musi być poprzedzony słowem kluczowym Optional. Umieszcza się go na końcu listy argumentów. Mają one zawsze typ Wariant, którego nie można zmienić. Np. – obliczanie średniej 2 lub 3:
Function Avg(licz1, licz2, Optional licz3)
Dim ileLiczb As Integer
ileLiczb = 3
If IsMissing(licz2) Then licz3 = : ileLiczb = ileLiczb – 1
Avg = (licz1 + licz2 + licz3)/ileLiczb
#Występująca tu funkcja isMissing(licz3) ustala, czy argument opcjonalny został przekazany procedurze (ma wartość ….
Funkcja MsgBox()
#Składnia
ZmiennaCalkowita = MsgBox( strWiadomość [,[intRodzzj] _ [,strTytul]])
# obowiązkowy argument – strWiadomość – zawierający treść komunikatu, do 1024 znaków. powinien być pisany w jednej linii Można go rozdzielić na pojedyncze linie za pomocą znaków Chr(13), Chr(10)
#argumenty opcjonalne:
#intRodzaj – suma wartości z tabel sterujących (sterowanie bitowe)
#strTytul – łańcuch wyświetlany na pasku nazwy
#wartości zwracane przez funkcję MsgBox() – zmienna całkowita:
1 - cbOK
2 – vbCancel (anuluj)
3 – vbAbort (przerwij)
4 – vbRetry (Ponów próbę)
5 – vbIgnore (ignoruj)
6 – vbYes (tak)
7 – vbNo (nie)
FUNKCJA MSGBOX()
•intRodzaj – suma wartości z table sterujących (sterowanie bitowe):
•VbOKonly – 0 – wyświetla przycisk OK.
•VbOKCancel – 1 – wyświetla przycisk OK. i Anuluj
•VbAbort – AbortRetryIgnore – 2 – wyświetla przerwij ponów ignoruj
• VbYesNoCancel – 3 – wyświetla tak nie anuluj
•VbYesNo – 4 – wyświetla Tak Nie
•VbRetryCancel – 5 – wyświetla Ponów Anuluj
• VbCritical – 16 - …
#Kolejność argumentów można zmienić ale wówczas należy poprzedzić je nazwą, np.:
MsgBox title: = tyt, promet: = pytanie, buttons: = przyciski
sub KomTakNie()
Dim pytanie As String, tyt As String, przyciski As Integer, _
wybPrzycisk As Integer
pytanie = “Czy chcesz zachować skoroszyt” & Chr(13) & Chr(10)
pytanie = pytanie & „pod nazwą” „Marysia.xls””” & Chr(13) & Chr(10)_ & „Jeśli tak, to przygotuj czysty dysk”
‘przyciski = vbYesNo = vbQuestion + vbDefaultButton1
przyciski = 36 ‘+ 4096 ‘ przyciski = 4 + 32 + 0
tyt = „Zapisz skoroszyt”
wybPrzycisk = MsgBox(Titr:=tyt…
FUNKCJA InputBox()
złuży żeby pobierać od użytkownika dane
#Skłądnia
strZmienna = ImpetBox( strPytanie [, [str tytul] _
[,strDomyslne] [,intXpoz, intYpoz]])
#jeden obowiązkowy argument – strPytanie – zawierający traść komunikatu (max. 1024 znaki)
• strTytul – łańcuch wyświetlany na pasku nazwy
• strDomyslne – domyślna wartość odpowiedzi, którą możńa zaakceptować lub zmienić
• intXpoz, intYpoz – dokładna pozycja okna na formularzu, w ….
INSTRUKCJA WARUNKOWA
• If TestPorównujący Then
Jedna lub wiele instrukcji
• If TestPorównujący Then instrukcja
jenda lub wiele instrukcji
Else
jedna lub wiele instrukcji
•Instrukcje zagnieżdżone
W przypadku instrukcji zagnieżdżonych lepiej używać struktury:
If warunek1 Then
instrukcje, gdy warunek1 jest prawdziwy
ElseIf warunek2 Then
instrukcje, gdy warunek2 jest prawdziwy
ElseIf warunek3 Then
instrukcje, gdy warunek3 jest prawdziwy
………
instrukcje, gdy wszystkie warunki są fałszywe
INSTRUKCJA Selekt Case
Select Case wyrażenie
Case wartość (lub ewartości oddzielone przecinkami)
Case Is relacja
Case wyrażenie1 To wyrażenie2
Case Else
End Select
PĘTLE
Pętle są zbiorem instrukcji które należy wykonać wielokrotnie. Program dykuje ile razy pętla ta wykona zawarty w niej blok instrukcji i jakie mają być warunki zakończenia jej działania. Pętle są przydatne np. przy wielokrotnm przetwarzaniu złożonych danych
Dwie podstawowe struktury to:
Do … loop (nie wiemy ile razy ma się wykonać)
For … Next (kiedy wiemy ile razy chcemy taką pętlę wykonać)
Pętla Do … Loop
Do
If warunek Then Exit Do
instrukcje
Loop
Wpisane w pętli instrykcje poprzedza instrukcja warunkowa. Pozostałe instrukcje są wykonywane tak długo, aż spełniony warunek narzucony w instrukcji warunkowej. Wówczas następuje opuszczenie pętli.
Pętla Do Until .. Loop
Do Until warunek pętli
loop
Wyjście z pętli następuje w chwili, gdy wpisany warunek przyjmuje wartość True.
Pętla Chile … Loop
Do Chile warunek pętli
Pętla Do Chile .. Loop to pętla, w której wpisane instrukcje powtarzane są dopóki dany warunek ma wartość True.
---------braki
OPERATORY LOGICZNE
• And If(a>b) And(c<d)
• Or If(a>b) Or(c<d)
• Not If Not(strAns = “tak”)
Nawiasy okrągłe () mogą być używane aby zmienić kolejność wykonywania działań. Działania zawarte w nawiasach zawsze są wykonywane przed działaniami poza nawiasami. Wewnątrz nawiasów obowiązuje kolejność wykonywania działań zgodna z priorytetami.
Operator Łączenia łańcuchów (&) nie jest operatorem arytmetycznym ale ma swój priorytet i występuje za wszystkimi operatorami arytmetycznymi i przed operatorami logicznymi.
Operator Like ma taki priorytet jak wszystkie operatory porówniania
Operator Is ..
TRSTOWANIE APLIKACJI
W tworzonej aplikacji zazwyczaj znajduje się wiele błędów. Błędy składniowe są łatwe do poprawienia, ponieważ Visual Basic sam je sygnalizuje. Część jest wykrywana już w czasie pisania kodu programu, a część przy próbie skomplowania. Błędy wykonania ujawniają się dopiero podczas wykonywania programu.
Najtrudniejsze do zlokalizowania są błędy logiczne, ponieważ nie są sygnalizowane przez Visual Basic. Wynikają one z błędu programisty. Dla Visual Basic są poprawionymi instrukcjami, natomiast aplikacja nie działa zgodnie z założeniami programisty.
Najlepszym sposobem na wykrycie błędów jest uruchomienie aplikacji. Visual Basic dostarcza narzędzia, które pomagają śledzić zachowanie aplikacji podczas działania. Jednym z takich narzędzi jest Debugger. Daje on możliwość śledzenia wszystkich szczegółów pracy programu i kontrolowanie wartości zminnych.
Visual Basic zapewnia szeroki asortyment narzędzi do wykrywania błędów i cech, które pomagają zlokalizować i poprawić błędy w kodzie: Tryb przerwania/edycji programu.
Tryb przerwania zatrzymuje uruchomioną aplikację, ale pozostawia jej bieżące zminne i ustawienia właściwości. Jest jakby zaprezentowaniem stanu programu w określonej chwili podczas jego działania. W trybie przerwania można zbadać i zmienić bieżące wartości i właściwości, wprowadzić znaczne modyfikacje kodu i określi jakie instrukcje aplikacji będą uruchomione jako następne. Po zakończeniu edycji, można kontynuować uruchomienie programu. Ta bardzo przydatna ch…
Wyrażenie Watch
Wyrażenia Watch umożliwiają monitorowani wartości określonych zmiennych, właściwości i wyrażeń w czasie działania programu. Wyrażenia Watch są wyświetlone w obszarze Watch okna Debug w trybie przerwania (poza wyrażeniami Watch, które pojawiają się w ich własnym okienku dialogowym). Można przerwać wykonanie programu, kiedy wyrażenie Watch ulega zmianie lub ma wartość True.
Aby dodać wyrażenie Watch do programu należy:
W czasie projektowania lub podczas trybu przerwania wybrać z menu Debug, Add Watch, aby otworzyć okienko dialogowe Add Watch.
W okienku tekstowym Expression należy wpisać zmienną, właściwość lub wyrażenie, które ma być obserwowane.
{Resume powoduje powrót do wiersza który wygenerował błąd}
Przy pomocy mechanizmów obsługi wyjątków możemy obsługiwać wyjątki w tym również możemy obsługiwać błędy które powstają prz…}
Obsługa błędów
On Error Go To etykieta
Przy pomocy Err.Raise możemy generować błędy programowe.
PRACA Z PLIKAMI
• Plik (file) to zbiór powiązanych ze sobą danych. Rozróżnia się pliki tekstowe składające się z łańcuchów znaków typu ASCII, oraz pliki binarne dostępne tylko dla niektórych programów i narzędzi systemowych. Do operacji na plikach i folderach wykorzystywane są funkcje:# CurDir[(dysk)] – zwraca ścieżkę dla bieżącego folderu na podanym dysku lub bez podania argumentu – na dysku biężącym.
• Dir[(nazwa_ścieszki)] – pozwala sprawdzić czy dany plik lub folder istnieje.
# FileLen (nazwa_ścieżki) – sprawdza wielkości pliku w bajtach. chcąc sprawdzić wielkość kilku plików można zsumować je przy użyciu pętli Do…loop, np.:
Dim plik As String
Dim suma As Long
plik = Dir(“d;\*.*”) ‘pliki z rozszerzeniem.d;;, lub wszystkie pliki
Dir(„d:\*.*”)
suma = 0
Do Chile plik <>””
suma = suma + FileLen(„d;\” & plik)
plik = Dir
‘Debug.Print „Suma bajtów =” & ….
#GetAtrt(nazwa_ścieżki) – sprawdzanie atrybutów pliku. Funkcja zwraca wynik typu Integer, jako jedna lub sumę stałych określających atrybuty.
Do sprawdzenia atrybutów używany jest operator and. porównujący wartości zwrócona przez funkcję GetrAttr z wartością odpowiedniej stałej.
#SetAttr nazwa_ścieżki, atrybuty – ustawienie atrybutów, np.: SetAttr
#ChDrive dysk – zmiana bieżącego dysku
# ChdDir ścieżka – zmiana bieżącego katalogu bez zmiany bieżącego dysku.
[Nie musimy pamiętać bo zawsze mamy pod ręką naszą przeglądarkę obiektów gdzie są wszystkie funkcje.]
DOSTĘP DO PLIKU
# Dostęp sekwencyjny – stosowany do plików tekstowych w których dane nie są zachowane w ustalonym porządku Posiadają trzy tryby pracy: Input – czytanie z pliku, Outpit – pisanie do nowego pliku (lub nadpisanie poprzednich wartości), oraz Appena – dopisywanie na końcu do isniejącego pliku.
#Dostęp swobodny – stosowany do plików tekstowych, w których dane zachowane są w rekordach o ustalonej wielkości i polach oddzielonych przecinkami. Mają tylko jeden tryb – Random
# Dostęp binarny – stosowany do plików graficznych i innych . Można je otworzyć tylko w trybie Binary.
Open strFilename [For Mode] As [#] intFileNumber
gdzie:
strFilename – nazwa pliku (typu string) wraz ze ściężką dostępu
Mode – operacje wykonywane w zależności od rodzaju dostępu do pliku
[#] – znak opcjonalny,
int FileNumber – liczna całkowita z zakresu 1 do 255 łącząca otwarty plik z określoną liczbą. Numer pliku nazywany jest kanałem pliku.
Kolejny wolny numer pliku zwraca funkcja FreeFile ().
[Oczywiście możemy sobie otwierać kilku plików jednocześnie]
OTWIERANIE PLIKU W RÓŻNYCH TRYBACH
• Otwieranie w trybie sekwencyjnym
Open „TESTFILE” For Input AS #1
•Otwieranie w trybie binarnym tylko do zapisu
Open TESTFILE” For Binary Avvess Write As #1
• Otwieranie w trybie swobodnym poprzedzone definicją rekordu
Type Rekord 1Define user – defined type.
ID As Integer
Name As String * 20
End Type
Dim MyRecorf As Recon ` dejkaracja
Open TESTFILE” For Random As #1 Len = Len(MyRecord)
Funkcja Len podaje liczbę bajtów potrzebnych do zapisu zmienej
• Otwieranie bez możliwości dostępu do innych procesów
Open TESTFILE” For Binary Access Read Lock Read As #1
[przy otwieraniu pliku w trybie swobodnym musimy określić jaka jest długość w bajtach pliku. czyli przy otwieraniu pliku w trybie random musimy określić koniecznie parametr określony przez wartość Len który musi być równy długości rekordu liczonym w bajtach.
Żeby się nie pomylić można użyć właśnie tej funkcji Len która działa na zmiennej MyRecord obliczając długość tego rekordu i ustawia ją jako zmienną len naszego zbioru
Te bajty są zapisywane jeden za drugim czyli ktoś kto odczytuje i nie zna struktury rekordu nie może odczytać (lub będzie miał trudność) plik
Jeżeli otworzymy plik to on przestaje być dostępny dla innych procesów ale możemy tą dostępnością sterować przy pomocy Shared (współdzielenia) Umożliwia to dwóm procesom uruchomionym jednocześnie korzystać z jednego pliku
...
ynni2