Excel VBA for Applications

background image

Dlaczego VBA ?

Dlaczego VBA ?

• Jest wiele języków programowania, niektóre o wiele lepsze od VBA, ale

prawie każdy z nas korzysta z programów zawartych w MS Office i
prawie każdy nie jest programistą. Czy warto uczyć się języka
programowania ? TAK !

• Ale można też inaczej. Zamiast znać po łepkach Visual C++, Delphi

czy jeszcze cokolwiek innego może lepiej poznać dokładniej narzędzie
z którego korzystamy codziennie. MS Excel używamy prawie wszyscy.
99% zadań przeciętnego pracownika mającego jako narzędzie pracy
komputer można rozwiązać przy pomocy Excela.

• Może warto poznać trochę bardziej to narzędzie, zautomatyzować

często wykonywane czynności itp. Wystarczy sięgnąć do Visual Basic
dla Aplikacji a dzięki temu możemy w łatwy sposób programować
również wykorzystując ASP, VBS itp. Narzędzie to zadowoli zarówno
początkującego jak i wytrawnego użytkownika komputera, tym
bardziej, że pojawiają się nowe programy wyposażone w moduł VBA

background image

Projektowanie interfejsu użytkownika

Projektowanie interfejsu użytkownika

• Ważnym elementem jest interface użytkownika. Każda udostępniona

aplikacja powinna posiadać interface, który w atrakcyjny, czytelny i dobrze
zorganizowany sposób pozwoli użytkownikowi niemal intuicyjnie
posługiwać się naszym "dziełem". Poniżej przedstawiam kilka uwag, które
mogą być pomocne przy projektowaniu interface użytkownika

• Zachowaj spójny wygląd i sposób korzystania - konsekwentnie stosuj

kolory, czcionki i formatowanie.

• Staraj się nie przeładowywać okna - niech zawiera tylko niezbędne

elementy, które prowadzą do dalszych szczegółów.

• Dbaj o łatwą nawigację - odpowiedni system menu i pasków narzędzi
• Pamiętaj aby Twoje menu i paski były dostępne tylko w twojej aplikacji -

zadbaj o ich usunięcie przy zakańczaniu aplikacji

• Pamiętaj aby można było używać klawiatury jak i myszy
• Zastanów się nad kolejnością działania klawisza tabulacji (Tab)

background image

Projektowanie interfejsu użytkownika

Projektowanie interfejsu użytkownika

• Pamiętaj, ze niektórzy użytkownicy mogą mieć problem z widzeniem

ekranu, posługiwania się myszką czy klawiaturą

• Wszędzie gdzie możliwe zamieszczaj odpowiednie wskazówki - w postaci

tipsów lub odpowiednich odwołań do pomocy

• Pamiętaj, że nic tak nie denerwuje jak "zawieszenie" aplikacji - jeżeli

występują długie operacje użyj czynników uspokajających - klepsydra na
myszy, pasek postępu itp

• Zawsze sprawdzaj czy dane wprowadzane przez użytkownika są w

dozwolonym zakresie i natychmiast reaguj na niewłaściwe dając
możliwość poprawienia np. oczekiwano liczby a użytkownik wprowadził
napis

• Żadna aplikacja nie jest doskonała - przewiduj błędy, zapewnij ich obsługę,

zadbaj o odpowiednie zwięzłe komunikaty

background image

Pisanie kodu

Pisanie kodu

• Każde zadanie można rozwiązać na wiele sposobów, na wiele

sposobów można napisać kod aplikacji. Nie ma też takiego
kodu którego nie potrzeba poprawić, ulepszyć czy rozbudować.
Każda aplikacja z czasem zostaje rozbudowana o nowe
elementy. To tylko kilka powodów dla których po raz kolejny
przyglądamy się liniom kodu. Może kod nadaje się do
wykorzystania w innych zadaniach. Poniżej kilka praktycznych
uwag dzięki którym kod będzie kodem wielokrotnego użytku

• Staraj się pisać procedury jednozadaniowe tzn. niech procedura

wykonuje tylko jedno zadanie. Procedur będzie więcej, ale będą
bardziej uniwersalne możliwe do zastosowania w wielu
aplikacjach.

• Ustal swój sposób nazywania zmiennych, stałych obiektów itp. i

konsekwentnie się go trzymaj

• Korzystaj z dobrodziejstwa komentarza - komentarz to połowa

sukcesu gdy po np. latach będziesz musiał dokonać modyfikacji
kodu

background image

Pisanie kodu

Pisanie kodu

• Aplikacja może mieć kilka modułów - korzystaj z tego. Niech

każdy moduł zawiera tylko te procedury, które są w jakiś
logiczny sposób ze sobą związane. Takie rozwiązanie zwiększa
też wydajność aplikacji gdyż VBA kompiluje tylko te moduły
które w danym momencie są niezbędne - im mniej
kompilowanych modułów, im ich mniejsza wielkość tym kod
jest wydajniejszy

• Twórz własną bibliotekę procedur - zamiast pisać za każdym

razem korzystaj z już wykonanej pracy odpowiednio
wprowadzając modyfikacje.

• Twórz własne obiekty korzystając z modułu klas. Z czasem

będziesz miał gotowe "czarne skrzynki" z których będziesz
składał aplikację. Nie musisz modyfikować kodu w wielu
miejscach, a tylko w jednym - module klasy

background image

Pisanie kodu

Pisanie kodu

• Deklaruj zmienne, stałe itp. zawsze tak aby miały conajmniej

jedną wielką literę w nazwie pozwoli to uniknąć problemów z
tzw. literówkami w kodzie.

• Zawsze pisz małymi literami, jeżeli po opuszczeniu wiersza

edytor nie zamienił wielkości liter szukaj błędu - literówka,
niezadeklarowana zmienna itp.

• Nie usuwaj elementów związanych z testowaniem aplikacji a

tylko zrób z nich komentarz, który zawsze możesz wykorzystać
kasując jeden znak '

background image

Bezpieczeństwo aplikacji

Bezpieczeństwo aplikacji

• VBA dla Excela jak i dla całego Office nie zawiera dobrych mechanizmów

