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 

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ć 

tą 

właściwość 

automatycznie  korzystając  z  Narzędzia  / 
Opcje 

Edytor 

zaznaczyć 

pole 

"Wymagane 

deklaracje 

zmiennych": 

Całość 

wykonujemy 

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