POWRÓT

SEMESTR VI

Pisanie prostych aplikacji w języku VBA


Spis treści rozdziału - tutaj kliknij

Procedury SUB
Procedury Function
Operatory matematyczne, Zasady tworzenia nazw zmiennych
Pisanie kodu


 

Procedury SUB

     
   

    Procedura - jest to najmniejsza część kodu która posiada własną nazwę, jest to też najmniejsza część kodu którą można uruchomić niezależnie od innych części kodu. Procedura składa się z instrukcji deklarującej procedurę, linii kodu wykonywanych wewnątrz procedury oraz instrukcji zamykające. Ogólnie procedury dzielimy na; procedury sub oraz procedury Function.

Procedury Sub - są to podprogramy, które wykonują pewne działania w Excelu i służą do automatyzacji określonych, powtarzalnych działań. Cechą charakterystyczną jest to, że przyjmują argumenty ale nie zwracają wartości, dlatego nie mogą być wykorzystywane w formułach. Procedurę deklarujemy za pomocą słowa kluczowego Sub, instrukcja End Sub zamyka procedurę

Procedura Function - inaczej funkcja, to zbiór instrukcji VBA, które wykonują obliczenia i w odróżnieniu procedury Sub zwracają pojedyńczą wartość (lub tablicę). Procedury Function, podobnie jak funkcje wbudowane, mogą używać argumentów.
Mogą być użyte w dwóch sytuacjach;

  • jako część wyrażenia zawartego w procedurze języka VBA,
  • w formułach tworzonych w arkuszu.

Procedurę deklarujemy za pomocą słowa kluczowego Function i kończy instrukcją End Function.. Składnia funkcji jest następująca.


Procedura Sub - przykład

Sub Kurs()
  MsgBox "Początek kursu z języka VBA"
End Sub

    W przykładzie procedura Sub nosi nazwę Kurs. Za procedurą umieszczone są okrągłe nawiasy, które w większości są puste. Do procedur Sub można jednak przekazać argumenty innych procedur i wtedy wymienia się je między nawiasami.
Uwaga - podczas nagrywania makr w Excelu za pomocą rejestratora makr, powstaje zawsze procedura Sub, która nie posiada argumentów, więc nawiasy są puste.
Uruchamianie procedury Sub
Uruchomienie procedury Sub oznacza to samo, co jej wykonanie lub wywołanie. Jest wiele sposobów uruchomienia procedury Sub.

Poniżej lista dostępnych sposobów używanych do wywoływania procedur Sub.

  • za pomocą polecenia Run/Run Sub/UserForm w edytorze VBE. Excel wykonuje procedurę, w obrębie której znajduje się kursor,
  • z poziomu okna dialogowego Makro w Excelu,
  • skrótu klawiaturowego Ctrl + x lub Ctrl + Shift + x, gdzie x jest klawiszem przypisanym do danej procedury,
  • klikając na przycisk w arkuszu kalkulacyjnym,
  • wywołując (uruchomiając) procedurę z wnętrza innej procedury Sub,
  • z poziomu okna Immediate w edytorze VBE

Do góry


 

Procedury Function - tworzenie funkcji

     
   

W przykładzie

Function PoleKwadratu(bok)
   ' Oblicza pole kwadratu
   PoleKwadratu = bok * bok
End Function

  • Function - słowo kluczowe, PoleKwadratu - nazwa funkcji, (bok) - argument,
  • Drugi wiersz - to zwykły komentarz.
  • Kolejny wiersz - PoleKwadratu - kolejna instrukcja, za pomocą której obliczamy pole kwadratu. Gdy uruchomisz tę funkcję obliczy pole kwadratu.
  • Kod procedury kończy się poleceniem End Function

Tutaj do pobrania skoroszyt do ćwiczeń Test »»» 

    Procedury Function można stosować tam, gdzie są używane funkcje arkuszowe Excela lub wbudowanane funkcje języka VBA. Excel 2013 posiada ponad 450 predefiniowanych funkcji arkuszowych, które można używać w formułach. Ale możemy spotkać się z sytuacją, gdy stwierdzimy, że brakuje nam funkcji. Wtedy możemy przy użyciu VBA tworzyć własne funkcje.
    Kiedy taką funkcję należy stworzyć?? Taką funkcję zaleca się tworzyć podczas tworzenia własnej aplikacji w której pewne obliczenia powtarzają się w procedurach. W takim przypadku stworzona funkcja wyeliminuje konieczność powielania tego samego kodu w wielu procedurach, a tym samym zredukuje liczbę potencjalnych błędów.