bezpieczeństwa. Nie ma żadnej metody zabezpieczenia napisanego kodu.
Istnieje możliwość zablokowania kodu hasłem ale w Internecie jest cała masa
lepszych lub gorszych, amatorskich czy profesjonalnych, darmowych i płatnych
programów do wydobywania hasła. Nie każdy jednak będzie łamał
wprowadzone hasło, nie każdy jest zainteresowany jak to zrobiłeś, nie każdy
chciałby podglądnąć Twoje sztuczki i sposoby więc w 90% użytkowników hasło
jest wystarczającym zabezpieczeniem

• Pamiętaj i bądź świadomy - hasło w projekcie VBA nie jest barierą do pokonania

i wcale nie trzeba wyrafinowanych metod, wiedzy, superkomputerów itp. aby je
poznać.

• Jeżeli jednak Twój kod jest tak cenny, że powyższe  Ciebie niezadowala to:
• Rób dodatki kompilowane do postaci xll
• Twórz biblioteki dll
• Pisz i kompiluj aplikację do poziomu exe
• Ale potrzebujesz do tego specjalistycznego oprogramowania, wiedzy i

świadomości że są ludzie którzy i do takich programów potrafią się włamać.

background image

Okno edytora VBA

Okno edytora VBA

Uruchomienie edytora daje nam dostęp do następujących narzędzi związanych z

tworzeniem kodu VBA

Znaczenie wybranych ikon:

• przejście do okna Excela
• wstaw: User Form, Moduł, Moduł Klasy, Procedurę
• Uruchom, Uruchom krokowo, Zatrzymaj

• Przełącz w tryb projektowania
• Pokaż okno Exploratora Obiektu lub F4
• Pokaż Okno właściwości

lub F2

• Pokaż okno Przeglądarki Obiektów
• Pokaż okno Przybornika

background image

VBA - język obiektowy

VBA - język obiektowy

• Aby w pełni wykorzystać możliwości, jakie daje użytkownikowi język VBA, należy

przede wszystkim uświadomić sobie, że jest to język zorientowany obiektowo.
Oznacza to, że kod programu posługuje się obiektami, z których każdy ma
określone właściwości.

Obiekt jest bytem kontrolowanym przez VBA. Excel posiada wiele obiektów, które

można w różny sposób kontrolować. Obiekty są zorganizowane hierarchicznie, przy
czym niektóre spośród nich zawierają w sobie inne obiekty. Na przykład Excel jest
aplikacją i zawiera w sobie takie obiekty, jak np. skoroszyty czy paski narzędzi.
Przeglądając model obiektowy Excela, widzimy że można w nim wyróżnić takie
obiekty jak Range ( Zakres). Window ( Okno), Worksheet (Arkusz roboczy), Workbook
( Skoroszyt) i Application ( Aplikacja).
Jednym z najniższych w hierarchii jest Range
( Zakres).

• Zbiór podobnych obiektów stanowi kolekcję, na przykład zbiór arkuszy Excela w

