Moje doświadczenia z Excelem, Accesem i programowaniem w VBA
Blog > Komentarze do wpisu

Piszemy funkcję w VBA...

Ja zacząć pisać funkcję w VBA? Przykład będzie bardzo prosty, ale chcę na nim pokazać podstawowe zasady. O wejściu do edytora VBA i wstawieniu nowej funkcji pisałam tu:
Excel - edytor Visual Basic

Zaprojektujmy prostą funkcję, która będzie sumowała wartości dwóch komórek, a nastepnie mnożyła wynik przez 2. .

Public Function PodwojonaSumaKomorek(PierwszySkladnik As Integer, DrugiSkladnik As Integer) As Integer              'linia 1

Dim Suma As Integer                                       'linia 2

Suma = PierwszySkladnik + DrugiSkladnik  'linia 3
PodwojonaSumaKomorek = 2 * Suma          'linia 4

End Function                                                      'linia 5

W oknie powyżej jest dokładnie skopiowany kod programu, łącznie z kolorami, które też mają swoje znaczenie. Można je zmienić, ale to już osobny temat na inną okazję.
kolor niebieski - słowa kluczowe VBA 
kolor zielony - wszystkie dodatkowe informacje, opisy - jednym słowem tekst własny programisty, w którym możemy wpisywac wszystkie uwagi. Zaczynają sie one od górnego apostrofu ' , kończą naciśnięciem Enter czyli przejściem do następnej linii. 
A teraz po kolei, linijkami:

linia 1 
Public Function  - to oznaczenie początku kodu funkcji. PodwojonaSumaKomorek - nazwa własna funkcji (wymyślona przez mnie). PierwszySkładnik i DrugiSkladnik - to nazwy zmiennych wymaganych (będzie to widoczne z poziomu arkusza Excel) . Ponieważ przy każdej z nich jest dopisek As Integer - oznacza to, że zmienne muszą być typu Integer.  Podobnie w przypadku wyniku całej funkcji - za nawiasem tez jest ten dopisek. Nie jest to warunek obowiązkowy, można nie deklarować typu zmiennych - wówczas będa one traktowane jako zmienne typu Variant.

linia 2
Blok (w tym przypadku tylko jedna linia) deklaracji zmiennych o charakterze lokalnym i pomocniczym, widocznych tylko w ramach kodu. Każda kolejna zmienna jest deklarowana w nowej linii, zaczynajacej się słowem kluczowym Dim.

linia 3
Zmienna Suma przyjmuje wartość PierwszySkladnik + DrugiSkladnik

linia 4
PodwojonaSumaKomorek (czyli wartość funkcji) przyjmuje wartość podwójnej Sumy.
Tak naprawdę - to można było to zapisać dużo prościej:
PodwojonaSumaKomorek=2*(PierwszySkladnik+DrugiSkladnik)
chodziło mi jednak o pokazanie róznicy pomiędzy zmiennymi wymaganymi, a blokiem zmiennych w ramach kodu.

linia 5
End Function - słowo kluczowe kończące kod funkcji.

Teraz wystarczy tylko zdebugować funkcję w edytorze VBA (czyli sprawdzić poprawność wpisanego kodu) i funkcję można wykorzystać.

kompilacja kodu VBA

Jeżeli w kodzie są błędy - pojawi się komunikat z zaznaczeniem miejsca, w którym błąd się pojawił. Jeżeli nie - komunikatu nie będzie, ale zaznaczona na obrazku opcja "Compile VBA Projekt" - stanie się nieaktywna. Przynajmniej do czasu, gdy nie wprowadzimy zmian w kodzie (nawet tych nieistotnych).

poniedziałek, 08 marca 2010, marzatela













Polecane wpisy

TrackBack
TrackBack URL wpisu:
Komentarze
Gość: ja, *.neoplus.adsl.tpnet.pl
2010/03/16 01:54:03
nie zgodze sie co do koniecznosci deklaracji zmiennych w osobnych liniach, z powodzeniem mozna deklarowac kilka zmiennych w jednej linii
-
2010/09/04 11:59:24
Mam pytanie do autora(ki). Excel 2003. W obszarze np. C5:CB70 musze powprowadzac numery spawaczy. Przykladowo L2,L8 itd. Spawacze pracuja na dwie zmiany wiec chcialbym by np. wpisujac numer spawacza L7 pracujacego na nocnej zmianie komorka zmienila kolor np. na zolty. Formatowanie warunkowe pozwala na wprowadzenie tylko 3 zmian a ja potrzebuje min. 20. Z gory dziekuje za ewentualna pomoc. Moj eMail mklmalbork@aol.com
-
2010/09/04 14:47:39
@mkimalbork
Rozumiem, o co Ci chodzi. W takim przypadku makro jest dość proste. Postaram się dziś, jeżeli nie zdążę - to będzie na blogu jutro.
-
Gość: mklmalbork@aol.com, *.web.vodafone.de
2010/09/04 15:52:25
ooo nie liczylem na tak szybka reakcje. Dziekuje.
-
Gość: mklmalbork, *.web.vodafone.de
2010/09/05 19:27:56
hmm... chyba ktos o mnie zapomnial :(
-
2010/09/05 21:15:10
Pamiętam, ale zabrakło mi czasu. Wysłałam Ci maila (nawet dwa) z rozwiązaniem problemu.
-
Gość: mklmalbork, *.web.vodafone.de
2010/09/05 21:46:51
Dziekuje bardzo.
-
Gość: , *.adsl.inetia.pl
2013/11/19 22:16:00
Witam,

Czy opisane przez Ciebie funkcje mogą być stosowane jako fragment skryptu VBA, który służy do dalszych obliczeń w ramach kodu ? W jaki sposób można coś takiego przeprowadzić ?

Pozdrawiam,

Martyna
-
2013/11/19 22:29:02
@Martyna
Oczywiście, mogą. Wstawia się je tak samo jak wszystkie inne funkcje VBA w kodzie VBA.
W ramach tego samego modułu - mogą być Private, jeżeli mają być widziane z poziomu wszystkich modułów - muszą być w module ogólnym i być Public.
-
Gość: , *.adsl.inetia.pl
2013/11/19 23:38:44
mozna prosic o jakis prosty przyklad?
-
Gość: PeterM, *.krosno.com.pl
2017/01/04 13:23:10
czy zdefiniowaną funkcję (publiczna) w danej bazie ms access można wykorzystać z poziomu kodu w innej bazie?
-
2017/01/04 13:39:05
@Peter
Nie próbowałam tego nigdy, wydaje mi się, że nie. Zawsze jednak można skopiować moduł z funkcją do danej bazy.


Książki warte polecenia
zobacz szczegóły...


A tu oferta na dziś:

Wydawnictwo Strefa Kursów



ministat liczniki.org



Napisz do mnie!