Uwaga - procedury Function, nie zdołasz zarejestrować, używając rejestratora makr w Excelu. Każda procedura Function wymaga wprowadzania ręcznego.

Wywołanie procedury Function

Procedura Function może być uruchomiona na dwa podstawowe sposoby;

  • wywołanie funkcji z wnętrza innej procedury (Sub lub innej procedury Function),
  • użycie funkcji w formule arkuszowej.

Wywołanie funkcji z poziomu innej procedury (podprogramu) - aby wywołać funkcje z podprogramu w procedurze wywołującej do zmiennej przypisujemy nazwę funkcji, podając w nawiasach potrzebne argumenty.

Użycie funkcji w formule arkuszowej - Innym sposobem wywołania funkcji jest uruchomienie jej z poziomu arkusza Excela, poprzez wstawienie funkcji do komórki arkusza. Funkcje przez nas napisaną (umieszczoną w module standardowym) wstawiamy do arkusza tak samo jak każdą funkcje wbudowaną. Przykład;

  • Zaznaczamy dowolną komórkę Arkusza Excela np. A10.
  • Z Menu Wstaw wybieramy opcje Funkcja.
  • W nowo otwartym oknie z pola Kategoria funkcji: wybieramy kategorie Użytkownika, następnie z pola Nazwa funkcji: nazwę naszej funkcji np. PoleKwadratu i naciskamy OK (nazwy pól w tym oknie mogą być trochę inne od podanych, zależy to jaką wersję Excela posiadasz).
  • W następnym oknie wpisujemy argumenty funkcji, możesz tam wpisać odpowiednie wartości lub nazwę komórki z której wartości mają być pobierane np. jako argument wpisujemy C12, naciskamy przycisk OK.
  • Jeżeli jako argument podałeś adres komórki, wpisz przykładowe wartości do komórki C12 i przetestuj działanie funkcji.

    Przykład - wywołanie funkcji z wnętrza procedury Sub. Jest to funkcja, która oblicza obwód koła. Dla przetestowania makro, skupiuj poniższy kod do VBA i sprawdź jego działanie.

Sub ObliczObwod()
   Dim wartość, obwod
   wartość = InputBox("Podaj promień koła ")
   If IsNumeric(wartość) = True Then
If wartość > 0 Then
obwod = ObwodKola(wartość) ' wywołujemy funkcje ObwodKola.
MsgBox "Obwód koła wynosi " & obwod
Else
BłędnaWartość ' wywołujemy podprogram BłędnaWartość.
   End If
   Else
   BłędnaWartość ' wywołujemy podprogram BłędnaWartość.
   End If
End Sub
Function ObwodKola(promien)
   Const pi = 3.14
   ObwodKola = 2 * pi * promien
End Function
Sub BłędnaWartość()
   MsgBox "Wprowadź wartość promienia większą od zera"
End Sub

    W podanym przykładzie funkcja jest wywoływana z wnętrza procedury Sub. Informację taką znajdujemy w komentarzu "wywołujemy funkcję ObwodKola". Wprowadzanie wartości promienia odbywa się poprzez użycie wbudowanej funkcji InputBox. W taki sam sposób wyświetlana jest wartości obwodu koła, tj. z użyciem funkcji InputBox. Widoczna w kodzie procedury instrukcja Dim ma zastosowanie do deklarowania zmiennych, którymi w naszym przypadku są; wartość promienia koła i obliczony obwód koła.

Do góry


 

Operatory matematyczne, Zasady tworzenia nazw zmiennych

     
   

Operatory matematyczne

  • Operatory arytmetyczne
    • Wg priorytetu
    • ^ potęgowanie
    • - negacja (jednoargumentowy)
    • * / mnożenie i dzielenie
    • \ dzielenie całkowitoliczbowe
    • Mod reszta z dzielenia (całkowitego)
    • + - dodawanie i odejmowanie
  • Przykłady:
    • a + b * c ^ d == a + (b * (c ^ d))
    • uwaga:
    • 1 / a*b == (1/a) * b == b / a (gdyż * ma taki sam priorytet jak /)
    • w wątpliwych sytuacjach używaj nawiasów
    • 1 / (a*b) lub 1 / a / b

