Kurs VBA – cz. 15 – funkcje wbudowane

Poznaliśmy już większość klocków potrzebnych do budowania standardowych programów w VBA. Poprzednia część kursu wprowadziła szczególnie dużo informacji. Dzisiaj lżejszy temat, funkcje wbudowane. Jest to swego rodzaju skrzynka narzędziowa, pozwalająca wykonywać różna operacje na liczbach, ciągach znaków i datach.

Funkcje takie używa się tak jak funkcje napisane przez nas. Nie znajdziemy jednak nigdzie ich kodu. Oczywiście nie trzeba uczyć się ich na pamięć. Warto jednak o nich pamiętać. Dokładne informacje o każdej funkcji znajdziemy w pomocy (przycisk F1 przy włączonym VBE). Wystarczy napisać w procedurze daną funkcję, zaznaczyć ją i nacisnąć F1.

Funkcje można podzielić na:

  • matematyczne
  • znakowe
  • daty i czasu
  • inne
Poniższe przykłady przedstawiłem z nawiasami. Trzeba jednak pamiętać, nawiasy umieszczamy, jeżeli funkcja jest argumentem innej. Nie umieszczamy nawiasów, jeżeli jest to pierwsza funkcja w danej linii. Poniżej zastosowana została funkcja replace. Funkcja MsgBox została użyta bez nawiasów. Replace już wymaga nawiasów, bo jest argumentem dla MsgBox.

Matematyczne

=&0=&Zwraca wartość bezwzględną liczby. np: Abs(- 10) zwraca 10, Abs(10) zwraca 10.

Int(liczba), Fix(liczba) – Obie funkcje zwracają część całkowitą liczbyInt(99.8) zwraca 99

W przypadku liczb ujemnych Int zwraca pierwszą liczbę całkowitą mniejszą lub równą liczbie, Fix zwraca dla liczb ujemnych pierwszą większą lub równą liczbę. Czytaj więcej...

Pytanie użytkownika – funkcja UDF

Jeden z czytelników zadał mi niedawno pytanie:

W Excelu utworzyłem moduł MODULE1 w nim Funkcja
w której tylko jedna instrukcja

Range(„A1″).value = 15
Pojawia się bład ” #ARG! ”
skad to ?
Jest to EXCEL 2007.

Funkcje UDF (User Defined Function, Funkcje zdefiniowane przez użytkownika) rozszerzają możliwości naszych formuł. Tak jak standardowe funkcje, przyjmują one jakieś argumenty (lub nie) i zawsze zwracają dokładnie jedną wartość.

Funckję UDF pisze się tak jak standardowe funkcje VBA. Muszą jednak spełniać szereg warunków, aby działały prawidłowo w formułach. Czytaj więcej...

Kurs VBA – cz. 14 – Pętle

W poprzedniej części poznaliśmy metodę sterowania programem przy pomocy instrukcji warunkowych. Teraz do sterowania programem użyjemy konstrukcji zwanych pętlami. Pozwalają one wykonywać ten sam fragment kodu kilka razy. Oczywiście ilością powtórzeń możemy sterować i może być inna przy każdym wykonaniu tego samego programu. Kod wewnątrz pętli może nawet wcale się nie wykonać. Przerwaniem lub zakończeniem pętli nazywamy przejście od wykonywania kodu wewnątrz pętli do wykonywania instrukcji bezpośrednio po niej. Iteracja  jest jednorazowym wykonaniem pętli.


Do until / Do while

Ta pętla służy do wykonania fragmentu kodu pewną ilość razy. Najprostsza wersja składa się tylko z klamry Do…loop. Nie uruchamiaj tego kodu!

 

Jest to przykład tak zwanej nieskończone pętli, która będzie omówiona później. Jej działanie nigdy nie będzie przerwane. Kolejne przykłady można już bezpiecznie testować.

Do pętli możemy dodać warunki while lub until, które mogą przerwać wykonywanie.

  Czytaj więcej...

Kurs VBA – cz. 13 – Instrukcje warunkowe If, Case


