vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest piątek, 26 kwietnia 2024 roku.
Ustaw jako stronę startową Ulubione Napisz
Artykuły
Kurs VBA dla zielonych - cz. 2
zamieszczony: 5 listopada 2003
przez: admin
czytany 65393 razy.

Z poprzedniej części kursu wiemy już jak zorganizowany jest edytor VBA, wiemy też, że moduły są to miejsca, w których umieszczamy kod źródłowy.
Ale w jaki sposób? Instrukcje w modułach są pogrupowane w procedury i funkcje.
Ciąg instrukcji, zawarty pomiędzy słowami kluczowymi Sub a End Sub to procedura.
Przykładowa procedura, obliczającą sumę dwu liczb, przedstawiona jest poniżej:

Sub Oblicz()

Dim liczba1 As Double
Dim liczba2 As Double
Dim wynik As Double

liczba1 = 10
liczba2 = 2.56
wynik = liczba1 + liczba2

MsgBox "Wynik:" & wynik

End Sub

Po słowie kluczowym Sub występuje nazwa procedury i dwa nawiasy. W nawiasach mogą występować argumenty, czyli dane, przekazywane do procedury przez inna procedurę. Następny blok instrukcji (trzy wiersze, zaczynające się od słowa kluczowego Dim) to deklaracja zmiennych - czyli zarezerwowanie w pamięci komputera miejsca na dane. W Visual Basicu deklaracja zmiennych nie jest co prawda niezbędna, gdyż kompilator sam niezadeklarowane zmienne określa jako typ Variant. Jest to jednak bardzo rozbudowany typ danych i zajmuje dużo miejsca w pamięci. Dlatego też deklarowanie zmiennych jest dobrym sposobem na optymalizowanie zużycia zasobów komputera.
Następne wiersze to już instrukcje podstawienia, do zmiennych liczba1 i liczba2 są przypisane odpowiednie wartości, a do zmiennej wynik - ich suma. Ostatni wiersz służy do wypisania na ekranie wyniku dodawania. Jest to standardowe okienko komunikatu systemu Windows.

Funkcja - jest ciąg instrukcji, występujący pomiędzy słowami kluczowymi Function a End Function. Od procedury różni się tym, że funkcja zwraca wynik swoich działań. Przeanalizujmy przykład:

Function Suma(a As Double, b As Double) As Double

Suma = a + b

End Function

Sub Oblicz()

Dim liczba1 As Double
Dim liczba2 As Double

liczba1 = 10
liczba2 = 2.56

MsgBox "Wynik:" & Suma(liczba1, liczba2)

End Sub

Analizę zaczynamy od procedury Oblicz - wszystko jest tak, jak w poprzednim przypadku, aż do instrukcji MsgBox. Nie występuje tutaj zmienna reprezentująca wynik, jest natomiast wywołanie funkcji Suma. Funkcja Suma posiada 2 argumenty, a i b określone jako typ Double (liczba rzeczywista), wynik działania, czyli wartość zwracana przez ta funkcję, również jest określony jako Double. Wynik tej funkcji to suma argumentów a i b. Stosowanie funkcji to bardzo efektywne rozwiązanie w przypadku, gdy mamy do zachodzi potrzeba wielokrotnego dokonywania jakichś operacji. Zamiast za każdym razem wypisywać w procedurze skomplikowane wzory piszemy funkcję wykonującą tę operacje, a w procedurze odwołujemy się do tej funkcji.
Taki sposób programowania nazywamy programowaniem modułowym.
Zanim przejdziemy do dalszej części kilka słów o podstawowych instrukcjach w VBA.

Instrukcja warunkowa If.
Jeżeli chcemy by procedura wykonała różne zadania w zależności od np. wartości jakiej zmienne używamy instrukcji If. Poniżej przedstawiono kilka podstawowych składni tej instrukcji w VBA:

If wyrazenie_logiczne Then {ciag instrukcji}
If wyrazenie_logiczne Then {ciag instrukcji} Else {inny_ciag_instrukcji}
If wyrazenie_logiczne Then
  {ciag instrukcji}
Else
  {inny_ciag_instrukcji}
End If

wyrazenie_logiczne to takie wyrażenie które może przyjąć tylko jedna w dwu wartości: True (Prawda) albo False (Fałsz). Wyrażeniem logicznym może być np. wynik porównania dwu liczb (np. A<B).

Wyrażenie {ciag_instrukcji) występujące po słowie kluczowym Then reprezentuje instrukcje wykonywane w przypadku, gdy wyrażenie logiczne posiada wartość True. Jeżeli wartość wyrażenia wynosi False, realizowane są instrukcje po słowie kluczowym Else.
Instrukcja wyboru Select Case.
W przypadku instrukcji If...Then...Else mamy do wybory tylko dwie sytuacje. Jeżeli chcemy sterować przebiegiem programu w zależności od większej ilosci warunków, stosujemy Instrukcje Select Case. Jej składnia wygląda następująco:

Select Case wartosc_badana
    Case wartosc_1
        {ciag_instrukcji_1}
    Case wartosc_2
        {ciag_instrukcji_2}
    ....
    Case wartosc_n
        {ciag_instrukcji _n}
    Case Else
        {ciag_instrukcji}
End Select