Pozostałe operatory
(również wg priorytetu - cd.)

  • & konkatenacja:
  • "abc" & "xyz" = "abcxyz"
  • operatory porównania: =, <>, <, >, <=, >=
  • operatory logiczne:
  • Not negacja (jednoargumentowy)
  • And koniunkcja
  • Or alternatywa
  • Xor, Eqv, Imp

Funkcje matematyczne

  • standardowy zestaw funkcji wbudowanych w VBA jest bardzo skromny !!! wykaz dostępnych funkcji można znaleźć w helpie lub poprzez kwalifikator Math (obiekt), np. Math.Sin(x)
  • można go poszerzyć pisząc własne funkcje, np. Log2(x) = Ln(x) / Ln(2)
  • lepiej jednak skorzystać z funkcji wbudowanych w Excela, za pośrednictwem obiektu WorksheetFunction, np.
    • WorksheetFunction.Asinh(x) - Area Sinus Hiperboliczny
    • WorksheetFunction.Pi() - liczba ?
    • WorksheetFunction.Log(x,2) - logarytm o podstawie 2

Zasady tworzenia nazw zmiennych

  • Nazwa zmiennej lub obiektu musi zaczynać się od litery a nie od liczby,
  • Wewnątrz nazw można używać liczb oraz znaku podkreślenia,
  • Nazwa nie może zawierać znaków; ! @ # % $ ^ * () + - = [{}] : ; &
  • Nazwa nie może zawierać spacji,
  • Długość nazwy to maksimum 255 znaków.

Do góry


 

Pisanie kodu

     
   

    Kod źródłowy języka VBA znajdujący się w module VBA sklada się z szeregu instrukcji. W praktyce przyjęło się umieszczenie w wierszu jednej instrukcji, ale nie jest to konieczne. W celu oddzielenia wielu instrukcji zawartych w jednym wierszu należy użyć dwukropka. Ponizszym przykładzie w jednym wierszu umieszczono cztery instrukcje.
Sub OnLine()
  x=1:y=2:z=3: MsgBox x + y + z
End Sub

Jednak daje się zauważyć, że kod źródłowy jest znacznie czytelniejszy po umieszczeniu w każdym wierszu tylko jednej instrukcji
Sub OnLine()
  x=1
  y=2
  z=3
  MsgBox x + y + z
End Sub

    Poszczególne wiersze mogą mieć dowolną długość. W przypadku długich poleceń można użyć sekwencji złożonej ze spacji i znaku podkreślenia (_) oznaczającej kontynuację polecenia w kolejnym wierszu.
Podczas wprowadzania kodu edytor VBE w celu zwiększenia czytelności wykonuje nastepujące operacje;

  • pomiędzy operatorami wstawia spacje, np. Ans=1+2 --> Ans = 1 + 2
  • edytor VBE zmienia odpowiednio wielkość znaków zawartych w słowach kluczowych oraz w nazwach właściwości i metod,
  • edytor VBE sprawdza polecenia pod kątem błędów składni.

Ćwiczenie 1

1.Na karcie Deweloper wybierz polecenie Zarejestruj makro w grupie Kod.
2. Zmień nazwę makra na. "SwojeImie" i wybierz klawisz skrótu na Ctrl-a i potwierdź OK - rozpoczął się tryb nagrywania makra.
3. W wybranej komórce wpisz napis "SwojeImie", potwierdź wpisany napis myszką na pasku formuły.
4. Zakończ nagrywanie makra przyciskiem "Zatrzymaj rejestrowanie".
5. Wybierz nową komórkę i naciśnij Ctrl-A.
6. Przejdź do edytora VBA za pomocą kombinacji klawiszy Alt+F11 i kliknij na znak + przy Modules i dwukrotnie na Module1.
7. Zmień w komórce napis "SwojeImie" na napis "Imie i Nazwisko" i ponownie uruchom makro w nowej wybranej komórce arkusza.

Sub SwojeImie()
'
' Imie Makro
'
' Klawisz skrótu: Ctrl+a
'
ActiveCell.FormulaR1C1 = "SwojeImie"
End Sub

Ćwiczenie 2

Wpisz w edytorze VBA w Module1 makro:

Sub Dodaj()
Range("C1")= Range("A1")+ Range("B1")
End Sub

W Arkuszu wpisz do komórek A1 i B1 dowolne wartości liczbowe i wykonaj makro.

Do góry


 

 (C) 2011 - 2018 Wydział Przyrodniczo - Techniczny KPSW. All Rights Reserved