W poprzednich częściach kursu poznaliśmy zmienne i metody pracy z nimi. Czas przejść do ostatniego elementu układanki, czyli wspomnianego już wcześniej sterowania programem. Podstawową instrukcją sterowania w prawie każdym języku programowania jest IF, czyli „jeżeli”. Może ona być używana na kilka sposobów, każdy jednak ogranicza się do sprawdzania, czy jakieś wyrażenie jest prawdziwe lub nie i wykonania odpowiedniego kodu, przyporządkowanego do jednej z tych dwóch wartości. Czytaj więcej...

Kurs VBA – cz. 12 – Podstawowe wejście i wyjście

 

 

W poprzednich częściach kursu nauczyliśmy się o zmiennych, jak na nich operować i jak przypisywać im wartości. Siłą jakiegokolwiek programu komputerowego jest możliwość interakcji z użytkownikiem i sterowania programem w zależności od otrzymanych danych. Już niedługo pokażę jak sterować programem przy pomocy różnych instrukcji warunkowych. Dzisiaj omówimy sobie podstawowe metody odbierania danych od użytkownika.

 

 

Formularze

Na pewno najbardziej elegancką i potężną metodą komunikacji z użytkownikiem są formularze. Mogą zawierać przeróżne kontrolki, od przycisków, poprzez suwaki, wykresy, obrazki itp. Tworzenie formularzy nie jest specjalnie trudne jednak jest to temat na osobną cześć kursu. Czytaj więcej...

Funkcje volatile – wolne przeliczanie arkusza

W celu usprawnienia obliczeń w arkuszu Excel stosuje skomplikowany algorytm dzięki któremu zawsze obliczana jest tylko ta część, która jest w danej chwili potrzebna. Funkcje volatile łamią ten algorytm. Volatile można przetłumaczyć jako ulotne, zmienne. Z uwagi na ich nieprzewidywalność przy każdej zmianie w arkuszu, Excel przelicza każdą jedną formułkę w całym pliku, nawet jeżeli zmieniana komórka nie ma na nią wpływu.

Jeżeli więc nasz arkusz zaczyna długo przeliczać dane przy każdej zmianie dobrze jest poszukać problemu właśnie wśród tych funkcji. Można je zastąpić przez kod VBA. Do tych funkcji należą.: Czytaj więcej...

Kurs VBA – cz. 11 – operatory

Po dużej ilości informacji z poprzedniej części kursu zajmijmy się czymś lekkim i przyjemnym, tym bardziej, że operatorami zajmowaliśmy się już wcześniej. Operatorami nazywamy różnego rodzaju znaki i symbole, które sklejają razem instrukcje i słowa kluczowe. Są one bardzo istotne i użyte nieprawidłowo mogą całkowicie zmienić logikę kodu.

Operator przyjmuje argumenty tworząc wyrażenia, argumentami operatorów mogą być kolejne wyrażenia itd. W ten sposób można tworzyć skomplikowane instrukcje.
Wyrażenie 1 operator Wyrażenie 2
niektóre operatory przyjmują tylko jeden argument
operator Wyrażenie

Operator przypisania

Jak napisałem w poprzedniej części zmienne po zadeklarowaniu przyjmują wartość 0 lub pusty ciąg znaków. Do zmiany tej wartości służy operator przypisania „=”.
wyrażenie 1 = wyrażenie 2

Wyrażenie 1 musi być zmienną lub atrybutem, wyrażenie 2 jest dowolne, pod warunkiem, że zwraca jakąś wartość (czyli nie może być to np. procedura Sub). Jeżeli wyrażenie 1 jest obiektem przypisanie musimy poprzedzić słowem kluczowym Set. Czytaj więcej...

Kurs VBA – cz. 10 – Zmienne

 

Zmienne pojawiły się już wcześniej w toku kursu. Podstawiałem pod zmienne różne wartości liczbowe lub wskazywały na różne obiekty Excela. Zmienna odpowiada miejscu w pamięci operacyjnej komputera i przechowuje pewną wartość, lub cały zestaw wartości. Każda zmienna jest identyfikowana przez swoją nazwę.

W zakresie widoczności zmiennej (o czym za chwilę) może istnieć tylko jedna zmienna o danej nazwie. Zmiennym możemy przypisywać różne wartości, odczytywać je, zmieniać oraz przepisywać wartość jednej zmiennej do innej. Czytaj więcej...

Kurs VBA – cz. 9 – Obiekt Range