W zależności od wartości wyrażenia wartosc_badana wykonywane będą odpowiednie instrukcje. W przypadku, gdy wartosc_badana będzie równa wartosc_1 to wykonywany będzie ciag_instrukcji_1, analogiczne dla pozostałych przypadków. W przypadku, gdy wartosc_badana nie będzie równa żadnej z wymienionych wartości , wykonywany będzie ciąg instrukcji po wierszy Case Else.

To tyle tytułem wstępu. W dalszej części kursu napiszemy pierwszy program. Będzie prosty, czterodziałaniowy kalkulator.
Wstawiamy do projektu formularz, nazywamy go frmKalkulator. Etykietę ustawiamy na "Kalkulator", następnie dodajemy do projektu moduł i nazywamy go modKalkulator (patrz rysunek).



Na formularzu osadzamy (wykorzystując paletę Toolbox):

- trzy pola tekstowe (nazwane odpowiednio txtS1, txtS2 i txtWynik),
Polom tekstowym txtS1 i txtS2 ustawiamy właściwości MaxLength (maksymalna długość) na 6 znaków. Pole txtWynik ma właściwość MaxLength ustawiona na 12, dodatkowo, żeby użytkownik nic nie mógł wpisać ustawiamy właściwość Locked na True.
- cztery przyciski opcji (Option Buttons) nazwane optDodawanie, optOdejmowanie, optMnozenie i optDzielenie,
- przycisk polecenia (Command Button), nazwany cmdKoniec z właściwością Caption (etykieta) ustawiona na "koniec",
- etykiety ze znakiem działania (lblDzialanie) i ze znakiem równości (nazwa dowolna)

Całość powinna wyglądać jak na rysunku:



A teraz uwaga, dodajemy kod!
W oknie modułu modKalkulator wpisujemy wpisujemy procedurę, która oblicza wynik działania.

Sub Oblicz()

Dim dblS1 As Double
Dim dblS2 As Double
Dim dblWynik As Double

'Konwersja danych na typ Double
dblS1 = CDbl(frmKalkulator.txtS1.Text)
dblS2 = CDbl(frmKalkulator.txtS2.Text)

Select Case frmKalkulator.lblDzialanie.Caption
    Case "+"
        dblWynik = dblS1 + dblS2
    Case "-"
        dblWynik = dblS1 - dblS2
    Case "x"
        dblWynik = dblS1 * dblS2
    Case ":"
        dblWynik = dblS1 / dblS2
End Select

'Wyświetlenie wyniku
frmKalkulator.txtWynik.Text = dblWynik

End Sub

oraz funkcję, która sprawdza poprawność wpisanych danych.

Function SprawdzDane() As Boolean

Dim objKontrolka As Control
SprawdzDane = True

'Jeżeli zawartość pola tekstowego nie jest liczbą
'idĽ do etykiety koniec
Set objKontrolka = frmKalkulator.txtS1
If Not IsNumeric(objKontrolka.Text) Then GoTo koniec
Set objKontrolka = frmKalkulator.txtS2
If Not IsNumeric(objKontrolka.Text) Then GoTo koniec

Set objKontrolka = Nothing

Exit Function

koniec:
MsgBox "Wpisz prawidłowe dane!", vbCritical
'Ustawienie fokusa na polu tekstowym z nieprawidłowymi danymi
objKontrolka.SetFocus

'zaznaczenie tekstu
objKontrolka.SelStart = 0
objKontrolka.SelLength = objKontrolka.TextLength

Set objKontrolka = Nothing
SprawdzDane = False

End Function

W oknie kodu formularza wpisujemy przedstawione poniżej procedury. Procedury te, zwane zdarzeniowymi są uruchamiane w wyniku operacji użytkownika, podejmowanych na elementach formularza (np. gdy użytkownik kliknie przycisk cmdOblicz, uruchomiona zostanie procedura cmdOblicz_Click.)

Private Sub cmdOblicz_Click()
  'Procedura wywołuje funkcje SprawdzDane
  'z modułu modKalkulator.
  'Instrukcja warunkowa If... Then sprawdza
  'wartosc tej funkcji i jeżeli ma ona wartosc TRUE,
  'to uruchamia procedurę Oblicz

  If SprawdzDane Then Oblicz

End Sub

Private Sub optDodawanie_Click()
  'Znak działania to etykieta lblDzialanie
  'Gdy użytkownik kliknie na przycisk opcji
  'znak działania zostanie odpowiednio zmieniony,
  'a wynik poprzedniego działania skasowany.
  lblDzialanie.Caption = "+"
  txtWynik.Text = ""
End Sub

Private Sub optDzielenie_Click()
  lblDzialanie.Caption = ":"
  txtWynik.Text = ""
End Sub

Private Sub optMnozenie_Click()
  lblDzialanie.Caption = "x"
  txtWynik.Text = ""
End Sub

Private Sub optOdejmowanie_Click()
  lblDzialanie.Caption = "-"
  txtWynik.Text = ""
End Sub

To w zasadzie wszystko. Pozostaje jeszcze sprawa uruchamiania programu, zależy ono od aplikacji macierzystej. Jeżeli wpisaliście ten kod do edytora VBA w AutoCADzie, zajrzyjcie tutaj. We wszystkich aplikacjach do uruchamiania procedur VBA służy przycisk F5, należy tylko kursor ustawić w oknie formularza i jazda.

Cóż, tyle tym razem. Czytajcie i analizujcie przedstawiony kod, a niebawem zabierzemy się do tworzenia naprawdę profesjonalnych makr.

wstecz