skoroszycie – to kolekcja arkuszy, zbiór pasków narzędzi etc. Najczęściej stosowane
w praktyce kolekcje to Sheets ( zawierająca arkusze i wykresy , Workbook,
Worksheets
i Window. Aby zróżnicować elementy kolekcji, należy podać nazwę
elementu i numer indeksu.

• Wszystkie obiekty określonego typu tworzą klasę. Zatem, aby określić odwołanie do

obiektu w VBA, należy podać całą hierarchię i dokładnie określić obiekty.

• Oprócz właściwości obiekt posiada metody. Metody to nic innego jak czynności,

które obiekt może wykonać. Każdy obiekt Excela może posługiwać się różnymi
metodami.

background image

Struktura obiektów Microsoft Excel

Struktura obiektów Microsoft Excel

Aby przejrzeć strukturę obiektów
MS Excel należy:

• W oknie edytora VB wybrać menu

Help

• Wybrać temat Microsoft Excel

Objects.

Wyświetlone

zostanie

okno

prezentujące

strukturę obiektów.

Hierarchia obiektów Excela jest
podobna

do

drzewa

katalogów.

Najwyższy

poziom

zajmuje

pojedynczy

obiekt

Application,

reprezentujący

program Excel.

Jeśli klikniemy na rysunku strzałkę
obok

obiektu

Worksheets,

spowoduje

to

wyświetlenie

obiektów

występujących

w

arkuszach.

background image

Zasady pisania podstawowych makr

w VBA 1/3

Zasady pisania podstawowych makr

w VBA 1/3

Przy odwołaniu się do składni należy używać składni

Object.Property

Aby odwołać się do wartości wpisanej w komórce

arkusza, należy zapisać

Range(”adres komórki”).Value

Innym przykładem może być aktywacja
wybranego skoroszytu

Workbooks.Activate

Przyjmujemy
następujące opisy:

• Object – nazwa
obiektu

• Property – nazwa
właściwości

• Value – wartość
właściwości

• Method - metoda

Znając podstawowe pojęcia dotyczące struktury modelu obiektowego Excela,
należy nauczyć się zasad wiązania jej elementów w instrukcje języka VB. Ułatwia
to nam składnia języka.

Należy zaznaczyć tu, że nazwa obiektu i właściwość oddzielone są kropką Jeśli

chcemy odwoływać się do właściwości obiektu, a ten obiekt znajduje się
wewnątrz innych obiektów, to należy wymienić po kolei wszystkie
obiekty,oddzielając ich nazwy kropkami. Np..

Workbooks(1).Worksheets(”Sheet1”).Activate

W celu zmiany wartości danej właściwości na inną stosujemy następująca

składnię:

Object.Property = Value

gdzie Value to wartość, którą zamierzamy użyć

background image

Zasady pisania podstawowych

makr w VBA 2/3

Zasady pisania podstawowych

makr w VBA 2/3

Nowa wartość może być

• wartością numeryczną

Worksheets(”Sheet1”).Range(”A4”).Value=30

• tekstem

ActiveWorkbook.Author = ”Piotr”

• wartością logiczną

ActiveCell.Font.Bold = True

3. Aby program zwrócił bieżącą wartość ( ustawienie) danej właściwości należy

zapisać:

Variable = Object.Property

Aby zapisać, że wartość znajdująca się ( na przykład) w komórce A3 jest przechowywana w zmiennej o
nazwie

cellValue,

stosujemy zapis:

cellValue = Worksheets(”Sheet1”).Range(”A3”).Value

4. W

przypadku metod, odwołanie do metody zależy od tego, czy zawiera ona argumenty

• jeżeli metoda nie ma argumentów, zapis ma postać:

Object.Method

Na przykład, metoda Add, dodająca nowy skoroszyt, ma postać:

Workbook.Add

Przyjmujemy następujące
opisy:

Object

– nazwa obiektu

Property

– nazwa

właściwości

• Value

– wartość

właściwości

Method

- metoda

background image

Zasady pisania podstawowych

makr w VBA 3/3

Zasady pisania podstawowych

makr w VBA 3/3

• W

przypadku

metod

wymagających

kilku

argumentów, składnia jest następująca:

Object.Method(

argument1,

argument2,

...,

argumentN)

Przykładem może być metoda Offset, wyświetlająca
komórkę o położeniu wyznaczonym względem
bieżącej komórki. Wymaga ona podania dwóch
argumentów indeksu wiersza (rowOffset) i kolumny
(columnOffset)

ActiveCell.Offset(3,2)

co oznacza komórkę przesuniętą o 3 wiersze w dół i
2 kolumny w prawo od komórki aktywnej. Można
zastosować również inny, bardziej czytelny zapis:

ActiveCell.Offset(rowOffset:=3,columnOffset:=2)

Przyjmujemy następujące
opisy:

Object

– nazwa obiektu

Property

– nazwa

właściwości

• Value

– wartość

właściwości

Method

- metoda

background image

Typy danych

Typy danych

Boolean - wartość logiczna True

("Tak")
lub False ("Nie")

Byte - od 0 do 255

Integer - liczba całkowita z zakresu

-32768 do 32767

Single

-

zmiennoprzecinkowy

pojedynczej precyzji

Double

-

zmiennoprzecinkowy

pojedynczej precyzji

Currency - Od -922 337 203 685

477,5808 to 922 337 203 685
477,5807

Decimal

Date - od 1 stycznia 100r. do 31

grudnia 9999r.

Object - dowolne odesłanie do

wartości typu Object

String (zmiennej długości)  - od 0 do

około 2 miliardów.

String (ustalonej długości)  - od 1 do

około 65 400 znaków (64 kB)

Variant (z liczbami)  - każda wartość

numeryczna w zakresie typu Double

Variant (ze znakami) - taki sam zakres

co dla zmiennej typu String zmiennej
długości

Definiowany przez użytkownika (przy

użyciu Type) 

Tablice - 20 bajtów pamięci + 4 bajty na

każdy wymiar tablicy + liczba bajtów
potrzebnych na jej dane (każdy wymiar *
liczba bajtów dla danego typu danych w
wymiarze)

background image

Stałe

Stałe

• Stałe - sa to wartości zadeklarowane na stałe, i nie zmieniające się w

programie. Przykładem stałej jest liczba pi = 3,1416...Liczba ta nie ulega
zmianie i można ja zdeklarować jako stałą.

• Dobrym nawykiem jest deklarowanie stałych dla wartości, która się nie zmienia.

zapobiega to przypadkowym zmianom tej wartości. Stałej przypisujemy nazwę
dzięki której mamy dostęp do niej np. zamiast za każdym razem pisać 3,1416
możemy zadeklarować stałą o nazwie pi której przypiszemy wartość 3,1416
( lub dowolną inną wg naszego uznania). Przypisanie stałej następuje w
następujący sposób:( na przykładzie definiowania stałej pi) Const pi = 3,1416

• Natomiast użycie stałej wygląda następująco ( na przykładzie obwodu koła)

ObwódKoła = 2 * pi * Promień

• Nazwy stałych podlegają tym samum zasadom, które stosujemy do nazywania

zmiennych.

1.    

background image

Przeglądanie zdefiniowanych stałych

Przeglądanie zdefiniowanych stałych

           Przejdź do edytora Visual Basic Narzedzia/ Makro/ Edytor Visual Basic

lub Alt - F11/

1.           Wbierz F2, lub Widok - Przeglądarka Obiektów

2.           W spisie Bibliotek wybierz Excel

3.           W oknie Klasy Przeglądarki obiektów znajdź Constans

4.           W oknie Składowa 'Constans' poszukaj nazwy odpowiedniej stałej

5.           Zaznaczając nazwę stałej w dolnej części Przeglądarki obiektów

otrzymasz informacje o tej stałej. Zauważ, że wszystkie stałe programu Excel
zaczynają się od liter xl   

background image

Zmienne

Zmienne

Zmienna jest to symboliczna nazwa wskazująca na pewien obszar pamięci.

O wiele łatwiej panować nad pisaniem programu jeżeli używamy nazw,
które w jakiś sposób kojarzą się ze zmienną przechowywaną w danym
zakresie pamięci niż posługiwać się nic nie mówiącymi adresami komórek
(zakresów) pamięci komputera. Najlepiej używać prostych, krótkich nazw
dla zmiennych. Wyrazy w wielowyrazowych  nazwach   zmiennych
rozdzielać znakiem _ lub każdy wyraz zaczynać z dużej litery. Pamiętać
należy o zasadach obowiązujących przy nadawaniu nazw zmiennym.
Sposób deklaracji zmiennych:     Dim zmienna As typ gdzie zmienna jest
nazwą zmiennej, a typ określa typ danych przechowywany przez zmienną

• Uwaga: Pominięcie słowa kluczowego As i typu zmiennej spowoduje, że

zmienna będzie typu Variant ( ze względów łatwiejszego diagnozowania
błędów w pisanych programach należy unikać tego typu deklaracji
zmiennej ).

• Przykłady deklaracji zmiennych:                 

                

  Dim nazwaPliku As String

                                  Dim liczbaPi As Double

background image

Zasięg stałych i zmiennych

Zasięg stałych i zmiennych

Zasięg stałych i zmiennych ściśle związany jest ze sposobem ich
deklaracji. Zmienna zdeklarowana w procedurze jest lokalna dla tej
procedury. Oznacz to że w innych procedurach może istnieć zmienna o
takiej samej nazwie ale przechowująca odmienne wartości. Aby zmienna
była dostępna dla innych procedur należy zdeklarować ją na poziomie
modułu na początku przed jakąkolwiek funkcją lub procedurą. Zmienne
mogą być definiowane automatycznie ( w momencie pierwszego użycia
nazwy) lub możemy wymusić konieczność deklaracji zmiennych.

Wskazane jest deklarowanie zmiennych
bowiem dzięki temu unikniemy wielu
problemów w błędach nazw zmiennych.
Wyłączenie automatycznego deklarowanie
zmiennych

następuje

poprzez

umieszczenie w Module instrukcji: Option
Explicit.
Można

ustawić

właściwość

automatycznie korzystając z Narzędzia /
Opcje

/

Edytor

i

zaznaczyć

pole

"Wymagane

deklaracje

zmiennych":

Całość

wykonujemy

z

poziomu

Edytora VBA

background image

Zasady nazywania zmiennych i

stałych

Zasady nazywania zmiennych i

stałych

Zasady nazywania zmiennych i stałych:

• Nazwy składają się z liter, cyfr i niektórych znaków przystankowych.

• Nazwa musi zaczynać się od litery.

• Litery duże i małe nie są rozróżniane, ale ich wielkość jest zachowywana.

• Nie należy stosować w nazwie spacji, kropek i następujących znaków

!, #, $, %, &.

• Maksymalna liczba znaków w nazwie nie powinna przekroczyć 255.

• Nie można powtarzać nazw w ramach tego samego zakresu ( zasięgu zmiennej lub

stałej).

• Nazwa nie może być tzw. słowem zarezerwowanym w Visual Basic dla aplikacji

(użycie powoduje generację błędu)

• Przykłady nazw: moje_nazwisko; MojeNazwisko; KolorNiebieskiDlaTła\

kolor_niebieski_dla_tła

• Znak "_" użyty do rozdzielenia dwóch wyrazów powoduje większą czytelność

nazwy .Innym sposobem zwiększenia czytelności nazwy jest zastosowanie dużych
liter na początku wyrazu w nazwie (przykład 2 i 3).

• Nie należy stosować zbyt długich nazw gdyż tylko zaciemniają kod programu oraz

pomyśl ile czasu i pomyłek jest potrzebnych do wprowadzenia długiej nazwy.

background image

Tworzenie procedury

Tworzenie procedury

• Rozpoczęcie pracy nad nową procedurą

(makrodefinicją), bez względu na jej typ,
wymaga

wybrania

polecenia Insert / Procedure, a następnie
wskazania odpowiednich opcji w oknie
dialogowy Add Procedure.

• W zależności od naszych planów

wpisujemy nazwę procedury
w polu Name , a następnie w obszarze
Type wybieramy jedną
z trzech dostępnych opcji:

Sub - dla podprogramu
Function - dla funkcji
Property – opcja używana w przypadku

własnych projektów w modułach klas

background image

Wprowadzenie tekstu do tytułu

i linii statusu arkusza

Wprowadzenie tekstu do tytułu

i linii statusu arkusza

Tworząc aplikację na potrzeby konkretnego użytkownika, warto zadbać o
zmianę „znaczących drobiazgów” opisujących arkusz

Ćwiczenie:

• W oknie edytora VB wybierz Insert / Procedure

(przy otwartym oknie z kodem). Zdefiniuj nazwę
procedury „tytul”

• Zamiast „Microsoft Excel” wstaw np. Moja aplikacja”

            Application.Caption=”Moja aplikacja”

• Ponownie wybierz Insert / Procedure

Zdefiniuj nazwę procedury „status” i wpisz

Application.StatusBar = "Wersja 1.0”

• Przetestuj działanie wybierając polecenie

Run Sub / User Form lub pop prostu naciskając [F5]

• Powinieneś otrzymać następujące efekty.

background image

Tworzenie ekranu powitalnego

Tworzenie ekranu powitalnego

W ramach tego ćwiczenia tworzymy właściwie
swój pierwszy formularz, który nie co prawda
służyć do wpisywania danych lecz do „wywołania
pierwszego miłego wrażenia”

Ćwiczenie:

• W oknie edytora VB wstaw formularz wybierz

Insert / Procedure

•Dokonaj aranżacji plastycznej formy. Koniecznie

wstaw
CommandButton - OK.
Aby uzyskać to musisz
mieć odpowiednio
ustawione właściwości dla: Formy, Przycisku OK, 
Napisu „Moja..."
i danych autora Przykładowe zagospodarowanie
formy:

•Kliknij na przycisk OK i dopisz kod

background image

Tworzenie ekranu powitalnego

Tworzenie ekranu powitalnego

Ćwiczenie c.d.:

• Przejdź do ThisWorkbook i dopisz kod

aby uzyskać to co na rysunku

• Zapisz plik excela. Przy każdym otwarciu

pliku otrzymasz okienko powitalne
na tle arkusza.  

Kod zaprezentowany nie jest kodem optymalnym, bowiem w pamięci
operacyjnej istnieje UserForm i niepotrzebnie zajmuje miejsce. Aby to miejsce
zwolnić należy wykonać metodę Unload dla opisanej formy. Zostanie to
pokazane w następnym ćwiczeniu.

background image

Tworzenie formularza użytkownika –

definiowanie formy

Tworzenie formularza użytkownika –

definiowanie formy

Przedstawione w przykładzie formularz pobiera od użytkownika dwie
informacje: imię i płeć. Do pobrania nazwiska używane jest pole tekstowe, a do
ustalenia płci trzy przyciski. Informacje zebrane w oknie dialogowym są
następnie zapisywane w pustym wierszu arkusza.

Ćwiczenie :

• Utwórz skoroszyt z jednym tylko arkuszem
• Uaktywnij Edytor VB ( [Alt]+[F11])
• Dodaj pusty formularz użytkownika Insert / User Form.
• Jeśli nie widać okna Properties, naciśnij klawisz [F4]
• Używając okna Properties zmień właściwość Caption

formularza użytkownika na Podaj imię i płeć

• Dodaj formant Label (Etykieta ) i następująco

dostosuj jego właściwości

• Dodaj formant TextBox (Pole tekstowe) i następująco

dostosuj jego właściwości

WŁAŚCIWOŚĆ

WARTOŚĆ

Accelerator

I

Caption

Imię:

TabIndex

0

WŁAŚCIWOŚĆ

WARTOŚĆ

Name

TekstImię

TabIndex

1

background image

Tworzenie formularza użytkownika –

- określanie właściwości formantów

1/2

Tworzenie formularza użytkownika –

- określanie właściwości formantów

1/2

Ćwiczenie c.d :

• Dodaj formant Frame (Pole

grupy) i następująco
dostosuj jego właściwości

• Na obszarze Frame dodaj

formant OptionButton (Przycisk
Opcji)

i następująco dostosuj jego
właściwości.

• Na obszarze Frame dodaj

formant OptionButton (Przycisk
Opcji)

i następująco dostosuj jego
właściwości

• Na obszarze Frame dodaj

formant OptionButton (Przycisk
Opcji)

i następująco dostosuj jego
właściwości

WŁAŚCIWOŚ

Ć

WARTOŚĆ

Caption

Płeć

TabIndex

2

WŁAŚCIWOŚĆ

WARTOŚĆ

Accelerator

M

Caption

Mężczyzna

Name

OpcjaMężczyzn

a

TabIndex

0

WŁAŚCIWOŚĆ

WARTOŚĆ

Accelerator

M

Caption

Mężczyzna

Name

OpcjaMężczyzn

a

TabIndex

0

WŁAŚCIWOŚĆ

WARTOŚĆ

Accelerator

K

Caption

Kobieta

Name

OpcjaKobieta

TabIndex

1

WŁAŚCIWOŚĆ

WARTOŚĆ

Accelerator

N

Caption

Nieznana

Name

OpcjaNieznana

TabIndex

2

Value

True

background image

Tworzenie formularza użytkownika –

- określanie właściwości formantów

2/2

Tworzenie formularza użytkownika –

- określanie właściwości formantów

2/2

Ćwiczenie c.d :

• Dodaj formant CommandButton ( Przycisk

Polecenia) i następująco
dostosuj jego właściwości.

• Dodaj formant CommandButton ( Przycisk

Polecenia) i następująco
dostosuj jego właściwości.

• Rozstaw formanty mniej więcej tak

WŁAŚCIWOŚĆ

WARTOŚĆ

Caption

OK

Default

True

Name

PrzyciskOK

TabIndex

3

WŁAŚCIWOŚĆ

WARTOŚĆ

Caption

Anuluj

Cancel

True

Name

PrzyciskAnuluj

TabIndex

4

background image

Tworzenie formularza użytkownika –

- dodawanie procedur obsługi

zdarzeń

Tworzenie formularza użytkownika –

- dodawanie procedur obsługi

zdarzeń

Ćwiczenie c.d :

• Kliknij dwukrotnie przycisk Anuluj. W odpowiedzi pojawi się okno Code formularza z pustą

procedurą o nazwie PrzyciskAnuluj_Click().

• Doprowadź tę procedurę do postaci:

Rezultatem wykonanie tej procedury jest po prostu usunięcie okna dialogowego.

• Naciśnij kombinację klawiszy [Shift] + [F7], aby ponownie wyświetlić formularz UserForm1

Kliknij dwukrotnie przycisk OK. i wprowadź podstawową procedurę.

• Po pierwsze uaktywnia ona na wszelki wypadek Arkusz1.

• Następnie używając excelowej funkcji COUNTA, znajduje pierwszą wolną komórkę w

kolumnie A. Kolumna A jest reprezentowana przez liczbę 1 w drugim parametrze kolekcji
Cells.

• Dalej procedura przenosi tekst z pola tekstowego do kolumny A i używając kilku instrukcji

If sprawdza, który przycisk został wybrany, po czym zapisuj odpowiedni tekst w kolumnie
B

• Na koniec wartości wszystkich formantów są resetowane w celu przygotowania okna

dialogowego do kolejnego wpisu.

background image

Tworzenie formularza użytkownika –

- dodawanie procedur obsługi

zdarzeń

Tworzenie formularza użytkownika –

- dodawanie procedur obsługi

zdarzeń

Private Sub PrzyciskOK_Click()

' Uaktywnienie na wszelki wypadek Arkusza1

Sheets("Arkusz1").Activate

' Znalezienie następnego pustego wiersza

NastWiersz = Application.WorksheetFunction.CountA(Range("A:A")) + 1

'Przeniesienie imienia

Cells(NastWiersz, 1) = TekstImię.Text

'Przeniesienie informacji o płci

If OpcjaMężczyzna Then Cells(NastWiersz, 2) = "Mężczyzna"

If OpcjaKobieta Then Cells(NastWiersz, 2) = "Kobieta"

If OpcjaNieznana Then Cells(NastWiersz, 2) = "Płeć nieznana"

'Przywrócenie formantów do oryginalnej postaci

TekstImię.Text = ""

OpcjaNieznana = True

TekstImię.SetFocus

End Sub

Ćwiczenie c.d
:

Kod

procedury

background image

Tworzenie formularza użytkownika –

- sprawdzanie poprawności danych

Tworzenie formularza użytkownika –

- sprawdzanie poprawności danych

Ćwiczenie c.d :

• Jeśli wykonasz kilka prób z pokazanym oknem dialogowym, przekonasz się, że

ma ono jeden mankament – nie gwarantuje wprowadzenia przez użytkownika
imienia do pola tekstowego. Aby uniknąć tej sytuacji, musisz dodać fragment
kodu, który spowoduje w razie braku imienia ( a przynajmniej jakiegoś tekstu) ,
pojawienie się pola komunikatu.

'Sprawdzenie, czy zostało wprowadzone imię

If TekstImię.Text = "" Then

MsgBox "Musisz wpisać imię !"

Exit Sub

End If

• Sprawdź, czy faktycznie sygnalizowane jest błąd wpisu.

background image

Tworzenie formularza użytkownika –

- pisanie kodu wyświetlającego okno

Tworzenie formularza użytkownika –

- pisanie kodu wyświetlającego okno

Ćwiczenie c.d :

• Uaktywnij Excela
• Kliknij prawym przyciskiem myszy dowolny pasek narzędzi i wybierz

z menu podręcznego Przybornik formantów.

• Używając przybornika umieść w arkuszu przycisk polecenia. Zmień tytuł klikając

go prawym
przyciskiem myszy i wybierając Obiekt CommandButton / Edit.

• Uaktywnij VBA, klikając dwukrotnie dodany przycisk i wpisz

Ta krótka instrukcja wyświetla okno dialogowe za pomocą metody Show obiektu

UserForm.

Po dokonaniu ostatniej modyfikacji okno dialogowe powinno już łatwo się
pojawiać i działać poprawnie. Oczywiście w naturalnych warunkach trzeba
zbierać więcej informacji, niż za pomoca tego okna. Ogólne zasady pozostają
jednak zawsze takie same. Co najwyżej trzeba uwzględnić więcej formantów.

background image

Ustawianie czcionek

Ustawianie czcionek

• Ustawia podkreślenie w aktywnej komórce

ActiveCell.Font.Underline =

xlUnderlineStyleSingle

• Ustawia podkreślenie w  komórce A2

Range("A2").Font.Underline =

xlUnderlineStyleDouble

• Usuwa podkreślenie w aktywnej komórce

ActiveCell.Font.Underline =

xlUnderlineStyleNone

• Ustawia kursywę w aktywnej komórce

ActiveCell.Font.Italic = True

• Ustawia czcionkę Arial CE  w aktywnej komórce

ActiveCell.Font.Name = "Arial CE"

• Ustawia wielkość czcionki w aktywnej komórce

ActiveCell.Font.Size =   10

• Ustawia indeks górny czcionki  w aktywnej komórce

ActiveCell.Font.Superscript =

True

• Ustawia kolor  czcionki  w aktywnej komórce

ActiveCell.Font.ColorIndex = 45

TABELA INDEKSÓW DLA

POSZCZEGÓLNYCH KOLORÓW

background image

Ustawianie ramek 1/2

Ustawianie ramek 1/2

 Ustawia ramkę dla komórki A1

 

Range("A1")Borders(

KtóraLinia

).LineSt

yle =

TypLinii

xlEdgeBottom

 

dolna

xlEdgeTop

 

górna

xlEdgeRight

 

prawa

xlEdgeLeft

 

lewa

xlDiagonalDown

 

przekątna w dół

xlDiagonalUp

 

przekątna w górę

xlInsideHorizontal

 

wewnętrzne

poziome

xlInsideVertical

 

wewnętrzne pionowe

Która Linia 

 

xlContinuous

 

ciągła

xlDash

 

przerywana

xlDashDot

 

przerywano-kropkowa

xlDashDotDot

 

przerywano-

dwukropkowa

XlDot

 

kropkowa

xlDouble

 

podwójna

xlSlantDashDot

 

ukośnie-przerywano-

kropkowa

xlLineStyleNone

 

bez linii

Typ linii 

background image

Ustawianie ramek 2/2

Ustawianie ramek 2/2

Ustawia kolor ramki  w aktywnej komórce

 

ActiveCell.Borders(xlDiagonalDown).Color= RGB(0,0,255)

powoduje ustawienie koloru wg tablicy RGB

ActiveCell.Borders(xlDiagonalDown).ColorIndex=4

Uwaga: Ustawienie właściwości ColorIndex= xlAutomatic

powoduje, ustawienie koloru domyślnego [typowo czarny (ColorIndex=1) o
ile nie dokonano zmian w konfiguracji]

• Ustawia grubość  ramki  w aktywnej komórce

           

ActiveCell.Borders(xlDiagonalDown).Weight=xlMedium

                         gdzie:   

xlThin      - 

linia cieńka

                                     xlThick     - 

linia gruba

   

                                  xlMedium -

linia średniej grubości

background image

Definiowanie wypełnień

Definiowanie wypełnień

Obiekt Interior może być użyty do ustawienia koloru oraz wzorca wypełnienia dla
komórki lub zakresu komórek

Ustawia wypełnienie dla komórki A1

 

Range("A1").Interior.Pattern =

wzór

      

Uwaga
Ustawienie właściwości 

Pattern= xlNone

 powoduje wykasowanie wypełnienia 

Ustawia kolor w aktywnej komórce

ActiveCell.Interior.Color= RGB(0,0,255) p

owoduje ustawienie koloru

wg tablicy RGB

ActiveCell.Interior.ColorIndex=4

Uwaga: Ustawienie właściwości

ColorIndex= xlAutomatic

powoduje, ustawienie koloru

domyślnego [typowo czarny

(ColorIndex=1)

 o ile nie dokonano zmian w konfiguracji]

Ustawia kolor wypełnienia - Pattern w aktywnej komórce

          ActiveCell.Interior.PatternColor= RGB(0,0,255)

powoduje ustawienie koloru wg

tablicy RGB

        

ActiveCell.Interior.PatternColorIndex=4

background image

Zliczanie elementów arkusza

Zliczanie elementów arkusza

• Liczbę wszystkich komórek w arkuszu

zmienna  = Cells.Count

• Liczbę wszystkich wierszy w arkuszu

zmienna  = Rows.Count

• Liczbę wszystkich kolumn w arkuszu

zmienna  = Columns.Count

• Liczbę otwartych skoroszytów

zmienna  = Workbooks.Count

• Liczbę arkuszy w skoroszycie

zmienna  = Worksheets.Count

• Liczbę Modułów w skoroszycie

zmienna  = Modules.Count

• Liczbę wszystkich kart w skoroszycie

zmienna  = Sheets.Count

• Liczbę arkuszy typu Wykres w skoroszycie

zmienna  = Charts.Count

background image

Wstawianie danych do komórek

Wstawianie danych do komórek

• Własnego tekstu w komórce

(na przykładzie A1 10 różnych sposobów)

            Range("A1").Formula = "mój
tekst"
            Cells(1).Formula ="mój tekst"
            Cells.Item(1).Formula ="mój
tekst"
            Cels(1,1).Formula ="mój tekst"
            Cells(1,"A").Formula ="mój tekst"
            Range("A1").Value = "mój tekst"
            Cells(1).Value ="mój tekst"
            Cells.Item(1).Value ="mój tekst"
            Cels(1,1).Value ="mój tekst"
           Cells(1,"A").Value ="mój tekst„

• L

iczby

            Range("A1").Formula = 13
            Cells(1).Formula =13
            Cells.Item(1).Formula =13
            Cels(1,1).Formula =13
            Cells(1,"A").Formula =13
            Range("A1").Value = 13
            Cells(1).Value =13
            Cells.Item(1).Value =13
            Cels(1,1).Value =13
            Cells(1,"A").Value =13

 

•   Formuły =B1+C4 do komórki A1

            (5 różnych sposobów)

            Range("A1").Formula =
"=B1+C4"
            Cells(1).Formula = "=B1+C4"
            Cells.Item(1).Formula =
"=B1+C4"
            Cels(1,1).Formula = "=B1+C4"
            Cells(1,"A").Formula = "=B1+C4"

• Formatu komórki w postaci np. ##.##0

         Range("A1").NumberFormat =
"##.##0"

background image

Jak wybrać ? 1/2

Jak wybrać ? 1/2

• pojedyńczą komórkę (na przykładzie A1 - 5 różnych

sposobów)

            Range("A1").Select
            Cells(1).Select
            Cells.Item(1).Select
            Cels(1,1).Select
            Cells(1,"A").Select

• zakres komórek   (2 różne sposoby)

            Range("A1:A5").Select
            Range(Cells(1,1),Cells(5,1)).Select

• kilka komórek (różnych)

            Range("A1","A5","Z320").Select

• kilka zakresów komórek (różnych)

            Range("A1:A5","A15:D15","Z320").Select

• komórkę aktywną

            Application.ActiveCell

• komórkę przesuniętą o 2 wiersze i 1 kolumnę

od komórki aktywnej

            Activecell.Offset(2,1).Activate

• komórkę przesuniętą o 2 wiersze i 1 kolumnę od komórki

A2
                 (2 różne sposoby)

            Range("A2").Offset(2, 1).Activate
            Cells(2, 1).Offset(2, 1).Activate

• pierwszy arkusz w aktywnym zeszycie

            Sheets(1).Activate

• .arkusz o nazwie "Arkusz1"

            Sheets("Arkusz1").Activate

• spośród otwartych zeszytów zeszyt o nazwie "Zeszyt1"

            Windows("Zeszyt1").Activate

• wiersz z aktywną komórką  (2 różne sposoby)

            Selection.EntireRow.Select
            ActiveCell.EntireRow.Select

• kolumnę z aktywną komórką (2 różne sposoby)

            Selection.EntireColumn.Select
            ActiveCell.EntireColumn.Select

• kilka kolumn w ciągłym obszarze

            Columns("A:C").Select

background image

Jak wybrać ? 2/2

Jak wybrać ? 2/2

• kilka wierszy w ciągłym obszarze

            Rows("1:5").Select

• kilka kolumn w nieciągłym obszarze

            Columns("A:C","E:E").Select

• kilka wierszy w nieciągłym obszarze

            Rows("1:5","6:6").Select

• ostatnią komórke w danym wierszu

            ActiveCell.End(xlRight).Select

• ostatnią komórke w danej kolumnie

            ActiveCell.End(xlDown).Select

• pierwszą komórke w danym wierszu

            ActiveCell.End(xlLeft).Select

• pierwszą komórke w danej kolumnie

            ActiveCell.End(xlUp).Select

background image

Jak wyświetlić ?

Jak wyświetlić ?

• zawartość komórki  (na przykładzie A1)      (5 różnych

sposobów)

            Range("A1").Value 
            Cells(1).Value 
            Cells.Item(1).Value 
            Cels(1,1).Value 
            Cells(1,"A").Value 

• formułę z  komórki  (na przykładzie A1)      (5 różnych

sposobów)

            Range("A1").Formula 
            Cells(1).Formula 
            Cells.Item(1).Formula 
            Cels(1,1).Formula 
            Cells(1,"A").Formula 

• zatrzymać wyświetlanie okien informacyjnych

            Application.DisplayAlerts = False

• uaktualnić wyświetlanie okien informacyjnych

            Application.DisplayAlerts = True

background image

Jak to zrobić ?

Jak to zrobić ?

• Zatrzymać aktualizację zawartości ekranu

Application.ScreenUpdating = False           

• Wznowić aktualizację zawartości ekranu

Application.ScreenUpdating = True           

• Wyczyścić zawartość schowka po operacji Copy/Paste

Application.CutCopyMode = False           

• Przywrócić Excelowi prawo do pisania w pasku statusu

Application.StatusBar = False

• Zmienić sposób przeliczania formuł w arkuszu

Application.Calculation = xlManual    

'przeliczenie ręczne po np przyciśnięciu

przyciski F9

Application.Calculation = xlAutomatic    

'przeliczenie automatyczna

• Wywołać otwarcie strony www z poziomu VBA - przykład w formie pliku

xls

background image

Sterowanie wykonywaniem instrukcji

Sterowanie wykonywaniem instrukcji

VBA udostępnia zestawione w poniższej tabeli metody sterowania
wykonywaniem instrukcji programu (np. Poprzez tworzenie pętli ).
Służą do tego instrukcje sterujące.

Typ sterowania

Instrukcja VB

Powtarzanie (pętle)

Do ... Loop

While ... Wend

For ... Next
For ... Each

Podejmowanie decyzji

If ... Then ... Else

Select Case ... End Select

Przerywanie i

zatrzymywanie

DoEvents

Exit
End

Stop

Przejścia i skoki

Call

Go Sub ... Return

GoTo

background image

Przykład podejmowania decyzji - instrukcje If

...then

Przykład podejmowania decyzji - instrukcje If

...then

• Instrukcja sterująca If.....Then oraz If.....Then ... Else umożliwiają wykonanie określonych

instrukcji w zależności od prawdziwości warunku. Postać instrukcji jest następująca

If warunek Then instrukcja1 [ Else instrukcja2 ]

Używana jest również postać blokowa instrukcji pozwalająca na uruchomienie większej ilości
linii kodu, przy czym kod jest czytelniejszy

If warunek1 Then

wybór1: jedna lub więcej instrukcji VB

[ ElseIf warunek2

wybór2: jedna lub więcej instrukcji VB

]

[ Else

wybór3: jedna lub więcej instrukcji VB ]

End If

Działanie instrukcji

If.....Then ... Else jest następujące.

• VB sprawdza wartość pierwszego warunku. Jeżeli wartość jest różna od zera, wykonywane są

kolejne instrukcje kodu.

• Jeżeli wartość jest równa zero, VB przenosi sterowanie do ElseIf i sprawdza wartość drugiego

warunku. Jak poprzednio, jeżeli wartość warunku jest różna od zera, wykonywane są instrukcje
następujące po ElseIf .

• W przeciwnym wypadku sterowanie przechodzi do Else i wykonywane są znajdujące się tam

instrukcje.

background image

Co zrobić jak zapomnimy hasła chroniącego

arkusz ? 1/2

Co zrobić jak zapomnimy hasła chroniącego

arkusz ? 1/2

• Procedura znajduje hasło i odbezpiecza chroniony arkusz w skoroszycie. Należy ją skopiować do

skoroszytu w którym sa chronione arkusze i uruchomić z poziomu chronionego arkusza

Sub PasswordBreaker()

Dim i As Integer, j As Integer, k As Integer

Dim l As Integer, m As Integer, n As Integer

Dim i1 As Integer, i2 As Integer, i3 As Integer

Dim i4 As Integer, i5 As Integer, i6 As Integer

On Error Resume Next

For i = 65 To 66: For j = 65 To 66: For k = 65 To 66

For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66

For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66

For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126

ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _ Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _

Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)