Większość pracy z Excelem polega na modyfikowaniu komórek. Prawie każdy element Excela ma odpowiadający sobie obiekt, w efekcie dużą część pracy w VBA wykonujemy przy pomocy zakresów (obiekt Range). Range może reprezentować pojedynczą komórkę, wiersz, kolumnę, grupę komórek z zakresu ciągłego lub nie albo nawet zakres z kilku skoroszytów jednocześnie.

Właściwość Range obiektu zwraca obiekt typu Range. Może ona być używana następująco.

ObiektNadrzedny.Range(komorka1)
ObiektNadrzedny.Range(komorka1, komorka2) Czytaj więcej...

Kurs VBA – cz. 8 – Model obiektowy Excela

Excel bazuje w luźny sposób na idei programowania obiektowego. W tej części kursu skupimy się na modelu obiektowym Excela, czyli zestawie obiektów, które są dostępne w każdej chwili dla programisty.

Obiekt jest pewnego rodzaju pojemnikiem odzwierciedlającym jakiś element Excela. Jest on identyfikowany przez nazwę i zawiera:

  1. atrybuty (property)
  2. metody (methods)
  3. zdarzenia (events)
Do obiektów nie odwołujemy się bezpośrednio, tylko przez ich atrybuty i metody.
Obiekt.identyfikator[.identyfikator]
Identyfikator może być metodą, która wykonuje jakieś działanie (dokładnie tak jak procedura lub funkcja). Może też być atrybutem, który jest jakąś zwykłą wartością lub kolejnym obiektem. W ten sposób możemy tworzyć cały łańcuszek, na którego końcu musi być jakiś atrybut lub metoda. Poniżej znajduje się kilka przykładów, które przybliżają ten temat. Skoro wiemy już jak uruchamiać procedury, proponuję uruchomić każdy z poniższych przykładów i wprowadzić w nim różne zmiany. Oczywiście przykłady te należy zawrzeć w procedurze.

Przykład 1.

  Worksheets(1) jest obiektem oznaczającym pierwszy arkusz a Select jest metodą. W wyniku takiej instrukcji pierwszy arkusz zostanie zaznaczony.

Przykład 2.

  Name jest atrybutem Obiektu Worksheet i oznacza jego nazwę. Zmieniamy w ten sposób nazwę na „Zielony”.

Przykład 3.

  W ten sposób nadajemy zmiennej NazwaArkusza wartość nazwy pierwszego arkusza.

Przykład 4.

 

Powyżej mamy łańcuszek obiektów. Obiekt z prawej strony każdej kropki jest atrybutem obiektu z lewej strony tej samej kropki. Na samym końcu mamy atrybut będący wartością komórki A1 w arkuszu Arkusz1 w skoroszycie Zeszyt1.

Przykład 5.

Niektóre metody przyjmują argumenty, wywołuje się je podobnie jak zwykłe procedury.

  Powyższa metoda dodaje nowy arkusz i może przyjąć cztery argumenty:
  • Before – przed którym arkuszem ma być dodany nowy,
  • After – po którym arkuszu ma być dodany nowy,
  • Count – ile arkuszów ma być dodanych
  • Type – jakiego typu mają być nowe arkusze
Powyżej podałem pierwszy i trzeci argument. Drugi został pominięty, więc między przecinkami jest puste miejsce. Wszystkie argumenty, które znajdują się na końcu są już pominięte, nie trzeba stawiać przecinków, Excel domyśla się, że nie chcemy ich przekazać. Argumenty można też dodać poprzez nazwy, jest to szczególnie przydatne dla metod, które mają dużo, np. kilkanaście argumentów. Nie musimy wtedy stawiać dużo zbędnych przecinków. Instrukcję   można tez zapisać:  

Przykład 6.

Część metod może też zwracać wartości (tak jak funkcje). Np. powyższa metoda zwraca obiekt nowego arkusza.  

Tak jak w przypadku procedur konieczne jest zamknięcie argumentów w nawiasach. Nie znasz jeszcze słowa kluczowego Set. Poznasz je wkrótce. Istotne jest to, że powyżej został dodany nowy arkusz, który został zapamiętany w zmiennej NowyArkusz. Dzięki temu mogłem zmienić jego nazwę. Czytaj więcej...