background image

Co zrobić jak zapomnimy hasła chroniącego

arkusz ? 2/2

Co zrobić jak zapomnimy hasła chroniącego

arkusz ? 2/2

Dokończenie procedury ...

If ActiveSheet.ProtectContents = False Then

MsgBox "One usable password is " & Chr(i) & Chr(j) & _ Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _

Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)

ActiveWorkbook.Sheets(1).Select

Range("a1").FormulaR1C1 = Chr(i) & Chr(j) & _ Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _ Chr(i3) &

Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)

Exit Sub

End If

Next: Next: Next: Next: Next: Next

Next: Next: Next: Next: Next: Next

End Sub

background image

Jak przyśpieszyć makro? 1/3

Jak przyśpieszyć makro? 1/3

W celu przyspieszenia wykonywania kodu VBA warto zastosować:

1. Dobrać odpowiednio typy zmiennych i zawsze je zadeklarować.Najlepiej użyć:

Option Explicit

ustawionego

na stałe

 

2. Używać adresowania w postaci W1K1 ( np. A1B1)

3. Zatrzymać aktualizację zawartości ekranu

Application.ScreenUpdating = False           

 

4. Zatrzymać przeliczanie arkusza 

    

Application.

Calculation = xlManual    

'przeliczenie ręczne po np przyciśnięciu przyciski F9

5. Zatrzymać  obsługę zdarzeń     

Application.EnableEvents = False 

6. Używać With...End With przy obiektach

    

With Range("A1") 

                   

      .Value = 100 

                      

   .Font.Bold = True 

      

End With

7.   Używać VbNullString zamiast ""

       PustyText= VbNullString

background image

Jak przyśpieszyć makro? 2/3

Jak przyśpieszyć makro? 2/3

9. Używać instrukcji przypisania zamiast Copy

zamiast:

      

Sheet1.Range("A1:A200").Copy 

       Sheet1.Range("A1:A200").PasteSpecial xlPasteValues 

stosuj: 

      

Sheet1.Range("A1:A200") = Sheet1.Range("A1:A200").Value

10.

Zwalniać nieużywane przypisania używając Nothing

deklaracja:

    

Dim mojObiekt as Worksheet

     Set mojObiekt = Sheet1

zwolnienie zarezerwowanej pamięci

      

Set mojObiekt = Nothing

  11.Upraszczać warunki w if..else..end if

zamiast
    

If i = 5 Then 

             

wynik = True 

        

Else 

            

wynik = False 

      

End If

stosuj
    

Dim wynik As Boolean 

    

Dim i As Integer

 

    

wynik = (i = 25)

 

background image

Jak przyśpieszyć makro? 3/3

Jak przyśpieszyć makro? 3/3

12. Używać Not  zamiast przypisania

zamiast
    

If wynik <> True  Then 

             

wynik = True 

      

End If

stosuj
    

Dim wynik As Boolean 

     

wynik

=

Not

wynik 

13. Unikać pętli.

14. Unikać rozbudowanych instrukcji Select case

background image

Źródła materiałów

Źródła materiałów

http://www.vba.matrix.pl/

• „Excel w praktyce” - B.Zieliński Wyd. Translator s.c.
• „Programowanie Excel 2000” John Walkenbach RM 2000


Document Outline


Wyszukiwarka

Podobne podstrony:
Excel VBA Course Notes 1 Macro Basics
Call for Applications HIA Program in US 09
Importowanie danych z bazy Accessa do Excela, excel + vba, excel duzo-np
24 321 336 Optimized Steel Selection for Applications in Plastic Processing
HIA?ll for Applications HIA Poland 09
Excel VBA Course Notes 1 Macro Basics
free excel editor for windows 7 download
Microsoft Excel Vba Examples
Autocad & Excel VBA Tutorial
Excel VBA Course Notes 1 Macro Basics
Applications and opportunities for ultrasound assisted extraction in the food industry — A review
Applications of polyphase filters for bandpass sigma delta analog to digital conversion
VBA w Excel7, excel
61 881 892 Evaluation of PVD Coating

więcej podobnych podstron