Top Banner
48

Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

Aug 09, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

Tytuł oryginalny Excelreg VBA Programming For Dummiesreg 3rd Edition

Tłumaczenie Ryszard Goacuternowicz Grzegorz Kowalczyk

ISBN 978-83-246-7950-8

Original English language edition Copyright copy 2013 by John Wiley amp Sons Inc Hoboken New Jersey All rights reserved including the right of reproduction in whole or in part any form This translation published by arrangement with Wiley Publishing Inc

Oryginalne angielskie wydanie copy 2013 by John Wiley amp Sons Inc Hoboken New JerseyWszelkie prawa włączając prawo do reprodukcji całości lub części w jakiejkolwiek formie zarezerwowane Tłumaczenie opublikowane na mocy porozumienia z Wiley Publishing Inc

Translation copyright copy 2014 by Helion SA

Wiley the Wiley logo For Dummies the Dummies Man logo A Reference for the Rest of Us The Dummies Way Dummies Daily The Fun and Easy Way Dummiescom Making Everything Easier and related trade dress are trademarks or registered trademarks of John Wiley and Sons Inc andor its affiliates in the United States andor other countries Used under License

Wiley the Wiley logo For Dummies the Dummies Man logo A Reference for the Rest of Us The Dummies Way Dummies Daily The Fun and Easy Way Dummiescom Making Everything Easier i związana z tym szata graficzna są markami handlowymi John Wiley and Sons Inc ilub firm stowarzyszonych w Stanach Zjednoczonych ilub innych krajach Wykorzystywane na podstawie licencji

Polish language edition published by Wydawnictwo Helion Copyright copy 2014

All rights reserved No part of this book may be reproduced or transmitted in any form or by any means electronic or mechanical including photocopying recording or by any information storage retrieval system without permission from the Publisher

Wszelkie prawa zastrzeżone Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione Wykonywanie kopii metodą kserograficzną fotograficzną a także kopiowanie książki na nośniku filmowym magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji

Autor oraz Wydawnictwo HELION dołożyli wszelkich starań by zawarte w tej książce informacje były kompletnei rzetelne Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich Autor oraz Wydawnictwo HELION nie ponoszą roacutewnież żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce

Drogi CzytelnikuJeżeli chcesz ocenić tę książkę zajrzyj pod adres httpdlabystrzakowpluseropiniee13pvbMożesz tam wpisać swoje uwagi spostrzeżenia recenzję

Wydawnictwo HELION ul Kościuszki 1c 44-100 Gliwicetel 32 231 22 19 32 230 98 63e-mail dlabystrzakowdlabystrzakowplWWW httpdlabystrzakowpl

Pliki z przykładami omawianymi w książce można znaleźć pod adresem ftpftphelionplprzykladye13pvbzip

Printed in Poland

bull Kup książkębull Poleć książkę bull Oceń książkę

bull Księgarnia internetowabull Lubię to raquo Nasza społeczność

Spis tre ciO autorze 15

Podzi kowania autora 17

Wst p 19Czy ta ksi ka jest dla Ciebie 19A wi c chcesz by programist hellip 20Dlaczego warto 20Co powiniene wiedzie 21Obowi zkowy podrozdzia o konwencjach typograficznych 22Sprawd ustawienia zabezpiecze 22Jak podzielona jest ksi ka 24

Cz I Wst p do programowania w VBA 24Cz II Jak VBA wspoacute pracuje z Excelem 24Cz III Podstawy programowania 24Cz IV Komunikacja z u ytkownikiem 24Cz V Od teorii do praktyki 24Cz VI Dekalogi 24

Ikony u ywane w ksi ce 25Pobieranie plikoacutew z przyk adami 25Co dalej 26

Cz I Wst p do programowania w VBA 27Rozdzia 1 Czym jest VBA 29

No dobrze czym jest wi c VBA 29Co mo na zrobi za pomoc VBA 30

Wprowadzanie blokoacutew tekstu 31Automatyzacja cz sto wykonywanego zadania 31Automatyzacja powtarzalnych operacji 31Tworzenie w asnego polecenia 31Tworzenie w asnego przycisku 31Tworzenie w asnych funkcji arkusza kalkulacyjnego 31Tworzenie w asnych dodatkoacutew do Excela 32Tworzenie kompletnych aplikacji opartych na makrach 32

Kup książkę Poleć książkę

6 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Plusy i minusy j zyka VBA 32Plusy j zyka VBA 32Minusy j zyka VBA 33

VBA w pigu ce 33Wycieczka po wersjach Excela 35

Rozdzia 2 Szybkie zanurzenie 39Przygotowanie do pracy 39Plan dzia ania 40Stawiamy pierwsze kroki 40Rejestrowanie makra 41Testowanie makra 42Podgl d kodu makra 42Modyfikacja makra 44Zapisywanie skoroszytoacutew zawieraj cych makra 45Bezpiecze stwo makr 45Wi cej o makrze NameAndTime 47

Cz II Jak VBA wspoacute pracuje z Excelem 49Rozdzia 3 Praca w edytorze VBE 51

Czym jest Visual Basic Editor 51Uruchamianie edytora VBE 51Zapoznanie z komponentami edytora VBE 52

Praca z oknem Project 54Dodawanie nowego modu u VBA 55Usuwanie modu u VBA 55Eksportowanie i importowanie obiektoacutew 56

Praca z oknem Code 56Minimalizowanie i maksymalizowanie okien 56Tworzenie modu u 57Wprowadzanie kodu VBA do modu u 58Bezpo rednie wprowadzanie kodu 58U ywanie rejestratora makr 61Kopiowanie kodu VBA 63

Dostosowywanie rodowiska VBA 63Karta Editor 64Karta Editor Format 66Karta General 67Karta Docking 68

Rozdzia 4 Wprowadzenie do modelu obiektowego w Excelu 69Czy Excel to obiekt 70Wspinaczka po hierarchii obiektoacutew 70Zapoznanie z kolekcjami 71Odwo ywanie si do obiektoacutew 71

Nawigacja po hierarchii obiektoacutew 72Upraszczanie odwo a do obiektoacutew 73

Kup książkę Poleć książkę

Spis tre ci 7

W a ciwo ci i metody obiektoacutew 74W a ciwo ci obiektoacutew 74Metody obiektoacutew 76Zdarzenia obiektoacutew 77

Poszukiwanie dodatkowych informacji 78System pomocy VBA 78Narz dzie Object Browser 79Automatyczna lista w a ciwo ci i metod 80

Rozdzia 5 Procedury Sub i Function w j zyku VBA 81Procedury Sub a funkcje 81

Rzut oka na procedury Sub 82Rzut oka na procedury Function 82Nazwy procedur Sub i Function 83

Uruchamianie procedur Sub 83Bezpo rednie uruchamianie procedur Sub 85Uruchamianie procedur w oknie dialogowym Makro 85Uruchamianie makr za pomoc skroacutetoacutew klawiszowych 86Uruchamianie procedur przy u yciu przyciskoacutew i kszta toacutew 87Uruchamianie procedur z poziomu innych procedur 89

Uruchamianie procedur Function 89Wywo ywanie funkcji z poziomu procedur Sub 90Wywo ywanie funkcji z poziomu formu arkusza 90

Rozdzia 6 U ywanie rejestratora makr 93Czy to rzeczywisto czy to VBA 93Podstawy rejestrowania makr 93Przygotowania do rejestrowania makr 95Wzgl dne czy bezwzgl dne 96

Rejestrowanie makr w trybie odwo a bezwzgl dnych 96Rejestrowanie makr w trybie odwo a wzgl dnych 97

Co jest rejestrowane 98Opcje rejestratora makr 100

Nazwa makra 100Klawisz skroacutetu 100Przechowuj makro w 101Opis 101

Czy to co jest wydajne 101

Cz III Podstawy programowania 105Rozdzia 7 Kluczowe elementy j zyka VBA 107

Stosowanie komentarzy w kodzie VBA 107U ywanie zmiennych sta ych i typoacutew danych 109

Poj cie zmiennej 109Czym s typy danych w j zyku VBA 110Deklarowanie zmiennych i okre lanie ich zasi gu 111

Kup książkę Poleć książkę

8 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Sta e 117Sta e predefiniowane 118

a cuchy znakoacutew 118Daty i godziny 119

Instrukcje przypisania 120Przyk ady instrukcji przypisania 120O znaku roacutewno ci 121Proste operatory 121

Praca z tablicami 123Deklarowanie tablic 123Tablice wielowymiarowe 124Tablice dynamiczne 124

Stosowanie etykiet 125

Rozdzia 8 Praca z obiektami Range 127Szybka powtoacuterka 127Inne sposoby odwo ywania si do zakresu 129

W a ciwo Cells 129W a ciwo Offset 130

Wybrane w a ciwo ci obiektu Range 131W a ciwo Value 131W a ciwo Text 132W a ciwo Count 133W a ciwo ci Column i Row 133W a ciwo Address 133W a ciwo HasFormula 134W a ciwo Font 134W a ciwo Interior 136W a ciwo ci Formula i FormulaLocal 136W a ciwo NumberFormat 137

Wybrane metody obiektu Range 137Metoda Select 137Metody Copy i Paste 138Metoda Clear 138Metoda Delete 139

Rozdzia 9 Praca z funkcjami VBA i arkusza kalkulacyjnego 141Co to jest funkcja 141Stosowanie wbudowanych funkcji VBA 142

Przyk ady funkcji VBA 142Funkcje VBA ktoacutere robi co wi cej ni tylko zwracanie warto ci 144Odkrywanie funkcji VBA 144

U ycie funkcji arkusza kalkulacyjnego w VBA 145Przyk ady funkcji arkusza kalkulacyjnego 148Wprowadzanie funkcji arkusza kalkulacyjnego 150Wi cej o u yciu funkcji arkusza kalkulacyjnego 151

U ycie w asnych funkcji 151

Kup książkę Poleć książkę

Spis tre ci 9

Rozdzia 10 Sterowanie przep ywem i podejmowanie decyzji 153Zabierz si za przep yw kolego 153Instrukcja GoTo 154Decyzje decyzje 155

Struktura If-Then 155Struktura Select Case 159

Entliczek p tliczek mdash czyli jak u ywa p tli 162P tle For-Next 162P tla Do-While 167P tla Do-Until 168

U ycie p tli For Each-Next z kolekcjami 168

Rozdzia 11 Automatyczne procedury i zdarzenia 171Przygotowanie do wielkiego zdarzenia 171

Czy zdarzenia s przydatne 173Programowanie procedur obs ugi zdarze 173

Gdzie jest umieszczony kod VBA 174Tworzenie procedury obs ugi zdarzenia 175Przyk ady wprowadzaj ce 176

Zdarzenie Open dla skoroszytu 176Zdarzenie BeforeClose dla skoroszytu 179Zdarzenie BeforeSave dla skoroszytu 179

Przyk ady zdarze aktywacyjnych 180Zdarzenia aktywacji i dezaktywacji arkusza 180Zdarzenia aktywacji i dezaktywacji skoroszytu 181Zdarzenia aktywacji skoroszytu 182

Inne zdarzenia dotycz ce arkusza 183Zdarzenie BeforeDoubleClick 183Zdarzenie BeforeRightClick 184Zdarzenie Change 184

Zdarzenia niezwi zane z obiektami 186Zdarzenie OnTime 186Zdarzenia naci ni cia klawisza 188

Rozdzia 12 Techniki obs ugi b doacutew 191Rodzaje b doacutew 191B dny przyk ad 192

To makro nie jest idealne 192Makro wci nie jest idealne 193Czy teraz makro jest idealne 194Rezygnacja z idea u 195

Inny sposoacuteb obs ugi b doacutew 195Korekta procedury EnterSquareRoot 195O instrukcji On Error 196

Obs uga b doacutew mdash szczegoacute owe informacje 197Wznawianie wykonywania kodu po wyst pieniu b du 197Obs uga b doacutew w pigu ce 199

Kup książkę Poleć książkę

10 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kiedy ignorowa b dy 199Rozpoznawanie okre lonych b doacutew 200

Zamierzony b d 201

Rozdzia 13 Dezynsekcja kodu czyli jak walczy z pluskwami 203Rodzaje pluskiew 203Podstawy entomologii czyli jak zidentyfikowa pluskw 205Metody i techniki walki z pluskwami 205

Przegl danie kodu VBA 206Umieszczanie funkcji MsgBox w kluczowych miejscach kodu 206Umieszczanie polecenia DebugPrint w kluczowych miejscach kodu 208Korzystanie z wbudowanych narz dzi Excela wspomagaj cych odpluskwianie kodu VBA 209

Kilka s oacutew o debuggerze 209Ustawianie punktoacutew przerwa w kodzie programu 209Zastosowanie okna Watch 212Zastosowanie okna Locals 213

Jak zredukowa liczb b doacutew w kodzie programu 215

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 217Przetwarzanie zakresoacutew komoacuterek 217

Kopiowanie zakresoacutew 218Kopiowanie zakresu o zmiennej wielko ci 219Zaznaczanie komoacuterek do ko ca wiersza lub kolumny 220Zaznaczanie ca ego wiersza lub ca ej kolumny 221Przenoszenie zakresoacutew 222Wydajne przetwarzanie komoacuterek zaznaczonego zakresu przy u yciu p tli 222Wydajne przetwarzanie komoacuterek zaznaczonego zakresu przy u yciu p tli (cz II) 224Wprowadzanie warto ci do komoacuterki 225Okre lanie typu zaznaczonego zakresu 226Identyfikowanie zaznacze wielokrotnych 226

Zmiana ustawie Excela 227Zmiana ustawie logicznych (opcje typu Boolean) 227Zmiana innych opcji (typu non-Boolean) 228

Praca z wykresami 229Metoda AddChart kontra metoda AddChart2 230Modyfikowanie typu wykresu 231Przechodzenie w p tli przez elementy kolekcji ChartObjects 232Modyfikowanie w a ciwo ci wykresu 232Zmiana formatowania wykresoacutew 233

Jak przyspieszy dzia anie kodu VBA 234Wy czanie aktualizacji ekranu 234Wy czenie automatycznego przeliczania skoroszytu 235Wy czanie irytuj cych ostrze e 236Upraszczanie odwo a do obiektoacutew 236Deklarowanie typoacutew zmiennych 237Zastosowanie struktury With-End With 238

Kup książkę Poleć książkę

Spis tre ci 11

Cz IV Komunikacja z u ytkownikiem 239Rozdzia 15 Proste okna dialogowe 241

Co zamiast formularzy UserForm 241Funkcja MsgBox 242

Wy wietlanie prostych okien dialogowych 243Pobieranie odpowiedzi z okna dialogowego 243Dostosowywanie wygl du okien dialogowych do w asnych potrzeb 244

Funkcja InputBox 247Sk adnia funkcji InputBox 248Przyk ad zastosowania funkcji InputBox 248Inny rodzaj okna dialogowego InputBox 249

Metoda GetOpenFilename 250Sk adnia metody GetOpenFilename 251Przyk ad zastosowania metody GetOpenFilename 251

Metoda GetSaveAsFilename 253Pobieranie nazwy folderu 254Wy wietlanie wbudowanych okien dialogowych programu Excel 254

Rozdzia 16 Wprowadzenie do formularzy UserForm 257Kiedy u ywa formularzy UserForm 257Tworzenie formularzy UserForm mdash wprowadzenie 258Praca z formularzami UserForm 259

Wstawianie nowego formularza UserForm 259Umieszczanie formantoacutew na formularzu UserForm 260Modyfikacja w a ciwo ci formantoacutew formularza UserForm 261Przegl danie okna Code formularza UserForm 263Wy wietlanie formularzy UserForm 263Pobieranie i wykorzystywanie informacji z formularzy UserForm 264

Przyk ad tworzenia formularza UserForm 264Tworzenie formularza UserForm 265Dodawanie przyciskoacutew polece (formanty CommandButton) 265Dodawanie przyciskoacutew opcji (formanty OptionButton) 267Dodawanie procedur obs ugi zdarze 268Tworzenie makra ktoacutere wy wietla formularz na ekranie 270Udost pnianie makra u ytkownikowi 271Testowanie dzia ania makra 272

Rozdzia 17 Praca z formantami formularza UserForm 275Rozpoczynamy prac z formantami formularzy UserForm 275

Dodawanie formantoacutew 276Wprowadzenie do w a ciwo ci formantoacutew 277

Formanty okien dialogowych mdash szczegoacute y 278Formant CheckBox (pole wyboru) 279Formant ComboBox (pole kombi) 280Formant CommandButton (przycisk polecenia) 281Formant Frame (pole grupy) 281Formant Image (pole obrazu) 282

Kup książkę Poleć książkę

12 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Formant Label (pole etykiety) 283Formant ListBox (pole listy) 283Formant MultiPage 284Formant OptionButton (przycisk opcji) 285Formant RefEdit (pole zakresu) 286Formant ScrollBar (pasek przewijania) 286Formant SpinButton (pokr t o) 287Formant TabStrip (pole karty) 288Formant TextBox (pole tekstowe) 288Formant ToggleButton (przycisk prze cznika) 289

Praca z formantami w oknach dialogowych 289Zmiana rozmiaroacutew i przenoszenie formantoacutew w inne miejsce 289Rozmieszczanie i wyroacutewnywanie po o enia formantoacutew w oknie dialogowym 290Obs uga u ytkownikoacutew preferuj cych korzystanie z klawiatury 291Testowanie formularzy UserForm 293

Estetyka okien dialogowych 293

Rozdzia 18 Techniki pracy z formularzami UserForm 295Zastosowanie w asnych okien dialogowych 295Przyk adowy formularz UserForm 296

Tworzenie okna dialogowego 296Tworzenie kodu procedury wy wietlaj cej okno dialogowe 298Udost pnianie makra u ytkownikowi 299Testowanie okna dialogowego 299Dodawanie procedur obs ugi zdarze 300Sprawdzanie poprawno ci danych 302Teraz okno dialogowe dzia a tak jak powinno 302

Wi cej przyk adoacutew formularzy UserForm 302Zastosowanie formantoacutew ListBox 303Zaznaczanie zakresoacutew 307Praca z wieloma grupami formantoacutew OptionButton 309Zastosowanie formantoacutew SpinButton oraz TextBox 310Wykorzystywanie formularza UserForm jako wska nika post pu zadania 312Tworzenie niemodalnych okien dialogowych z wieloma kartami 315Wy wietlanie wykresoacutew na formularzach UserForm 317

Lista kontrolna tworzenia i testowania okien dialogowych 318

Rozdzia 19 Udost pnianie makr z poziomu interfejsu u ytkownika 321Dostosowywanie Wst ki 321

R czne dopasowywanie Wst ki do w asnych potrzeb 322Dodawanie do Wst ki przycisku w asnego makra 324Dostosowywanie Wst ki za pomoc kodu XML 324

Dostosowywanie menu podr cznego 329Rodzaje obiektoacutew CommandBar 329Wy wietlanie wszystkich menu podr cznych 329Odwo ania do elementoacutew kolekcji CommandBars 330Odwo ania do formantoacutew obiektu CommandBar 331W a ciwo ci formantoacutew obiektu CommandBar 332

Kup książkę Poleć książkę

Spis tre ci 13

Przyk ady zastosowania VBA do modyfikacji menu podr cznego 334Resetowanie wszystkich wbudowanych menu podr cznych 334Dodawanie nowego elementu do menu podr cznego Cell 335Wy czanie menu podr cznego 337

Tworzenie w asnych paskoacutew narz dzi 338

Cz V Od teorii do praktyki 341Rozdzia 20 Jak tworzy w asne funkcje arkuszowe i jak prze y aby o tym opowiedzie 343

Dlaczego tworzymy w asne funkcje 343Podstawowe informacje o funkcjach VBA 344Tworzenie funkcji 345Praca z argumentami funkcji 345Przyk ady funkcji 346

Funkcje bezargumentowe 346Funkcje jednoargumentowe 346Funkcje z dwoma argumentami 348Funkcje pobieraj ce zakres jako argument 349Funkcje z argumentami opcjonalnymi 351

Funkcje opakowuj ce 353Funkcja NumberFormat 353Funkcja ExtractElement 354Funkcja SayIt 354Funkcja IsLike 355

Funkcje zwracaj ce tablice 355Zwracanie tablicy zawieraj cej nazwy miesi cy 355Zwracanie posortowanej listy 356

Okno dialogowe Wstawianie funkcji 358Wy wietlanie opisoacutew funkcji 358Opisy argumentoacutew 360

Rozdzia 21 Tworzenie dodatkoacutew 361No dobrzehellip czym zatem s dodatki 361Po co tworzy si dodatki 362Praca z dodatkami 363Podstawy tworzenia dodatkoacutew 364Tworzymy przyk adowy dodatek 365

Konfiguracja skoroszytu 365Testowanie skoroszytu 367Tworzenie opisoacutew dodatku 368Ochrona kodu VBA 369Tworzenie dodatku 369Otwieranie dodatku 369Dystrybucja dodatkoacutew 370Modyfikowanie dodatkoacutew 371

Kup książkę Poleć książkę

14 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Cz VI Dekalogi 373Rozdzia 22 Dziesi pyta na temat VBA (wraz z odpowiedziami) 375

Rozdzia 23 (Prawie) dziesi roacutede informacji na temat Excela 379System pomocy j zyka VBA 379Wsparcie techniczne firmy Microsoft 380Inne strony internetowe 380Blogi po wi cone Excelowi 380Google 381Bing 381Lokalne grupy u ytkownikoacutew 381Moje inne ksi ki 381

Rozdzia 24 Dziesi rzeczy ktoacutere powiniene robi w j zyku VBAi ktoacuterych nie powiniene robi 383

Zawsze deklaruj wszystkie zmienne 383Nigdy nie powiniene myli has a chroni cego kod VBA z bezpiecze stwem aplikacji 384Zawsze staraj si wyczy ci i zoptymalizowa kod aplikacji 384Nigdy nie umieszczaj wszystkiego w jednej procedurze 385Zawsze powiniene rozwa y zastosowanie innego oprogramowania 385Nigdy nie zak adaj e ka dy u ytkownik zezwala na uruchamianie makr 386Zawsze staraj si eksperymentowa z nowymi rozwi zaniami 386Nigdy z goacutery nie zak adaj e Twoacutej kod b dzie poprawnie dzia a z innymi wersjami Excela 386Zawsze pami taj o u ytkownikach Twojej aplikacji 387Nigdy nie zapominaj o tworzeniu kopii zapasowych 387

Skorowidz 389

Kup książkę Poleć książkę

Rozdzia 14

Przyk ady i technikiprogramowania w j zyku VBA

W tym rozdziale poznasz szereg przyk adoacutew technik programowania w j zyku VBA dowiesz si jak mo esz przyspieszy dzia anie kodu VBA w Twojej aplikacji

ierz e nauka programowania jest znacznie szybsza i zdecydowanie bardziejefektywna kiedy pracujemy na konkretnych przyk adach Dobrze opracowany

przyk ad o wiele lepiej obja nia zagadnienie ni najbardziej rozbudowany i szczegoacute owyale teoretyczny opis Poniewa czytasz t ksi k prawdopodobnie zgadzasz si ze mnw tej materii W tym rozdziale znajdziesz szereg przyk adoacutew demonstruj cych u ytecznepraktyczne techniki programowania w j zyku VBA

Przyk ady omawiane w tym rozdziale zosta y podzielone na kilka kategorii Oto one

Praca z zakresami

Modyfikacja ustawie Excela

Praca z wykresami

Przyspieszanie i optymalizacja dzia ania kodu VBA

Niektoacutere z prezentowanych przyk adoacutew b dziesz moacuteg od razu wykorzysta w swoichaplikacjach jednak w wi kszo ci przypadkoacutew b d wymaga y pewnego dostosowaniado Twoich aplikacji

Przetwarzanie zakresoacutew komoacuterekWi kszo zada z jakimi b dziesz si styka programuj c w j zyku VBA b dzie zapewnewymaga a mniejszego b d wi kszego przetwarzania zakresoacutew komoacuterek (aby od wie ysobie wiadomo ci na temat obiektu Range powiniene zajrze do rozdzia u 8) Kiedypracujesz z obiektami Range powiniene pami ta o nast puj cych sprawach

Kod VBA nie musi zaznacza danego zakresu aby go przetwarza

Je eli kod VBA zaznacza wybrany zakres przechowuj cy go skoroszyt musi byaktywny

W

Kup książkę Poleć książkę

218 Cz III Podstawy programowania

Rejestrator makr nie zawsze b dzie w stanie wygenerowa optymalny kod VBABardzo cz sto jednak mo esz za jego pomoc utworzy bazowe makro i potemodpowiednio zmodyfikowa kod tak aby sta si bardziej efektywny

Zazwyczaj bardzo dobrym rozwi zaniem jest nadawanie nazw zakresom komoacuterekwykorzystywanym w kodzie VBA Przyk adowo polecenie Range(Total)jestznacznie lepszym rozwi zaniem ni Range(D45) Je li w tym drugim przypadkupoacute niej wstawisz dodatkowy wiersz powy ej wiersza 45 to eby wszystko dzia a opoprawnie b dziesz musia zmodyfikowa makro tak aby korzysta o z nowegopoprawnego adresu komoacuterki a ta po wykonaniu takiej operacji b dzie mia a innyadres (D46) Aby nada nazw wybranemu zakresowi komoacuterek powiniene przejna kart FORMU Y i wybra polecenie Definiuj nazw znajduj ce si w grupiepolece Nazwy zdefiniowane

Kiedy tworzysz makro ktoacutere b dzie przetwarza o zakres komoacuterek zaznaczonyprzez u ytkownika pami taj e u ytkownik mo e zaznaczy kilka ca ych kolumnczy wierszy W wi kszo ci przypadkoacutew z pewno ci nie b dziesz chcia aby makrow p tli przechodzi o w takiej sytuacji przez wszystkie zaznaczone komoacuterki (w czniez pustymi) co mog oby zaj bardzo wiele czasu Dobre makro powinno odszukai przetwarza tylko komoacuterki ktoacutere nie s puste

Excel pozwala na jednoczesne zaznaczanie wielu zakresoacutew komoacuterek Aby to zrobi powiniene zaznaczy pierwszy zakres komoacuterek potem wcisn i przytrzymaklawisz Ctrl i zaznacza kolejne zakresy komoacuterek przy u yciu myszy Kod Twojejaplikacji powinien by przygotowany na takie sytuacje i podejmowa odpowiednieakcje

Skoroszyty z wybranymi przyk adami omawianymi w tym rozdziale znajdziesz na stronieinternetowej naszej ksi ki

Je eli chcesz samodzielnie wpisywa kod omawianych przyk adoacutew przejd do edytoraVBE naciskaj c kombinacj klawiszy lewyAlt+F11 a nast pnie wstaw nowy modu VBAi wpisz kod prezentowanych procedur Upewnij si e Twoacutej skoroszyt jest poprawnieskonfigurowany Je eli na przyk ad kod danego przyk adu odwo uje si do arkuszyo nazwach Arkusz1 i Arkusz2 upewnij si e takie arkusze istniej w Twoim skoroszycie

Kopiowanie zakresoacutewKopiowanie zakresoacutew komoacuterek mo e mia o pretendowa do miana jednej z najcz ciejwykonywanych operacji w Excelu Kiedy w czysz rejestrator makr i skopiujesz zakreskomoacuterek o adresie A1A5 do zakresu B1B5 otrzymasz nast puj ce makro

Sub CopyRange() Range(A1A5)Select SelectionCopy Range(B1)Select ActiveSheetPaste ApplicationCutCopyMode = FalseEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 219

Zwroacute uwag na ostatnie polecenie Zosta o ono wygenerowane przez naci ni cieklawisza Esc po skopiowaniu zakresu komoacuterek co spowodowa o usuni cie przerywanejlinii reprezentuj cej na arkuszu obramowanie kopiowanego zakresu

Przedstawione makro dzia a poprawnie ale zakresy komoacuterek mo na kopiowa w znaczniebardziej efektywny sposoacuteb Identyczny rezultat mo esz osi gn za pomoc proceduryktoacutera sk ada si z tylko jednego wiersza polecenia i nie zaznacza adnych komoacuterek(dzi ki czemu nie wymaga ustawiania w a ciwo ci CutCopyMode na warto False)

Sub CopyRange2() Range(A1A5)Copy Range(B1)End Sub

Procedura przedstawiona powy ej korzysta z tego e metoda Copy mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe kopiowanego zakresu Informacje o tymznalaz em w pomocy systemowej VBA Powy szy przyk ad doskonale roacutewnie ilustrujefakt e rejestrator makr nie zawsze generuje najbardziej efektywny kod

Kopiowanie zakresu o zmiennej wielko ciW wielu przypadkach konieczne jest skopiowanie zakresu komoacuterek dla ktoacuterego dok adnaliczba wierszy i kolumn okre laj cych jego wielko nie jest z goacutery znana Przyk adowomo esz dysponowa skoroszytem ledz cym tygodniow sprzeda w ktoacuterym liczba wierszyzmienia si ka dego tygodnia po wprowadzeniu nowych danych

Na rysunku 141 przedstawiam przyk ad cz sto spotykanego typu arkusza Znajduj cysi w nim zakres komoacuterek sk ada si z kilku wierszy ktoacuterych liczba zmienia si ka degodnia Poniewa nie wiesz jaki jest rozmiar zakresu w danej chwili musisz utworzykod ktoacutery b dzie dzia a bez u ywania adresu zakresu kopiowanych komoacuterek

Rysunek 141Przyk ad zakre-su ktoacutery mo e

sk ada siz dowolnej

liczby wierszy

Makro przedstawione poni ej ilustruje sposoacuteb kopiowania zakresu komoacuterek z arkuszaArkusz1 do arkusza Arkusz2 (pocz wszy od komoacuterki A1) Makro wykorzystuje w a ciwoCurrentRegion ktoacutera zwraca obiekt Range odpowiadaj cy blokowi komoacuterek otaczaj cychokre lon komoacuterk (w tym przypadku o adresie A1)

Kup książkę Poleć książkę

220 Cz III Podstawy programowania

Sub CopyCurrentRegion() Range(A1)CurrentRegionCopy Sheets(Arkusz2)Select Range(A1)Select ActiveSheetPaste Sheets(Arkusz1)Select ApplicationCutCopyMode = FalseEnd Sub

Zastosowanie w a ciwo ci CurrentRegion jest roacutewnowa ne z przej ciem na kartNARZ DZIA G OacuteWNE i wybraniem polecenia Znajd i zaznaczPrzejd do mdashspecjalnie znajduj cego si w grupie opcji Edytowanie i nast pnie zaznaczeniem opcjiBie cy obszar Aby przekona si jak to dzia a podczas wykonywania tych polecepowiniene u y rejestratora makr Zazwyczaj warto w a ciwo ci CurrentRegionreprezentuje prostok tny blok komoacuterek otoczony przez puste wiersze i kolumny

Oczywi cie mo esz zoptymalizowa kod makra przedstawionego powy ej i niezaznacza obszaru docelowego dla kopiowanych komoacuterek Makro przedstawione poni ejkorzysta z faktu e metoda Copy mo e u ywa argumentu wywo ania reprezentuj cegomiejsce docelowe kopiowanego zakresu

Sub CopyCurrentRegion2() Range(A1)CurrentRegionCopy _ Sheets(Arkusz2)Range(A1)End Sub

Je eli zakres komoacuterek ktoacutery chcesz skopiowa jest tabel (zdefiniowan przy u yciapolecenia WSTAWIANIETabeleTabela) ca e zadanie b dzie jeszcze atwiejsze Ka databela posiada swoj nazw (na przyk ad Tabela1) i automatycznie rozszerza si w miardodawania nowych wierszy

Sub CopyTable() Range(Tabela1)Copy Sheets(Arkusz2)Range(A1)End Sub

Je eli sproacutebujesz wykona procedur przedstawion powy ej przekonasz si e wiersznag oacutewka tabeli nie jest kopiowany poniewa obiekt Tabela1 nie obejmuje tegowiersza Je li chcesz aby wiersz nag oacutewka roacutewnie by kopiowany powiniene zmieniodwo anie do tabeli tak jak to zosta o przedstawione poni ej

Range(Tabela1[All])

Zaznaczanie komoacuterekdo ko ca wiersza lub kolumnyPrawdopodobnie bardzo cz sto u ywasz kombinacji klawiszy takich jak Ctrl+Shift+ czy Ctrl+Shift+ do zaznaczania zakresoacutew sk adaj cych si ze wszystkich komoacuterekod komoacuterki aktywnej a do ko ca kolumny czy wiersza Nie jest wi c chyba zaskoczenieme mo esz napisa makro ktoacutere b dzie zaznacza komoacuterki w podobny sposoacuteb

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 221

Do zaznaczania ca ego bloku komoacuterek mo esz u y w a ciwo ci CurrentRegion Ale copowiniene zrobi je eli chcesz zaznaczy powiedzmy tylko jedn kolumn z tegobloku komoacuterek Na szcz cie VBA pozwala na wykonywanie takich operacji Proceduraktoacuterej kod przedstawiam poni ej zaznacza zakres komoacuterek pocz wszy od bie cejaktywnej komoacuterki w doacute kolumny a do komoacuterki znajduj cej si o jeden wiersz powy ejpierwszej pustej komoacuterki tej kolumny Po zaznaczeniu zakresu mo esz przetwarza gow dowolny sposoacuteb mdash kopiowa komoacuterki przenosi je w inne miejsce arkusza zmieniaformatowanie i tak dalej

Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))SelectEnd Sub

Oczywi cie taki sam obszar mo esz roacutewnie zaznaczy r cznie Aby to zrobi powinienezaznaczy pierwsz komoacuterk nast pnie wcisn i przytrzyma klawisz Shift nacisnklawisz End i wreszcie nacisn klawisz (strza ka w doacute )

W przyk adzie wykorzystuj metod End obiektu ActiveCell ktoacutera zwraca obiekt typuRange Metoda End pobiera jeden argument okre laj cy kierunek w ktoacuterym zostaniewykonane zaznaczenie Argumentami tej metody mo e by dowolna ze sta ychprzedstawionych poni ej

xlUp

xlDown

xlToLeft

xlToRight

Pami taj e zaznaczanie zakresu nie jest potrzebne do jego przetwarzania Makroprzedstawione poni ej zmienia czcionk w komoacuterkach zmiennego zakresu (pojedynczakolumna) na pogrubion bez uprzedniego zaznaczenia zakresu

Sub MakeBold() Range(ActiveCell ActiveCellEnd(xlDown)) _ FontBold = TrueEnd Sub

Zaznaczanie ca ego wiersza lub ca ej kolumnyProcedura przedstawiona poni ej ilustruje sposoacuteb zaznaczania kolumny w ktoacuterej znajdujesi aktywna komoacuterka Makro wykorzystuje w a ciwo EntireColumn ktoacutera zwracaobiekt typu Range reprezentuj cy ca kolumn

Sub SelectColumn() ActiveCellEntireColumnSelectEnd Sub

Jak pewnie si spodziewasz w j zyku VBA dost pna jest roacutewnie w a ciwo EntireRowktoacutera zwraca obiekt typu Range reprezentuj cy ca y wiersz

Kup książkę Poleć książkę

222 Cz III Podstawy programowania

Przenoszenie zakresoacutewZazwyczaj aby przenie zakres komoacuterek zaznaczasz go wycinasz do schowka systemowegoi nast pnie wklejasz w inne miejsce Je eli u yjesz rejestratora makr do zapisania takiejoperacji przekonasz si e wygenerowany zostanie kod podobny do przedstawionegoponi ej

Sub MoveRange() Range(A1C6)Select SelectionCut Range(A10)Select ActiveSheetPasteEnd Sub

Podobnie jak podczas kopiowania komoacuterek takie rozwi zanie nie jest najbardziejefektywnym sposobem przenoszenia zakresu komoacuterek w inne miejsce W praktyce takoperacj mo esz wykona za pomoc procedury sk adaj cej si z jednego wiersza koduco prezentuj poni ej

Sub MoveRange2() Range(A1C6)Cut Range(A10)End Sub

Makro przedstawione powy ej korzysta z faktu e metoda Cut mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe przenoszonego zakresu Zwroacute roacutewnieuwag na fakt e podczas przenoszenia aden zakres komoacuterek nie jest zaznaczanyWska nik aktywnej komoacuterki przez ca y czas pozostaje w tym samym miejscu arkusza

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tliJednym z zada cz sto wykonywanych przez makra jest sprawdzanie poszczegoacutelnychkomoacuterek zakresu i wykonywanie okre lonych operacji na podstawie ich zawarto ci Takiemakra zazwyczaj wykorzystuj p tl For-Next za pomoc ktoacuterej przetwarzane s komoacuterkizakresu

Przyk ad przedstawiony ni ej ilustruje sposoacuteb przechodzenia kolejno przez wszystkiekomoacuterki danego zakresu W naszym przypadku przetwarzany jest aktualnie zaznaczonyzakres komoacuterek Zmienna obiektowa o nazwie Cell reprezentuje aktualnie przetwarzankomoacuterk W p tli For Each-Next znajduje si jedno polecenie ktoacutere sprawdza aktualnieprzetwarzan komoacuterk i zmienia jej czcionk na pogrubion je eli warto przechowywanaw komoacuterce jest dodatnia

Sub ProcessCells() Dim Cell As Range For Each Cell In Selection If CellValue gt 0 Then CellFontBold = True Next CellEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 223

Taka procedura dzia a poprawnie ale co si stanie je eli u ytkownik zaznaczy cakolumn lub ca y wiersz To wcale nie jest takie nieprawdopodobne bo przecie Excelpozwala na wykonywanie operacji na ca ych wierszach i kolumnach W takiej sytuacjiwykonanie makra mo e zaj naprawd du o czasu poniewa nasza p tla przetwarzaka d komoacuterk zaznaczonego zakresu a cznie z pustymi w jednej kolumnie komoacuterekjest a 1 048 576hellip Aby zatem nasze makro by o bardziej wydajne musimy je takzmodyfikowa eby przetwarzane by y tylko i wy cznie komoacuterki ktoacutere nie s puste

Procedura przedstawiona poni ej przetwarza wy cznie niepuste komoacuterki zaznaczonegozakresu dzi ki zastosowaniu metody SpecialCells (wi cej szczegoacute owych informacji natemat tej metody znajdziesz w pomocy systemowej VBA) Nasza procedura za pomocpolecenia Set tworzy dwa obiekty typu Range pierwszy z nich to podzakres komoacuterekzakresu wej ciowego zawieraj cy wy cznie komoacuterki z warto ciami sta ymi (na przyk adteksty warto ci liczbowe litera y i tak dalej) a drugi sk ada si z komoacuterek zawieraj cychformu y Procedura przetwarza tylko komoacuterki nale ce do tych podzakresoacutew co w efekciepowoduje pomini cie przetwarzania wszystkich pozosta ych pustych komoacuterek zakresuwej ciowego Sprytne prawda

Sub SkipBlanks() Dim ConstantCells As Range Dim FormulaCells As Range Dim cell As Range Ignoruj b dy On Error Resume Next

Przetwarzaj komoacuterki zawieraj ce warto ci sta e Set ConstantCells = Selection _ SpecialCells(xlConstants) For Each cell In ConstantCells If cellValue gt 0 Then cellFontBold = True End If Next cell

Przetwarzaj komoacuterki zawieraj ce formu y Set FormulaCells = Selection _ SpecialCells(xlFormulas) For Each cell In FormulaCells If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Procedura SkipBlanks dzia a tak samo szybko niezale nie od tego jaki zakres komoacuterekzaznaczy e Mo esz na przyk ad zaznaczy zakres sk adaj cy si z kilku komoacuterek zaznaczywszystkie kolumny w danym zakresie albo wszystkie wiersze w danym zakresie albonawet ca y arkusz Jak wida jest to ogromne usprawnienie w stosunku do oryginalnejprocedury ProcessCells ktoacuter omoacutewi em nieco wcze niej

Zwroacute uwag e w kodzie procedury u yli my polecenia

On Error Resume Next

Kup książkę Poleć książkę

224 Cz III Podstawy programowania

Polecenie to powoduje e Excel po prostu ignoruje b dy (inaczej moacutewi c je eli proacutebawykonania danego polecenia ko czy si b dem Excel ignoruje ten b d i po prostuprzechodzi do kolejnego polecenia wi cej szczegoacute owych informacji na temat obs ugib doacutew znajdziesz w rozdziale 12) W naszym przypadku zastosowanie polecenia OnError jest konieczne poniewa metoda SpecialCells generuje b d gdy adna komoacuterkanie spe nia podanego kryterium

Zastosowanie metody SpecialCells jest roacutewnowa ne z przej ciem na kart NARZ DZIAG OacuteWNE wybraniem polecenia Znajd i zaznaczPrzejd do mdash specjalnie znajduj cegosi w grupie opcji Edytowanie i nast pnie zaznaczeniem opcji Sta e lub Formu y Abyprzekona si jak to dzia a podczas wykonywania tych polece powiniene u yrejestratora makr i zaznacza roacute ne opcje

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tli(cz II)A teraz ci g dalszy naszej opowie ci W tym punkcie przedstawi inny sposoacuteb efektywnegoprzetwarzania komoacuterek znajduj cych si w zaznaczonym zakresie Tym razem procedurab dzie korzysta a z w a ciwo ci UsedRange ktoacutera zwraca obiekt typu Range reprezentuj cyu ywany zakres arkusza Procedura korzysta roacutewnie z metody Intersect ktoacutera zwracaobiekt typu Range zawieraj cy komoacuterki b d ce cz ci wspoacuteln dwoacutech zakresoacutew

Poni ej przedstawiam zmodyfikowan wersj procedury SkipBlanks omawianejw poprzednim punkcie

Sub SkipBlanks2() Dim WorkRange As Range Dim cell As Range Set WorkRange = Intersect(Selection ActiveSheetUsedRange) For Each cell In WorkRange If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Zmienna obiektowa WorkRange zawiera komoacuterki ktoacutere s cz ci wspoacuteln zakresuzaznaczonego przez u ytkownika oraz zakresu u ywanych komoacuterek arkusza Je lizatem u ytkownik zaznaczy ca kolumn zmienna WorkRange b dzie zawiera a tylkokomoacuterki ktoacutere znajduj si jednocze nie w zaznaczonej kolumnie i w u ywanymzakresie arkusza Jak wida jest to bardzo szybka i efektywna metoda pozwalaj ca naunikni cie przetwarzania komoacuterek znajduj cych si poza zakresem u ywanychkomoacuterek arkusza

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 225

Wprowadzanie warto ci do komoacuterkiNa rysunku 142 pokazuj w jaki sposoacuteb mo esz u y funkcji InputBox j zyka VBA dopobierania od u ytkownika warto ci ktoacutera nast pnie mo e zosta zapisana w wybranejkomoacuterce W procedurze przedstawionej poni ej demonstruj jak poprosi u ytkownikao podanie warto ci i wstawi j do komoacuterki A1 aktywnego arkusza (i to wszystkoza pomoc jednego polecenia)

Sub GetValue() Range(A1)Value = InputBox( _ Wprowad warto dla komoacuterki A1)End Sub

Rysunek 142Zastosowaniefunkcji Input-

Box do pobie-rania warto ci

od u ytkownika

Przedstawiona procedura mo e jednak sprawia pewien problem Je eli u ytkowniknaci nie w oknie dialogowym przycisk Cancel procedura usunie wszelkie dane juznajduj ce si w komoacuterce A1 a takie zachowanie nie jest zbyt dobr praktyk programistyczn Naci ni cie przycisku Cancel powinno po prostu usuwa z ekranu okno dialogowe bezwykonywania adnych dodatkowych operacji

Makro przedstawione poni ej ilustruje znacznie lepsze podej cie do takiego zagadnieniai do zapami tania warto ci wprowadzonej przez u ytkownika wykorzystuje zmienn xJe eli zmienna zawiera co innego ni pusty ci g znakoacutew (czyli kiedy u ytkownikwprowadzi jak warto ) warto zmiennej jest zapisywana w komoacuterce A1 W przeciwnymprzypadku procedura ko czy dzia anie nie wykonuj c adnych dodatkowych operacji

Sub GetValue2() Dim x as Variant x = InputBox(Wprowad warto dla komoacuterki A1) If x ltgt Then Range(A1)Value = xEnd Sub

Zmienna x zosta a zdefiniowana jako zmienna typu Variant poniewa jej warto cimo e by warto albo pusty ci g znakoacutew (je eli u ytkownik naci nie przycisk Cancel)

Kup książkę Poleć książkę

226 Cz III Podstawy programowania

Okre lanie typu zaznaczonego zakresuJe eli zadaniem Twojego makra b dzie przetwarzanie zaznaczonego zakresu takiemakro musi mie zdolno sprawdzenia czy przed jego wywo aniem u ytkownikrzeczywi cie zaznaczy zakres komoacuterek W przeciwnym razie je eli przed wywo aniemmakra zaznaczony zostanie inny obiekt (na przyk ad wykres lub kszta t) proacuteba wykonaniamakra najprawdopodobniej zako czy si niepowodzeniem Polecenie przedstawioneponi ej wykorzystuje funkcj TypeName j zyka VBA do wy wietlania na ekranie typuaktualnie zaznaczonego obiektu

MsgBox TypeName(Selection)

Je eli aktualnie zaznaczony jest obiekt typu Range wykonanie takiego polecenia spowodujewy wietlenie s owa Range Je li Twoje makro dzia a tylko z zakresami komoacuterek mo eszu y polecenia If do sprawdzenia czy aktualnie zaznaczony obiekt to zakres (obiekttypu Range) Procedura przedstawiona poni ej sprawdza typ zaznaczonego obiektui je eli nie jest to obiekt typu Range na ekranie wy wietlany jest odpowiedni komunikati procedura ko czy dzia anie

Sub CheckSelection() If TypeName(Selection) ltgt Range Then MsgBox Zaznacz zakres komoacuterek Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Identyfikowanie zaznacze wielokrotnychJak pami tasz Excel pozwala na jednoczesne zaznaczanie wielu obiektoacutew Aby to zrobi powiniene podczas zaznaczania obiektoacutew lub zakresoacutew trzyma wci ni ty klawisz CtrlZaznaczenia wielokrotne mog by przyczyn problemoacutew z wykonywaniem niektoacuterychmakr Przyk adowo nie mo esz skopiowa zakresu komoacuterek ktoacutery zosta utworzonypoprzez wiele zaznacze nieci g ych zakresoacutew komoacuterek Je eli sproacutebujesz wykonatak operacj Excel wy wietli na ekranie komunikat przedstawiony na rysunku 143

Makro przedstawione ni ej pokazuje w jaki sposoacuteb mo esz sprawdzi czy u ytkownikdokona zaznaczenia wielokrotnego i na tej podstawie wykona odpowiedni operacj

Sub MultipleSelection() If SelectionAreasCount gt 1 Then MsgBox Zaznaczenia wielokrotne nie s dozwolone Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Przedstawiona procedura wykorzystuje metod Areas ktoacutera zwraca kolekcj wszystkichzakresoacutew w danym zaznaczeniu W a ciwo Count zwraca liczb obiektoacutew tej kolekcji

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 227

Rysunek 143Excel nie lubi

kiedy proacutebujeszkopiowa nie-ci g e zakresy

komoacuterek

Zmiana ustawie ExcelaChyba najbardziej u ytecznymi makrami s proste procedury ktoacutere zmieniaj jednolub kilka ustawie Excela Je li na przyk ad dojdziesz do wniosku e bardzo cz stoprzywo ujesz na ekran okno opcji programu Excel i zmieniasz jakie ustawienie takaoperacja z pewno ci b dzie bardzo dobrym kandydatem do napisania makraoszcz dzaj cego Twoacutej czas i u atwiaj cego zmian takiego ustawienia

W tym podrozdziale zaprezentuj dwa przyk ady procedur ktoacutere pokazuj w jakisposoacuteb mo na zmienia ustawienia Excela Ogoacutelne zasady dzia ania tych procedurmo esz z powodzeniem zastosowa do napisania w asnych makr zmieniaj cych inneustawienia Excela

Zmiana ustawie logicznych(opcje typu Boolean)Podobnie jak wy cznik wiat a opcje logiczne (typu Boolean) mog by albo w czonealbo wy czone Mo esz na przyk ad utworzy makro ktoacutere b dzie w cza o lub wy cza owy wietlanie podzia u arkusza na strony Kiedy wydrukujesz arkusz (lub skorzystaszz trybu podgl du wydruku) Excel wy wietla na arkuszu przerywane linie reprezentuj cemiejsca podzia u arkusza na strony wydruku Niektoacuterych u ytkownikoacutew (w czniez autorem tej ksi ki) takie zachowanie Excela irytuje Niestety jedynym sposobemwy czenia wy wietlania podzia u arkusza na strony jest otwarcie okna dialogowego Opcjeprogramu Excel przej cie na kart Zaawansowane a nast pnie przewijanie zawarto ci tejkarty a do odszukania opcji Poka podzia y stron Je eli podczas wy czania tej opcjikorzysta e z rejestratora makr przekonasz si e Excel generuje poni szy kod

Kup książkę Poleć książkę

228 Cz III Podstawy programowania

ActiveSheetDisplayPageBreaks = False

Z drugiej strony je eli podczas rejestrowania makra podzia y stron nie s widoczneExcel generuje taki kod

ActiveSheetDisplayPageBreaks = True

Takie informacje mog doprowadzi do wniosku e b dziesz musia napisa a dwamakra mdash jedno do w czania podgl du podzia u stron a drugie do jego wy czaniaNa szcz cie to nieprawda Procedura przedstawiona poni ej wykorzystuje operatorNot do zmiany warto ci logicznej True na False i odwrotnie Wykonanie proceduryTogglePageBreaks to prosty sposoacuteb na cykliczne w czanie i wy czanie podgl du podzia ustron arkusza

Sub TogglePageBreaks() On Error Resume Next ActiveSheetDisplayPageBreaks = Not _ ActiveSheetDisplayPageBreaksEnd Sub

Pierwsze polecenie informuje Excel e powinien ignorowa ewentualne b dy Przyk adowopodzia y stron nie s wy wietlane na arkuszach wykresoacutew Kiedy wprowadzisz takiepolecenie i sproacutebujesz wykona t procedur dla arkusza wykresu na ekranie nie pojawisi komunikat o b dzie

Techniki u ytej w procedurze TogglePageBreaks mo esz u ywa do zmiany dowolnychopcji logicznych (czyli takich ktoacuterych warto ciami s True albo False)

Zmiana innych opcji (typu non-Boolean)Do zmiany opcji ktoacutere nie s typu logicznego mo esz u ywa konstrukcji Select CaseW przyk adzie przedstawionym poni ej zmieniam tryb przeliczania skoroszytu z r cznegona automatyczny i odwrotnie i nakazuj wy wietlenie na ekranie komunikatu opisuj cegoaktualny tryb przeliczania arkusza

Sub ToggleCalcMode() Select Case ApplicationCalculation Case xlManual ApplicationCalculation = xlCalculationAutomatic MsgBox Automatyczne przeliczanie skoroszytu Case xlAutomatic ApplicationCalculation = xlCalculationManual MsgBox R czne przeliczanie skoroszytu End SelectEnd Sub

Techniki u ytej w procedurze ToggleCalcMode mo esz u ywa do zmiany dowolnychopcji ktoacutere nie posiadaj warto ci logicznych

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 2: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

Spis tre ciO autorze 15

Podzi kowania autora 17

Wst p 19Czy ta ksi ka jest dla Ciebie 19A wi c chcesz by programist hellip 20Dlaczego warto 20Co powiniene wiedzie 21Obowi zkowy podrozdzia o konwencjach typograficznych 22Sprawd ustawienia zabezpiecze 22Jak podzielona jest ksi ka 24

Cz I Wst p do programowania w VBA 24Cz II Jak VBA wspoacute pracuje z Excelem 24Cz III Podstawy programowania 24Cz IV Komunikacja z u ytkownikiem 24Cz V Od teorii do praktyki 24Cz VI Dekalogi 24

Ikony u ywane w ksi ce 25Pobieranie plikoacutew z przyk adami 25Co dalej 26

Cz I Wst p do programowania w VBA 27Rozdzia 1 Czym jest VBA 29

No dobrze czym jest wi c VBA 29Co mo na zrobi za pomoc VBA 30

Wprowadzanie blokoacutew tekstu 31Automatyzacja cz sto wykonywanego zadania 31Automatyzacja powtarzalnych operacji 31Tworzenie w asnego polecenia 31Tworzenie w asnego przycisku 31Tworzenie w asnych funkcji arkusza kalkulacyjnego 31Tworzenie w asnych dodatkoacutew do Excela 32Tworzenie kompletnych aplikacji opartych na makrach 32

Kup książkę Poleć książkę

6 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Plusy i minusy j zyka VBA 32Plusy j zyka VBA 32Minusy j zyka VBA 33

VBA w pigu ce 33Wycieczka po wersjach Excela 35

Rozdzia 2 Szybkie zanurzenie 39Przygotowanie do pracy 39Plan dzia ania 40Stawiamy pierwsze kroki 40Rejestrowanie makra 41Testowanie makra 42Podgl d kodu makra 42Modyfikacja makra 44Zapisywanie skoroszytoacutew zawieraj cych makra 45Bezpiecze stwo makr 45Wi cej o makrze NameAndTime 47

Cz II Jak VBA wspoacute pracuje z Excelem 49Rozdzia 3 Praca w edytorze VBE 51

Czym jest Visual Basic Editor 51Uruchamianie edytora VBE 51Zapoznanie z komponentami edytora VBE 52

Praca z oknem Project 54Dodawanie nowego modu u VBA 55Usuwanie modu u VBA 55Eksportowanie i importowanie obiektoacutew 56

Praca z oknem Code 56Minimalizowanie i maksymalizowanie okien 56Tworzenie modu u 57Wprowadzanie kodu VBA do modu u 58Bezpo rednie wprowadzanie kodu 58U ywanie rejestratora makr 61Kopiowanie kodu VBA 63

Dostosowywanie rodowiska VBA 63Karta Editor 64Karta Editor Format 66Karta General 67Karta Docking 68

Rozdzia 4 Wprowadzenie do modelu obiektowego w Excelu 69Czy Excel to obiekt 70Wspinaczka po hierarchii obiektoacutew 70Zapoznanie z kolekcjami 71Odwo ywanie si do obiektoacutew 71

Nawigacja po hierarchii obiektoacutew 72Upraszczanie odwo a do obiektoacutew 73

Kup książkę Poleć książkę

Spis tre ci 7

W a ciwo ci i metody obiektoacutew 74W a ciwo ci obiektoacutew 74Metody obiektoacutew 76Zdarzenia obiektoacutew 77

Poszukiwanie dodatkowych informacji 78System pomocy VBA 78Narz dzie Object Browser 79Automatyczna lista w a ciwo ci i metod 80

Rozdzia 5 Procedury Sub i Function w j zyku VBA 81Procedury Sub a funkcje 81

Rzut oka na procedury Sub 82Rzut oka na procedury Function 82Nazwy procedur Sub i Function 83

Uruchamianie procedur Sub 83Bezpo rednie uruchamianie procedur Sub 85Uruchamianie procedur w oknie dialogowym Makro 85Uruchamianie makr za pomoc skroacutetoacutew klawiszowych 86Uruchamianie procedur przy u yciu przyciskoacutew i kszta toacutew 87Uruchamianie procedur z poziomu innych procedur 89

Uruchamianie procedur Function 89Wywo ywanie funkcji z poziomu procedur Sub 90Wywo ywanie funkcji z poziomu formu arkusza 90

Rozdzia 6 U ywanie rejestratora makr 93Czy to rzeczywisto czy to VBA 93Podstawy rejestrowania makr 93Przygotowania do rejestrowania makr 95Wzgl dne czy bezwzgl dne 96

Rejestrowanie makr w trybie odwo a bezwzgl dnych 96Rejestrowanie makr w trybie odwo a wzgl dnych 97

Co jest rejestrowane 98Opcje rejestratora makr 100

Nazwa makra 100Klawisz skroacutetu 100Przechowuj makro w 101Opis 101

Czy to co jest wydajne 101

Cz III Podstawy programowania 105Rozdzia 7 Kluczowe elementy j zyka VBA 107

Stosowanie komentarzy w kodzie VBA 107U ywanie zmiennych sta ych i typoacutew danych 109

Poj cie zmiennej 109Czym s typy danych w j zyku VBA 110Deklarowanie zmiennych i okre lanie ich zasi gu 111

Kup książkę Poleć książkę

8 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Sta e 117Sta e predefiniowane 118

a cuchy znakoacutew 118Daty i godziny 119

Instrukcje przypisania 120Przyk ady instrukcji przypisania 120O znaku roacutewno ci 121Proste operatory 121

Praca z tablicami 123Deklarowanie tablic 123Tablice wielowymiarowe 124Tablice dynamiczne 124

Stosowanie etykiet 125

Rozdzia 8 Praca z obiektami Range 127Szybka powtoacuterka 127Inne sposoby odwo ywania si do zakresu 129

W a ciwo Cells 129W a ciwo Offset 130

Wybrane w a ciwo ci obiektu Range 131W a ciwo Value 131W a ciwo Text 132W a ciwo Count 133W a ciwo ci Column i Row 133W a ciwo Address 133W a ciwo HasFormula 134W a ciwo Font 134W a ciwo Interior 136W a ciwo ci Formula i FormulaLocal 136W a ciwo NumberFormat 137

Wybrane metody obiektu Range 137Metoda Select 137Metody Copy i Paste 138Metoda Clear 138Metoda Delete 139

Rozdzia 9 Praca z funkcjami VBA i arkusza kalkulacyjnego 141Co to jest funkcja 141Stosowanie wbudowanych funkcji VBA 142

Przyk ady funkcji VBA 142Funkcje VBA ktoacutere robi co wi cej ni tylko zwracanie warto ci 144Odkrywanie funkcji VBA 144

U ycie funkcji arkusza kalkulacyjnego w VBA 145Przyk ady funkcji arkusza kalkulacyjnego 148Wprowadzanie funkcji arkusza kalkulacyjnego 150Wi cej o u yciu funkcji arkusza kalkulacyjnego 151

U ycie w asnych funkcji 151

Kup książkę Poleć książkę

Spis tre ci 9

Rozdzia 10 Sterowanie przep ywem i podejmowanie decyzji 153Zabierz si za przep yw kolego 153Instrukcja GoTo 154Decyzje decyzje 155

Struktura If-Then 155Struktura Select Case 159

Entliczek p tliczek mdash czyli jak u ywa p tli 162P tle For-Next 162P tla Do-While 167P tla Do-Until 168

U ycie p tli For Each-Next z kolekcjami 168

Rozdzia 11 Automatyczne procedury i zdarzenia 171Przygotowanie do wielkiego zdarzenia 171

Czy zdarzenia s przydatne 173Programowanie procedur obs ugi zdarze 173

Gdzie jest umieszczony kod VBA 174Tworzenie procedury obs ugi zdarzenia 175Przyk ady wprowadzaj ce 176

Zdarzenie Open dla skoroszytu 176Zdarzenie BeforeClose dla skoroszytu 179Zdarzenie BeforeSave dla skoroszytu 179

Przyk ady zdarze aktywacyjnych 180Zdarzenia aktywacji i dezaktywacji arkusza 180Zdarzenia aktywacji i dezaktywacji skoroszytu 181Zdarzenia aktywacji skoroszytu 182

Inne zdarzenia dotycz ce arkusza 183Zdarzenie BeforeDoubleClick 183Zdarzenie BeforeRightClick 184Zdarzenie Change 184

Zdarzenia niezwi zane z obiektami 186Zdarzenie OnTime 186Zdarzenia naci ni cia klawisza 188

Rozdzia 12 Techniki obs ugi b doacutew 191Rodzaje b doacutew 191B dny przyk ad 192

To makro nie jest idealne 192Makro wci nie jest idealne 193Czy teraz makro jest idealne 194Rezygnacja z idea u 195

Inny sposoacuteb obs ugi b doacutew 195Korekta procedury EnterSquareRoot 195O instrukcji On Error 196

Obs uga b doacutew mdash szczegoacute owe informacje 197Wznawianie wykonywania kodu po wyst pieniu b du 197Obs uga b doacutew w pigu ce 199

Kup książkę Poleć książkę

10 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kiedy ignorowa b dy 199Rozpoznawanie okre lonych b doacutew 200

Zamierzony b d 201

Rozdzia 13 Dezynsekcja kodu czyli jak walczy z pluskwami 203Rodzaje pluskiew 203Podstawy entomologii czyli jak zidentyfikowa pluskw 205Metody i techniki walki z pluskwami 205

Przegl danie kodu VBA 206Umieszczanie funkcji MsgBox w kluczowych miejscach kodu 206Umieszczanie polecenia DebugPrint w kluczowych miejscach kodu 208Korzystanie z wbudowanych narz dzi Excela wspomagaj cych odpluskwianie kodu VBA 209

Kilka s oacutew o debuggerze 209Ustawianie punktoacutew przerwa w kodzie programu 209Zastosowanie okna Watch 212Zastosowanie okna Locals 213

Jak zredukowa liczb b doacutew w kodzie programu 215

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 217Przetwarzanie zakresoacutew komoacuterek 217

Kopiowanie zakresoacutew 218Kopiowanie zakresu o zmiennej wielko ci 219Zaznaczanie komoacuterek do ko ca wiersza lub kolumny 220Zaznaczanie ca ego wiersza lub ca ej kolumny 221Przenoszenie zakresoacutew 222Wydajne przetwarzanie komoacuterek zaznaczonego zakresu przy u yciu p tli 222Wydajne przetwarzanie komoacuterek zaznaczonego zakresu przy u yciu p tli (cz II) 224Wprowadzanie warto ci do komoacuterki 225Okre lanie typu zaznaczonego zakresu 226Identyfikowanie zaznacze wielokrotnych 226

Zmiana ustawie Excela 227Zmiana ustawie logicznych (opcje typu Boolean) 227Zmiana innych opcji (typu non-Boolean) 228

Praca z wykresami 229Metoda AddChart kontra metoda AddChart2 230Modyfikowanie typu wykresu 231Przechodzenie w p tli przez elementy kolekcji ChartObjects 232Modyfikowanie w a ciwo ci wykresu 232Zmiana formatowania wykresoacutew 233

Jak przyspieszy dzia anie kodu VBA 234Wy czanie aktualizacji ekranu 234Wy czenie automatycznego przeliczania skoroszytu 235Wy czanie irytuj cych ostrze e 236Upraszczanie odwo a do obiektoacutew 236Deklarowanie typoacutew zmiennych 237Zastosowanie struktury With-End With 238

Kup książkę Poleć książkę

Spis tre ci 11

Cz IV Komunikacja z u ytkownikiem 239Rozdzia 15 Proste okna dialogowe 241

Co zamiast formularzy UserForm 241Funkcja MsgBox 242

Wy wietlanie prostych okien dialogowych 243Pobieranie odpowiedzi z okna dialogowego 243Dostosowywanie wygl du okien dialogowych do w asnych potrzeb 244

Funkcja InputBox 247Sk adnia funkcji InputBox 248Przyk ad zastosowania funkcji InputBox 248Inny rodzaj okna dialogowego InputBox 249

Metoda GetOpenFilename 250Sk adnia metody GetOpenFilename 251Przyk ad zastosowania metody GetOpenFilename 251

Metoda GetSaveAsFilename 253Pobieranie nazwy folderu 254Wy wietlanie wbudowanych okien dialogowych programu Excel 254

Rozdzia 16 Wprowadzenie do formularzy UserForm 257Kiedy u ywa formularzy UserForm 257Tworzenie formularzy UserForm mdash wprowadzenie 258Praca z formularzami UserForm 259

Wstawianie nowego formularza UserForm 259Umieszczanie formantoacutew na formularzu UserForm 260Modyfikacja w a ciwo ci formantoacutew formularza UserForm 261Przegl danie okna Code formularza UserForm 263Wy wietlanie formularzy UserForm 263Pobieranie i wykorzystywanie informacji z formularzy UserForm 264

Przyk ad tworzenia formularza UserForm 264Tworzenie formularza UserForm 265Dodawanie przyciskoacutew polece (formanty CommandButton) 265Dodawanie przyciskoacutew opcji (formanty OptionButton) 267Dodawanie procedur obs ugi zdarze 268Tworzenie makra ktoacutere wy wietla formularz na ekranie 270Udost pnianie makra u ytkownikowi 271Testowanie dzia ania makra 272

Rozdzia 17 Praca z formantami formularza UserForm 275Rozpoczynamy prac z formantami formularzy UserForm 275

Dodawanie formantoacutew 276Wprowadzenie do w a ciwo ci formantoacutew 277

Formanty okien dialogowych mdash szczegoacute y 278Formant CheckBox (pole wyboru) 279Formant ComboBox (pole kombi) 280Formant CommandButton (przycisk polecenia) 281Formant Frame (pole grupy) 281Formant Image (pole obrazu) 282

Kup książkę Poleć książkę

12 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Formant Label (pole etykiety) 283Formant ListBox (pole listy) 283Formant MultiPage 284Formant OptionButton (przycisk opcji) 285Formant RefEdit (pole zakresu) 286Formant ScrollBar (pasek przewijania) 286Formant SpinButton (pokr t o) 287Formant TabStrip (pole karty) 288Formant TextBox (pole tekstowe) 288Formant ToggleButton (przycisk prze cznika) 289

Praca z formantami w oknach dialogowych 289Zmiana rozmiaroacutew i przenoszenie formantoacutew w inne miejsce 289Rozmieszczanie i wyroacutewnywanie po o enia formantoacutew w oknie dialogowym 290Obs uga u ytkownikoacutew preferuj cych korzystanie z klawiatury 291Testowanie formularzy UserForm 293

Estetyka okien dialogowych 293

Rozdzia 18 Techniki pracy z formularzami UserForm 295Zastosowanie w asnych okien dialogowych 295Przyk adowy formularz UserForm 296

Tworzenie okna dialogowego 296Tworzenie kodu procedury wy wietlaj cej okno dialogowe 298Udost pnianie makra u ytkownikowi 299Testowanie okna dialogowego 299Dodawanie procedur obs ugi zdarze 300Sprawdzanie poprawno ci danych 302Teraz okno dialogowe dzia a tak jak powinno 302

Wi cej przyk adoacutew formularzy UserForm 302Zastosowanie formantoacutew ListBox 303Zaznaczanie zakresoacutew 307Praca z wieloma grupami formantoacutew OptionButton 309Zastosowanie formantoacutew SpinButton oraz TextBox 310Wykorzystywanie formularza UserForm jako wska nika post pu zadania 312Tworzenie niemodalnych okien dialogowych z wieloma kartami 315Wy wietlanie wykresoacutew na formularzach UserForm 317

Lista kontrolna tworzenia i testowania okien dialogowych 318

Rozdzia 19 Udost pnianie makr z poziomu interfejsu u ytkownika 321Dostosowywanie Wst ki 321

R czne dopasowywanie Wst ki do w asnych potrzeb 322Dodawanie do Wst ki przycisku w asnego makra 324Dostosowywanie Wst ki za pomoc kodu XML 324

Dostosowywanie menu podr cznego 329Rodzaje obiektoacutew CommandBar 329Wy wietlanie wszystkich menu podr cznych 329Odwo ania do elementoacutew kolekcji CommandBars 330Odwo ania do formantoacutew obiektu CommandBar 331W a ciwo ci formantoacutew obiektu CommandBar 332

Kup książkę Poleć książkę

Spis tre ci 13

Przyk ady zastosowania VBA do modyfikacji menu podr cznego 334Resetowanie wszystkich wbudowanych menu podr cznych 334Dodawanie nowego elementu do menu podr cznego Cell 335Wy czanie menu podr cznego 337

Tworzenie w asnych paskoacutew narz dzi 338

Cz V Od teorii do praktyki 341Rozdzia 20 Jak tworzy w asne funkcje arkuszowe i jak prze y aby o tym opowiedzie 343

Dlaczego tworzymy w asne funkcje 343Podstawowe informacje o funkcjach VBA 344Tworzenie funkcji 345Praca z argumentami funkcji 345Przyk ady funkcji 346

Funkcje bezargumentowe 346Funkcje jednoargumentowe 346Funkcje z dwoma argumentami 348Funkcje pobieraj ce zakres jako argument 349Funkcje z argumentami opcjonalnymi 351

Funkcje opakowuj ce 353Funkcja NumberFormat 353Funkcja ExtractElement 354Funkcja SayIt 354Funkcja IsLike 355

Funkcje zwracaj ce tablice 355Zwracanie tablicy zawieraj cej nazwy miesi cy 355Zwracanie posortowanej listy 356

Okno dialogowe Wstawianie funkcji 358Wy wietlanie opisoacutew funkcji 358Opisy argumentoacutew 360

Rozdzia 21 Tworzenie dodatkoacutew 361No dobrzehellip czym zatem s dodatki 361Po co tworzy si dodatki 362Praca z dodatkami 363Podstawy tworzenia dodatkoacutew 364Tworzymy przyk adowy dodatek 365

Konfiguracja skoroszytu 365Testowanie skoroszytu 367Tworzenie opisoacutew dodatku 368Ochrona kodu VBA 369Tworzenie dodatku 369Otwieranie dodatku 369Dystrybucja dodatkoacutew 370Modyfikowanie dodatkoacutew 371

Kup książkę Poleć książkę

14 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Cz VI Dekalogi 373Rozdzia 22 Dziesi pyta na temat VBA (wraz z odpowiedziami) 375

Rozdzia 23 (Prawie) dziesi roacutede informacji na temat Excela 379System pomocy j zyka VBA 379Wsparcie techniczne firmy Microsoft 380Inne strony internetowe 380Blogi po wi cone Excelowi 380Google 381Bing 381Lokalne grupy u ytkownikoacutew 381Moje inne ksi ki 381

Rozdzia 24 Dziesi rzeczy ktoacutere powiniene robi w j zyku VBAi ktoacuterych nie powiniene robi 383

Zawsze deklaruj wszystkie zmienne 383Nigdy nie powiniene myli has a chroni cego kod VBA z bezpiecze stwem aplikacji 384Zawsze staraj si wyczy ci i zoptymalizowa kod aplikacji 384Nigdy nie umieszczaj wszystkiego w jednej procedurze 385Zawsze powiniene rozwa y zastosowanie innego oprogramowania 385Nigdy nie zak adaj e ka dy u ytkownik zezwala na uruchamianie makr 386Zawsze staraj si eksperymentowa z nowymi rozwi zaniami 386Nigdy z goacutery nie zak adaj e Twoacutej kod b dzie poprawnie dzia a z innymi wersjami Excela 386Zawsze pami taj o u ytkownikach Twojej aplikacji 387Nigdy nie zapominaj o tworzeniu kopii zapasowych 387

Skorowidz 389

Kup książkę Poleć książkę

Rozdzia 14

Przyk ady i technikiprogramowania w j zyku VBA

W tym rozdziale poznasz szereg przyk adoacutew technik programowania w j zyku VBA dowiesz si jak mo esz przyspieszy dzia anie kodu VBA w Twojej aplikacji

ierz e nauka programowania jest znacznie szybsza i zdecydowanie bardziejefektywna kiedy pracujemy na konkretnych przyk adach Dobrze opracowany

przyk ad o wiele lepiej obja nia zagadnienie ni najbardziej rozbudowany i szczegoacute owyale teoretyczny opis Poniewa czytasz t ksi k prawdopodobnie zgadzasz si ze mnw tej materii W tym rozdziale znajdziesz szereg przyk adoacutew demonstruj cych u ytecznepraktyczne techniki programowania w j zyku VBA

Przyk ady omawiane w tym rozdziale zosta y podzielone na kilka kategorii Oto one

Praca z zakresami

Modyfikacja ustawie Excela

Praca z wykresami

Przyspieszanie i optymalizacja dzia ania kodu VBA

Niektoacutere z prezentowanych przyk adoacutew b dziesz moacuteg od razu wykorzysta w swoichaplikacjach jednak w wi kszo ci przypadkoacutew b d wymaga y pewnego dostosowaniado Twoich aplikacji

Przetwarzanie zakresoacutew komoacuterekWi kszo zada z jakimi b dziesz si styka programuj c w j zyku VBA b dzie zapewnewymaga a mniejszego b d wi kszego przetwarzania zakresoacutew komoacuterek (aby od wie ysobie wiadomo ci na temat obiektu Range powiniene zajrze do rozdzia u 8) Kiedypracujesz z obiektami Range powiniene pami ta o nast puj cych sprawach

Kod VBA nie musi zaznacza danego zakresu aby go przetwarza

Je eli kod VBA zaznacza wybrany zakres przechowuj cy go skoroszyt musi byaktywny

W

Kup książkę Poleć książkę

218 Cz III Podstawy programowania

Rejestrator makr nie zawsze b dzie w stanie wygenerowa optymalny kod VBABardzo cz sto jednak mo esz za jego pomoc utworzy bazowe makro i potemodpowiednio zmodyfikowa kod tak aby sta si bardziej efektywny

Zazwyczaj bardzo dobrym rozwi zaniem jest nadawanie nazw zakresom komoacuterekwykorzystywanym w kodzie VBA Przyk adowo polecenie Range(Total)jestznacznie lepszym rozwi zaniem ni Range(D45) Je li w tym drugim przypadkupoacute niej wstawisz dodatkowy wiersz powy ej wiersza 45 to eby wszystko dzia a opoprawnie b dziesz musia zmodyfikowa makro tak aby korzysta o z nowegopoprawnego adresu komoacuterki a ta po wykonaniu takiej operacji b dzie mia a innyadres (D46) Aby nada nazw wybranemu zakresowi komoacuterek powiniene przejna kart FORMU Y i wybra polecenie Definiuj nazw znajduj ce si w grupiepolece Nazwy zdefiniowane

Kiedy tworzysz makro ktoacutere b dzie przetwarza o zakres komoacuterek zaznaczonyprzez u ytkownika pami taj e u ytkownik mo e zaznaczy kilka ca ych kolumnczy wierszy W wi kszo ci przypadkoacutew z pewno ci nie b dziesz chcia aby makrow p tli przechodzi o w takiej sytuacji przez wszystkie zaznaczone komoacuterki (w czniez pustymi) co mog oby zaj bardzo wiele czasu Dobre makro powinno odszukai przetwarza tylko komoacuterki ktoacutere nie s puste

Excel pozwala na jednoczesne zaznaczanie wielu zakresoacutew komoacuterek Aby to zrobi powiniene zaznaczy pierwszy zakres komoacuterek potem wcisn i przytrzymaklawisz Ctrl i zaznacza kolejne zakresy komoacuterek przy u yciu myszy Kod Twojejaplikacji powinien by przygotowany na takie sytuacje i podejmowa odpowiednieakcje

Skoroszyty z wybranymi przyk adami omawianymi w tym rozdziale znajdziesz na stronieinternetowej naszej ksi ki

Je eli chcesz samodzielnie wpisywa kod omawianych przyk adoacutew przejd do edytoraVBE naciskaj c kombinacj klawiszy lewyAlt+F11 a nast pnie wstaw nowy modu VBAi wpisz kod prezentowanych procedur Upewnij si e Twoacutej skoroszyt jest poprawnieskonfigurowany Je eli na przyk ad kod danego przyk adu odwo uje si do arkuszyo nazwach Arkusz1 i Arkusz2 upewnij si e takie arkusze istniej w Twoim skoroszycie

Kopiowanie zakresoacutewKopiowanie zakresoacutew komoacuterek mo e mia o pretendowa do miana jednej z najcz ciejwykonywanych operacji w Excelu Kiedy w czysz rejestrator makr i skopiujesz zakreskomoacuterek o adresie A1A5 do zakresu B1B5 otrzymasz nast puj ce makro

Sub CopyRange() Range(A1A5)Select SelectionCopy Range(B1)Select ActiveSheetPaste ApplicationCutCopyMode = FalseEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 219

Zwroacute uwag na ostatnie polecenie Zosta o ono wygenerowane przez naci ni cieklawisza Esc po skopiowaniu zakresu komoacuterek co spowodowa o usuni cie przerywanejlinii reprezentuj cej na arkuszu obramowanie kopiowanego zakresu

Przedstawione makro dzia a poprawnie ale zakresy komoacuterek mo na kopiowa w znaczniebardziej efektywny sposoacuteb Identyczny rezultat mo esz osi gn za pomoc proceduryktoacutera sk ada si z tylko jednego wiersza polecenia i nie zaznacza adnych komoacuterek(dzi ki czemu nie wymaga ustawiania w a ciwo ci CutCopyMode na warto False)

Sub CopyRange2() Range(A1A5)Copy Range(B1)End Sub

Procedura przedstawiona powy ej korzysta z tego e metoda Copy mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe kopiowanego zakresu Informacje o tymznalaz em w pomocy systemowej VBA Powy szy przyk ad doskonale roacutewnie ilustrujefakt e rejestrator makr nie zawsze generuje najbardziej efektywny kod

Kopiowanie zakresu o zmiennej wielko ciW wielu przypadkach konieczne jest skopiowanie zakresu komoacuterek dla ktoacuterego dok adnaliczba wierszy i kolumn okre laj cych jego wielko nie jest z goacutery znana Przyk adowomo esz dysponowa skoroszytem ledz cym tygodniow sprzeda w ktoacuterym liczba wierszyzmienia si ka dego tygodnia po wprowadzeniu nowych danych

Na rysunku 141 przedstawiam przyk ad cz sto spotykanego typu arkusza Znajduj cysi w nim zakres komoacuterek sk ada si z kilku wierszy ktoacuterych liczba zmienia si ka degodnia Poniewa nie wiesz jaki jest rozmiar zakresu w danej chwili musisz utworzykod ktoacutery b dzie dzia a bez u ywania adresu zakresu kopiowanych komoacuterek

Rysunek 141Przyk ad zakre-su ktoacutery mo e

sk ada siz dowolnej

liczby wierszy

Makro przedstawione poni ej ilustruje sposoacuteb kopiowania zakresu komoacuterek z arkuszaArkusz1 do arkusza Arkusz2 (pocz wszy od komoacuterki A1) Makro wykorzystuje w a ciwoCurrentRegion ktoacutera zwraca obiekt Range odpowiadaj cy blokowi komoacuterek otaczaj cychokre lon komoacuterk (w tym przypadku o adresie A1)

Kup książkę Poleć książkę

220 Cz III Podstawy programowania

Sub CopyCurrentRegion() Range(A1)CurrentRegionCopy Sheets(Arkusz2)Select Range(A1)Select ActiveSheetPaste Sheets(Arkusz1)Select ApplicationCutCopyMode = FalseEnd Sub

Zastosowanie w a ciwo ci CurrentRegion jest roacutewnowa ne z przej ciem na kartNARZ DZIA G OacuteWNE i wybraniem polecenia Znajd i zaznaczPrzejd do mdashspecjalnie znajduj cego si w grupie opcji Edytowanie i nast pnie zaznaczeniem opcjiBie cy obszar Aby przekona si jak to dzia a podczas wykonywania tych polecepowiniene u y rejestratora makr Zazwyczaj warto w a ciwo ci CurrentRegionreprezentuje prostok tny blok komoacuterek otoczony przez puste wiersze i kolumny

Oczywi cie mo esz zoptymalizowa kod makra przedstawionego powy ej i niezaznacza obszaru docelowego dla kopiowanych komoacuterek Makro przedstawione poni ejkorzysta z faktu e metoda Copy mo e u ywa argumentu wywo ania reprezentuj cegomiejsce docelowe kopiowanego zakresu

Sub CopyCurrentRegion2() Range(A1)CurrentRegionCopy _ Sheets(Arkusz2)Range(A1)End Sub

Je eli zakres komoacuterek ktoacutery chcesz skopiowa jest tabel (zdefiniowan przy u yciapolecenia WSTAWIANIETabeleTabela) ca e zadanie b dzie jeszcze atwiejsze Ka databela posiada swoj nazw (na przyk ad Tabela1) i automatycznie rozszerza si w miardodawania nowych wierszy

Sub CopyTable() Range(Tabela1)Copy Sheets(Arkusz2)Range(A1)End Sub

Je eli sproacutebujesz wykona procedur przedstawion powy ej przekonasz si e wiersznag oacutewka tabeli nie jest kopiowany poniewa obiekt Tabela1 nie obejmuje tegowiersza Je li chcesz aby wiersz nag oacutewka roacutewnie by kopiowany powiniene zmieniodwo anie do tabeli tak jak to zosta o przedstawione poni ej

Range(Tabela1[All])

Zaznaczanie komoacuterekdo ko ca wiersza lub kolumnyPrawdopodobnie bardzo cz sto u ywasz kombinacji klawiszy takich jak Ctrl+Shift+ czy Ctrl+Shift+ do zaznaczania zakresoacutew sk adaj cych si ze wszystkich komoacuterekod komoacuterki aktywnej a do ko ca kolumny czy wiersza Nie jest wi c chyba zaskoczenieme mo esz napisa makro ktoacutere b dzie zaznacza komoacuterki w podobny sposoacuteb

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 221

Do zaznaczania ca ego bloku komoacuterek mo esz u y w a ciwo ci CurrentRegion Ale copowiniene zrobi je eli chcesz zaznaczy powiedzmy tylko jedn kolumn z tegobloku komoacuterek Na szcz cie VBA pozwala na wykonywanie takich operacji Proceduraktoacuterej kod przedstawiam poni ej zaznacza zakres komoacuterek pocz wszy od bie cejaktywnej komoacuterki w doacute kolumny a do komoacuterki znajduj cej si o jeden wiersz powy ejpierwszej pustej komoacuterki tej kolumny Po zaznaczeniu zakresu mo esz przetwarza gow dowolny sposoacuteb mdash kopiowa komoacuterki przenosi je w inne miejsce arkusza zmieniaformatowanie i tak dalej

Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))SelectEnd Sub

Oczywi cie taki sam obszar mo esz roacutewnie zaznaczy r cznie Aby to zrobi powinienezaznaczy pierwsz komoacuterk nast pnie wcisn i przytrzyma klawisz Shift nacisnklawisz End i wreszcie nacisn klawisz (strza ka w doacute )

W przyk adzie wykorzystuj metod End obiektu ActiveCell ktoacutera zwraca obiekt typuRange Metoda End pobiera jeden argument okre laj cy kierunek w ktoacuterym zostaniewykonane zaznaczenie Argumentami tej metody mo e by dowolna ze sta ychprzedstawionych poni ej

xlUp

xlDown

xlToLeft

xlToRight

Pami taj e zaznaczanie zakresu nie jest potrzebne do jego przetwarzania Makroprzedstawione poni ej zmienia czcionk w komoacuterkach zmiennego zakresu (pojedynczakolumna) na pogrubion bez uprzedniego zaznaczenia zakresu

Sub MakeBold() Range(ActiveCell ActiveCellEnd(xlDown)) _ FontBold = TrueEnd Sub

Zaznaczanie ca ego wiersza lub ca ej kolumnyProcedura przedstawiona poni ej ilustruje sposoacuteb zaznaczania kolumny w ktoacuterej znajdujesi aktywna komoacuterka Makro wykorzystuje w a ciwo EntireColumn ktoacutera zwracaobiekt typu Range reprezentuj cy ca kolumn

Sub SelectColumn() ActiveCellEntireColumnSelectEnd Sub

Jak pewnie si spodziewasz w j zyku VBA dost pna jest roacutewnie w a ciwo EntireRowktoacutera zwraca obiekt typu Range reprezentuj cy ca y wiersz

Kup książkę Poleć książkę

222 Cz III Podstawy programowania

Przenoszenie zakresoacutewZazwyczaj aby przenie zakres komoacuterek zaznaczasz go wycinasz do schowka systemowegoi nast pnie wklejasz w inne miejsce Je eli u yjesz rejestratora makr do zapisania takiejoperacji przekonasz si e wygenerowany zostanie kod podobny do przedstawionegoponi ej

Sub MoveRange() Range(A1C6)Select SelectionCut Range(A10)Select ActiveSheetPasteEnd Sub

Podobnie jak podczas kopiowania komoacuterek takie rozwi zanie nie jest najbardziejefektywnym sposobem przenoszenia zakresu komoacuterek w inne miejsce W praktyce takoperacj mo esz wykona za pomoc procedury sk adaj cej si z jednego wiersza koduco prezentuj poni ej

Sub MoveRange2() Range(A1C6)Cut Range(A10)End Sub

Makro przedstawione powy ej korzysta z faktu e metoda Cut mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe przenoszonego zakresu Zwroacute roacutewnieuwag na fakt e podczas przenoszenia aden zakres komoacuterek nie jest zaznaczanyWska nik aktywnej komoacuterki przez ca y czas pozostaje w tym samym miejscu arkusza

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tliJednym z zada cz sto wykonywanych przez makra jest sprawdzanie poszczegoacutelnychkomoacuterek zakresu i wykonywanie okre lonych operacji na podstawie ich zawarto ci Takiemakra zazwyczaj wykorzystuj p tl For-Next za pomoc ktoacuterej przetwarzane s komoacuterkizakresu

Przyk ad przedstawiony ni ej ilustruje sposoacuteb przechodzenia kolejno przez wszystkiekomoacuterki danego zakresu W naszym przypadku przetwarzany jest aktualnie zaznaczonyzakres komoacuterek Zmienna obiektowa o nazwie Cell reprezentuje aktualnie przetwarzankomoacuterk W p tli For Each-Next znajduje si jedno polecenie ktoacutere sprawdza aktualnieprzetwarzan komoacuterk i zmienia jej czcionk na pogrubion je eli warto przechowywanaw komoacuterce jest dodatnia

Sub ProcessCells() Dim Cell As Range For Each Cell In Selection If CellValue gt 0 Then CellFontBold = True Next CellEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 223

Taka procedura dzia a poprawnie ale co si stanie je eli u ytkownik zaznaczy cakolumn lub ca y wiersz To wcale nie jest takie nieprawdopodobne bo przecie Excelpozwala na wykonywanie operacji na ca ych wierszach i kolumnach W takiej sytuacjiwykonanie makra mo e zaj naprawd du o czasu poniewa nasza p tla przetwarzaka d komoacuterk zaznaczonego zakresu a cznie z pustymi w jednej kolumnie komoacuterekjest a 1 048 576hellip Aby zatem nasze makro by o bardziej wydajne musimy je takzmodyfikowa eby przetwarzane by y tylko i wy cznie komoacuterki ktoacutere nie s puste

Procedura przedstawiona poni ej przetwarza wy cznie niepuste komoacuterki zaznaczonegozakresu dzi ki zastosowaniu metody SpecialCells (wi cej szczegoacute owych informacji natemat tej metody znajdziesz w pomocy systemowej VBA) Nasza procedura za pomocpolecenia Set tworzy dwa obiekty typu Range pierwszy z nich to podzakres komoacuterekzakresu wej ciowego zawieraj cy wy cznie komoacuterki z warto ciami sta ymi (na przyk adteksty warto ci liczbowe litera y i tak dalej) a drugi sk ada si z komoacuterek zawieraj cychformu y Procedura przetwarza tylko komoacuterki nale ce do tych podzakresoacutew co w efekciepowoduje pomini cie przetwarzania wszystkich pozosta ych pustych komoacuterek zakresuwej ciowego Sprytne prawda

Sub SkipBlanks() Dim ConstantCells As Range Dim FormulaCells As Range Dim cell As Range Ignoruj b dy On Error Resume Next

Przetwarzaj komoacuterki zawieraj ce warto ci sta e Set ConstantCells = Selection _ SpecialCells(xlConstants) For Each cell In ConstantCells If cellValue gt 0 Then cellFontBold = True End If Next cell

Przetwarzaj komoacuterki zawieraj ce formu y Set FormulaCells = Selection _ SpecialCells(xlFormulas) For Each cell In FormulaCells If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Procedura SkipBlanks dzia a tak samo szybko niezale nie od tego jaki zakres komoacuterekzaznaczy e Mo esz na przyk ad zaznaczy zakres sk adaj cy si z kilku komoacuterek zaznaczywszystkie kolumny w danym zakresie albo wszystkie wiersze w danym zakresie albonawet ca y arkusz Jak wida jest to ogromne usprawnienie w stosunku do oryginalnejprocedury ProcessCells ktoacuter omoacutewi em nieco wcze niej

Zwroacute uwag e w kodzie procedury u yli my polecenia

On Error Resume Next

Kup książkę Poleć książkę

224 Cz III Podstawy programowania

Polecenie to powoduje e Excel po prostu ignoruje b dy (inaczej moacutewi c je eli proacutebawykonania danego polecenia ko czy si b dem Excel ignoruje ten b d i po prostuprzechodzi do kolejnego polecenia wi cej szczegoacute owych informacji na temat obs ugib doacutew znajdziesz w rozdziale 12) W naszym przypadku zastosowanie polecenia OnError jest konieczne poniewa metoda SpecialCells generuje b d gdy adna komoacuterkanie spe nia podanego kryterium

Zastosowanie metody SpecialCells jest roacutewnowa ne z przej ciem na kart NARZ DZIAG OacuteWNE wybraniem polecenia Znajd i zaznaczPrzejd do mdash specjalnie znajduj cegosi w grupie opcji Edytowanie i nast pnie zaznaczeniem opcji Sta e lub Formu y Abyprzekona si jak to dzia a podczas wykonywania tych polece powiniene u yrejestratora makr i zaznacza roacute ne opcje

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tli(cz II)A teraz ci g dalszy naszej opowie ci W tym punkcie przedstawi inny sposoacuteb efektywnegoprzetwarzania komoacuterek znajduj cych si w zaznaczonym zakresie Tym razem procedurab dzie korzysta a z w a ciwo ci UsedRange ktoacutera zwraca obiekt typu Range reprezentuj cyu ywany zakres arkusza Procedura korzysta roacutewnie z metody Intersect ktoacutera zwracaobiekt typu Range zawieraj cy komoacuterki b d ce cz ci wspoacuteln dwoacutech zakresoacutew

Poni ej przedstawiam zmodyfikowan wersj procedury SkipBlanks omawianejw poprzednim punkcie

Sub SkipBlanks2() Dim WorkRange As Range Dim cell As Range Set WorkRange = Intersect(Selection ActiveSheetUsedRange) For Each cell In WorkRange If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Zmienna obiektowa WorkRange zawiera komoacuterki ktoacutere s cz ci wspoacuteln zakresuzaznaczonego przez u ytkownika oraz zakresu u ywanych komoacuterek arkusza Je lizatem u ytkownik zaznaczy ca kolumn zmienna WorkRange b dzie zawiera a tylkokomoacuterki ktoacutere znajduj si jednocze nie w zaznaczonej kolumnie i w u ywanymzakresie arkusza Jak wida jest to bardzo szybka i efektywna metoda pozwalaj ca naunikni cie przetwarzania komoacuterek znajduj cych si poza zakresem u ywanychkomoacuterek arkusza

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 225

Wprowadzanie warto ci do komoacuterkiNa rysunku 142 pokazuj w jaki sposoacuteb mo esz u y funkcji InputBox j zyka VBA dopobierania od u ytkownika warto ci ktoacutera nast pnie mo e zosta zapisana w wybranejkomoacuterce W procedurze przedstawionej poni ej demonstruj jak poprosi u ytkownikao podanie warto ci i wstawi j do komoacuterki A1 aktywnego arkusza (i to wszystkoza pomoc jednego polecenia)

Sub GetValue() Range(A1)Value = InputBox( _ Wprowad warto dla komoacuterki A1)End Sub

Rysunek 142Zastosowaniefunkcji Input-

Box do pobie-rania warto ci

od u ytkownika

Przedstawiona procedura mo e jednak sprawia pewien problem Je eli u ytkowniknaci nie w oknie dialogowym przycisk Cancel procedura usunie wszelkie dane juznajduj ce si w komoacuterce A1 a takie zachowanie nie jest zbyt dobr praktyk programistyczn Naci ni cie przycisku Cancel powinno po prostu usuwa z ekranu okno dialogowe bezwykonywania adnych dodatkowych operacji

Makro przedstawione poni ej ilustruje znacznie lepsze podej cie do takiego zagadnieniai do zapami tania warto ci wprowadzonej przez u ytkownika wykorzystuje zmienn xJe eli zmienna zawiera co innego ni pusty ci g znakoacutew (czyli kiedy u ytkownikwprowadzi jak warto ) warto zmiennej jest zapisywana w komoacuterce A1 W przeciwnymprzypadku procedura ko czy dzia anie nie wykonuj c adnych dodatkowych operacji

Sub GetValue2() Dim x as Variant x = InputBox(Wprowad warto dla komoacuterki A1) If x ltgt Then Range(A1)Value = xEnd Sub

Zmienna x zosta a zdefiniowana jako zmienna typu Variant poniewa jej warto cimo e by warto albo pusty ci g znakoacutew (je eli u ytkownik naci nie przycisk Cancel)

Kup książkę Poleć książkę

226 Cz III Podstawy programowania

Okre lanie typu zaznaczonego zakresuJe eli zadaniem Twojego makra b dzie przetwarzanie zaznaczonego zakresu takiemakro musi mie zdolno sprawdzenia czy przed jego wywo aniem u ytkownikrzeczywi cie zaznaczy zakres komoacuterek W przeciwnym razie je eli przed wywo aniemmakra zaznaczony zostanie inny obiekt (na przyk ad wykres lub kszta t) proacuteba wykonaniamakra najprawdopodobniej zako czy si niepowodzeniem Polecenie przedstawioneponi ej wykorzystuje funkcj TypeName j zyka VBA do wy wietlania na ekranie typuaktualnie zaznaczonego obiektu

MsgBox TypeName(Selection)

Je eli aktualnie zaznaczony jest obiekt typu Range wykonanie takiego polecenia spowodujewy wietlenie s owa Range Je li Twoje makro dzia a tylko z zakresami komoacuterek mo eszu y polecenia If do sprawdzenia czy aktualnie zaznaczony obiekt to zakres (obiekttypu Range) Procedura przedstawiona poni ej sprawdza typ zaznaczonego obiektui je eli nie jest to obiekt typu Range na ekranie wy wietlany jest odpowiedni komunikati procedura ko czy dzia anie

Sub CheckSelection() If TypeName(Selection) ltgt Range Then MsgBox Zaznacz zakres komoacuterek Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Identyfikowanie zaznacze wielokrotnychJak pami tasz Excel pozwala na jednoczesne zaznaczanie wielu obiektoacutew Aby to zrobi powiniene podczas zaznaczania obiektoacutew lub zakresoacutew trzyma wci ni ty klawisz CtrlZaznaczenia wielokrotne mog by przyczyn problemoacutew z wykonywaniem niektoacuterychmakr Przyk adowo nie mo esz skopiowa zakresu komoacuterek ktoacutery zosta utworzonypoprzez wiele zaznacze nieci g ych zakresoacutew komoacuterek Je eli sproacutebujesz wykonatak operacj Excel wy wietli na ekranie komunikat przedstawiony na rysunku 143

Makro przedstawione ni ej pokazuje w jaki sposoacuteb mo esz sprawdzi czy u ytkownikdokona zaznaczenia wielokrotnego i na tej podstawie wykona odpowiedni operacj

Sub MultipleSelection() If SelectionAreasCount gt 1 Then MsgBox Zaznaczenia wielokrotne nie s dozwolone Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Przedstawiona procedura wykorzystuje metod Areas ktoacutera zwraca kolekcj wszystkichzakresoacutew w danym zaznaczeniu W a ciwo Count zwraca liczb obiektoacutew tej kolekcji

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 227

Rysunek 143Excel nie lubi

kiedy proacutebujeszkopiowa nie-ci g e zakresy

komoacuterek

Zmiana ustawie ExcelaChyba najbardziej u ytecznymi makrami s proste procedury ktoacutere zmieniaj jednolub kilka ustawie Excela Je li na przyk ad dojdziesz do wniosku e bardzo cz stoprzywo ujesz na ekran okno opcji programu Excel i zmieniasz jakie ustawienie takaoperacja z pewno ci b dzie bardzo dobrym kandydatem do napisania makraoszcz dzaj cego Twoacutej czas i u atwiaj cego zmian takiego ustawienia

W tym podrozdziale zaprezentuj dwa przyk ady procedur ktoacutere pokazuj w jakisposoacuteb mo na zmienia ustawienia Excela Ogoacutelne zasady dzia ania tych procedurmo esz z powodzeniem zastosowa do napisania w asnych makr zmieniaj cych inneustawienia Excela

Zmiana ustawie logicznych(opcje typu Boolean)Podobnie jak wy cznik wiat a opcje logiczne (typu Boolean) mog by albo w czonealbo wy czone Mo esz na przyk ad utworzy makro ktoacutere b dzie w cza o lub wy cza owy wietlanie podzia u arkusza na strony Kiedy wydrukujesz arkusz (lub skorzystaszz trybu podgl du wydruku) Excel wy wietla na arkuszu przerywane linie reprezentuj cemiejsca podzia u arkusza na strony wydruku Niektoacuterych u ytkownikoacutew (w czniez autorem tej ksi ki) takie zachowanie Excela irytuje Niestety jedynym sposobemwy czenia wy wietlania podzia u arkusza na strony jest otwarcie okna dialogowego Opcjeprogramu Excel przej cie na kart Zaawansowane a nast pnie przewijanie zawarto ci tejkarty a do odszukania opcji Poka podzia y stron Je eli podczas wy czania tej opcjikorzysta e z rejestratora makr przekonasz si e Excel generuje poni szy kod

Kup książkę Poleć książkę

228 Cz III Podstawy programowania

ActiveSheetDisplayPageBreaks = False

Z drugiej strony je eli podczas rejestrowania makra podzia y stron nie s widoczneExcel generuje taki kod

ActiveSheetDisplayPageBreaks = True

Takie informacje mog doprowadzi do wniosku e b dziesz musia napisa a dwamakra mdash jedno do w czania podgl du podzia u stron a drugie do jego wy czaniaNa szcz cie to nieprawda Procedura przedstawiona poni ej wykorzystuje operatorNot do zmiany warto ci logicznej True na False i odwrotnie Wykonanie proceduryTogglePageBreaks to prosty sposoacuteb na cykliczne w czanie i wy czanie podgl du podzia ustron arkusza

Sub TogglePageBreaks() On Error Resume Next ActiveSheetDisplayPageBreaks = Not _ ActiveSheetDisplayPageBreaksEnd Sub

Pierwsze polecenie informuje Excel e powinien ignorowa ewentualne b dy Przyk adowopodzia y stron nie s wy wietlane na arkuszach wykresoacutew Kiedy wprowadzisz takiepolecenie i sproacutebujesz wykona t procedur dla arkusza wykresu na ekranie nie pojawisi komunikat o b dzie

Techniki u ytej w procedurze TogglePageBreaks mo esz u ywa do zmiany dowolnychopcji logicznych (czyli takich ktoacuterych warto ciami s True albo False)

Zmiana innych opcji (typu non-Boolean)Do zmiany opcji ktoacutere nie s typu logicznego mo esz u ywa konstrukcji Select CaseW przyk adzie przedstawionym poni ej zmieniam tryb przeliczania skoroszytu z r cznegona automatyczny i odwrotnie i nakazuj wy wietlenie na ekranie komunikatu opisuj cegoaktualny tryb przeliczania arkusza

Sub ToggleCalcMode() Select Case ApplicationCalculation Case xlManual ApplicationCalculation = xlCalculationAutomatic MsgBox Automatyczne przeliczanie skoroszytu Case xlAutomatic ApplicationCalculation = xlCalculationManual MsgBox R czne przeliczanie skoroszytu End SelectEnd Sub

Techniki u ytej w procedurze ToggleCalcMode mo esz u ywa do zmiany dowolnychopcji ktoacutere nie posiadaj warto ci logicznych

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 3: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

6 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Plusy i minusy j zyka VBA 32Plusy j zyka VBA 32Minusy j zyka VBA 33

VBA w pigu ce 33Wycieczka po wersjach Excela 35

Rozdzia 2 Szybkie zanurzenie 39Przygotowanie do pracy 39Plan dzia ania 40Stawiamy pierwsze kroki 40Rejestrowanie makra 41Testowanie makra 42Podgl d kodu makra 42Modyfikacja makra 44Zapisywanie skoroszytoacutew zawieraj cych makra 45Bezpiecze stwo makr 45Wi cej o makrze NameAndTime 47

Cz II Jak VBA wspoacute pracuje z Excelem 49Rozdzia 3 Praca w edytorze VBE 51

Czym jest Visual Basic Editor 51Uruchamianie edytora VBE 51Zapoznanie z komponentami edytora VBE 52

Praca z oknem Project 54Dodawanie nowego modu u VBA 55Usuwanie modu u VBA 55Eksportowanie i importowanie obiektoacutew 56

Praca z oknem Code 56Minimalizowanie i maksymalizowanie okien 56Tworzenie modu u 57Wprowadzanie kodu VBA do modu u 58Bezpo rednie wprowadzanie kodu 58U ywanie rejestratora makr 61Kopiowanie kodu VBA 63

Dostosowywanie rodowiska VBA 63Karta Editor 64Karta Editor Format 66Karta General 67Karta Docking 68

Rozdzia 4 Wprowadzenie do modelu obiektowego w Excelu 69Czy Excel to obiekt 70Wspinaczka po hierarchii obiektoacutew 70Zapoznanie z kolekcjami 71Odwo ywanie si do obiektoacutew 71

Nawigacja po hierarchii obiektoacutew 72Upraszczanie odwo a do obiektoacutew 73

Kup książkę Poleć książkę

Spis tre ci 7

W a ciwo ci i metody obiektoacutew 74W a ciwo ci obiektoacutew 74Metody obiektoacutew 76Zdarzenia obiektoacutew 77

Poszukiwanie dodatkowych informacji 78System pomocy VBA 78Narz dzie Object Browser 79Automatyczna lista w a ciwo ci i metod 80

Rozdzia 5 Procedury Sub i Function w j zyku VBA 81Procedury Sub a funkcje 81

Rzut oka na procedury Sub 82Rzut oka na procedury Function 82Nazwy procedur Sub i Function 83

Uruchamianie procedur Sub 83Bezpo rednie uruchamianie procedur Sub 85Uruchamianie procedur w oknie dialogowym Makro 85Uruchamianie makr za pomoc skroacutetoacutew klawiszowych 86Uruchamianie procedur przy u yciu przyciskoacutew i kszta toacutew 87Uruchamianie procedur z poziomu innych procedur 89

Uruchamianie procedur Function 89Wywo ywanie funkcji z poziomu procedur Sub 90Wywo ywanie funkcji z poziomu formu arkusza 90

Rozdzia 6 U ywanie rejestratora makr 93Czy to rzeczywisto czy to VBA 93Podstawy rejestrowania makr 93Przygotowania do rejestrowania makr 95Wzgl dne czy bezwzgl dne 96

Rejestrowanie makr w trybie odwo a bezwzgl dnych 96Rejestrowanie makr w trybie odwo a wzgl dnych 97

Co jest rejestrowane 98Opcje rejestratora makr 100

Nazwa makra 100Klawisz skroacutetu 100Przechowuj makro w 101Opis 101

Czy to co jest wydajne 101

Cz III Podstawy programowania 105Rozdzia 7 Kluczowe elementy j zyka VBA 107

Stosowanie komentarzy w kodzie VBA 107U ywanie zmiennych sta ych i typoacutew danych 109

Poj cie zmiennej 109Czym s typy danych w j zyku VBA 110Deklarowanie zmiennych i okre lanie ich zasi gu 111

Kup książkę Poleć książkę

8 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Sta e 117Sta e predefiniowane 118

a cuchy znakoacutew 118Daty i godziny 119

Instrukcje przypisania 120Przyk ady instrukcji przypisania 120O znaku roacutewno ci 121Proste operatory 121

Praca z tablicami 123Deklarowanie tablic 123Tablice wielowymiarowe 124Tablice dynamiczne 124

Stosowanie etykiet 125

Rozdzia 8 Praca z obiektami Range 127Szybka powtoacuterka 127Inne sposoby odwo ywania si do zakresu 129

W a ciwo Cells 129W a ciwo Offset 130

Wybrane w a ciwo ci obiektu Range 131W a ciwo Value 131W a ciwo Text 132W a ciwo Count 133W a ciwo ci Column i Row 133W a ciwo Address 133W a ciwo HasFormula 134W a ciwo Font 134W a ciwo Interior 136W a ciwo ci Formula i FormulaLocal 136W a ciwo NumberFormat 137

Wybrane metody obiektu Range 137Metoda Select 137Metody Copy i Paste 138Metoda Clear 138Metoda Delete 139

Rozdzia 9 Praca z funkcjami VBA i arkusza kalkulacyjnego 141Co to jest funkcja 141Stosowanie wbudowanych funkcji VBA 142

Przyk ady funkcji VBA 142Funkcje VBA ktoacutere robi co wi cej ni tylko zwracanie warto ci 144Odkrywanie funkcji VBA 144

U ycie funkcji arkusza kalkulacyjnego w VBA 145Przyk ady funkcji arkusza kalkulacyjnego 148Wprowadzanie funkcji arkusza kalkulacyjnego 150Wi cej o u yciu funkcji arkusza kalkulacyjnego 151

U ycie w asnych funkcji 151

Kup książkę Poleć książkę

Spis tre ci 9

Rozdzia 10 Sterowanie przep ywem i podejmowanie decyzji 153Zabierz si za przep yw kolego 153Instrukcja GoTo 154Decyzje decyzje 155

Struktura If-Then 155Struktura Select Case 159

Entliczek p tliczek mdash czyli jak u ywa p tli 162P tle For-Next 162P tla Do-While 167P tla Do-Until 168

U ycie p tli For Each-Next z kolekcjami 168

Rozdzia 11 Automatyczne procedury i zdarzenia 171Przygotowanie do wielkiego zdarzenia 171

Czy zdarzenia s przydatne 173Programowanie procedur obs ugi zdarze 173

Gdzie jest umieszczony kod VBA 174Tworzenie procedury obs ugi zdarzenia 175Przyk ady wprowadzaj ce 176

Zdarzenie Open dla skoroszytu 176Zdarzenie BeforeClose dla skoroszytu 179Zdarzenie BeforeSave dla skoroszytu 179

Przyk ady zdarze aktywacyjnych 180Zdarzenia aktywacji i dezaktywacji arkusza 180Zdarzenia aktywacji i dezaktywacji skoroszytu 181Zdarzenia aktywacji skoroszytu 182

Inne zdarzenia dotycz ce arkusza 183Zdarzenie BeforeDoubleClick 183Zdarzenie BeforeRightClick 184Zdarzenie Change 184

Zdarzenia niezwi zane z obiektami 186Zdarzenie OnTime 186Zdarzenia naci ni cia klawisza 188

Rozdzia 12 Techniki obs ugi b doacutew 191Rodzaje b doacutew 191B dny przyk ad 192

To makro nie jest idealne 192Makro wci nie jest idealne 193Czy teraz makro jest idealne 194Rezygnacja z idea u 195

Inny sposoacuteb obs ugi b doacutew 195Korekta procedury EnterSquareRoot 195O instrukcji On Error 196

Obs uga b doacutew mdash szczegoacute owe informacje 197Wznawianie wykonywania kodu po wyst pieniu b du 197Obs uga b doacutew w pigu ce 199

Kup książkę Poleć książkę

10 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kiedy ignorowa b dy 199Rozpoznawanie okre lonych b doacutew 200

Zamierzony b d 201

Rozdzia 13 Dezynsekcja kodu czyli jak walczy z pluskwami 203Rodzaje pluskiew 203Podstawy entomologii czyli jak zidentyfikowa pluskw 205Metody i techniki walki z pluskwami 205

Przegl danie kodu VBA 206Umieszczanie funkcji MsgBox w kluczowych miejscach kodu 206Umieszczanie polecenia DebugPrint w kluczowych miejscach kodu 208Korzystanie z wbudowanych narz dzi Excela wspomagaj cych odpluskwianie kodu VBA 209

Kilka s oacutew o debuggerze 209Ustawianie punktoacutew przerwa w kodzie programu 209Zastosowanie okna Watch 212Zastosowanie okna Locals 213

Jak zredukowa liczb b doacutew w kodzie programu 215

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 217Przetwarzanie zakresoacutew komoacuterek 217

Kopiowanie zakresoacutew 218Kopiowanie zakresu o zmiennej wielko ci 219Zaznaczanie komoacuterek do ko ca wiersza lub kolumny 220Zaznaczanie ca ego wiersza lub ca ej kolumny 221Przenoszenie zakresoacutew 222Wydajne przetwarzanie komoacuterek zaznaczonego zakresu przy u yciu p tli 222Wydajne przetwarzanie komoacuterek zaznaczonego zakresu przy u yciu p tli (cz II) 224Wprowadzanie warto ci do komoacuterki 225Okre lanie typu zaznaczonego zakresu 226Identyfikowanie zaznacze wielokrotnych 226

Zmiana ustawie Excela 227Zmiana ustawie logicznych (opcje typu Boolean) 227Zmiana innych opcji (typu non-Boolean) 228

Praca z wykresami 229Metoda AddChart kontra metoda AddChart2 230Modyfikowanie typu wykresu 231Przechodzenie w p tli przez elementy kolekcji ChartObjects 232Modyfikowanie w a ciwo ci wykresu 232Zmiana formatowania wykresoacutew 233

Jak przyspieszy dzia anie kodu VBA 234Wy czanie aktualizacji ekranu 234Wy czenie automatycznego przeliczania skoroszytu 235Wy czanie irytuj cych ostrze e 236Upraszczanie odwo a do obiektoacutew 236Deklarowanie typoacutew zmiennych 237Zastosowanie struktury With-End With 238

Kup książkę Poleć książkę

Spis tre ci 11

Cz IV Komunikacja z u ytkownikiem 239Rozdzia 15 Proste okna dialogowe 241

Co zamiast formularzy UserForm 241Funkcja MsgBox 242

Wy wietlanie prostych okien dialogowych 243Pobieranie odpowiedzi z okna dialogowego 243Dostosowywanie wygl du okien dialogowych do w asnych potrzeb 244

Funkcja InputBox 247Sk adnia funkcji InputBox 248Przyk ad zastosowania funkcji InputBox 248Inny rodzaj okna dialogowego InputBox 249

Metoda GetOpenFilename 250Sk adnia metody GetOpenFilename 251Przyk ad zastosowania metody GetOpenFilename 251

Metoda GetSaveAsFilename 253Pobieranie nazwy folderu 254Wy wietlanie wbudowanych okien dialogowych programu Excel 254

Rozdzia 16 Wprowadzenie do formularzy UserForm 257Kiedy u ywa formularzy UserForm 257Tworzenie formularzy UserForm mdash wprowadzenie 258Praca z formularzami UserForm 259

Wstawianie nowego formularza UserForm 259Umieszczanie formantoacutew na formularzu UserForm 260Modyfikacja w a ciwo ci formantoacutew formularza UserForm 261Przegl danie okna Code formularza UserForm 263Wy wietlanie formularzy UserForm 263Pobieranie i wykorzystywanie informacji z formularzy UserForm 264

Przyk ad tworzenia formularza UserForm 264Tworzenie formularza UserForm 265Dodawanie przyciskoacutew polece (formanty CommandButton) 265Dodawanie przyciskoacutew opcji (formanty OptionButton) 267Dodawanie procedur obs ugi zdarze 268Tworzenie makra ktoacutere wy wietla formularz na ekranie 270Udost pnianie makra u ytkownikowi 271Testowanie dzia ania makra 272

Rozdzia 17 Praca z formantami formularza UserForm 275Rozpoczynamy prac z formantami formularzy UserForm 275

Dodawanie formantoacutew 276Wprowadzenie do w a ciwo ci formantoacutew 277

Formanty okien dialogowych mdash szczegoacute y 278Formant CheckBox (pole wyboru) 279Formant ComboBox (pole kombi) 280Formant CommandButton (przycisk polecenia) 281Formant Frame (pole grupy) 281Formant Image (pole obrazu) 282

Kup książkę Poleć książkę

12 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Formant Label (pole etykiety) 283Formant ListBox (pole listy) 283Formant MultiPage 284Formant OptionButton (przycisk opcji) 285Formant RefEdit (pole zakresu) 286Formant ScrollBar (pasek przewijania) 286Formant SpinButton (pokr t o) 287Formant TabStrip (pole karty) 288Formant TextBox (pole tekstowe) 288Formant ToggleButton (przycisk prze cznika) 289

Praca z formantami w oknach dialogowych 289Zmiana rozmiaroacutew i przenoszenie formantoacutew w inne miejsce 289Rozmieszczanie i wyroacutewnywanie po o enia formantoacutew w oknie dialogowym 290Obs uga u ytkownikoacutew preferuj cych korzystanie z klawiatury 291Testowanie formularzy UserForm 293

Estetyka okien dialogowych 293

Rozdzia 18 Techniki pracy z formularzami UserForm 295Zastosowanie w asnych okien dialogowych 295Przyk adowy formularz UserForm 296

Tworzenie okna dialogowego 296Tworzenie kodu procedury wy wietlaj cej okno dialogowe 298Udost pnianie makra u ytkownikowi 299Testowanie okna dialogowego 299Dodawanie procedur obs ugi zdarze 300Sprawdzanie poprawno ci danych 302Teraz okno dialogowe dzia a tak jak powinno 302

Wi cej przyk adoacutew formularzy UserForm 302Zastosowanie formantoacutew ListBox 303Zaznaczanie zakresoacutew 307Praca z wieloma grupami formantoacutew OptionButton 309Zastosowanie formantoacutew SpinButton oraz TextBox 310Wykorzystywanie formularza UserForm jako wska nika post pu zadania 312Tworzenie niemodalnych okien dialogowych z wieloma kartami 315Wy wietlanie wykresoacutew na formularzach UserForm 317

Lista kontrolna tworzenia i testowania okien dialogowych 318

Rozdzia 19 Udost pnianie makr z poziomu interfejsu u ytkownika 321Dostosowywanie Wst ki 321

R czne dopasowywanie Wst ki do w asnych potrzeb 322Dodawanie do Wst ki przycisku w asnego makra 324Dostosowywanie Wst ki za pomoc kodu XML 324

Dostosowywanie menu podr cznego 329Rodzaje obiektoacutew CommandBar 329Wy wietlanie wszystkich menu podr cznych 329Odwo ania do elementoacutew kolekcji CommandBars 330Odwo ania do formantoacutew obiektu CommandBar 331W a ciwo ci formantoacutew obiektu CommandBar 332

Kup książkę Poleć książkę

Spis tre ci 13

Przyk ady zastosowania VBA do modyfikacji menu podr cznego 334Resetowanie wszystkich wbudowanych menu podr cznych 334Dodawanie nowego elementu do menu podr cznego Cell 335Wy czanie menu podr cznego 337

Tworzenie w asnych paskoacutew narz dzi 338

Cz V Od teorii do praktyki 341Rozdzia 20 Jak tworzy w asne funkcje arkuszowe i jak prze y aby o tym opowiedzie 343

Dlaczego tworzymy w asne funkcje 343Podstawowe informacje o funkcjach VBA 344Tworzenie funkcji 345Praca z argumentami funkcji 345Przyk ady funkcji 346

Funkcje bezargumentowe 346Funkcje jednoargumentowe 346Funkcje z dwoma argumentami 348Funkcje pobieraj ce zakres jako argument 349Funkcje z argumentami opcjonalnymi 351

Funkcje opakowuj ce 353Funkcja NumberFormat 353Funkcja ExtractElement 354Funkcja SayIt 354Funkcja IsLike 355

Funkcje zwracaj ce tablice 355Zwracanie tablicy zawieraj cej nazwy miesi cy 355Zwracanie posortowanej listy 356

Okno dialogowe Wstawianie funkcji 358Wy wietlanie opisoacutew funkcji 358Opisy argumentoacutew 360

Rozdzia 21 Tworzenie dodatkoacutew 361No dobrzehellip czym zatem s dodatki 361Po co tworzy si dodatki 362Praca z dodatkami 363Podstawy tworzenia dodatkoacutew 364Tworzymy przyk adowy dodatek 365

Konfiguracja skoroszytu 365Testowanie skoroszytu 367Tworzenie opisoacutew dodatku 368Ochrona kodu VBA 369Tworzenie dodatku 369Otwieranie dodatku 369Dystrybucja dodatkoacutew 370Modyfikowanie dodatkoacutew 371

Kup książkę Poleć książkę

14 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Cz VI Dekalogi 373Rozdzia 22 Dziesi pyta na temat VBA (wraz z odpowiedziami) 375

Rozdzia 23 (Prawie) dziesi roacutede informacji na temat Excela 379System pomocy j zyka VBA 379Wsparcie techniczne firmy Microsoft 380Inne strony internetowe 380Blogi po wi cone Excelowi 380Google 381Bing 381Lokalne grupy u ytkownikoacutew 381Moje inne ksi ki 381

Rozdzia 24 Dziesi rzeczy ktoacutere powiniene robi w j zyku VBAi ktoacuterych nie powiniene robi 383

Zawsze deklaruj wszystkie zmienne 383Nigdy nie powiniene myli has a chroni cego kod VBA z bezpiecze stwem aplikacji 384Zawsze staraj si wyczy ci i zoptymalizowa kod aplikacji 384Nigdy nie umieszczaj wszystkiego w jednej procedurze 385Zawsze powiniene rozwa y zastosowanie innego oprogramowania 385Nigdy nie zak adaj e ka dy u ytkownik zezwala na uruchamianie makr 386Zawsze staraj si eksperymentowa z nowymi rozwi zaniami 386Nigdy z goacutery nie zak adaj e Twoacutej kod b dzie poprawnie dzia a z innymi wersjami Excela 386Zawsze pami taj o u ytkownikach Twojej aplikacji 387Nigdy nie zapominaj o tworzeniu kopii zapasowych 387

Skorowidz 389

Kup książkę Poleć książkę

Rozdzia 14

Przyk ady i technikiprogramowania w j zyku VBA

W tym rozdziale poznasz szereg przyk adoacutew technik programowania w j zyku VBA dowiesz si jak mo esz przyspieszy dzia anie kodu VBA w Twojej aplikacji

ierz e nauka programowania jest znacznie szybsza i zdecydowanie bardziejefektywna kiedy pracujemy na konkretnych przyk adach Dobrze opracowany

przyk ad o wiele lepiej obja nia zagadnienie ni najbardziej rozbudowany i szczegoacute owyale teoretyczny opis Poniewa czytasz t ksi k prawdopodobnie zgadzasz si ze mnw tej materii W tym rozdziale znajdziesz szereg przyk adoacutew demonstruj cych u ytecznepraktyczne techniki programowania w j zyku VBA

Przyk ady omawiane w tym rozdziale zosta y podzielone na kilka kategorii Oto one

Praca z zakresami

Modyfikacja ustawie Excela

Praca z wykresami

Przyspieszanie i optymalizacja dzia ania kodu VBA

Niektoacutere z prezentowanych przyk adoacutew b dziesz moacuteg od razu wykorzysta w swoichaplikacjach jednak w wi kszo ci przypadkoacutew b d wymaga y pewnego dostosowaniado Twoich aplikacji

Przetwarzanie zakresoacutew komoacuterekWi kszo zada z jakimi b dziesz si styka programuj c w j zyku VBA b dzie zapewnewymaga a mniejszego b d wi kszego przetwarzania zakresoacutew komoacuterek (aby od wie ysobie wiadomo ci na temat obiektu Range powiniene zajrze do rozdzia u 8) Kiedypracujesz z obiektami Range powiniene pami ta o nast puj cych sprawach

Kod VBA nie musi zaznacza danego zakresu aby go przetwarza

Je eli kod VBA zaznacza wybrany zakres przechowuj cy go skoroszyt musi byaktywny

W

Kup książkę Poleć książkę

218 Cz III Podstawy programowania

Rejestrator makr nie zawsze b dzie w stanie wygenerowa optymalny kod VBABardzo cz sto jednak mo esz za jego pomoc utworzy bazowe makro i potemodpowiednio zmodyfikowa kod tak aby sta si bardziej efektywny

Zazwyczaj bardzo dobrym rozwi zaniem jest nadawanie nazw zakresom komoacuterekwykorzystywanym w kodzie VBA Przyk adowo polecenie Range(Total)jestznacznie lepszym rozwi zaniem ni Range(D45) Je li w tym drugim przypadkupoacute niej wstawisz dodatkowy wiersz powy ej wiersza 45 to eby wszystko dzia a opoprawnie b dziesz musia zmodyfikowa makro tak aby korzysta o z nowegopoprawnego adresu komoacuterki a ta po wykonaniu takiej operacji b dzie mia a innyadres (D46) Aby nada nazw wybranemu zakresowi komoacuterek powiniene przejna kart FORMU Y i wybra polecenie Definiuj nazw znajduj ce si w grupiepolece Nazwy zdefiniowane

Kiedy tworzysz makro ktoacutere b dzie przetwarza o zakres komoacuterek zaznaczonyprzez u ytkownika pami taj e u ytkownik mo e zaznaczy kilka ca ych kolumnczy wierszy W wi kszo ci przypadkoacutew z pewno ci nie b dziesz chcia aby makrow p tli przechodzi o w takiej sytuacji przez wszystkie zaznaczone komoacuterki (w czniez pustymi) co mog oby zaj bardzo wiele czasu Dobre makro powinno odszukai przetwarza tylko komoacuterki ktoacutere nie s puste

Excel pozwala na jednoczesne zaznaczanie wielu zakresoacutew komoacuterek Aby to zrobi powiniene zaznaczy pierwszy zakres komoacuterek potem wcisn i przytrzymaklawisz Ctrl i zaznacza kolejne zakresy komoacuterek przy u yciu myszy Kod Twojejaplikacji powinien by przygotowany na takie sytuacje i podejmowa odpowiednieakcje

Skoroszyty z wybranymi przyk adami omawianymi w tym rozdziale znajdziesz na stronieinternetowej naszej ksi ki

Je eli chcesz samodzielnie wpisywa kod omawianych przyk adoacutew przejd do edytoraVBE naciskaj c kombinacj klawiszy lewyAlt+F11 a nast pnie wstaw nowy modu VBAi wpisz kod prezentowanych procedur Upewnij si e Twoacutej skoroszyt jest poprawnieskonfigurowany Je eli na przyk ad kod danego przyk adu odwo uje si do arkuszyo nazwach Arkusz1 i Arkusz2 upewnij si e takie arkusze istniej w Twoim skoroszycie

Kopiowanie zakresoacutewKopiowanie zakresoacutew komoacuterek mo e mia o pretendowa do miana jednej z najcz ciejwykonywanych operacji w Excelu Kiedy w czysz rejestrator makr i skopiujesz zakreskomoacuterek o adresie A1A5 do zakresu B1B5 otrzymasz nast puj ce makro

Sub CopyRange() Range(A1A5)Select SelectionCopy Range(B1)Select ActiveSheetPaste ApplicationCutCopyMode = FalseEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 219

Zwroacute uwag na ostatnie polecenie Zosta o ono wygenerowane przez naci ni cieklawisza Esc po skopiowaniu zakresu komoacuterek co spowodowa o usuni cie przerywanejlinii reprezentuj cej na arkuszu obramowanie kopiowanego zakresu

Przedstawione makro dzia a poprawnie ale zakresy komoacuterek mo na kopiowa w znaczniebardziej efektywny sposoacuteb Identyczny rezultat mo esz osi gn za pomoc proceduryktoacutera sk ada si z tylko jednego wiersza polecenia i nie zaznacza adnych komoacuterek(dzi ki czemu nie wymaga ustawiania w a ciwo ci CutCopyMode na warto False)

Sub CopyRange2() Range(A1A5)Copy Range(B1)End Sub

Procedura przedstawiona powy ej korzysta z tego e metoda Copy mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe kopiowanego zakresu Informacje o tymznalaz em w pomocy systemowej VBA Powy szy przyk ad doskonale roacutewnie ilustrujefakt e rejestrator makr nie zawsze generuje najbardziej efektywny kod

Kopiowanie zakresu o zmiennej wielko ciW wielu przypadkach konieczne jest skopiowanie zakresu komoacuterek dla ktoacuterego dok adnaliczba wierszy i kolumn okre laj cych jego wielko nie jest z goacutery znana Przyk adowomo esz dysponowa skoroszytem ledz cym tygodniow sprzeda w ktoacuterym liczba wierszyzmienia si ka dego tygodnia po wprowadzeniu nowych danych

Na rysunku 141 przedstawiam przyk ad cz sto spotykanego typu arkusza Znajduj cysi w nim zakres komoacuterek sk ada si z kilku wierszy ktoacuterych liczba zmienia si ka degodnia Poniewa nie wiesz jaki jest rozmiar zakresu w danej chwili musisz utworzykod ktoacutery b dzie dzia a bez u ywania adresu zakresu kopiowanych komoacuterek

Rysunek 141Przyk ad zakre-su ktoacutery mo e

sk ada siz dowolnej

liczby wierszy

Makro przedstawione poni ej ilustruje sposoacuteb kopiowania zakresu komoacuterek z arkuszaArkusz1 do arkusza Arkusz2 (pocz wszy od komoacuterki A1) Makro wykorzystuje w a ciwoCurrentRegion ktoacutera zwraca obiekt Range odpowiadaj cy blokowi komoacuterek otaczaj cychokre lon komoacuterk (w tym przypadku o adresie A1)

Kup książkę Poleć książkę

220 Cz III Podstawy programowania

Sub CopyCurrentRegion() Range(A1)CurrentRegionCopy Sheets(Arkusz2)Select Range(A1)Select ActiveSheetPaste Sheets(Arkusz1)Select ApplicationCutCopyMode = FalseEnd Sub

Zastosowanie w a ciwo ci CurrentRegion jest roacutewnowa ne z przej ciem na kartNARZ DZIA G OacuteWNE i wybraniem polecenia Znajd i zaznaczPrzejd do mdashspecjalnie znajduj cego si w grupie opcji Edytowanie i nast pnie zaznaczeniem opcjiBie cy obszar Aby przekona si jak to dzia a podczas wykonywania tych polecepowiniene u y rejestratora makr Zazwyczaj warto w a ciwo ci CurrentRegionreprezentuje prostok tny blok komoacuterek otoczony przez puste wiersze i kolumny

Oczywi cie mo esz zoptymalizowa kod makra przedstawionego powy ej i niezaznacza obszaru docelowego dla kopiowanych komoacuterek Makro przedstawione poni ejkorzysta z faktu e metoda Copy mo e u ywa argumentu wywo ania reprezentuj cegomiejsce docelowe kopiowanego zakresu

Sub CopyCurrentRegion2() Range(A1)CurrentRegionCopy _ Sheets(Arkusz2)Range(A1)End Sub

Je eli zakres komoacuterek ktoacutery chcesz skopiowa jest tabel (zdefiniowan przy u yciapolecenia WSTAWIANIETabeleTabela) ca e zadanie b dzie jeszcze atwiejsze Ka databela posiada swoj nazw (na przyk ad Tabela1) i automatycznie rozszerza si w miardodawania nowych wierszy

Sub CopyTable() Range(Tabela1)Copy Sheets(Arkusz2)Range(A1)End Sub

Je eli sproacutebujesz wykona procedur przedstawion powy ej przekonasz si e wiersznag oacutewka tabeli nie jest kopiowany poniewa obiekt Tabela1 nie obejmuje tegowiersza Je li chcesz aby wiersz nag oacutewka roacutewnie by kopiowany powiniene zmieniodwo anie do tabeli tak jak to zosta o przedstawione poni ej

Range(Tabela1[All])

Zaznaczanie komoacuterekdo ko ca wiersza lub kolumnyPrawdopodobnie bardzo cz sto u ywasz kombinacji klawiszy takich jak Ctrl+Shift+ czy Ctrl+Shift+ do zaznaczania zakresoacutew sk adaj cych si ze wszystkich komoacuterekod komoacuterki aktywnej a do ko ca kolumny czy wiersza Nie jest wi c chyba zaskoczenieme mo esz napisa makro ktoacutere b dzie zaznacza komoacuterki w podobny sposoacuteb

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 221

Do zaznaczania ca ego bloku komoacuterek mo esz u y w a ciwo ci CurrentRegion Ale copowiniene zrobi je eli chcesz zaznaczy powiedzmy tylko jedn kolumn z tegobloku komoacuterek Na szcz cie VBA pozwala na wykonywanie takich operacji Proceduraktoacuterej kod przedstawiam poni ej zaznacza zakres komoacuterek pocz wszy od bie cejaktywnej komoacuterki w doacute kolumny a do komoacuterki znajduj cej si o jeden wiersz powy ejpierwszej pustej komoacuterki tej kolumny Po zaznaczeniu zakresu mo esz przetwarza gow dowolny sposoacuteb mdash kopiowa komoacuterki przenosi je w inne miejsce arkusza zmieniaformatowanie i tak dalej

Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))SelectEnd Sub

Oczywi cie taki sam obszar mo esz roacutewnie zaznaczy r cznie Aby to zrobi powinienezaznaczy pierwsz komoacuterk nast pnie wcisn i przytrzyma klawisz Shift nacisnklawisz End i wreszcie nacisn klawisz (strza ka w doacute )

W przyk adzie wykorzystuj metod End obiektu ActiveCell ktoacutera zwraca obiekt typuRange Metoda End pobiera jeden argument okre laj cy kierunek w ktoacuterym zostaniewykonane zaznaczenie Argumentami tej metody mo e by dowolna ze sta ychprzedstawionych poni ej

xlUp

xlDown

xlToLeft

xlToRight

Pami taj e zaznaczanie zakresu nie jest potrzebne do jego przetwarzania Makroprzedstawione poni ej zmienia czcionk w komoacuterkach zmiennego zakresu (pojedynczakolumna) na pogrubion bez uprzedniego zaznaczenia zakresu

Sub MakeBold() Range(ActiveCell ActiveCellEnd(xlDown)) _ FontBold = TrueEnd Sub

Zaznaczanie ca ego wiersza lub ca ej kolumnyProcedura przedstawiona poni ej ilustruje sposoacuteb zaznaczania kolumny w ktoacuterej znajdujesi aktywna komoacuterka Makro wykorzystuje w a ciwo EntireColumn ktoacutera zwracaobiekt typu Range reprezentuj cy ca kolumn

Sub SelectColumn() ActiveCellEntireColumnSelectEnd Sub

Jak pewnie si spodziewasz w j zyku VBA dost pna jest roacutewnie w a ciwo EntireRowktoacutera zwraca obiekt typu Range reprezentuj cy ca y wiersz

Kup książkę Poleć książkę

222 Cz III Podstawy programowania

Przenoszenie zakresoacutewZazwyczaj aby przenie zakres komoacuterek zaznaczasz go wycinasz do schowka systemowegoi nast pnie wklejasz w inne miejsce Je eli u yjesz rejestratora makr do zapisania takiejoperacji przekonasz si e wygenerowany zostanie kod podobny do przedstawionegoponi ej

Sub MoveRange() Range(A1C6)Select SelectionCut Range(A10)Select ActiveSheetPasteEnd Sub

Podobnie jak podczas kopiowania komoacuterek takie rozwi zanie nie jest najbardziejefektywnym sposobem przenoszenia zakresu komoacuterek w inne miejsce W praktyce takoperacj mo esz wykona za pomoc procedury sk adaj cej si z jednego wiersza koduco prezentuj poni ej

Sub MoveRange2() Range(A1C6)Cut Range(A10)End Sub

Makro przedstawione powy ej korzysta z faktu e metoda Cut mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe przenoszonego zakresu Zwroacute roacutewnieuwag na fakt e podczas przenoszenia aden zakres komoacuterek nie jest zaznaczanyWska nik aktywnej komoacuterki przez ca y czas pozostaje w tym samym miejscu arkusza

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tliJednym z zada cz sto wykonywanych przez makra jest sprawdzanie poszczegoacutelnychkomoacuterek zakresu i wykonywanie okre lonych operacji na podstawie ich zawarto ci Takiemakra zazwyczaj wykorzystuj p tl For-Next za pomoc ktoacuterej przetwarzane s komoacuterkizakresu

Przyk ad przedstawiony ni ej ilustruje sposoacuteb przechodzenia kolejno przez wszystkiekomoacuterki danego zakresu W naszym przypadku przetwarzany jest aktualnie zaznaczonyzakres komoacuterek Zmienna obiektowa o nazwie Cell reprezentuje aktualnie przetwarzankomoacuterk W p tli For Each-Next znajduje si jedno polecenie ktoacutere sprawdza aktualnieprzetwarzan komoacuterk i zmienia jej czcionk na pogrubion je eli warto przechowywanaw komoacuterce jest dodatnia

Sub ProcessCells() Dim Cell As Range For Each Cell In Selection If CellValue gt 0 Then CellFontBold = True Next CellEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 223

Taka procedura dzia a poprawnie ale co si stanie je eli u ytkownik zaznaczy cakolumn lub ca y wiersz To wcale nie jest takie nieprawdopodobne bo przecie Excelpozwala na wykonywanie operacji na ca ych wierszach i kolumnach W takiej sytuacjiwykonanie makra mo e zaj naprawd du o czasu poniewa nasza p tla przetwarzaka d komoacuterk zaznaczonego zakresu a cznie z pustymi w jednej kolumnie komoacuterekjest a 1 048 576hellip Aby zatem nasze makro by o bardziej wydajne musimy je takzmodyfikowa eby przetwarzane by y tylko i wy cznie komoacuterki ktoacutere nie s puste

Procedura przedstawiona poni ej przetwarza wy cznie niepuste komoacuterki zaznaczonegozakresu dzi ki zastosowaniu metody SpecialCells (wi cej szczegoacute owych informacji natemat tej metody znajdziesz w pomocy systemowej VBA) Nasza procedura za pomocpolecenia Set tworzy dwa obiekty typu Range pierwszy z nich to podzakres komoacuterekzakresu wej ciowego zawieraj cy wy cznie komoacuterki z warto ciami sta ymi (na przyk adteksty warto ci liczbowe litera y i tak dalej) a drugi sk ada si z komoacuterek zawieraj cychformu y Procedura przetwarza tylko komoacuterki nale ce do tych podzakresoacutew co w efekciepowoduje pomini cie przetwarzania wszystkich pozosta ych pustych komoacuterek zakresuwej ciowego Sprytne prawda

Sub SkipBlanks() Dim ConstantCells As Range Dim FormulaCells As Range Dim cell As Range Ignoruj b dy On Error Resume Next

Przetwarzaj komoacuterki zawieraj ce warto ci sta e Set ConstantCells = Selection _ SpecialCells(xlConstants) For Each cell In ConstantCells If cellValue gt 0 Then cellFontBold = True End If Next cell

Przetwarzaj komoacuterki zawieraj ce formu y Set FormulaCells = Selection _ SpecialCells(xlFormulas) For Each cell In FormulaCells If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Procedura SkipBlanks dzia a tak samo szybko niezale nie od tego jaki zakres komoacuterekzaznaczy e Mo esz na przyk ad zaznaczy zakres sk adaj cy si z kilku komoacuterek zaznaczywszystkie kolumny w danym zakresie albo wszystkie wiersze w danym zakresie albonawet ca y arkusz Jak wida jest to ogromne usprawnienie w stosunku do oryginalnejprocedury ProcessCells ktoacuter omoacutewi em nieco wcze niej

Zwroacute uwag e w kodzie procedury u yli my polecenia

On Error Resume Next

Kup książkę Poleć książkę

224 Cz III Podstawy programowania

Polecenie to powoduje e Excel po prostu ignoruje b dy (inaczej moacutewi c je eli proacutebawykonania danego polecenia ko czy si b dem Excel ignoruje ten b d i po prostuprzechodzi do kolejnego polecenia wi cej szczegoacute owych informacji na temat obs ugib doacutew znajdziesz w rozdziale 12) W naszym przypadku zastosowanie polecenia OnError jest konieczne poniewa metoda SpecialCells generuje b d gdy adna komoacuterkanie spe nia podanego kryterium

Zastosowanie metody SpecialCells jest roacutewnowa ne z przej ciem na kart NARZ DZIAG OacuteWNE wybraniem polecenia Znajd i zaznaczPrzejd do mdash specjalnie znajduj cegosi w grupie opcji Edytowanie i nast pnie zaznaczeniem opcji Sta e lub Formu y Abyprzekona si jak to dzia a podczas wykonywania tych polece powiniene u yrejestratora makr i zaznacza roacute ne opcje

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tli(cz II)A teraz ci g dalszy naszej opowie ci W tym punkcie przedstawi inny sposoacuteb efektywnegoprzetwarzania komoacuterek znajduj cych si w zaznaczonym zakresie Tym razem procedurab dzie korzysta a z w a ciwo ci UsedRange ktoacutera zwraca obiekt typu Range reprezentuj cyu ywany zakres arkusza Procedura korzysta roacutewnie z metody Intersect ktoacutera zwracaobiekt typu Range zawieraj cy komoacuterki b d ce cz ci wspoacuteln dwoacutech zakresoacutew

Poni ej przedstawiam zmodyfikowan wersj procedury SkipBlanks omawianejw poprzednim punkcie

Sub SkipBlanks2() Dim WorkRange As Range Dim cell As Range Set WorkRange = Intersect(Selection ActiveSheetUsedRange) For Each cell In WorkRange If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Zmienna obiektowa WorkRange zawiera komoacuterki ktoacutere s cz ci wspoacuteln zakresuzaznaczonego przez u ytkownika oraz zakresu u ywanych komoacuterek arkusza Je lizatem u ytkownik zaznaczy ca kolumn zmienna WorkRange b dzie zawiera a tylkokomoacuterki ktoacutere znajduj si jednocze nie w zaznaczonej kolumnie i w u ywanymzakresie arkusza Jak wida jest to bardzo szybka i efektywna metoda pozwalaj ca naunikni cie przetwarzania komoacuterek znajduj cych si poza zakresem u ywanychkomoacuterek arkusza

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 225

Wprowadzanie warto ci do komoacuterkiNa rysunku 142 pokazuj w jaki sposoacuteb mo esz u y funkcji InputBox j zyka VBA dopobierania od u ytkownika warto ci ktoacutera nast pnie mo e zosta zapisana w wybranejkomoacuterce W procedurze przedstawionej poni ej demonstruj jak poprosi u ytkownikao podanie warto ci i wstawi j do komoacuterki A1 aktywnego arkusza (i to wszystkoza pomoc jednego polecenia)

Sub GetValue() Range(A1)Value = InputBox( _ Wprowad warto dla komoacuterki A1)End Sub

Rysunek 142Zastosowaniefunkcji Input-

Box do pobie-rania warto ci

od u ytkownika

Przedstawiona procedura mo e jednak sprawia pewien problem Je eli u ytkowniknaci nie w oknie dialogowym przycisk Cancel procedura usunie wszelkie dane juznajduj ce si w komoacuterce A1 a takie zachowanie nie jest zbyt dobr praktyk programistyczn Naci ni cie przycisku Cancel powinno po prostu usuwa z ekranu okno dialogowe bezwykonywania adnych dodatkowych operacji

Makro przedstawione poni ej ilustruje znacznie lepsze podej cie do takiego zagadnieniai do zapami tania warto ci wprowadzonej przez u ytkownika wykorzystuje zmienn xJe eli zmienna zawiera co innego ni pusty ci g znakoacutew (czyli kiedy u ytkownikwprowadzi jak warto ) warto zmiennej jest zapisywana w komoacuterce A1 W przeciwnymprzypadku procedura ko czy dzia anie nie wykonuj c adnych dodatkowych operacji

Sub GetValue2() Dim x as Variant x = InputBox(Wprowad warto dla komoacuterki A1) If x ltgt Then Range(A1)Value = xEnd Sub

Zmienna x zosta a zdefiniowana jako zmienna typu Variant poniewa jej warto cimo e by warto albo pusty ci g znakoacutew (je eli u ytkownik naci nie przycisk Cancel)

Kup książkę Poleć książkę

226 Cz III Podstawy programowania

Okre lanie typu zaznaczonego zakresuJe eli zadaniem Twojego makra b dzie przetwarzanie zaznaczonego zakresu takiemakro musi mie zdolno sprawdzenia czy przed jego wywo aniem u ytkownikrzeczywi cie zaznaczy zakres komoacuterek W przeciwnym razie je eli przed wywo aniemmakra zaznaczony zostanie inny obiekt (na przyk ad wykres lub kszta t) proacuteba wykonaniamakra najprawdopodobniej zako czy si niepowodzeniem Polecenie przedstawioneponi ej wykorzystuje funkcj TypeName j zyka VBA do wy wietlania na ekranie typuaktualnie zaznaczonego obiektu

MsgBox TypeName(Selection)

Je eli aktualnie zaznaczony jest obiekt typu Range wykonanie takiego polecenia spowodujewy wietlenie s owa Range Je li Twoje makro dzia a tylko z zakresami komoacuterek mo eszu y polecenia If do sprawdzenia czy aktualnie zaznaczony obiekt to zakres (obiekttypu Range) Procedura przedstawiona poni ej sprawdza typ zaznaczonego obiektui je eli nie jest to obiekt typu Range na ekranie wy wietlany jest odpowiedni komunikati procedura ko czy dzia anie

Sub CheckSelection() If TypeName(Selection) ltgt Range Then MsgBox Zaznacz zakres komoacuterek Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Identyfikowanie zaznacze wielokrotnychJak pami tasz Excel pozwala na jednoczesne zaznaczanie wielu obiektoacutew Aby to zrobi powiniene podczas zaznaczania obiektoacutew lub zakresoacutew trzyma wci ni ty klawisz CtrlZaznaczenia wielokrotne mog by przyczyn problemoacutew z wykonywaniem niektoacuterychmakr Przyk adowo nie mo esz skopiowa zakresu komoacuterek ktoacutery zosta utworzonypoprzez wiele zaznacze nieci g ych zakresoacutew komoacuterek Je eli sproacutebujesz wykonatak operacj Excel wy wietli na ekranie komunikat przedstawiony na rysunku 143

Makro przedstawione ni ej pokazuje w jaki sposoacuteb mo esz sprawdzi czy u ytkownikdokona zaznaczenia wielokrotnego i na tej podstawie wykona odpowiedni operacj

Sub MultipleSelection() If SelectionAreasCount gt 1 Then MsgBox Zaznaczenia wielokrotne nie s dozwolone Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Przedstawiona procedura wykorzystuje metod Areas ktoacutera zwraca kolekcj wszystkichzakresoacutew w danym zaznaczeniu W a ciwo Count zwraca liczb obiektoacutew tej kolekcji

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 227

Rysunek 143Excel nie lubi

kiedy proacutebujeszkopiowa nie-ci g e zakresy

komoacuterek

Zmiana ustawie ExcelaChyba najbardziej u ytecznymi makrami s proste procedury ktoacutere zmieniaj jednolub kilka ustawie Excela Je li na przyk ad dojdziesz do wniosku e bardzo cz stoprzywo ujesz na ekran okno opcji programu Excel i zmieniasz jakie ustawienie takaoperacja z pewno ci b dzie bardzo dobrym kandydatem do napisania makraoszcz dzaj cego Twoacutej czas i u atwiaj cego zmian takiego ustawienia

W tym podrozdziale zaprezentuj dwa przyk ady procedur ktoacutere pokazuj w jakisposoacuteb mo na zmienia ustawienia Excela Ogoacutelne zasady dzia ania tych procedurmo esz z powodzeniem zastosowa do napisania w asnych makr zmieniaj cych inneustawienia Excela

Zmiana ustawie logicznych(opcje typu Boolean)Podobnie jak wy cznik wiat a opcje logiczne (typu Boolean) mog by albo w czonealbo wy czone Mo esz na przyk ad utworzy makro ktoacutere b dzie w cza o lub wy cza owy wietlanie podzia u arkusza na strony Kiedy wydrukujesz arkusz (lub skorzystaszz trybu podgl du wydruku) Excel wy wietla na arkuszu przerywane linie reprezentuj cemiejsca podzia u arkusza na strony wydruku Niektoacuterych u ytkownikoacutew (w czniez autorem tej ksi ki) takie zachowanie Excela irytuje Niestety jedynym sposobemwy czenia wy wietlania podzia u arkusza na strony jest otwarcie okna dialogowego Opcjeprogramu Excel przej cie na kart Zaawansowane a nast pnie przewijanie zawarto ci tejkarty a do odszukania opcji Poka podzia y stron Je eli podczas wy czania tej opcjikorzysta e z rejestratora makr przekonasz si e Excel generuje poni szy kod

Kup książkę Poleć książkę

228 Cz III Podstawy programowania

ActiveSheetDisplayPageBreaks = False

Z drugiej strony je eli podczas rejestrowania makra podzia y stron nie s widoczneExcel generuje taki kod

ActiveSheetDisplayPageBreaks = True

Takie informacje mog doprowadzi do wniosku e b dziesz musia napisa a dwamakra mdash jedno do w czania podgl du podzia u stron a drugie do jego wy czaniaNa szcz cie to nieprawda Procedura przedstawiona poni ej wykorzystuje operatorNot do zmiany warto ci logicznej True na False i odwrotnie Wykonanie proceduryTogglePageBreaks to prosty sposoacuteb na cykliczne w czanie i wy czanie podgl du podzia ustron arkusza

Sub TogglePageBreaks() On Error Resume Next ActiveSheetDisplayPageBreaks = Not _ ActiveSheetDisplayPageBreaksEnd Sub

Pierwsze polecenie informuje Excel e powinien ignorowa ewentualne b dy Przyk adowopodzia y stron nie s wy wietlane na arkuszach wykresoacutew Kiedy wprowadzisz takiepolecenie i sproacutebujesz wykona t procedur dla arkusza wykresu na ekranie nie pojawisi komunikat o b dzie

Techniki u ytej w procedurze TogglePageBreaks mo esz u ywa do zmiany dowolnychopcji logicznych (czyli takich ktoacuterych warto ciami s True albo False)

Zmiana innych opcji (typu non-Boolean)Do zmiany opcji ktoacutere nie s typu logicznego mo esz u ywa konstrukcji Select CaseW przyk adzie przedstawionym poni ej zmieniam tryb przeliczania skoroszytu z r cznegona automatyczny i odwrotnie i nakazuj wy wietlenie na ekranie komunikatu opisuj cegoaktualny tryb przeliczania arkusza

Sub ToggleCalcMode() Select Case ApplicationCalculation Case xlManual ApplicationCalculation = xlCalculationAutomatic MsgBox Automatyczne przeliczanie skoroszytu Case xlAutomatic ApplicationCalculation = xlCalculationManual MsgBox R czne przeliczanie skoroszytu End SelectEnd Sub

Techniki u ytej w procedurze ToggleCalcMode mo esz u ywa do zmiany dowolnychopcji ktoacutere nie posiadaj warto ci logicznych

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 4: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

Spis tre ci 7

W a ciwo ci i metody obiektoacutew 74W a ciwo ci obiektoacutew 74Metody obiektoacutew 76Zdarzenia obiektoacutew 77

Poszukiwanie dodatkowych informacji 78System pomocy VBA 78Narz dzie Object Browser 79Automatyczna lista w a ciwo ci i metod 80

Rozdzia 5 Procedury Sub i Function w j zyku VBA 81Procedury Sub a funkcje 81

Rzut oka na procedury Sub 82Rzut oka na procedury Function 82Nazwy procedur Sub i Function 83

Uruchamianie procedur Sub 83Bezpo rednie uruchamianie procedur Sub 85Uruchamianie procedur w oknie dialogowym Makro 85Uruchamianie makr za pomoc skroacutetoacutew klawiszowych 86Uruchamianie procedur przy u yciu przyciskoacutew i kszta toacutew 87Uruchamianie procedur z poziomu innych procedur 89

Uruchamianie procedur Function 89Wywo ywanie funkcji z poziomu procedur Sub 90Wywo ywanie funkcji z poziomu formu arkusza 90

Rozdzia 6 U ywanie rejestratora makr 93Czy to rzeczywisto czy to VBA 93Podstawy rejestrowania makr 93Przygotowania do rejestrowania makr 95Wzgl dne czy bezwzgl dne 96

Rejestrowanie makr w trybie odwo a bezwzgl dnych 96Rejestrowanie makr w trybie odwo a wzgl dnych 97

Co jest rejestrowane 98Opcje rejestratora makr 100

Nazwa makra 100Klawisz skroacutetu 100Przechowuj makro w 101Opis 101

Czy to co jest wydajne 101

Cz III Podstawy programowania 105Rozdzia 7 Kluczowe elementy j zyka VBA 107

Stosowanie komentarzy w kodzie VBA 107U ywanie zmiennych sta ych i typoacutew danych 109

Poj cie zmiennej 109Czym s typy danych w j zyku VBA 110Deklarowanie zmiennych i okre lanie ich zasi gu 111

Kup książkę Poleć książkę

8 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Sta e 117Sta e predefiniowane 118

a cuchy znakoacutew 118Daty i godziny 119

Instrukcje przypisania 120Przyk ady instrukcji przypisania 120O znaku roacutewno ci 121Proste operatory 121

Praca z tablicami 123Deklarowanie tablic 123Tablice wielowymiarowe 124Tablice dynamiczne 124

Stosowanie etykiet 125

Rozdzia 8 Praca z obiektami Range 127Szybka powtoacuterka 127Inne sposoby odwo ywania si do zakresu 129

W a ciwo Cells 129W a ciwo Offset 130

Wybrane w a ciwo ci obiektu Range 131W a ciwo Value 131W a ciwo Text 132W a ciwo Count 133W a ciwo ci Column i Row 133W a ciwo Address 133W a ciwo HasFormula 134W a ciwo Font 134W a ciwo Interior 136W a ciwo ci Formula i FormulaLocal 136W a ciwo NumberFormat 137

Wybrane metody obiektu Range 137Metoda Select 137Metody Copy i Paste 138Metoda Clear 138Metoda Delete 139

Rozdzia 9 Praca z funkcjami VBA i arkusza kalkulacyjnego 141Co to jest funkcja 141Stosowanie wbudowanych funkcji VBA 142

Przyk ady funkcji VBA 142Funkcje VBA ktoacutere robi co wi cej ni tylko zwracanie warto ci 144Odkrywanie funkcji VBA 144

U ycie funkcji arkusza kalkulacyjnego w VBA 145Przyk ady funkcji arkusza kalkulacyjnego 148Wprowadzanie funkcji arkusza kalkulacyjnego 150Wi cej o u yciu funkcji arkusza kalkulacyjnego 151

U ycie w asnych funkcji 151

Kup książkę Poleć książkę

Spis tre ci 9

Rozdzia 10 Sterowanie przep ywem i podejmowanie decyzji 153Zabierz si za przep yw kolego 153Instrukcja GoTo 154Decyzje decyzje 155

Struktura If-Then 155Struktura Select Case 159

Entliczek p tliczek mdash czyli jak u ywa p tli 162P tle For-Next 162P tla Do-While 167P tla Do-Until 168

U ycie p tli For Each-Next z kolekcjami 168

Rozdzia 11 Automatyczne procedury i zdarzenia 171Przygotowanie do wielkiego zdarzenia 171

Czy zdarzenia s przydatne 173Programowanie procedur obs ugi zdarze 173

Gdzie jest umieszczony kod VBA 174Tworzenie procedury obs ugi zdarzenia 175Przyk ady wprowadzaj ce 176

Zdarzenie Open dla skoroszytu 176Zdarzenie BeforeClose dla skoroszytu 179Zdarzenie BeforeSave dla skoroszytu 179

Przyk ady zdarze aktywacyjnych 180Zdarzenia aktywacji i dezaktywacji arkusza 180Zdarzenia aktywacji i dezaktywacji skoroszytu 181Zdarzenia aktywacji skoroszytu 182

Inne zdarzenia dotycz ce arkusza 183Zdarzenie BeforeDoubleClick 183Zdarzenie BeforeRightClick 184Zdarzenie Change 184

Zdarzenia niezwi zane z obiektami 186Zdarzenie OnTime 186Zdarzenia naci ni cia klawisza 188

Rozdzia 12 Techniki obs ugi b doacutew 191Rodzaje b doacutew 191B dny przyk ad 192

To makro nie jest idealne 192Makro wci nie jest idealne 193Czy teraz makro jest idealne 194Rezygnacja z idea u 195

Inny sposoacuteb obs ugi b doacutew 195Korekta procedury EnterSquareRoot 195O instrukcji On Error 196

Obs uga b doacutew mdash szczegoacute owe informacje 197Wznawianie wykonywania kodu po wyst pieniu b du 197Obs uga b doacutew w pigu ce 199

Kup książkę Poleć książkę

10 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kiedy ignorowa b dy 199Rozpoznawanie okre lonych b doacutew 200

Zamierzony b d 201

Rozdzia 13 Dezynsekcja kodu czyli jak walczy z pluskwami 203Rodzaje pluskiew 203Podstawy entomologii czyli jak zidentyfikowa pluskw 205Metody i techniki walki z pluskwami 205

Przegl danie kodu VBA 206Umieszczanie funkcji MsgBox w kluczowych miejscach kodu 206Umieszczanie polecenia DebugPrint w kluczowych miejscach kodu 208Korzystanie z wbudowanych narz dzi Excela wspomagaj cych odpluskwianie kodu VBA 209

Kilka s oacutew o debuggerze 209Ustawianie punktoacutew przerwa w kodzie programu 209Zastosowanie okna Watch 212Zastosowanie okna Locals 213

Jak zredukowa liczb b doacutew w kodzie programu 215

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 217Przetwarzanie zakresoacutew komoacuterek 217

Kopiowanie zakresoacutew 218Kopiowanie zakresu o zmiennej wielko ci 219Zaznaczanie komoacuterek do ko ca wiersza lub kolumny 220Zaznaczanie ca ego wiersza lub ca ej kolumny 221Przenoszenie zakresoacutew 222Wydajne przetwarzanie komoacuterek zaznaczonego zakresu przy u yciu p tli 222Wydajne przetwarzanie komoacuterek zaznaczonego zakresu przy u yciu p tli (cz II) 224Wprowadzanie warto ci do komoacuterki 225Okre lanie typu zaznaczonego zakresu 226Identyfikowanie zaznacze wielokrotnych 226

Zmiana ustawie Excela 227Zmiana ustawie logicznych (opcje typu Boolean) 227Zmiana innych opcji (typu non-Boolean) 228

Praca z wykresami 229Metoda AddChart kontra metoda AddChart2 230Modyfikowanie typu wykresu 231Przechodzenie w p tli przez elementy kolekcji ChartObjects 232Modyfikowanie w a ciwo ci wykresu 232Zmiana formatowania wykresoacutew 233

Jak przyspieszy dzia anie kodu VBA 234Wy czanie aktualizacji ekranu 234Wy czenie automatycznego przeliczania skoroszytu 235Wy czanie irytuj cych ostrze e 236Upraszczanie odwo a do obiektoacutew 236Deklarowanie typoacutew zmiennych 237Zastosowanie struktury With-End With 238

Kup książkę Poleć książkę

Spis tre ci 11

Cz IV Komunikacja z u ytkownikiem 239Rozdzia 15 Proste okna dialogowe 241

Co zamiast formularzy UserForm 241Funkcja MsgBox 242

Wy wietlanie prostych okien dialogowych 243Pobieranie odpowiedzi z okna dialogowego 243Dostosowywanie wygl du okien dialogowych do w asnych potrzeb 244

Funkcja InputBox 247Sk adnia funkcji InputBox 248Przyk ad zastosowania funkcji InputBox 248Inny rodzaj okna dialogowego InputBox 249

Metoda GetOpenFilename 250Sk adnia metody GetOpenFilename 251Przyk ad zastosowania metody GetOpenFilename 251

Metoda GetSaveAsFilename 253Pobieranie nazwy folderu 254Wy wietlanie wbudowanych okien dialogowych programu Excel 254

Rozdzia 16 Wprowadzenie do formularzy UserForm 257Kiedy u ywa formularzy UserForm 257Tworzenie formularzy UserForm mdash wprowadzenie 258Praca z formularzami UserForm 259

Wstawianie nowego formularza UserForm 259Umieszczanie formantoacutew na formularzu UserForm 260Modyfikacja w a ciwo ci formantoacutew formularza UserForm 261Przegl danie okna Code formularza UserForm 263Wy wietlanie formularzy UserForm 263Pobieranie i wykorzystywanie informacji z formularzy UserForm 264

Przyk ad tworzenia formularza UserForm 264Tworzenie formularza UserForm 265Dodawanie przyciskoacutew polece (formanty CommandButton) 265Dodawanie przyciskoacutew opcji (formanty OptionButton) 267Dodawanie procedur obs ugi zdarze 268Tworzenie makra ktoacutere wy wietla formularz na ekranie 270Udost pnianie makra u ytkownikowi 271Testowanie dzia ania makra 272

Rozdzia 17 Praca z formantami formularza UserForm 275Rozpoczynamy prac z formantami formularzy UserForm 275

Dodawanie formantoacutew 276Wprowadzenie do w a ciwo ci formantoacutew 277

Formanty okien dialogowych mdash szczegoacute y 278Formant CheckBox (pole wyboru) 279Formant ComboBox (pole kombi) 280Formant CommandButton (przycisk polecenia) 281Formant Frame (pole grupy) 281Formant Image (pole obrazu) 282

Kup książkę Poleć książkę

12 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Formant Label (pole etykiety) 283Formant ListBox (pole listy) 283Formant MultiPage 284Formant OptionButton (przycisk opcji) 285Formant RefEdit (pole zakresu) 286Formant ScrollBar (pasek przewijania) 286Formant SpinButton (pokr t o) 287Formant TabStrip (pole karty) 288Formant TextBox (pole tekstowe) 288Formant ToggleButton (przycisk prze cznika) 289

Praca z formantami w oknach dialogowych 289Zmiana rozmiaroacutew i przenoszenie formantoacutew w inne miejsce 289Rozmieszczanie i wyroacutewnywanie po o enia formantoacutew w oknie dialogowym 290Obs uga u ytkownikoacutew preferuj cych korzystanie z klawiatury 291Testowanie formularzy UserForm 293

Estetyka okien dialogowych 293

Rozdzia 18 Techniki pracy z formularzami UserForm 295Zastosowanie w asnych okien dialogowych 295Przyk adowy formularz UserForm 296

Tworzenie okna dialogowego 296Tworzenie kodu procedury wy wietlaj cej okno dialogowe 298Udost pnianie makra u ytkownikowi 299Testowanie okna dialogowego 299Dodawanie procedur obs ugi zdarze 300Sprawdzanie poprawno ci danych 302Teraz okno dialogowe dzia a tak jak powinno 302

Wi cej przyk adoacutew formularzy UserForm 302Zastosowanie formantoacutew ListBox 303Zaznaczanie zakresoacutew 307Praca z wieloma grupami formantoacutew OptionButton 309Zastosowanie formantoacutew SpinButton oraz TextBox 310Wykorzystywanie formularza UserForm jako wska nika post pu zadania 312Tworzenie niemodalnych okien dialogowych z wieloma kartami 315Wy wietlanie wykresoacutew na formularzach UserForm 317

Lista kontrolna tworzenia i testowania okien dialogowych 318

Rozdzia 19 Udost pnianie makr z poziomu interfejsu u ytkownika 321Dostosowywanie Wst ki 321

R czne dopasowywanie Wst ki do w asnych potrzeb 322Dodawanie do Wst ki przycisku w asnego makra 324Dostosowywanie Wst ki za pomoc kodu XML 324

Dostosowywanie menu podr cznego 329Rodzaje obiektoacutew CommandBar 329Wy wietlanie wszystkich menu podr cznych 329Odwo ania do elementoacutew kolekcji CommandBars 330Odwo ania do formantoacutew obiektu CommandBar 331W a ciwo ci formantoacutew obiektu CommandBar 332

Kup książkę Poleć książkę

Spis tre ci 13

Przyk ady zastosowania VBA do modyfikacji menu podr cznego 334Resetowanie wszystkich wbudowanych menu podr cznych 334Dodawanie nowego elementu do menu podr cznego Cell 335Wy czanie menu podr cznego 337

Tworzenie w asnych paskoacutew narz dzi 338

Cz V Od teorii do praktyki 341Rozdzia 20 Jak tworzy w asne funkcje arkuszowe i jak prze y aby o tym opowiedzie 343

Dlaczego tworzymy w asne funkcje 343Podstawowe informacje o funkcjach VBA 344Tworzenie funkcji 345Praca z argumentami funkcji 345Przyk ady funkcji 346

Funkcje bezargumentowe 346Funkcje jednoargumentowe 346Funkcje z dwoma argumentami 348Funkcje pobieraj ce zakres jako argument 349Funkcje z argumentami opcjonalnymi 351

Funkcje opakowuj ce 353Funkcja NumberFormat 353Funkcja ExtractElement 354Funkcja SayIt 354Funkcja IsLike 355

Funkcje zwracaj ce tablice 355Zwracanie tablicy zawieraj cej nazwy miesi cy 355Zwracanie posortowanej listy 356

Okno dialogowe Wstawianie funkcji 358Wy wietlanie opisoacutew funkcji 358Opisy argumentoacutew 360

Rozdzia 21 Tworzenie dodatkoacutew 361No dobrzehellip czym zatem s dodatki 361Po co tworzy si dodatki 362Praca z dodatkami 363Podstawy tworzenia dodatkoacutew 364Tworzymy przyk adowy dodatek 365

Konfiguracja skoroszytu 365Testowanie skoroszytu 367Tworzenie opisoacutew dodatku 368Ochrona kodu VBA 369Tworzenie dodatku 369Otwieranie dodatku 369Dystrybucja dodatkoacutew 370Modyfikowanie dodatkoacutew 371

Kup książkę Poleć książkę

14 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Cz VI Dekalogi 373Rozdzia 22 Dziesi pyta na temat VBA (wraz z odpowiedziami) 375

Rozdzia 23 (Prawie) dziesi roacutede informacji na temat Excela 379System pomocy j zyka VBA 379Wsparcie techniczne firmy Microsoft 380Inne strony internetowe 380Blogi po wi cone Excelowi 380Google 381Bing 381Lokalne grupy u ytkownikoacutew 381Moje inne ksi ki 381

Rozdzia 24 Dziesi rzeczy ktoacutere powiniene robi w j zyku VBAi ktoacuterych nie powiniene robi 383

Zawsze deklaruj wszystkie zmienne 383Nigdy nie powiniene myli has a chroni cego kod VBA z bezpiecze stwem aplikacji 384Zawsze staraj si wyczy ci i zoptymalizowa kod aplikacji 384Nigdy nie umieszczaj wszystkiego w jednej procedurze 385Zawsze powiniene rozwa y zastosowanie innego oprogramowania 385Nigdy nie zak adaj e ka dy u ytkownik zezwala na uruchamianie makr 386Zawsze staraj si eksperymentowa z nowymi rozwi zaniami 386Nigdy z goacutery nie zak adaj e Twoacutej kod b dzie poprawnie dzia a z innymi wersjami Excela 386Zawsze pami taj o u ytkownikach Twojej aplikacji 387Nigdy nie zapominaj o tworzeniu kopii zapasowych 387

Skorowidz 389

Kup książkę Poleć książkę

Rozdzia 14

Przyk ady i technikiprogramowania w j zyku VBA

W tym rozdziale poznasz szereg przyk adoacutew technik programowania w j zyku VBA dowiesz si jak mo esz przyspieszy dzia anie kodu VBA w Twojej aplikacji

ierz e nauka programowania jest znacznie szybsza i zdecydowanie bardziejefektywna kiedy pracujemy na konkretnych przyk adach Dobrze opracowany

przyk ad o wiele lepiej obja nia zagadnienie ni najbardziej rozbudowany i szczegoacute owyale teoretyczny opis Poniewa czytasz t ksi k prawdopodobnie zgadzasz si ze mnw tej materii W tym rozdziale znajdziesz szereg przyk adoacutew demonstruj cych u ytecznepraktyczne techniki programowania w j zyku VBA

Przyk ady omawiane w tym rozdziale zosta y podzielone na kilka kategorii Oto one

Praca z zakresami

Modyfikacja ustawie Excela

Praca z wykresami

Przyspieszanie i optymalizacja dzia ania kodu VBA

Niektoacutere z prezentowanych przyk adoacutew b dziesz moacuteg od razu wykorzysta w swoichaplikacjach jednak w wi kszo ci przypadkoacutew b d wymaga y pewnego dostosowaniado Twoich aplikacji

Przetwarzanie zakresoacutew komoacuterekWi kszo zada z jakimi b dziesz si styka programuj c w j zyku VBA b dzie zapewnewymaga a mniejszego b d wi kszego przetwarzania zakresoacutew komoacuterek (aby od wie ysobie wiadomo ci na temat obiektu Range powiniene zajrze do rozdzia u 8) Kiedypracujesz z obiektami Range powiniene pami ta o nast puj cych sprawach

Kod VBA nie musi zaznacza danego zakresu aby go przetwarza

Je eli kod VBA zaznacza wybrany zakres przechowuj cy go skoroszyt musi byaktywny

W

Kup książkę Poleć książkę

218 Cz III Podstawy programowania

Rejestrator makr nie zawsze b dzie w stanie wygenerowa optymalny kod VBABardzo cz sto jednak mo esz za jego pomoc utworzy bazowe makro i potemodpowiednio zmodyfikowa kod tak aby sta si bardziej efektywny

Zazwyczaj bardzo dobrym rozwi zaniem jest nadawanie nazw zakresom komoacuterekwykorzystywanym w kodzie VBA Przyk adowo polecenie Range(Total)jestznacznie lepszym rozwi zaniem ni Range(D45) Je li w tym drugim przypadkupoacute niej wstawisz dodatkowy wiersz powy ej wiersza 45 to eby wszystko dzia a opoprawnie b dziesz musia zmodyfikowa makro tak aby korzysta o z nowegopoprawnego adresu komoacuterki a ta po wykonaniu takiej operacji b dzie mia a innyadres (D46) Aby nada nazw wybranemu zakresowi komoacuterek powiniene przejna kart FORMU Y i wybra polecenie Definiuj nazw znajduj ce si w grupiepolece Nazwy zdefiniowane

Kiedy tworzysz makro ktoacutere b dzie przetwarza o zakres komoacuterek zaznaczonyprzez u ytkownika pami taj e u ytkownik mo e zaznaczy kilka ca ych kolumnczy wierszy W wi kszo ci przypadkoacutew z pewno ci nie b dziesz chcia aby makrow p tli przechodzi o w takiej sytuacji przez wszystkie zaznaczone komoacuterki (w czniez pustymi) co mog oby zaj bardzo wiele czasu Dobre makro powinno odszukai przetwarza tylko komoacuterki ktoacutere nie s puste

Excel pozwala na jednoczesne zaznaczanie wielu zakresoacutew komoacuterek Aby to zrobi powiniene zaznaczy pierwszy zakres komoacuterek potem wcisn i przytrzymaklawisz Ctrl i zaznacza kolejne zakresy komoacuterek przy u yciu myszy Kod Twojejaplikacji powinien by przygotowany na takie sytuacje i podejmowa odpowiednieakcje

Skoroszyty z wybranymi przyk adami omawianymi w tym rozdziale znajdziesz na stronieinternetowej naszej ksi ki

Je eli chcesz samodzielnie wpisywa kod omawianych przyk adoacutew przejd do edytoraVBE naciskaj c kombinacj klawiszy lewyAlt+F11 a nast pnie wstaw nowy modu VBAi wpisz kod prezentowanych procedur Upewnij si e Twoacutej skoroszyt jest poprawnieskonfigurowany Je eli na przyk ad kod danego przyk adu odwo uje si do arkuszyo nazwach Arkusz1 i Arkusz2 upewnij si e takie arkusze istniej w Twoim skoroszycie

Kopiowanie zakresoacutewKopiowanie zakresoacutew komoacuterek mo e mia o pretendowa do miana jednej z najcz ciejwykonywanych operacji w Excelu Kiedy w czysz rejestrator makr i skopiujesz zakreskomoacuterek o adresie A1A5 do zakresu B1B5 otrzymasz nast puj ce makro

Sub CopyRange() Range(A1A5)Select SelectionCopy Range(B1)Select ActiveSheetPaste ApplicationCutCopyMode = FalseEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 219

Zwroacute uwag na ostatnie polecenie Zosta o ono wygenerowane przez naci ni cieklawisza Esc po skopiowaniu zakresu komoacuterek co spowodowa o usuni cie przerywanejlinii reprezentuj cej na arkuszu obramowanie kopiowanego zakresu

Przedstawione makro dzia a poprawnie ale zakresy komoacuterek mo na kopiowa w znaczniebardziej efektywny sposoacuteb Identyczny rezultat mo esz osi gn za pomoc proceduryktoacutera sk ada si z tylko jednego wiersza polecenia i nie zaznacza adnych komoacuterek(dzi ki czemu nie wymaga ustawiania w a ciwo ci CutCopyMode na warto False)

Sub CopyRange2() Range(A1A5)Copy Range(B1)End Sub

Procedura przedstawiona powy ej korzysta z tego e metoda Copy mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe kopiowanego zakresu Informacje o tymznalaz em w pomocy systemowej VBA Powy szy przyk ad doskonale roacutewnie ilustrujefakt e rejestrator makr nie zawsze generuje najbardziej efektywny kod

Kopiowanie zakresu o zmiennej wielko ciW wielu przypadkach konieczne jest skopiowanie zakresu komoacuterek dla ktoacuterego dok adnaliczba wierszy i kolumn okre laj cych jego wielko nie jest z goacutery znana Przyk adowomo esz dysponowa skoroszytem ledz cym tygodniow sprzeda w ktoacuterym liczba wierszyzmienia si ka dego tygodnia po wprowadzeniu nowych danych

Na rysunku 141 przedstawiam przyk ad cz sto spotykanego typu arkusza Znajduj cysi w nim zakres komoacuterek sk ada si z kilku wierszy ktoacuterych liczba zmienia si ka degodnia Poniewa nie wiesz jaki jest rozmiar zakresu w danej chwili musisz utworzykod ktoacutery b dzie dzia a bez u ywania adresu zakresu kopiowanych komoacuterek

Rysunek 141Przyk ad zakre-su ktoacutery mo e

sk ada siz dowolnej

liczby wierszy

Makro przedstawione poni ej ilustruje sposoacuteb kopiowania zakresu komoacuterek z arkuszaArkusz1 do arkusza Arkusz2 (pocz wszy od komoacuterki A1) Makro wykorzystuje w a ciwoCurrentRegion ktoacutera zwraca obiekt Range odpowiadaj cy blokowi komoacuterek otaczaj cychokre lon komoacuterk (w tym przypadku o adresie A1)

Kup książkę Poleć książkę

220 Cz III Podstawy programowania

Sub CopyCurrentRegion() Range(A1)CurrentRegionCopy Sheets(Arkusz2)Select Range(A1)Select ActiveSheetPaste Sheets(Arkusz1)Select ApplicationCutCopyMode = FalseEnd Sub

Zastosowanie w a ciwo ci CurrentRegion jest roacutewnowa ne z przej ciem na kartNARZ DZIA G OacuteWNE i wybraniem polecenia Znajd i zaznaczPrzejd do mdashspecjalnie znajduj cego si w grupie opcji Edytowanie i nast pnie zaznaczeniem opcjiBie cy obszar Aby przekona si jak to dzia a podczas wykonywania tych polecepowiniene u y rejestratora makr Zazwyczaj warto w a ciwo ci CurrentRegionreprezentuje prostok tny blok komoacuterek otoczony przez puste wiersze i kolumny

Oczywi cie mo esz zoptymalizowa kod makra przedstawionego powy ej i niezaznacza obszaru docelowego dla kopiowanych komoacuterek Makro przedstawione poni ejkorzysta z faktu e metoda Copy mo e u ywa argumentu wywo ania reprezentuj cegomiejsce docelowe kopiowanego zakresu

Sub CopyCurrentRegion2() Range(A1)CurrentRegionCopy _ Sheets(Arkusz2)Range(A1)End Sub

Je eli zakres komoacuterek ktoacutery chcesz skopiowa jest tabel (zdefiniowan przy u yciapolecenia WSTAWIANIETabeleTabela) ca e zadanie b dzie jeszcze atwiejsze Ka databela posiada swoj nazw (na przyk ad Tabela1) i automatycznie rozszerza si w miardodawania nowych wierszy

Sub CopyTable() Range(Tabela1)Copy Sheets(Arkusz2)Range(A1)End Sub

Je eli sproacutebujesz wykona procedur przedstawion powy ej przekonasz si e wiersznag oacutewka tabeli nie jest kopiowany poniewa obiekt Tabela1 nie obejmuje tegowiersza Je li chcesz aby wiersz nag oacutewka roacutewnie by kopiowany powiniene zmieniodwo anie do tabeli tak jak to zosta o przedstawione poni ej

Range(Tabela1[All])

Zaznaczanie komoacuterekdo ko ca wiersza lub kolumnyPrawdopodobnie bardzo cz sto u ywasz kombinacji klawiszy takich jak Ctrl+Shift+ czy Ctrl+Shift+ do zaznaczania zakresoacutew sk adaj cych si ze wszystkich komoacuterekod komoacuterki aktywnej a do ko ca kolumny czy wiersza Nie jest wi c chyba zaskoczenieme mo esz napisa makro ktoacutere b dzie zaznacza komoacuterki w podobny sposoacuteb

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 221

Do zaznaczania ca ego bloku komoacuterek mo esz u y w a ciwo ci CurrentRegion Ale copowiniene zrobi je eli chcesz zaznaczy powiedzmy tylko jedn kolumn z tegobloku komoacuterek Na szcz cie VBA pozwala na wykonywanie takich operacji Proceduraktoacuterej kod przedstawiam poni ej zaznacza zakres komoacuterek pocz wszy od bie cejaktywnej komoacuterki w doacute kolumny a do komoacuterki znajduj cej si o jeden wiersz powy ejpierwszej pustej komoacuterki tej kolumny Po zaznaczeniu zakresu mo esz przetwarza gow dowolny sposoacuteb mdash kopiowa komoacuterki przenosi je w inne miejsce arkusza zmieniaformatowanie i tak dalej

Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))SelectEnd Sub

Oczywi cie taki sam obszar mo esz roacutewnie zaznaczy r cznie Aby to zrobi powinienezaznaczy pierwsz komoacuterk nast pnie wcisn i przytrzyma klawisz Shift nacisnklawisz End i wreszcie nacisn klawisz (strza ka w doacute )

W przyk adzie wykorzystuj metod End obiektu ActiveCell ktoacutera zwraca obiekt typuRange Metoda End pobiera jeden argument okre laj cy kierunek w ktoacuterym zostaniewykonane zaznaczenie Argumentami tej metody mo e by dowolna ze sta ychprzedstawionych poni ej

xlUp

xlDown

xlToLeft

xlToRight

Pami taj e zaznaczanie zakresu nie jest potrzebne do jego przetwarzania Makroprzedstawione poni ej zmienia czcionk w komoacuterkach zmiennego zakresu (pojedynczakolumna) na pogrubion bez uprzedniego zaznaczenia zakresu

Sub MakeBold() Range(ActiveCell ActiveCellEnd(xlDown)) _ FontBold = TrueEnd Sub

Zaznaczanie ca ego wiersza lub ca ej kolumnyProcedura przedstawiona poni ej ilustruje sposoacuteb zaznaczania kolumny w ktoacuterej znajdujesi aktywna komoacuterka Makro wykorzystuje w a ciwo EntireColumn ktoacutera zwracaobiekt typu Range reprezentuj cy ca kolumn

Sub SelectColumn() ActiveCellEntireColumnSelectEnd Sub

Jak pewnie si spodziewasz w j zyku VBA dost pna jest roacutewnie w a ciwo EntireRowktoacutera zwraca obiekt typu Range reprezentuj cy ca y wiersz

Kup książkę Poleć książkę

222 Cz III Podstawy programowania

Przenoszenie zakresoacutewZazwyczaj aby przenie zakres komoacuterek zaznaczasz go wycinasz do schowka systemowegoi nast pnie wklejasz w inne miejsce Je eli u yjesz rejestratora makr do zapisania takiejoperacji przekonasz si e wygenerowany zostanie kod podobny do przedstawionegoponi ej

Sub MoveRange() Range(A1C6)Select SelectionCut Range(A10)Select ActiveSheetPasteEnd Sub

Podobnie jak podczas kopiowania komoacuterek takie rozwi zanie nie jest najbardziejefektywnym sposobem przenoszenia zakresu komoacuterek w inne miejsce W praktyce takoperacj mo esz wykona za pomoc procedury sk adaj cej si z jednego wiersza koduco prezentuj poni ej

Sub MoveRange2() Range(A1C6)Cut Range(A10)End Sub

Makro przedstawione powy ej korzysta z faktu e metoda Cut mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe przenoszonego zakresu Zwroacute roacutewnieuwag na fakt e podczas przenoszenia aden zakres komoacuterek nie jest zaznaczanyWska nik aktywnej komoacuterki przez ca y czas pozostaje w tym samym miejscu arkusza

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tliJednym z zada cz sto wykonywanych przez makra jest sprawdzanie poszczegoacutelnychkomoacuterek zakresu i wykonywanie okre lonych operacji na podstawie ich zawarto ci Takiemakra zazwyczaj wykorzystuj p tl For-Next za pomoc ktoacuterej przetwarzane s komoacuterkizakresu

Przyk ad przedstawiony ni ej ilustruje sposoacuteb przechodzenia kolejno przez wszystkiekomoacuterki danego zakresu W naszym przypadku przetwarzany jest aktualnie zaznaczonyzakres komoacuterek Zmienna obiektowa o nazwie Cell reprezentuje aktualnie przetwarzankomoacuterk W p tli For Each-Next znajduje si jedno polecenie ktoacutere sprawdza aktualnieprzetwarzan komoacuterk i zmienia jej czcionk na pogrubion je eli warto przechowywanaw komoacuterce jest dodatnia

Sub ProcessCells() Dim Cell As Range For Each Cell In Selection If CellValue gt 0 Then CellFontBold = True Next CellEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 223

Taka procedura dzia a poprawnie ale co si stanie je eli u ytkownik zaznaczy cakolumn lub ca y wiersz To wcale nie jest takie nieprawdopodobne bo przecie Excelpozwala na wykonywanie operacji na ca ych wierszach i kolumnach W takiej sytuacjiwykonanie makra mo e zaj naprawd du o czasu poniewa nasza p tla przetwarzaka d komoacuterk zaznaczonego zakresu a cznie z pustymi w jednej kolumnie komoacuterekjest a 1 048 576hellip Aby zatem nasze makro by o bardziej wydajne musimy je takzmodyfikowa eby przetwarzane by y tylko i wy cznie komoacuterki ktoacutere nie s puste

Procedura przedstawiona poni ej przetwarza wy cznie niepuste komoacuterki zaznaczonegozakresu dzi ki zastosowaniu metody SpecialCells (wi cej szczegoacute owych informacji natemat tej metody znajdziesz w pomocy systemowej VBA) Nasza procedura za pomocpolecenia Set tworzy dwa obiekty typu Range pierwszy z nich to podzakres komoacuterekzakresu wej ciowego zawieraj cy wy cznie komoacuterki z warto ciami sta ymi (na przyk adteksty warto ci liczbowe litera y i tak dalej) a drugi sk ada si z komoacuterek zawieraj cychformu y Procedura przetwarza tylko komoacuterki nale ce do tych podzakresoacutew co w efekciepowoduje pomini cie przetwarzania wszystkich pozosta ych pustych komoacuterek zakresuwej ciowego Sprytne prawda

Sub SkipBlanks() Dim ConstantCells As Range Dim FormulaCells As Range Dim cell As Range Ignoruj b dy On Error Resume Next

Przetwarzaj komoacuterki zawieraj ce warto ci sta e Set ConstantCells = Selection _ SpecialCells(xlConstants) For Each cell In ConstantCells If cellValue gt 0 Then cellFontBold = True End If Next cell

Przetwarzaj komoacuterki zawieraj ce formu y Set FormulaCells = Selection _ SpecialCells(xlFormulas) For Each cell In FormulaCells If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Procedura SkipBlanks dzia a tak samo szybko niezale nie od tego jaki zakres komoacuterekzaznaczy e Mo esz na przyk ad zaznaczy zakres sk adaj cy si z kilku komoacuterek zaznaczywszystkie kolumny w danym zakresie albo wszystkie wiersze w danym zakresie albonawet ca y arkusz Jak wida jest to ogromne usprawnienie w stosunku do oryginalnejprocedury ProcessCells ktoacuter omoacutewi em nieco wcze niej

Zwroacute uwag e w kodzie procedury u yli my polecenia

On Error Resume Next

Kup książkę Poleć książkę

224 Cz III Podstawy programowania

Polecenie to powoduje e Excel po prostu ignoruje b dy (inaczej moacutewi c je eli proacutebawykonania danego polecenia ko czy si b dem Excel ignoruje ten b d i po prostuprzechodzi do kolejnego polecenia wi cej szczegoacute owych informacji na temat obs ugib doacutew znajdziesz w rozdziale 12) W naszym przypadku zastosowanie polecenia OnError jest konieczne poniewa metoda SpecialCells generuje b d gdy adna komoacuterkanie spe nia podanego kryterium

Zastosowanie metody SpecialCells jest roacutewnowa ne z przej ciem na kart NARZ DZIAG OacuteWNE wybraniem polecenia Znajd i zaznaczPrzejd do mdash specjalnie znajduj cegosi w grupie opcji Edytowanie i nast pnie zaznaczeniem opcji Sta e lub Formu y Abyprzekona si jak to dzia a podczas wykonywania tych polece powiniene u yrejestratora makr i zaznacza roacute ne opcje

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tli(cz II)A teraz ci g dalszy naszej opowie ci W tym punkcie przedstawi inny sposoacuteb efektywnegoprzetwarzania komoacuterek znajduj cych si w zaznaczonym zakresie Tym razem procedurab dzie korzysta a z w a ciwo ci UsedRange ktoacutera zwraca obiekt typu Range reprezentuj cyu ywany zakres arkusza Procedura korzysta roacutewnie z metody Intersect ktoacutera zwracaobiekt typu Range zawieraj cy komoacuterki b d ce cz ci wspoacuteln dwoacutech zakresoacutew

Poni ej przedstawiam zmodyfikowan wersj procedury SkipBlanks omawianejw poprzednim punkcie

Sub SkipBlanks2() Dim WorkRange As Range Dim cell As Range Set WorkRange = Intersect(Selection ActiveSheetUsedRange) For Each cell In WorkRange If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Zmienna obiektowa WorkRange zawiera komoacuterki ktoacutere s cz ci wspoacuteln zakresuzaznaczonego przez u ytkownika oraz zakresu u ywanych komoacuterek arkusza Je lizatem u ytkownik zaznaczy ca kolumn zmienna WorkRange b dzie zawiera a tylkokomoacuterki ktoacutere znajduj si jednocze nie w zaznaczonej kolumnie i w u ywanymzakresie arkusza Jak wida jest to bardzo szybka i efektywna metoda pozwalaj ca naunikni cie przetwarzania komoacuterek znajduj cych si poza zakresem u ywanychkomoacuterek arkusza

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 225

Wprowadzanie warto ci do komoacuterkiNa rysunku 142 pokazuj w jaki sposoacuteb mo esz u y funkcji InputBox j zyka VBA dopobierania od u ytkownika warto ci ktoacutera nast pnie mo e zosta zapisana w wybranejkomoacuterce W procedurze przedstawionej poni ej demonstruj jak poprosi u ytkownikao podanie warto ci i wstawi j do komoacuterki A1 aktywnego arkusza (i to wszystkoza pomoc jednego polecenia)

Sub GetValue() Range(A1)Value = InputBox( _ Wprowad warto dla komoacuterki A1)End Sub

Rysunek 142Zastosowaniefunkcji Input-

Box do pobie-rania warto ci

od u ytkownika

Przedstawiona procedura mo e jednak sprawia pewien problem Je eli u ytkowniknaci nie w oknie dialogowym przycisk Cancel procedura usunie wszelkie dane juznajduj ce si w komoacuterce A1 a takie zachowanie nie jest zbyt dobr praktyk programistyczn Naci ni cie przycisku Cancel powinno po prostu usuwa z ekranu okno dialogowe bezwykonywania adnych dodatkowych operacji

Makro przedstawione poni ej ilustruje znacznie lepsze podej cie do takiego zagadnieniai do zapami tania warto ci wprowadzonej przez u ytkownika wykorzystuje zmienn xJe eli zmienna zawiera co innego ni pusty ci g znakoacutew (czyli kiedy u ytkownikwprowadzi jak warto ) warto zmiennej jest zapisywana w komoacuterce A1 W przeciwnymprzypadku procedura ko czy dzia anie nie wykonuj c adnych dodatkowych operacji

Sub GetValue2() Dim x as Variant x = InputBox(Wprowad warto dla komoacuterki A1) If x ltgt Then Range(A1)Value = xEnd Sub

Zmienna x zosta a zdefiniowana jako zmienna typu Variant poniewa jej warto cimo e by warto albo pusty ci g znakoacutew (je eli u ytkownik naci nie przycisk Cancel)

Kup książkę Poleć książkę

226 Cz III Podstawy programowania

Okre lanie typu zaznaczonego zakresuJe eli zadaniem Twojego makra b dzie przetwarzanie zaznaczonego zakresu takiemakro musi mie zdolno sprawdzenia czy przed jego wywo aniem u ytkownikrzeczywi cie zaznaczy zakres komoacuterek W przeciwnym razie je eli przed wywo aniemmakra zaznaczony zostanie inny obiekt (na przyk ad wykres lub kszta t) proacuteba wykonaniamakra najprawdopodobniej zako czy si niepowodzeniem Polecenie przedstawioneponi ej wykorzystuje funkcj TypeName j zyka VBA do wy wietlania na ekranie typuaktualnie zaznaczonego obiektu

MsgBox TypeName(Selection)

Je eli aktualnie zaznaczony jest obiekt typu Range wykonanie takiego polecenia spowodujewy wietlenie s owa Range Je li Twoje makro dzia a tylko z zakresami komoacuterek mo eszu y polecenia If do sprawdzenia czy aktualnie zaznaczony obiekt to zakres (obiekttypu Range) Procedura przedstawiona poni ej sprawdza typ zaznaczonego obiektui je eli nie jest to obiekt typu Range na ekranie wy wietlany jest odpowiedni komunikati procedura ko czy dzia anie

Sub CheckSelection() If TypeName(Selection) ltgt Range Then MsgBox Zaznacz zakres komoacuterek Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Identyfikowanie zaznacze wielokrotnychJak pami tasz Excel pozwala na jednoczesne zaznaczanie wielu obiektoacutew Aby to zrobi powiniene podczas zaznaczania obiektoacutew lub zakresoacutew trzyma wci ni ty klawisz CtrlZaznaczenia wielokrotne mog by przyczyn problemoacutew z wykonywaniem niektoacuterychmakr Przyk adowo nie mo esz skopiowa zakresu komoacuterek ktoacutery zosta utworzonypoprzez wiele zaznacze nieci g ych zakresoacutew komoacuterek Je eli sproacutebujesz wykonatak operacj Excel wy wietli na ekranie komunikat przedstawiony na rysunku 143

Makro przedstawione ni ej pokazuje w jaki sposoacuteb mo esz sprawdzi czy u ytkownikdokona zaznaczenia wielokrotnego i na tej podstawie wykona odpowiedni operacj

Sub MultipleSelection() If SelectionAreasCount gt 1 Then MsgBox Zaznaczenia wielokrotne nie s dozwolone Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Przedstawiona procedura wykorzystuje metod Areas ktoacutera zwraca kolekcj wszystkichzakresoacutew w danym zaznaczeniu W a ciwo Count zwraca liczb obiektoacutew tej kolekcji

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 227

Rysunek 143Excel nie lubi

kiedy proacutebujeszkopiowa nie-ci g e zakresy

komoacuterek

Zmiana ustawie ExcelaChyba najbardziej u ytecznymi makrami s proste procedury ktoacutere zmieniaj jednolub kilka ustawie Excela Je li na przyk ad dojdziesz do wniosku e bardzo cz stoprzywo ujesz na ekran okno opcji programu Excel i zmieniasz jakie ustawienie takaoperacja z pewno ci b dzie bardzo dobrym kandydatem do napisania makraoszcz dzaj cego Twoacutej czas i u atwiaj cego zmian takiego ustawienia

W tym podrozdziale zaprezentuj dwa przyk ady procedur ktoacutere pokazuj w jakisposoacuteb mo na zmienia ustawienia Excela Ogoacutelne zasady dzia ania tych procedurmo esz z powodzeniem zastosowa do napisania w asnych makr zmieniaj cych inneustawienia Excela

Zmiana ustawie logicznych(opcje typu Boolean)Podobnie jak wy cznik wiat a opcje logiczne (typu Boolean) mog by albo w czonealbo wy czone Mo esz na przyk ad utworzy makro ktoacutere b dzie w cza o lub wy cza owy wietlanie podzia u arkusza na strony Kiedy wydrukujesz arkusz (lub skorzystaszz trybu podgl du wydruku) Excel wy wietla na arkuszu przerywane linie reprezentuj cemiejsca podzia u arkusza na strony wydruku Niektoacuterych u ytkownikoacutew (w czniez autorem tej ksi ki) takie zachowanie Excela irytuje Niestety jedynym sposobemwy czenia wy wietlania podzia u arkusza na strony jest otwarcie okna dialogowego Opcjeprogramu Excel przej cie na kart Zaawansowane a nast pnie przewijanie zawarto ci tejkarty a do odszukania opcji Poka podzia y stron Je eli podczas wy czania tej opcjikorzysta e z rejestratora makr przekonasz si e Excel generuje poni szy kod

Kup książkę Poleć książkę

228 Cz III Podstawy programowania

ActiveSheetDisplayPageBreaks = False

Z drugiej strony je eli podczas rejestrowania makra podzia y stron nie s widoczneExcel generuje taki kod

ActiveSheetDisplayPageBreaks = True

Takie informacje mog doprowadzi do wniosku e b dziesz musia napisa a dwamakra mdash jedno do w czania podgl du podzia u stron a drugie do jego wy czaniaNa szcz cie to nieprawda Procedura przedstawiona poni ej wykorzystuje operatorNot do zmiany warto ci logicznej True na False i odwrotnie Wykonanie proceduryTogglePageBreaks to prosty sposoacuteb na cykliczne w czanie i wy czanie podgl du podzia ustron arkusza

Sub TogglePageBreaks() On Error Resume Next ActiveSheetDisplayPageBreaks = Not _ ActiveSheetDisplayPageBreaksEnd Sub

Pierwsze polecenie informuje Excel e powinien ignorowa ewentualne b dy Przyk adowopodzia y stron nie s wy wietlane na arkuszach wykresoacutew Kiedy wprowadzisz takiepolecenie i sproacutebujesz wykona t procedur dla arkusza wykresu na ekranie nie pojawisi komunikat o b dzie

Techniki u ytej w procedurze TogglePageBreaks mo esz u ywa do zmiany dowolnychopcji logicznych (czyli takich ktoacuterych warto ciami s True albo False)

Zmiana innych opcji (typu non-Boolean)Do zmiany opcji ktoacutere nie s typu logicznego mo esz u ywa konstrukcji Select CaseW przyk adzie przedstawionym poni ej zmieniam tryb przeliczania skoroszytu z r cznegona automatyczny i odwrotnie i nakazuj wy wietlenie na ekranie komunikatu opisuj cegoaktualny tryb przeliczania arkusza

Sub ToggleCalcMode() Select Case ApplicationCalculation Case xlManual ApplicationCalculation = xlCalculationAutomatic MsgBox Automatyczne przeliczanie skoroszytu Case xlAutomatic ApplicationCalculation = xlCalculationManual MsgBox R czne przeliczanie skoroszytu End SelectEnd Sub

Techniki u ytej w procedurze ToggleCalcMode mo esz u ywa do zmiany dowolnychopcji ktoacutere nie posiadaj warto ci logicznych

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 5: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

8 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Sta e 117Sta e predefiniowane 118

a cuchy znakoacutew 118Daty i godziny 119

Instrukcje przypisania 120Przyk ady instrukcji przypisania 120O znaku roacutewno ci 121Proste operatory 121

Praca z tablicami 123Deklarowanie tablic 123Tablice wielowymiarowe 124Tablice dynamiczne 124

Stosowanie etykiet 125

Rozdzia 8 Praca z obiektami Range 127Szybka powtoacuterka 127Inne sposoby odwo ywania si do zakresu 129

W a ciwo Cells 129W a ciwo Offset 130

Wybrane w a ciwo ci obiektu Range 131W a ciwo Value 131W a ciwo Text 132W a ciwo Count 133W a ciwo ci Column i Row 133W a ciwo Address 133W a ciwo HasFormula 134W a ciwo Font 134W a ciwo Interior 136W a ciwo ci Formula i FormulaLocal 136W a ciwo NumberFormat 137

Wybrane metody obiektu Range 137Metoda Select 137Metody Copy i Paste 138Metoda Clear 138Metoda Delete 139

Rozdzia 9 Praca z funkcjami VBA i arkusza kalkulacyjnego 141Co to jest funkcja 141Stosowanie wbudowanych funkcji VBA 142

Przyk ady funkcji VBA 142Funkcje VBA ktoacutere robi co wi cej ni tylko zwracanie warto ci 144Odkrywanie funkcji VBA 144

U ycie funkcji arkusza kalkulacyjnego w VBA 145Przyk ady funkcji arkusza kalkulacyjnego 148Wprowadzanie funkcji arkusza kalkulacyjnego 150Wi cej o u yciu funkcji arkusza kalkulacyjnego 151

U ycie w asnych funkcji 151

Kup książkę Poleć książkę

Spis tre ci 9

Rozdzia 10 Sterowanie przep ywem i podejmowanie decyzji 153Zabierz si za przep yw kolego 153Instrukcja GoTo 154Decyzje decyzje 155

Struktura If-Then 155Struktura Select Case 159

Entliczek p tliczek mdash czyli jak u ywa p tli 162P tle For-Next 162P tla Do-While 167P tla Do-Until 168

U ycie p tli For Each-Next z kolekcjami 168

Rozdzia 11 Automatyczne procedury i zdarzenia 171Przygotowanie do wielkiego zdarzenia 171

Czy zdarzenia s przydatne 173Programowanie procedur obs ugi zdarze 173

Gdzie jest umieszczony kod VBA 174Tworzenie procedury obs ugi zdarzenia 175Przyk ady wprowadzaj ce 176

Zdarzenie Open dla skoroszytu 176Zdarzenie BeforeClose dla skoroszytu 179Zdarzenie BeforeSave dla skoroszytu 179

Przyk ady zdarze aktywacyjnych 180Zdarzenia aktywacji i dezaktywacji arkusza 180Zdarzenia aktywacji i dezaktywacji skoroszytu 181Zdarzenia aktywacji skoroszytu 182

Inne zdarzenia dotycz ce arkusza 183Zdarzenie BeforeDoubleClick 183Zdarzenie BeforeRightClick 184Zdarzenie Change 184

Zdarzenia niezwi zane z obiektami 186Zdarzenie OnTime 186Zdarzenia naci ni cia klawisza 188

Rozdzia 12 Techniki obs ugi b doacutew 191Rodzaje b doacutew 191B dny przyk ad 192

To makro nie jest idealne 192Makro wci nie jest idealne 193Czy teraz makro jest idealne 194Rezygnacja z idea u 195

Inny sposoacuteb obs ugi b doacutew 195Korekta procedury EnterSquareRoot 195O instrukcji On Error 196

Obs uga b doacutew mdash szczegoacute owe informacje 197Wznawianie wykonywania kodu po wyst pieniu b du 197Obs uga b doacutew w pigu ce 199

Kup książkę Poleć książkę

10 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kiedy ignorowa b dy 199Rozpoznawanie okre lonych b doacutew 200

Zamierzony b d 201

Rozdzia 13 Dezynsekcja kodu czyli jak walczy z pluskwami 203Rodzaje pluskiew 203Podstawy entomologii czyli jak zidentyfikowa pluskw 205Metody i techniki walki z pluskwami 205

Przegl danie kodu VBA 206Umieszczanie funkcji MsgBox w kluczowych miejscach kodu 206Umieszczanie polecenia DebugPrint w kluczowych miejscach kodu 208Korzystanie z wbudowanych narz dzi Excela wspomagaj cych odpluskwianie kodu VBA 209

Kilka s oacutew o debuggerze 209Ustawianie punktoacutew przerwa w kodzie programu 209Zastosowanie okna Watch 212Zastosowanie okna Locals 213

Jak zredukowa liczb b doacutew w kodzie programu 215

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 217Przetwarzanie zakresoacutew komoacuterek 217

Kopiowanie zakresoacutew 218Kopiowanie zakresu o zmiennej wielko ci 219Zaznaczanie komoacuterek do ko ca wiersza lub kolumny 220Zaznaczanie ca ego wiersza lub ca ej kolumny 221Przenoszenie zakresoacutew 222Wydajne przetwarzanie komoacuterek zaznaczonego zakresu przy u yciu p tli 222Wydajne przetwarzanie komoacuterek zaznaczonego zakresu przy u yciu p tli (cz II) 224Wprowadzanie warto ci do komoacuterki 225Okre lanie typu zaznaczonego zakresu 226Identyfikowanie zaznacze wielokrotnych 226

Zmiana ustawie Excela 227Zmiana ustawie logicznych (opcje typu Boolean) 227Zmiana innych opcji (typu non-Boolean) 228

Praca z wykresami 229Metoda AddChart kontra metoda AddChart2 230Modyfikowanie typu wykresu 231Przechodzenie w p tli przez elementy kolekcji ChartObjects 232Modyfikowanie w a ciwo ci wykresu 232Zmiana formatowania wykresoacutew 233

Jak przyspieszy dzia anie kodu VBA 234Wy czanie aktualizacji ekranu 234Wy czenie automatycznego przeliczania skoroszytu 235Wy czanie irytuj cych ostrze e 236Upraszczanie odwo a do obiektoacutew 236Deklarowanie typoacutew zmiennych 237Zastosowanie struktury With-End With 238

Kup książkę Poleć książkę

Spis tre ci 11

Cz IV Komunikacja z u ytkownikiem 239Rozdzia 15 Proste okna dialogowe 241

Co zamiast formularzy UserForm 241Funkcja MsgBox 242

Wy wietlanie prostych okien dialogowych 243Pobieranie odpowiedzi z okna dialogowego 243Dostosowywanie wygl du okien dialogowych do w asnych potrzeb 244

Funkcja InputBox 247Sk adnia funkcji InputBox 248Przyk ad zastosowania funkcji InputBox 248Inny rodzaj okna dialogowego InputBox 249

Metoda GetOpenFilename 250Sk adnia metody GetOpenFilename 251Przyk ad zastosowania metody GetOpenFilename 251

Metoda GetSaveAsFilename 253Pobieranie nazwy folderu 254Wy wietlanie wbudowanych okien dialogowych programu Excel 254

Rozdzia 16 Wprowadzenie do formularzy UserForm 257Kiedy u ywa formularzy UserForm 257Tworzenie formularzy UserForm mdash wprowadzenie 258Praca z formularzami UserForm 259

Wstawianie nowego formularza UserForm 259Umieszczanie formantoacutew na formularzu UserForm 260Modyfikacja w a ciwo ci formantoacutew formularza UserForm 261Przegl danie okna Code formularza UserForm 263Wy wietlanie formularzy UserForm 263Pobieranie i wykorzystywanie informacji z formularzy UserForm 264

Przyk ad tworzenia formularza UserForm 264Tworzenie formularza UserForm 265Dodawanie przyciskoacutew polece (formanty CommandButton) 265Dodawanie przyciskoacutew opcji (formanty OptionButton) 267Dodawanie procedur obs ugi zdarze 268Tworzenie makra ktoacutere wy wietla formularz na ekranie 270Udost pnianie makra u ytkownikowi 271Testowanie dzia ania makra 272

Rozdzia 17 Praca z formantami formularza UserForm 275Rozpoczynamy prac z formantami formularzy UserForm 275

Dodawanie formantoacutew 276Wprowadzenie do w a ciwo ci formantoacutew 277

Formanty okien dialogowych mdash szczegoacute y 278Formant CheckBox (pole wyboru) 279Formant ComboBox (pole kombi) 280Formant CommandButton (przycisk polecenia) 281Formant Frame (pole grupy) 281Formant Image (pole obrazu) 282

Kup książkę Poleć książkę

12 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Formant Label (pole etykiety) 283Formant ListBox (pole listy) 283Formant MultiPage 284Formant OptionButton (przycisk opcji) 285Formant RefEdit (pole zakresu) 286Formant ScrollBar (pasek przewijania) 286Formant SpinButton (pokr t o) 287Formant TabStrip (pole karty) 288Formant TextBox (pole tekstowe) 288Formant ToggleButton (przycisk prze cznika) 289

Praca z formantami w oknach dialogowych 289Zmiana rozmiaroacutew i przenoszenie formantoacutew w inne miejsce 289Rozmieszczanie i wyroacutewnywanie po o enia formantoacutew w oknie dialogowym 290Obs uga u ytkownikoacutew preferuj cych korzystanie z klawiatury 291Testowanie formularzy UserForm 293

Estetyka okien dialogowych 293

Rozdzia 18 Techniki pracy z formularzami UserForm 295Zastosowanie w asnych okien dialogowych 295Przyk adowy formularz UserForm 296

Tworzenie okna dialogowego 296Tworzenie kodu procedury wy wietlaj cej okno dialogowe 298Udost pnianie makra u ytkownikowi 299Testowanie okna dialogowego 299Dodawanie procedur obs ugi zdarze 300Sprawdzanie poprawno ci danych 302Teraz okno dialogowe dzia a tak jak powinno 302

Wi cej przyk adoacutew formularzy UserForm 302Zastosowanie formantoacutew ListBox 303Zaznaczanie zakresoacutew 307Praca z wieloma grupami formantoacutew OptionButton 309Zastosowanie formantoacutew SpinButton oraz TextBox 310Wykorzystywanie formularza UserForm jako wska nika post pu zadania 312Tworzenie niemodalnych okien dialogowych z wieloma kartami 315Wy wietlanie wykresoacutew na formularzach UserForm 317

Lista kontrolna tworzenia i testowania okien dialogowych 318

Rozdzia 19 Udost pnianie makr z poziomu interfejsu u ytkownika 321Dostosowywanie Wst ki 321

R czne dopasowywanie Wst ki do w asnych potrzeb 322Dodawanie do Wst ki przycisku w asnego makra 324Dostosowywanie Wst ki za pomoc kodu XML 324

Dostosowywanie menu podr cznego 329Rodzaje obiektoacutew CommandBar 329Wy wietlanie wszystkich menu podr cznych 329Odwo ania do elementoacutew kolekcji CommandBars 330Odwo ania do formantoacutew obiektu CommandBar 331W a ciwo ci formantoacutew obiektu CommandBar 332

Kup książkę Poleć książkę

Spis tre ci 13

Przyk ady zastosowania VBA do modyfikacji menu podr cznego 334Resetowanie wszystkich wbudowanych menu podr cznych 334Dodawanie nowego elementu do menu podr cznego Cell 335Wy czanie menu podr cznego 337

Tworzenie w asnych paskoacutew narz dzi 338

Cz V Od teorii do praktyki 341Rozdzia 20 Jak tworzy w asne funkcje arkuszowe i jak prze y aby o tym opowiedzie 343

Dlaczego tworzymy w asne funkcje 343Podstawowe informacje o funkcjach VBA 344Tworzenie funkcji 345Praca z argumentami funkcji 345Przyk ady funkcji 346

Funkcje bezargumentowe 346Funkcje jednoargumentowe 346Funkcje z dwoma argumentami 348Funkcje pobieraj ce zakres jako argument 349Funkcje z argumentami opcjonalnymi 351

Funkcje opakowuj ce 353Funkcja NumberFormat 353Funkcja ExtractElement 354Funkcja SayIt 354Funkcja IsLike 355

Funkcje zwracaj ce tablice 355Zwracanie tablicy zawieraj cej nazwy miesi cy 355Zwracanie posortowanej listy 356

Okno dialogowe Wstawianie funkcji 358Wy wietlanie opisoacutew funkcji 358Opisy argumentoacutew 360

Rozdzia 21 Tworzenie dodatkoacutew 361No dobrzehellip czym zatem s dodatki 361Po co tworzy si dodatki 362Praca z dodatkami 363Podstawy tworzenia dodatkoacutew 364Tworzymy przyk adowy dodatek 365

Konfiguracja skoroszytu 365Testowanie skoroszytu 367Tworzenie opisoacutew dodatku 368Ochrona kodu VBA 369Tworzenie dodatku 369Otwieranie dodatku 369Dystrybucja dodatkoacutew 370Modyfikowanie dodatkoacutew 371

Kup książkę Poleć książkę

14 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Cz VI Dekalogi 373Rozdzia 22 Dziesi pyta na temat VBA (wraz z odpowiedziami) 375

Rozdzia 23 (Prawie) dziesi roacutede informacji na temat Excela 379System pomocy j zyka VBA 379Wsparcie techniczne firmy Microsoft 380Inne strony internetowe 380Blogi po wi cone Excelowi 380Google 381Bing 381Lokalne grupy u ytkownikoacutew 381Moje inne ksi ki 381

Rozdzia 24 Dziesi rzeczy ktoacutere powiniene robi w j zyku VBAi ktoacuterych nie powiniene robi 383

Zawsze deklaruj wszystkie zmienne 383Nigdy nie powiniene myli has a chroni cego kod VBA z bezpiecze stwem aplikacji 384Zawsze staraj si wyczy ci i zoptymalizowa kod aplikacji 384Nigdy nie umieszczaj wszystkiego w jednej procedurze 385Zawsze powiniene rozwa y zastosowanie innego oprogramowania 385Nigdy nie zak adaj e ka dy u ytkownik zezwala na uruchamianie makr 386Zawsze staraj si eksperymentowa z nowymi rozwi zaniami 386Nigdy z goacutery nie zak adaj e Twoacutej kod b dzie poprawnie dzia a z innymi wersjami Excela 386Zawsze pami taj o u ytkownikach Twojej aplikacji 387Nigdy nie zapominaj o tworzeniu kopii zapasowych 387

Skorowidz 389

Kup książkę Poleć książkę

Rozdzia 14

Przyk ady i technikiprogramowania w j zyku VBA

W tym rozdziale poznasz szereg przyk adoacutew technik programowania w j zyku VBA dowiesz si jak mo esz przyspieszy dzia anie kodu VBA w Twojej aplikacji

ierz e nauka programowania jest znacznie szybsza i zdecydowanie bardziejefektywna kiedy pracujemy na konkretnych przyk adach Dobrze opracowany

przyk ad o wiele lepiej obja nia zagadnienie ni najbardziej rozbudowany i szczegoacute owyale teoretyczny opis Poniewa czytasz t ksi k prawdopodobnie zgadzasz si ze mnw tej materii W tym rozdziale znajdziesz szereg przyk adoacutew demonstruj cych u ytecznepraktyczne techniki programowania w j zyku VBA

Przyk ady omawiane w tym rozdziale zosta y podzielone na kilka kategorii Oto one

Praca z zakresami

Modyfikacja ustawie Excela

Praca z wykresami

Przyspieszanie i optymalizacja dzia ania kodu VBA

Niektoacutere z prezentowanych przyk adoacutew b dziesz moacuteg od razu wykorzysta w swoichaplikacjach jednak w wi kszo ci przypadkoacutew b d wymaga y pewnego dostosowaniado Twoich aplikacji

Przetwarzanie zakresoacutew komoacuterekWi kszo zada z jakimi b dziesz si styka programuj c w j zyku VBA b dzie zapewnewymaga a mniejszego b d wi kszego przetwarzania zakresoacutew komoacuterek (aby od wie ysobie wiadomo ci na temat obiektu Range powiniene zajrze do rozdzia u 8) Kiedypracujesz z obiektami Range powiniene pami ta o nast puj cych sprawach

Kod VBA nie musi zaznacza danego zakresu aby go przetwarza

Je eli kod VBA zaznacza wybrany zakres przechowuj cy go skoroszyt musi byaktywny

W

Kup książkę Poleć książkę

218 Cz III Podstawy programowania

Rejestrator makr nie zawsze b dzie w stanie wygenerowa optymalny kod VBABardzo cz sto jednak mo esz za jego pomoc utworzy bazowe makro i potemodpowiednio zmodyfikowa kod tak aby sta si bardziej efektywny

Zazwyczaj bardzo dobrym rozwi zaniem jest nadawanie nazw zakresom komoacuterekwykorzystywanym w kodzie VBA Przyk adowo polecenie Range(Total)jestznacznie lepszym rozwi zaniem ni Range(D45) Je li w tym drugim przypadkupoacute niej wstawisz dodatkowy wiersz powy ej wiersza 45 to eby wszystko dzia a opoprawnie b dziesz musia zmodyfikowa makro tak aby korzysta o z nowegopoprawnego adresu komoacuterki a ta po wykonaniu takiej operacji b dzie mia a innyadres (D46) Aby nada nazw wybranemu zakresowi komoacuterek powiniene przejna kart FORMU Y i wybra polecenie Definiuj nazw znajduj ce si w grupiepolece Nazwy zdefiniowane

Kiedy tworzysz makro ktoacutere b dzie przetwarza o zakres komoacuterek zaznaczonyprzez u ytkownika pami taj e u ytkownik mo e zaznaczy kilka ca ych kolumnczy wierszy W wi kszo ci przypadkoacutew z pewno ci nie b dziesz chcia aby makrow p tli przechodzi o w takiej sytuacji przez wszystkie zaznaczone komoacuterki (w czniez pustymi) co mog oby zaj bardzo wiele czasu Dobre makro powinno odszukai przetwarza tylko komoacuterki ktoacutere nie s puste

Excel pozwala na jednoczesne zaznaczanie wielu zakresoacutew komoacuterek Aby to zrobi powiniene zaznaczy pierwszy zakres komoacuterek potem wcisn i przytrzymaklawisz Ctrl i zaznacza kolejne zakresy komoacuterek przy u yciu myszy Kod Twojejaplikacji powinien by przygotowany na takie sytuacje i podejmowa odpowiednieakcje

Skoroszyty z wybranymi przyk adami omawianymi w tym rozdziale znajdziesz na stronieinternetowej naszej ksi ki

Je eli chcesz samodzielnie wpisywa kod omawianych przyk adoacutew przejd do edytoraVBE naciskaj c kombinacj klawiszy lewyAlt+F11 a nast pnie wstaw nowy modu VBAi wpisz kod prezentowanych procedur Upewnij si e Twoacutej skoroszyt jest poprawnieskonfigurowany Je eli na przyk ad kod danego przyk adu odwo uje si do arkuszyo nazwach Arkusz1 i Arkusz2 upewnij si e takie arkusze istniej w Twoim skoroszycie

Kopiowanie zakresoacutewKopiowanie zakresoacutew komoacuterek mo e mia o pretendowa do miana jednej z najcz ciejwykonywanych operacji w Excelu Kiedy w czysz rejestrator makr i skopiujesz zakreskomoacuterek o adresie A1A5 do zakresu B1B5 otrzymasz nast puj ce makro

Sub CopyRange() Range(A1A5)Select SelectionCopy Range(B1)Select ActiveSheetPaste ApplicationCutCopyMode = FalseEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 219

Zwroacute uwag na ostatnie polecenie Zosta o ono wygenerowane przez naci ni cieklawisza Esc po skopiowaniu zakresu komoacuterek co spowodowa o usuni cie przerywanejlinii reprezentuj cej na arkuszu obramowanie kopiowanego zakresu

Przedstawione makro dzia a poprawnie ale zakresy komoacuterek mo na kopiowa w znaczniebardziej efektywny sposoacuteb Identyczny rezultat mo esz osi gn za pomoc proceduryktoacutera sk ada si z tylko jednego wiersza polecenia i nie zaznacza adnych komoacuterek(dzi ki czemu nie wymaga ustawiania w a ciwo ci CutCopyMode na warto False)

Sub CopyRange2() Range(A1A5)Copy Range(B1)End Sub

Procedura przedstawiona powy ej korzysta z tego e metoda Copy mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe kopiowanego zakresu Informacje o tymznalaz em w pomocy systemowej VBA Powy szy przyk ad doskonale roacutewnie ilustrujefakt e rejestrator makr nie zawsze generuje najbardziej efektywny kod

Kopiowanie zakresu o zmiennej wielko ciW wielu przypadkach konieczne jest skopiowanie zakresu komoacuterek dla ktoacuterego dok adnaliczba wierszy i kolumn okre laj cych jego wielko nie jest z goacutery znana Przyk adowomo esz dysponowa skoroszytem ledz cym tygodniow sprzeda w ktoacuterym liczba wierszyzmienia si ka dego tygodnia po wprowadzeniu nowych danych

Na rysunku 141 przedstawiam przyk ad cz sto spotykanego typu arkusza Znajduj cysi w nim zakres komoacuterek sk ada si z kilku wierszy ktoacuterych liczba zmienia si ka degodnia Poniewa nie wiesz jaki jest rozmiar zakresu w danej chwili musisz utworzykod ktoacutery b dzie dzia a bez u ywania adresu zakresu kopiowanych komoacuterek

Rysunek 141Przyk ad zakre-su ktoacutery mo e

sk ada siz dowolnej

liczby wierszy

Makro przedstawione poni ej ilustruje sposoacuteb kopiowania zakresu komoacuterek z arkuszaArkusz1 do arkusza Arkusz2 (pocz wszy od komoacuterki A1) Makro wykorzystuje w a ciwoCurrentRegion ktoacutera zwraca obiekt Range odpowiadaj cy blokowi komoacuterek otaczaj cychokre lon komoacuterk (w tym przypadku o adresie A1)

Kup książkę Poleć książkę

220 Cz III Podstawy programowania

Sub CopyCurrentRegion() Range(A1)CurrentRegionCopy Sheets(Arkusz2)Select Range(A1)Select ActiveSheetPaste Sheets(Arkusz1)Select ApplicationCutCopyMode = FalseEnd Sub

Zastosowanie w a ciwo ci CurrentRegion jest roacutewnowa ne z przej ciem na kartNARZ DZIA G OacuteWNE i wybraniem polecenia Znajd i zaznaczPrzejd do mdashspecjalnie znajduj cego si w grupie opcji Edytowanie i nast pnie zaznaczeniem opcjiBie cy obszar Aby przekona si jak to dzia a podczas wykonywania tych polecepowiniene u y rejestratora makr Zazwyczaj warto w a ciwo ci CurrentRegionreprezentuje prostok tny blok komoacuterek otoczony przez puste wiersze i kolumny

Oczywi cie mo esz zoptymalizowa kod makra przedstawionego powy ej i niezaznacza obszaru docelowego dla kopiowanych komoacuterek Makro przedstawione poni ejkorzysta z faktu e metoda Copy mo e u ywa argumentu wywo ania reprezentuj cegomiejsce docelowe kopiowanego zakresu

Sub CopyCurrentRegion2() Range(A1)CurrentRegionCopy _ Sheets(Arkusz2)Range(A1)End Sub

Je eli zakres komoacuterek ktoacutery chcesz skopiowa jest tabel (zdefiniowan przy u yciapolecenia WSTAWIANIETabeleTabela) ca e zadanie b dzie jeszcze atwiejsze Ka databela posiada swoj nazw (na przyk ad Tabela1) i automatycznie rozszerza si w miardodawania nowych wierszy

Sub CopyTable() Range(Tabela1)Copy Sheets(Arkusz2)Range(A1)End Sub

Je eli sproacutebujesz wykona procedur przedstawion powy ej przekonasz si e wiersznag oacutewka tabeli nie jest kopiowany poniewa obiekt Tabela1 nie obejmuje tegowiersza Je li chcesz aby wiersz nag oacutewka roacutewnie by kopiowany powiniene zmieniodwo anie do tabeli tak jak to zosta o przedstawione poni ej

Range(Tabela1[All])

Zaznaczanie komoacuterekdo ko ca wiersza lub kolumnyPrawdopodobnie bardzo cz sto u ywasz kombinacji klawiszy takich jak Ctrl+Shift+ czy Ctrl+Shift+ do zaznaczania zakresoacutew sk adaj cych si ze wszystkich komoacuterekod komoacuterki aktywnej a do ko ca kolumny czy wiersza Nie jest wi c chyba zaskoczenieme mo esz napisa makro ktoacutere b dzie zaznacza komoacuterki w podobny sposoacuteb

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 221

Do zaznaczania ca ego bloku komoacuterek mo esz u y w a ciwo ci CurrentRegion Ale copowiniene zrobi je eli chcesz zaznaczy powiedzmy tylko jedn kolumn z tegobloku komoacuterek Na szcz cie VBA pozwala na wykonywanie takich operacji Proceduraktoacuterej kod przedstawiam poni ej zaznacza zakres komoacuterek pocz wszy od bie cejaktywnej komoacuterki w doacute kolumny a do komoacuterki znajduj cej si o jeden wiersz powy ejpierwszej pustej komoacuterki tej kolumny Po zaznaczeniu zakresu mo esz przetwarza gow dowolny sposoacuteb mdash kopiowa komoacuterki przenosi je w inne miejsce arkusza zmieniaformatowanie i tak dalej

Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))SelectEnd Sub

Oczywi cie taki sam obszar mo esz roacutewnie zaznaczy r cznie Aby to zrobi powinienezaznaczy pierwsz komoacuterk nast pnie wcisn i przytrzyma klawisz Shift nacisnklawisz End i wreszcie nacisn klawisz (strza ka w doacute )

W przyk adzie wykorzystuj metod End obiektu ActiveCell ktoacutera zwraca obiekt typuRange Metoda End pobiera jeden argument okre laj cy kierunek w ktoacuterym zostaniewykonane zaznaczenie Argumentami tej metody mo e by dowolna ze sta ychprzedstawionych poni ej

xlUp

xlDown

xlToLeft

xlToRight

Pami taj e zaznaczanie zakresu nie jest potrzebne do jego przetwarzania Makroprzedstawione poni ej zmienia czcionk w komoacuterkach zmiennego zakresu (pojedynczakolumna) na pogrubion bez uprzedniego zaznaczenia zakresu

Sub MakeBold() Range(ActiveCell ActiveCellEnd(xlDown)) _ FontBold = TrueEnd Sub

Zaznaczanie ca ego wiersza lub ca ej kolumnyProcedura przedstawiona poni ej ilustruje sposoacuteb zaznaczania kolumny w ktoacuterej znajdujesi aktywna komoacuterka Makro wykorzystuje w a ciwo EntireColumn ktoacutera zwracaobiekt typu Range reprezentuj cy ca kolumn

Sub SelectColumn() ActiveCellEntireColumnSelectEnd Sub

Jak pewnie si spodziewasz w j zyku VBA dost pna jest roacutewnie w a ciwo EntireRowktoacutera zwraca obiekt typu Range reprezentuj cy ca y wiersz

Kup książkę Poleć książkę

222 Cz III Podstawy programowania

Przenoszenie zakresoacutewZazwyczaj aby przenie zakres komoacuterek zaznaczasz go wycinasz do schowka systemowegoi nast pnie wklejasz w inne miejsce Je eli u yjesz rejestratora makr do zapisania takiejoperacji przekonasz si e wygenerowany zostanie kod podobny do przedstawionegoponi ej

Sub MoveRange() Range(A1C6)Select SelectionCut Range(A10)Select ActiveSheetPasteEnd Sub

Podobnie jak podczas kopiowania komoacuterek takie rozwi zanie nie jest najbardziejefektywnym sposobem przenoszenia zakresu komoacuterek w inne miejsce W praktyce takoperacj mo esz wykona za pomoc procedury sk adaj cej si z jednego wiersza koduco prezentuj poni ej

Sub MoveRange2() Range(A1C6)Cut Range(A10)End Sub

Makro przedstawione powy ej korzysta z faktu e metoda Cut mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe przenoszonego zakresu Zwroacute roacutewnieuwag na fakt e podczas przenoszenia aden zakres komoacuterek nie jest zaznaczanyWska nik aktywnej komoacuterki przez ca y czas pozostaje w tym samym miejscu arkusza

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tliJednym z zada cz sto wykonywanych przez makra jest sprawdzanie poszczegoacutelnychkomoacuterek zakresu i wykonywanie okre lonych operacji na podstawie ich zawarto ci Takiemakra zazwyczaj wykorzystuj p tl For-Next za pomoc ktoacuterej przetwarzane s komoacuterkizakresu

Przyk ad przedstawiony ni ej ilustruje sposoacuteb przechodzenia kolejno przez wszystkiekomoacuterki danego zakresu W naszym przypadku przetwarzany jest aktualnie zaznaczonyzakres komoacuterek Zmienna obiektowa o nazwie Cell reprezentuje aktualnie przetwarzankomoacuterk W p tli For Each-Next znajduje si jedno polecenie ktoacutere sprawdza aktualnieprzetwarzan komoacuterk i zmienia jej czcionk na pogrubion je eli warto przechowywanaw komoacuterce jest dodatnia

Sub ProcessCells() Dim Cell As Range For Each Cell In Selection If CellValue gt 0 Then CellFontBold = True Next CellEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 223

Taka procedura dzia a poprawnie ale co si stanie je eli u ytkownik zaznaczy cakolumn lub ca y wiersz To wcale nie jest takie nieprawdopodobne bo przecie Excelpozwala na wykonywanie operacji na ca ych wierszach i kolumnach W takiej sytuacjiwykonanie makra mo e zaj naprawd du o czasu poniewa nasza p tla przetwarzaka d komoacuterk zaznaczonego zakresu a cznie z pustymi w jednej kolumnie komoacuterekjest a 1 048 576hellip Aby zatem nasze makro by o bardziej wydajne musimy je takzmodyfikowa eby przetwarzane by y tylko i wy cznie komoacuterki ktoacutere nie s puste

Procedura przedstawiona poni ej przetwarza wy cznie niepuste komoacuterki zaznaczonegozakresu dzi ki zastosowaniu metody SpecialCells (wi cej szczegoacute owych informacji natemat tej metody znajdziesz w pomocy systemowej VBA) Nasza procedura za pomocpolecenia Set tworzy dwa obiekty typu Range pierwszy z nich to podzakres komoacuterekzakresu wej ciowego zawieraj cy wy cznie komoacuterki z warto ciami sta ymi (na przyk adteksty warto ci liczbowe litera y i tak dalej) a drugi sk ada si z komoacuterek zawieraj cychformu y Procedura przetwarza tylko komoacuterki nale ce do tych podzakresoacutew co w efekciepowoduje pomini cie przetwarzania wszystkich pozosta ych pustych komoacuterek zakresuwej ciowego Sprytne prawda

Sub SkipBlanks() Dim ConstantCells As Range Dim FormulaCells As Range Dim cell As Range Ignoruj b dy On Error Resume Next

Przetwarzaj komoacuterki zawieraj ce warto ci sta e Set ConstantCells = Selection _ SpecialCells(xlConstants) For Each cell In ConstantCells If cellValue gt 0 Then cellFontBold = True End If Next cell

Przetwarzaj komoacuterki zawieraj ce formu y Set FormulaCells = Selection _ SpecialCells(xlFormulas) For Each cell In FormulaCells If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Procedura SkipBlanks dzia a tak samo szybko niezale nie od tego jaki zakres komoacuterekzaznaczy e Mo esz na przyk ad zaznaczy zakres sk adaj cy si z kilku komoacuterek zaznaczywszystkie kolumny w danym zakresie albo wszystkie wiersze w danym zakresie albonawet ca y arkusz Jak wida jest to ogromne usprawnienie w stosunku do oryginalnejprocedury ProcessCells ktoacuter omoacutewi em nieco wcze niej

Zwroacute uwag e w kodzie procedury u yli my polecenia

On Error Resume Next

Kup książkę Poleć książkę

224 Cz III Podstawy programowania

Polecenie to powoduje e Excel po prostu ignoruje b dy (inaczej moacutewi c je eli proacutebawykonania danego polecenia ko czy si b dem Excel ignoruje ten b d i po prostuprzechodzi do kolejnego polecenia wi cej szczegoacute owych informacji na temat obs ugib doacutew znajdziesz w rozdziale 12) W naszym przypadku zastosowanie polecenia OnError jest konieczne poniewa metoda SpecialCells generuje b d gdy adna komoacuterkanie spe nia podanego kryterium

Zastosowanie metody SpecialCells jest roacutewnowa ne z przej ciem na kart NARZ DZIAG OacuteWNE wybraniem polecenia Znajd i zaznaczPrzejd do mdash specjalnie znajduj cegosi w grupie opcji Edytowanie i nast pnie zaznaczeniem opcji Sta e lub Formu y Abyprzekona si jak to dzia a podczas wykonywania tych polece powiniene u yrejestratora makr i zaznacza roacute ne opcje

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tli(cz II)A teraz ci g dalszy naszej opowie ci W tym punkcie przedstawi inny sposoacuteb efektywnegoprzetwarzania komoacuterek znajduj cych si w zaznaczonym zakresie Tym razem procedurab dzie korzysta a z w a ciwo ci UsedRange ktoacutera zwraca obiekt typu Range reprezentuj cyu ywany zakres arkusza Procedura korzysta roacutewnie z metody Intersect ktoacutera zwracaobiekt typu Range zawieraj cy komoacuterki b d ce cz ci wspoacuteln dwoacutech zakresoacutew

Poni ej przedstawiam zmodyfikowan wersj procedury SkipBlanks omawianejw poprzednim punkcie

Sub SkipBlanks2() Dim WorkRange As Range Dim cell As Range Set WorkRange = Intersect(Selection ActiveSheetUsedRange) For Each cell In WorkRange If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Zmienna obiektowa WorkRange zawiera komoacuterki ktoacutere s cz ci wspoacuteln zakresuzaznaczonego przez u ytkownika oraz zakresu u ywanych komoacuterek arkusza Je lizatem u ytkownik zaznaczy ca kolumn zmienna WorkRange b dzie zawiera a tylkokomoacuterki ktoacutere znajduj si jednocze nie w zaznaczonej kolumnie i w u ywanymzakresie arkusza Jak wida jest to bardzo szybka i efektywna metoda pozwalaj ca naunikni cie przetwarzania komoacuterek znajduj cych si poza zakresem u ywanychkomoacuterek arkusza

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 225

Wprowadzanie warto ci do komoacuterkiNa rysunku 142 pokazuj w jaki sposoacuteb mo esz u y funkcji InputBox j zyka VBA dopobierania od u ytkownika warto ci ktoacutera nast pnie mo e zosta zapisana w wybranejkomoacuterce W procedurze przedstawionej poni ej demonstruj jak poprosi u ytkownikao podanie warto ci i wstawi j do komoacuterki A1 aktywnego arkusza (i to wszystkoza pomoc jednego polecenia)

Sub GetValue() Range(A1)Value = InputBox( _ Wprowad warto dla komoacuterki A1)End Sub

Rysunek 142Zastosowaniefunkcji Input-

Box do pobie-rania warto ci

od u ytkownika

Przedstawiona procedura mo e jednak sprawia pewien problem Je eli u ytkowniknaci nie w oknie dialogowym przycisk Cancel procedura usunie wszelkie dane juznajduj ce si w komoacuterce A1 a takie zachowanie nie jest zbyt dobr praktyk programistyczn Naci ni cie przycisku Cancel powinno po prostu usuwa z ekranu okno dialogowe bezwykonywania adnych dodatkowych operacji

Makro przedstawione poni ej ilustruje znacznie lepsze podej cie do takiego zagadnieniai do zapami tania warto ci wprowadzonej przez u ytkownika wykorzystuje zmienn xJe eli zmienna zawiera co innego ni pusty ci g znakoacutew (czyli kiedy u ytkownikwprowadzi jak warto ) warto zmiennej jest zapisywana w komoacuterce A1 W przeciwnymprzypadku procedura ko czy dzia anie nie wykonuj c adnych dodatkowych operacji

Sub GetValue2() Dim x as Variant x = InputBox(Wprowad warto dla komoacuterki A1) If x ltgt Then Range(A1)Value = xEnd Sub

Zmienna x zosta a zdefiniowana jako zmienna typu Variant poniewa jej warto cimo e by warto albo pusty ci g znakoacutew (je eli u ytkownik naci nie przycisk Cancel)

Kup książkę Poleć książkę

226 Cz III Podstawy programowania

Okre lanie typu zaznaczonego zakresuJe eli zadaniem Twojego makra b dzie przetwarzanie zaznaczonego zakresu takiemakro musi mie zdolno sprawdzenia czy przed jego wywo aniem u ytkownikrzeczywi cie zaznaczy zakres komoacuterek W przeciwnym razie je eli przed wywo aniemmakra zaznaczony zostanie inny obiekt (na przyk ad wykres lub kszta t) proacuteba wykonaniamakra najprawdopodobniej zako czy si niepowodzeniem Polecenie przedstawioneponi ej wykorzystuje funkcj TypeName j zyka VBA do wy wietlania na ekranie typuaktualnie zaznaczonego obiektu

MsgBox TypeName(Selection)

Je eli aktualnie zaznaczony jest obiekt typu Range wykonanie takiego polecenia spowodujewy wietlenie s owa Range Je li Twoje makro dzia a tylko z zakresami komoacuterek mo eszu y polecenia If do sprawdzenia czy aktualnie zaznaczony obiekt to zakres (obiekttypu Range) Procedura przedstawiona poni ej sprawdza typ zaznaczonego obiektui je eli nie jest to obiekt typu Range na ekranie wy wietlany jest odpowiedni komunikati procedura ko czy dzia anie

Sub CheckSelection() If TypeName(Selection) ltgt Range Then MsgBox Zaznacz zakres komoacuterek Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Identyfikowanie zaznacze wielokrotnychJak pami tasz Excel pozwala na jednoczesne zaznaczanie wielu obiektoacutew Aby to zrobi powiniene podczas zaznaczania obiektoacutew lub zakresoacutew trzyma wci ni ty klawisz CtrlZaznaczenia wielokrotne mog by przyczyn problemoacutew z wykonywaniem niektoacuterychmakr Przyk adowo nie mo esz skopiowa zakresu komoacuterek ktoacutery zosta utworzonypoprzez wiele zaznacze nieci g ych zakresoacutew komoacuterek Je eli sproacutebujesz wykonatak operacj Excel wy wietli na ekranie komunikat przedstawiony na rysunku 143

Makro przedstawione ni ej pokazuje w jaki sposoacuteb mo esz sprawdzi czy u ytkownikdokona zaznaczenia wielokrotnego i na tej podstawie wykona odpowiedni operacj

Sub MultipleSelection() If SelectionAreasCount gt 1 Then MsgBox Zaznaczenia wielokrotne nie s dozwolone Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Przedstawiona procedura wykorzystuje metod Areas ktoacutera zwraca kolekcj wszystkichzakresoacutew w danym zaznaczeniu W a ciwo Count zwraca liczb obiektoacutew tej kolekcji

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 227

Rysunek 143Excel nie lubi

kiedy proacutebujeszkopiowa nie-ci g e zakresy

komoacuterek

Zmiana ustawie ExcelaChyba najbardziej u ytecznymi makrami s proste procedury ktoacutere zmieniaj jednolub kilka ustawie Excela Je li na przyk ad dojdziesz do wniosku e bardzo cz stoprzywo ujesz na ekran okno opcji programu Excel i zmieniasz jakie ustawienie takaoperacja z pewno ci b dzie bardzo dobrym kandydatem do napisania makraoszcz dzaj cego Twoacutej czas i u atwiaj cego zmian takiego ustawienia

W tym podrozdziale zaprezentuj dwa przyk ady procedur ktoacutere pokazuj w jakisposoacuteb mo na zmienia ustawienia Excela Ogoacutelne zasady dzia ania tych procedurmo esz z powodzeniem zastosowa do napisania w asnych makr zmieniaj cych inneustawienia Excela

Zmiana ustawie logicznych(opcje typu Boolean)Podobnie jak wy cznik wiat a opcje logiczne (typu Boolean) mog by albo w czonealbo wy czone Mo esz na przyk ad utworzy makro ktoacutere b dzie w cza o lub wy cza owy wietlanie podzia u arkusza na strony Kiedy wydrukujesz arkusz (lub skorzystaszz trybu podgl du wydruku) Excel wy wietla na arkuszu przerywane linie reprezentuj cemiejsca podzia u arkusza na strony wydruku Niektoacuterych u ytkownikoacutew (w czniez autorem tej ksi ki) takie zachowanie Excela irytuje Niestety jedynym sposobemwy czenia wy wietlania podzia u arkusza na strony jest otwarcie okna dialogowego Opcjeprogramu Excel przej cie na kart Zaawansowane a nast pnie przewijanie zawarto ci tejkarty a do odszukania opcji Poka podzia y stron Je eli podczas wy czania tej opcjikorzysta e z rejestratora makr przekonasz si e Excel generuje poni szy kod

Kup książkę Poleć książkę

228 Cz III Podstawy programowania

ActiveSheetDisplayPageBreaks = False

Z drugiej strony je eli podczas rejestrowania makra podzia y stron nie s widoczneExcel generuje taki kod

ActiveSheetDisplayPageBreaks = True

Takie informacje mog doprowadzi do wniosku e b dziesz musia napisa a dwamakra mdash jedno do w czania podgl du podzia u stron a drugie do jego wy czaniaNa szcz cie to nieprawda Procedura przedstawiona poni ej wykorzystuje operatorNot do zmiany warto ci logicznej True na False i odwrotnie Wykonanie proceduryTogglePageBreaks to prosty sposoacuteb na cykliczne w czanie i wy czanie podgl du podzia ustron arkusza

Sub TogglePageBreaks() On Error Resume Next ActiveSheetDisplayPageBreaks = Not _ ActiveSheetDisplayPageBreaksEnd Sub

Pierwsze polecenie informuje Excel e powinien ignorowa ewentualne b dy Przyk adowopodzia y stron nie s wy wietlane na arkuszach wykresoacutew Kiedy wprowadzisz takiepolecenie i sproacutebujesz wykona t procedur dla arkusza wykresu na ekranie nie pojawisi komunikat o b dzie

Techniki u ytej w procedurze TogglePageBreaks mo esz u ywa do zmiany dowolnychopcji logicznych (czyli takich ktoacuterych warto ciami s True albo False)

Zmiana innych opcji (typu non-Boolean)Do zmiany opcji ktoacutere nie s typu logicznego mo esz u ywa konstrukcji Select CaseW przyk adzie przedstawionym poni ej zmieniam tryb przeliczania skoroszytu z r cznegona automatyczny i odwrotnie i nakazuj wy wietlenie na ekranie komunikatu opisuj cegoaktualny tryb przeliczania arkusza

Sub ToggleCalcMode() Select Case ApplicationCalculation Case xlManual ApplicationCalculation = xlCalculationAutomatic MsgBox Automatyczne przeliczanie skoroszytu Case xlAutomatic ApplicationCalculation = xlCalculationManual MsgBox R czne przeliczanie skoroszytu End SelectEnd Sub

Techniki u ytej w procedurze ToggleCalcMode mo esz u ywa do zmiany dowolnychopcji ktoacutere nie posiadaj warto ci logicznych

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 6: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

Spis tre ci 9

Rozdzia 10 Sterowanie przep ywem i podejmowanie decyzji 153Zabierz si za przep yw kolego 153Instrukcja GoTo 154Decyzje decyzje 155

Struktura If-Then 155Struktura Select Case 159

Entliczek p tliczek mdash czyli jak u ywa p tli 162P tle For-Next 162P tla Do-While 167P tla Do-Until 168

U ycie p tli For Each-Next z kolekcjami 168

Rozdzia 11 Automatyczne procedury i zdarzenia 171Przygotowanie do wielkiego zdarzenia 171

Czy zdarzenia s przydatne 173Programowanie procedur obs ugi zdarze 173

Gdzie jest umieszczony kod VBA 174Tworzenie procedury obs ugi zdarzenia 175Przyk ady wprowadzaj ce 176

Zdarzenie Open dla skoroszytu 176Zdarzenie BeforeClose dla skoroszytu 179Zdarzenie BeforeSave dla skoroszytu 179

Przyk ady zdarze aktywacyjnych 180Zdarzenia aktywacji i dezaktywacji arkusza 180Zdarzenia aktywacji i dezaktywacji skoroszytu 181Zdarzenia aktywacji skoroszytu 182

Inne zdarzenia dotycz ce arkusza 183Zdarzenie BeforeDoubleClick 183Zdarzenie BeforeRightClick 184Zdarzenie Change 184

Zdarzenia niezwi zane z obiektami 186Zdarzenie OnTime 186Zdarzenia naci ni cia klawisza 188

Rozdzia 12 Techniki obs ugi b doacutew 191Rodzaje b doacutew 191B dny przyk ad 192

To makro nie jest idealne 192Makro wci nie jest idealne 193Czy teraz makro jest idealne 194Rezygnacja z idea u 195

Inny sposoacuteb obs ugi b doacutew 195Korekta procedury EnterSquareRoot 195O instrukcji On Error 196

Obs uga b doacutew mdash szczegoacute owe informacje 197Wznawianie wykonywania kodu po wyst pieniu b du 197Obs uga b doacutew w pigu ce 199

Kup książkę Poleć książkę

10 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kiedy ignorowa b dy 199Rozpoznawanie okre lonych b doacutew 200

Zamierzony b d 201

Rozdzia 13 Dezynsekcja kodu czyli jak walczy z pluskwami 203Rodzaje pluskiew 203Podstawy entomologii czyli jak zidentyfikowa pluskw 205Metody i techniki walki z pluskwami 205

Przegl danie kodu VBA 206Umieszczanie funkcji MsgBox w kluczowych miejscach kodu 206Umieszczanie polecenia DebugPrint w kluczowych miejscach kodu 208Korzystanie z wbudowanych narz dzi Excela wspomagaj cych odpluskwianie kodu VBA 209

Kilka s oacutew o debuggerze 209Ustawianie punktoacutew przerwa w kodzie programu 209Zastosowanie okna Watch 212Zastosowanie okna Locals 213

Jak zredukowa liczb b doacutew w kodzie programu 215

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 217Przetwarzanie zakresoacutew komoacuterek 217

Kopiowanie zakresoacutew 218Kopiowanie zakresu o zmiennej wielko ci 219Zaznaczanie komoacuterek do ko ca wiersza lub kolumny 220Zaznaczanie ca ego wiersza lub ca ej kolumny 221Przenoszenie zakresoacutew 222Wydajne przetwarzanie komoacuterek zaznaczonego zakresu przy u yciu p tli 222Wydajne przetwarzanie komoacuterek zaznaczonego zakresu przy u yciu p tli (cz II) 224Wprowadzanie warto ci do komoacuterki 225Okre lanie typu zaznaczonego zakresu 226Identyfikowanie zaznacze wielokrotnych 226

Zmiana ustawie Excela 227Zmiana ustawie logicznych (opcje typu Boolean) 227Zmiana innych opcji (typu non-Boolean) 228

Praca z wykresami 229Metoda AddChart kontra metoda AddChart2 230Modyfikowanie typu wykresu 231Przechodzenie w p tli przez elementy kolekcji ChartObjects 232Modyfikowanie w a ciwo ci wykresu 232Zmiana formatowania wykresoacutew 233

Jak przyspieszy dzia anie kodu VBA 234Wy czanie aktualizacji ekranu 234Wy czenie automatycznego przeliczania skoroszytu 235Wy czanie irytuj cych ostrze e 236Upraszczanie odwo a do obiektoacutew 236Deklarowanie typoacutew zmiennych 237Zastosowanie struktury With-End With 238

Kup książkę Poleć książkę

Spis tre ci 11

Cz IV Komunikacja z u ytkownikiem 239Rozdzia 15 Proste okna dialogowe 241

Co zamiast formularzy UserForm 241Funkcja MsgBox 242

Wy wietlanie prostych okien dialogowych 243Pobieranie odpowiedzi z okna dialogowego 243Dostosowywanie wygl du okien dialogowych do w asnych potrzeb 244

Funkcja InputBox 247Sk adnia funkcji InputBox 248Przyk ad zastosowania funkcji InputBox 248Inny rodzaj okna dialogowego InputBox 249

Metoda GetOpenFilename 250Sk adnia metody GetOpenFilename 251Przyk ad zastosowania metody GetOpenFilename 251

Metoda GetSaveAsFilename 253Pobieranie nazwy folderu 254Wy wietlanie wbudowanych okien dialogowych programu Excel 254

Rozdzia 16 Wprowadzenie do formularzy UserForm 257Kiedy u ywa formularzy UserForm 257Tworzenie formularzy UserForm mdash wprowadzenie 258Praca z formularzami UserForm 259

Wstawianie nowego formularza UserForm 259Umieszczanie formantoacutew na formularzu UserForm 260Modyfikacja w a ciwo ci formantoacutew formularza UserForm 261Przegl danie okna Code formularza UserForm 263Wy wietlanie formularzy UserForm 263Pobieranie i wykorzystywanie informacji z formularzy UserForm 264

Przyk ad tworzenia formularza UserForm 264Tworzenie formularza UserForm 265Dodawanie przyciskoacutew polece (formanty CommandButton) 265Dodawanie przyciskoacutew opcji (formanty OptionButton) 267Dodawanie procedur obs ugi zdarze 268Tworzenie makra ktoacutere wy wietla formularz na ekranie 270Udost pnianie makra u ytkownikowi 271Testowanie dzia ania makra 272

Rozdzia 17 Praca z formantami formularza UserForm 275Rozpoczynamy prac z formantami formularzy UserForm 275

Dodawanie formantoacutew 276Wprowadzenie do w a ciwo ci formantoacutew 277

Formanty okien dialogowych mdash szczegoacute y 278Formant CheckBox (pole wyboru) 279Formant ComboBox (pole kombi) 280Formant CommandButton (przycisk polecenia) 281Formant Frame (pole grupy) 281Formant Image (pole obrazu) 282

Kup książkę Poleć książkę

12 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Formant Label (pole etykiety) 283Formant ListBox (pole listy) 283Formant MultiPage 284Formant OptionButton (przycisk opcji) 285Formant RefEdit (pole zakresu) 286Formant ScrollBar (pasek przewijania) 286Formant SpinButton (pokr t o) 287Formant TabStrip (pole karty) 288Formant TextBox (pole tekstowe) 288Formant ToggleButton (przycisk prze cznika) 289

Praca z formantami w oknach dialogowych 289Zmiana rozmiaroacutew i przenoszenie formantoacutew w inne miejsce 289Rozmieszczanie i wyroacutewnywanie po o enia formantoacutew w oknie dialogowym 290Obs uga u ytkownikoacutew preferuj cych korzystanie z klawiatury 291Testowanie formularzy UserForm 293

Estetyka okien dialogowych 293

Rozdzia 18 Techniki pracy z formularzami UserForm 295Zastosowanie w asnych okien dialogowych 295Przyk adowy formularz UserForm 296

Tworzenie okna dialogowego 296Tworzenie kodu procedury wy wietlaj cej okno dialogowe 298Udost pnianie makra u ytkownikowi 299Testowanie okna dialogowego 299Dodawanie procedur obs ugi zdarze 300Sprawdzanie poprawno ci danych 302Teraz okno dialogowe dzia a tak jak powinno 302

Wi cej przyk adoacutew formularzy UserForm 302Zastosowanie formantoacutew ListBox 303Zaznaczanie zakresoacutew 307Praca z wieloma grupami formantoacutew OptionButton 309Zastosowanie formantoacutew SpinButton oraz TextBox 310Wykorzystywanie formularza UserForm jako wska nika post pu zadania 312Tworzenie niemodalnych okien dialogowych z wieloma kartami 315Wy wietlanie wykresoacutew na formularzach UserForm 317

Lista kontrolna tworzenia i testowania okien dialogowych 318

Rozdzia 19 Udost pnianie makr z poziomu interfejsu u ytkownika 321Dostosowywanie Wst ki 321

R czne dopasowywanie Wst ki do w asnych potrzeb 322Dodawanie do Wst ki przycisku w asnego makra 324Dostosowywanie Wst ki za pomoc kodu XML 324

Dostosowywanie menu podr cznego 329Rodzaje obiektoacutew CommandBar 329Wy wietlanie wszystkich menu podr cznych 329Odwo ania do elementoacutew kolekcji CommandBars 330Odwo ania do formantoacutew obiektu CommandBar 331W a ciwo ci formantoacutew obiektu CommandBar 332

Kup książkę Poleć książkę

Spis tre ci 13

Przyk ady zastosowania VBA do modyfikacji menu podr cznego 334Resetowanie wszystkich wbudowanych menu podr cznych 334Dodawanie nowego elementu do menu podr cznego Cell 335Wy czanie menu podr cznego 337

Tworzenie w asnych paskoacutew narz dzi 338

Cz V Od teorii do praktyki 341Rozdzia 20 Jak tworzy w asne funkcje arkuszowe i jak prze y aby o tym opowiedzie 343

Dlaczego tworzymy w asne funkcje 343Podstawowe informacje o funkcjach VBA 344Tworzenie funkcji 345Praca z argumentami funkcji 345Przyk ady funkcji 346

Funkcje bezargumentowe 346Funkcje jednoargumentowe 346Funkcje z dwoma argumentami 348Funkcje pobieraj ce zakres jako argument 349Funkcje z argumentami opcjonalnymi 351

Funkcje opakowuj ce 353Funkcja NumberFormat 353Funkcja ExtractElement 354Funkcja SayIt 354Funkcja IsLike 355

Funkcje zwracaj ce tablice 355Zwracanie tablicy zawieraj cej nazwy miesi cy 355Zwracanie posortowanej listy 356

Okno dialogowe Wstawianie funkcji 358Wy wietlanie opisoacutew funkcji 358Opisy argumentoacutew 360

Rozdzia 21 Tworzenie dodatkoacutew 361No dobrzehellip czym zatem s dodatki 361Po co tworzy si dodatki 362Praca z dodatkami 363Podstawy tworzenia dodatkoacutew 364Tworzymy przyk adowy dodatek 365

Konfiguracja skoroszytu 365Testowanie skoroszytu 367Tworzenie opisoacutew dodatku 368Ochrona kodu VBA 369Tworzenie dodatku 369Otwieranie dodatku 369Dystrybucja dodatkoacutew 370Modyfikowanie dodatkoacutew 371

Kup książkę Poleć książkę

14 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Cz VI Dekalogi 373Rozdzia 22 Dziesi pyta na temat VBA (wraz z odpowiedziami) 375

Rozdzia 23 (Prawie) dziesi roacutede informacji na temat Excela 379System pomocy j zyka VBA 379Wsparcie techniczne firmy Microsoft 380Inne strony internetowe 380Blogi po wi cone Excelowi 380Google 381Bing 381Lokalne grupy u ytkownikoacutew 381Moje inne ksi ki 381

Rozdzia 24 Dziesi rzeczy ktoacutere powiniene robi w j zyku VBAi ktoacuterych nie powiniene robi 383

Zawsze deklaruj wszystkie zmienne 383Nigdy nie powiniene myli has a chroni cego kod VBA z bezpiecze stwem aplikacji 384Zawsze staraj si wyczy ci i zoptymalizowa kod aplikacji 384Nigdy nie umieszczaj wszystkiego w jednej procedurze 385Zawsze powiniene rozwa y zastosowanie innego oprogramowania 385Nigdy nie zak adaj e ka dy u ytkownik zezwala na uruchamianie makr 386Zawsze staraj si eksperymentowa z nowymi rozwi zaniami 386Nigdy z goacutery nie zak adaj e Twoacutej kod b dzie poprawnie dzia a z innymi wersjami Excela 386Zawsze pami taj o u ytkownikach Twojej aplikacji 387Nigdy nie zapominaj o tworzeniu kopii zapasowych 387

Skorowidz 389

Kup książkę Poleć książkę

Rozdzia 14

Przyk ady i technikiprogramowania w j zyku VBA

W tym rozdziale poznasz szereg przyk adoacutew technik programowania w j zyku VBA dowiesz si jak mo esz przyspieszy dzia anie kodu VBA w Twojej aplikacji

ierz e nauka programowania jest znacznie szybsza i zdecydowanie bardziejefektywna kiedy pracujemy na konkretnych przyk adach Dobrze opracowany

przyk ad o wiele lepiej obja nia zagadnienie ni najbardziej rozbudowany i szczegoacute owyale teoretyczny opis Poniewa czytasz t ksi k prawdopodobnie zgadzasz si ze mnw tej materii W tym rozdziale znajdziesz szereg przyk adoacutew demonstruj cych u ytecznepraktyczne techniki programowania w j zyku VBA

Przyk ady omawiane w tym rozdziale zosta y podzielone na kilka kategorii Oto one

Praca z zakresami

Modyfikacja ustawie Excela

Praca z wykresami

Przyspieszanie i optymalizacja dzia ania kodu VBA

Niektoacutere z prezentowanych przyk adoacutew b dziesz moacuteg od razu wykorzysta w swoichaplikacjach jednak w wi kszo ci przypadkoacutew b d wymaga y pewnego dostosowaniado Twoich aplikacji

Przetwarzanie zakresoacutew komoacuterekWi kszo zada z jakimi b dziesz si styka programuj c w j zyku VBA b dzie zapewnewymaga a mniejszego b d wi kszego przetwarzania zakresoacutew komoacuterek (aby od wie ysobie wiadomo ci na temat obiektu Range powiniene zajrze do rozdzia u 8) Kiedypracujesz z obiektami Range powiniene pami ta o nast puj cych sprawach

Kod VBA nie musi zaznacza danego zakresu aby go przetwarza

Je eli kod VBA zaznacza wybrany zakres przechowuj cy go skoroszyt musi byaktywny

W

Kup książkę Poleć książkę

218 Cz III Podstawy programowania

Rejestrator makr nie zawsze b dzie w stanie wygenerowa optymalny kod VBABardzo cz sto jednak mo esz za jego pomoc utworzy bazowe makro i potemodpowiednio zmodyfikowa kod tak aby sta si bardziej efektywny

Zazwyczaj bardzo dobrym rozwi zaniem jest nadawanie nazw zakresom komoacuterekwykorzystywanym w kodzie VBA Przyk adowo polecenie Range(Total)jestznacznie lepszym rozwi zaniem ni Range(D45) Je li w tym drugim przypadkupoacute niej wstawisz dodatkowy wiersz powy ej wiersza 45 to eby wszystko dzia a opoprawnie b dziesz musia zmodyfikowa makro tak aby korzysta o z nowegopoprawnego adresu komoacuterki a ta po wykonaniu takiej operacji b dzie mia a innyadres (D46) Aby nada nazw wybranemu zakresowi komoacuterek powiniene przejna kart FORMU Y i wybra polecenie Definiuj nazw znajduj ce si w grupiepolece Nazwy zdefiniowane

Kiedy tworzysz makro ktoacutere b dzie przetwarza o zakres komoacuterek zaznaczonyprzez u ytkownika pami taj e u ytkownik mo e zaznaczy kilka ca ych kolumnczy wierszy W wi kszo ci przypadkoacutew z pewno ci nie b dziesz chcia aby makrow p tli przechodzi o w takiej sytuacji przez wszystkie zaznaczone komoacuterki (w czniez pustymi) co mog oby zaj bardzo wiele czasu Dobre makro powinno odszukai przetwarza tylko komoacuterki ktoacutere nie s puste

Excel pozwala na jednoczesne zaznaczanie wielu zakresoacutew komoacuterek Aby to zrobi powiniene zaznaczy pierwszy zakres komoacuterek potem wcisn i przytrzymaklawisz Ctrl i zaznacza kolejne zakresy komoacuterek przy u yciu myszy Kod Twojejaplikacji powinien by przygotowany na takie sytuacje i podejmowa odpowiednieakcje

Skoroszyty z wybranymi przyk adami omawianymi w tym rozdziale znajdziesz na stronieinternetowej naszej ksi ki

Je eli chcesz samodzielnie wpisywa kod omawianych przyk adoacutew przejd do edytoraVBE naciskaj c kombinacj klawiszy lewyAlt+F11 a nast pnie wstaw nowy modu VBAi wpisz kod prezentowanych procedur Upewnij si e Twoacutej skoroszyt jest poprawnieskonfigurowany Je eli na przyk ad kod danego przyk adu odwo uje si do arkuszyo nazwach Arkusz1 i Arkusz2 upewnij si e takie arkusze istniej w Twoim skoroszycie

Kopiowanie zakresoacutewKopiowanie zakresoacutew komoacuterek mo e mia o pretendowa do miana jednej z najcz ciejwykonywanych operacji w Excelu Kiedy w czysz rejestrator makr i skopiujesz zakreskomoacuterek o adresie A1A5 do zakresu B1B5 otrzymasz nast puj ce makro

Sub CopyRange() Range(A1A5)Select SelectionCopy Range(B1)Select ActiveSheetPaste ApplicationCutCopyMode = FalseEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 219

Zwroacute uwag na ostatnie polecenie Zosta o ono wygenerowane przez naci ni cieklawisza Esc po skopiowaniu zakresu komoacuterek co spowodowa o usuni cie przerywanejlinii reprezentuj cej na arkuszu obramowanie kopiowanego zakresu

Przedstawione makro dzia a poprawnie ale zakresy komoacuterek mo na kopiowa w znaczniebardziej efektywny sposoacuteb Identyczny rezultat mo esz osi gn za pomoc proceduryktoacutera sk ada si z tylko jednego wiersza polecenia i nie zaznacza adnych komoacuterek(dzi ki czemu nie wymaga ustawiania w a ciwo ci CutCopyMode na warto False)

Sub CopyRange2() Range(A1A5)Copy Range(B1)End Sub

Procedura przedstawiona powy ej korzysta z tego e metoda Copy mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe kopiowanego zakresu Informacje o tymznalaz em w pomocy systemowej VBA Powy szy przyk ad doskonale roacutewnie ilustrujefakt e rejestrator makr nie zawsze generuje najbardziej efektywny kod

Kopiowanie zakresu o zmiennej wielko ciW wielu przypadkach konieczne jest skopiowanie zakresu komoacuterek dla ktoacuterego dok adnaliczba wierszy i kolumn okre laj cych jego wielko nie jest z goacutery znana Przyk adowomo esz dysponowa skoroszytem ledz cym tygodniow sprzeda w ktoacuterym liczba wierszyzmienia si ka dego tygodnia po wprowadzeniu nowych danych

Na rysunku 141 przedstawiam przyk ad cz sto spotykanego typu arkusza Znajduj cysi w nim zakres komoacuterek sk ada si z kilku wierszy ktoacuterych liczba zmienia si ka degodnia Poniewa nie wiesz jaki jest rozmiar zakresu w danej chwili musisz utworzykod ktoacutery b dzie dzia a bez u ywania adresu zakresu kopiowanych komoacuterek

Rysunek 141Przyk ad zakre-su ktoacutery mo e

sk ada siz dowolnej

liczby wierszy

Makro przedstawione poni ej ilustruje sposoacuteb kopiowania zakresu komoacuterek z arkuszaArkusz1 do arkusza Arkusz2 (pocz wszy od komoacuterki A1) Makro wykorzystuje w a ciwoCurrentRegion ktoacutera zwraca obiekt Range odpowiadaj cy blokowi komoacuterek otaczaj cychokre lon komoacuterk (w tym przypadku o adresie A1)

Kup książkę Poleć książkę

220 Cz III Podstawy programowania

Sub CopyCurrentRegion() Range(A1)CurrentRegionCopy Sheets(Arkusz2)Select Range(A1)Select ActiveSheetPaste Sheets(Arkusz1)Select ApplicationCutCopyMode = FalseEnd Sub

Zastosowanie w a ciwo ci CurrentRegion jest roacutewnowa ne z przej ciem na kartNARZ DZIA G OacuteWNE i wybraniem polecenia Znajd i zaznaczPrzejd do mdashspecjalnie znajduj cego si w grupie opcji Edytowanie i nast pnie zaznaczeniem opcjiBie cy obszar Aby przekona si jak to dzia a podczas wykonywania tych polecepowiniene u y rejestratora makr Zazwyczaj warto w a ciwo ci CurrentRegionreprezentuje prostok tny blok komoacuterek otoczony przez puste wiersze i kolumny

Oczywi cie mo esz zoptymalizowa kod makra przedstawionego powy ej i niezaznacza obszaru docelowego dla kopiowanych komoacuterek Makro przedstawione poni ejkorzysta z faktu e metoda Copy mo e u ywa argumentu wywo ania reprezentuj cegomiejsce docelowe kopiowanego zakresu

Sub CopyCurrentRegion2() Range(A1)CurrentRegionCopy _ Sheets(Arkusz2)Range(A1)End Sub

Je eli zakres komoacuterek ktoacutery chcesz skopiowa jest tabel (zdefiniowan przy u yciapolecenia WSTAWIANIETabeleTabela) ca e zadanie b dzie jeszcze atwiejsze Ka databela posiada swoj nazw (na przyk ad Tabela1) i automatycznie rozszerza si w miardodawania nowych wierszy

Sub CopyTable() Range(Tabela1)Copy Sheets(Arkusz2)Range(A1)End Sub

Je eli sproacutebujesz wykona procedur przedstawion powy ej przekonasz si e wiersznag oacutewka tabeli nie jest kopiowany poniewa obiekt Tabela1 nie obejmuje tegowiersza Je li chcesz aby wiersz nag oacutewka roacutewnie by kopiowany powiniene zmieniodwo anie do tabeli tak jak to zosta o przedstawione poni ej

Range(Tabela1[All])

Zaznaczanie komoacuterekdo ko ca wiersza lub kolumnyPrawdopodobnie bardzo cz sto u ywasz kombinacji klawiszy takich jak Ctrl+Shift+ czy Ctrl+Shift+ do zaznaczania zakresoacutew sk adaj cych si ze wszystkich komoacuterekod komoacuterki aktywnej a do ko ca kolumny czy wiersza Nie jest wi c chyba zaskoczenieme mo esz napisa makro ktoacutere b dzie zaznacza komoacuterki w podobny sposoacuteb

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 221

Do zaznaczania ca ego bloku komoacuterek mo esz u y w a ciwo ci CurrentRegion Ale copowiniene zrobi je eli chcesz zaznaczy powiedzmy tylko jedn kolumn z tegobloku komoacuterek Na szcz cie VBA pozwala na wykonywanie takich operacji Proceduraktoacuterej kod przedstawiam poni ej zaznacza zakres komoacuterek pocz wszy od bie cejaktywnej komoacuterki w doacute kolumny a do komoacuterki znajduj cej si o jeden wiersz powy ejpierwszej pustej komoacuterki tej kolumny Po zaznaczeniu zakresu mo esz przetwarza gow dowolny sposoacuteb mdash kopiowa komoacuterki przenosi je w inne miejsce arkusza zmieniaformatowanie i tak dalej

Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))SelectEnd Sub

Oczywi cie taki sam obszar mo esz roacutewnie zaznaczy r cznie Aby to zrobi powinienezaznaczy pierwsz komoacuterk nast pnie wcisn i przytrzyma klawisz Shift nacisnklawisz End i wreszcie nacisn klawisz (strza ka w doacute )

W przyk adzie wykorzystuj metod End obiektu ActiveCell ktoacutera zwraca obiekt typuRange Metoda End pobiera jeden argument okre laj cy kierunek w ktoacuterym zostaniewykonane zaznaczenie Argumentami tej metody mo e by dowolna ze sta ychprzedstawionych poni ej

xlUp

xlDown

xlToLeft

xlToRight

Pami taj e zaznaczanie zakresu nie jest potrzebne do jego przetwarzania Makroprzedstawione poni ej zmienia czcionk w komoacuterkach zmiennego zakresu (pojedynczakolumna) na pogrubion bez uprzedniego zaznaczenia zakresu

Sub MakeBold() Range(ActiveCell ActiveCellEnd(xlDown)) _ FontBold = TrueEnd Sub

Zaznaczanie ca ego wiersza lub ca ej kolumnyProcedura przedstawiona poni ej ilustruje sposoacuteb zaznaczania kolumny w ktoacuterej znajdujesi aktywna komoacuterka Makro wykorzystuje w a ciwo EntireColumn ktoacutera zwracaobiekt typu Range reprezentuj cy ca kolumn

Sub SelectColumn() ActiveCellEntireColumnSelectEnd Sub

Jak pewnie si spodziewasz w j zyku VBA dost pna jest roacutewnie w a ciwo EntireRowktoacutera zwraca obiekt typu Range reprezentuj cy ca y wiersz

Kup książkę Poleć książkę

222 Cz III Podstawy programowania

Przenoszenie zakresoacutewZazwyczaj aby przenie zakres komoacuterek zaznaczasz go wycinasz do schowka systemowegoi nast pnie wklejasz w inne miejsce Je eli u yjesz rejestratora makr do zapisania takiejoperacji przekonasz si e wygenerowany zostanie kod podobny do przedstawionegoponi ej

Sub MoveRange() Range(A1C6)Select SelectionCut Range(A10)Select ActiveSheetPasteEnd Sub

Podobnie jak podczas kopiowania komoacuterek takie rozwi zanie nie jest najbardziejefektywnym sposobem przenoszenia zakresu komoacuterek w inne miejsce W praktyce takoperacj mo esz wykona za pomoc procedury sk adaj cej si z jednego wiersza koduco prezentuj poni ej

Sub MoveRange2() Range(A1C6)Cut Range(A10)End Sub

Makro przedstawione powy ej korzysta z faktu e metoda Cut mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe przenoszonego zakresu Zwroacute roacutewnieuwag na fakt e podczas przenoszenia aden zakres komoacuterek nie jest zaznaczanyWska nik aktywnej komoacuterki przez ca y czas pozostaje w tym samym miejscu arkusza

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tliJednym z zada cz sto wykonywanych przez makra jest sprawdzanie poszczegoacutelnychkomoacuterek zakresu i wykonywanie okre lonych operacji na podstawie ich zawarto ci Takiemakra zazwyczaj wykorzystuj p tl For-Next za pomoc ktoacuterej przetwarzane s komoacuterkizakresu

Przyk ad przedstawiony ni ej ilustruje sposoacuteb przechodzenia kolejno przez wszystkiekomoacuterki danego zakresu W naszym przypadku przetwarzany jest aktualnie zaznaczonyzakres komoacuterek Zmienna obiektowa o nazwie Cell reprezentuje aktualnie przetwarzankomoacuterk W p tli For Each-Next znajduje si jedno polecenie ktoacutere sprawdza aktualnieprzetwarzan komoacuterk i zmienia jej czcionk na pogrubion je eli warto przechowywanaw komoacuterce jest dodatnia

Sub ProcessCells() Dim Cell As Range For Each Cell In Selection If CellValue gt 0 Then CellFontBold = True Next CellEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 223

Taka procedura dzia a poprawnie ale co si stanie je eli u ytkownik zaznaczy cakolumn lub ca y wiersz To wcale nie jest takie nieprawdopodobne bo przecie Excelpozwala na wykonywanie operacji na ca ych wierszach i kolumnach W takiej sytuacjiwykonanie makra mo e zaj naprawd du o czasu poniewa nasza p tla przetwarzaka d komoacuterk zaznaczonego zakresu a cznie z pustymi w jednej kolumnie komoacuterekjest a 1 048 576hellip Aby zatem nasze makro by o bardziej wydajne musimy je takzmodyfikowa eby przetwarzane by y tylko i wy cznie komoacuterki ktoacutere nie s puste

Procedura przedstawiona poni ej przetwarza wy cznie niepuste komoacuterki zaznaczonegozakresu dzi ki zastosowaniu metody SpecialCells (wi cej szczegoacute owych informacji natemat tej metody znajdziesz w pomocy systemowej VBA) Nasza procedura za pomocpolecenia Set tworzy dwa obiekty typu Range pierwszy z nich to podzakres komoacuterekzakresu wej ciowego zawieraj cy wy cznie komoacuterki z warto ciami sta ymi (na przyk adteksty warto ci liczbowe litera y i tak dalej) a drugi sk ada si z komoacuterek zawieraj cychformu y Procedura przetwarza tylko komoacuterki nale ce do tych podzakresoacutew co w efekciepowoduje pomini cie przetwarzania wszystkich pozosta ych pustych komoacuterek zakresuwej ciowego Sprytne prawda

Sub SkipBlanks() Dim ConstantCells As Range Dim FormulaCells As Range Dim cell As Range Ignoruj b dy On Error Resume Next

Przetwarzaj komoacuterki zawieraj ce warto ci sta e Set ConstantCells = Selection _ SpecialCells(xlConstants) For Each cell In ConstantCells If cellValue gt 0 Then cellFontBold = True End If Next cell

Przetwarzaj komoacuterki zawieraj ce formu y Set FormulaCells = Selection _ SpecialCells(xlFormulas) For Each cell In FormulaCells If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Procedura SkipBlanks dzia a tak samo szybko niezale nie od tego jaki zakres komoacuterekzaznaczy e Mo esz na przyk ad zaznaczy zakres sk adaj cy si z kilku komoacuterek zaznaczywszystkie kolumny w danym zakresie albo wszystkie wiersze w danym zakresie albonawet ca y arkusz Jak wida jest to ogromne usprawnienie w stosunku do oryginalnejprocedury ProcessCells ktoacuter omoacutewi em nieco wcze niej

Zwroacute uwag e w kodzie procedury u yli my polecenia

On Error Resume Next

Kup książkę Poleć książkę

224 Cz III Podstawy programowania

Polecenie to powoduje e Excel po prostu ignoruje b dy (inaczej moacutewi c je eli proacutebawykonania danego polecenia ko czy si b dem Excel ignoruje ten b d i po prostuprzechodzi do kolejnego polecenia wi cej szczegoacute owych informacji na temat obs ugib doacutew znajdziesz w rozdziale 12) W naszym przypadku zastosowanie polecenia OnError jest konieczne poniewa metoda SpecialCells generuje b d gdy adna komoacuterkanie spe nia podanego kryterium

Zastosowanie metody SpecialCells jest roacutewnowa ne z przej ciem na kart NARZ DZIAG OacuteWNE wybraniem polecenia Znajd i zaznaczPrzejd do mdash specjalnie znajduj cegosi w grupie opcji Edytowanie i nast pnie zaznaczeniem opcji Sta e lub Formu y Abyprzekona si jak to dzia a podczas wykonywania tych polece powiniene u yrejestratora makr i zaznacza roacute ne opcje

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tli(cz II)A teraz ci g dalszy naszej opowie ci W tym punkcie przedstawi inny sposoacuteb efektywnegoprzetwarzania komoacuterek znajduj cych si w zaznaczonym zakresie Tym razem procedurab dzie korzysta a z w a ciwo ci UsedRange ktoacutera zwraca obiekt typu Range reprezentuj cyu ywany zakres arkusza Procedura korzysta roacutewnie z metody Intersect ktoacutera zwracaobiekt typu Range zawieraj cy komoacuterki b d ce cz ci wspoacuteln dwoacutech zakresoacutew

Poni ej przedstawiam zmodyfikowan wersj procedury SkipBlanks omawianejw poprzednim punkcie

Sub SkipBlanks2() Dim WorkRange As Range Dim cell As Range Set WorkRange = Intersect(Selection ActiveSheetUsedRange) For Each cell In WorkRange If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Zmienna obiektowa WorkRange zawiera komoacuterki ktoacutere s cz ci wspoacuteln zakresuzaznaczonego przez u ytkownika oraz zakresu u ywanych komoacuterek arkusza Je lizatem u ytkownik zaznaczy ca kolumn zmienna WorkRange b dzie zawiera a tylkokomoacuterki ktoacutere znajduj si jednocze nie w zaznaczonej kolumnie i w u ywanymzakresie arkusza Jak wida jest to bardzo szybka i efektywna metoda pozwalaj ca naunikni cie przetwarzania komoacuterek znajduj cych si poza zakresem u ywanychkomoacuterek arkusza

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 225

Wprowadzanie warto ci do komoacuterkiNa rysunku 142 pokazuj w jaki sposoacuteb mo esz u y funkcji InputBox j zyka VBA dopobierania od u ytkownika warto ci ktoacutera nast pnie mo e zosta zapisana w wybranejkomoacuterce W procedurze przedstawionej poni ej demonstruj jak poprosi u ytkownikao podanie warto ci i wstawi j do komoacuterki A1 aktywnego arkusza (i to wszystkoza pomoc jednego polecenia)

Sub GetValue() Range(A1)Value = InputBox( _ Wprowad warto dla komoacuterki A1)End Sub

Rysunek 142Zastosowaniefunkcji Input-

Box do pobie-rania warto ci

od u ytkownika

Przedstawiona procedura mo e jednak sprawia pewien problem Je eli u ytkowniknaci nie w oknie dialogowym przycisk Cancel procedura usunie wszelkie dane juznajduj ce si w komoacuterce A1 a takie zachowanie nie jest zbyt dobr praktyk programistyczn Naci ni cie przycisku Cancel powinno po prostu usuwa z ekranu okno dialogowe bezwykonywania adnych dodatkowych operacji

Makro przedstawione poni ej ilustruje znacznie lepsze podej cie do takiego zagadnieniai do zapami tania warto ci wprowadzonej przez u ytkownika wykorzystuje zmienn xJe eli zmienna zawiera co innego ni pusty ci g znakoacutew (czyli kiedy u ytkownikwprowadzi jak warto ) warto zmiennej jest zapisywana w komoacuterce A1 W przeciwnymprzypadku procedura ko czy dzia anie nie wykonuj c adnych dodatkowych operacji

Sub GetValue2() Dim x as Variant x = InputBox(Wprowad warto dla komoacuterki A1) If x ltgt Then Range(A1)Value = xEnd Sub

Zmienna x zosta a zdefiniowana jako zmienna typu Variant poniewa jej warto cimo e by warto albo pusty ci g znakoacutew (je eli u ytkownik naci nie przycisk Cancel)

Kup książkę Poleć książkę

226 Cz III Podstawy programowania

Okre lanie typu zaznaczonego zakresuJe eli zadaniem Twojego makra b dzie przetwarzanie zaznaczonego zakresu takiemakro musi mie zdolno sprawdzenia czy przed jego wywo aniem u ytkownikrzeczywi cie zaznaczy zakres komoacuterek W przeciwnym razie je eli przed wywo aniemmakra zaznaczony zostanie inny obiekt (na przyk ad wykres lub kszta t) proacuteba wykonaniamakra najprawdopodobniej zako czy si niepowodzeniem Polecenie przedstawioneponi ej wykorzystuje funkcj TypeName j zyka VBA do wy wietlania na ekranie typuaktualnie zaznaczonego obiektu

MsgBox TypeName(Selection)

Je eli aktualnie zaznaczony jest obiekt typu Range wykonanie takiego polecenia spowodujewy wietlenie s owa Range Je li Twoje makro dzia a tylko z zakresami komoacuterek mo eszu y polecenia If do sprawdzenia czy aktualnie zaznaczony obiekt to zakres (obiekttypu Range) Procedura przedstawiona poni ej sprawdza typ zaznaczonego obiektui je eli nie jest to obiekt typu Range na ekranie wy wietlany jest odpowiedni komunikati procedura ko czy dzia anie

Sub CheckSelection() If TypeName(Selection) ltgt Range Then MsgBox Zaznacz zakres komoacuterek Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Identyfikowanie zaznacze wielokrotnychJak pami tasz Excel pozwala na jednoczesne zaznaczanie wielu obiektoacutew Aby to zrobi powiniene podczas zaznaczania obiektoacutew lub zakresoacutew trzyma wci ni ty klawisz CtrlZaznaczenia wielokrotne mog by przyczyn problemoacutew z wykonywaniem niektoacuterychmakr Przyk adowo nie mo esz skopiowa zakresu komoacuterek ktoacutery zosta utworzonypoprzez wiele zaznacze nieci g ych zakresoacutew komoacuterek Je eli sproacutebujesz wykonatak operacj Excel wy wietli na ekranie komunikat przedstawiony na rysunku 143

Makro przedstawione ni ej pokazuje w jaki sposoacuteb mo esz sprawdzi czy u ytkownikdokona zaznaczenia wielokrotnego i na tej podstawie wykona odpowiedni operacj

Sub MultipleSelection() If SelectionAreasCount gt 1 Then MsgBox Zaznaczenia wielokrotne nie s dozwolone Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Przedstawiona procedura wykorzystuje metod Areas ktoacutera zwraca kolekcj wszystkichzakresoacutew w danym zaznaczeniu W a ciwo Count zwraca liczb obiektoacutew tej kolekcji

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 227

Rysunek 143Excel nie lubi

kiedy proacutebujeszkopiowa nie-ci g e zakresy

komoacuterek

Zmiana ustawie ExcelaChyba najbardziej u ytecznymi makrami s proste procedury ktoacutere zmieniaj jednolub kilka ustawie Excela Je li na przyk ad dojdziesz do wniosku e bardzo cz stoprzywo ujesz na ekran okno opcji programu Excel i zmieniasz jakie ustawienie takaoperacja z pewno ci b dzie bardzo dobrym kandydatem do napisania makraoszcz dzaj cego Twoacutej czas i u atwiaj cego zmian takiego ustawienia

W tym podrozdziale zaprezentuj dwa przyk ady procedur ktoacutere pokazuj w jakisposoacuteb mo na zmienia ustawienia Excela Ogoacutelne zasady dzia ania tych procedurmo esz z powodzeniem zastosowa do napisania w asnych makr zmieniaj cych inneustawienia Excela

Zmiana ustawie logicznych(opcje typu Boolean)Podobnie jak wy cznik wiat a opcje logiczne (typu Boolean) mog by albo w czonealbo wy czone Mo esz na przyk ad utworzy makro ktoacutere b dzie w cza o lub wy cza owy wietlanie podzia u arkusza na strony Kiedy wydrukujesz arkusz (lub skorzystaszz trybu podgl du wydruku) Excel wy wietla na arkuszu przerywane linie reprezentuj cemiejsca podzia u arkusza na strony wydruku Niektoacuterych u ytkownikoacutew (w czniez autorem tej ksi ki) takie zachowanie Excela irytuje Niestety jedynym sposobemwy czenia wy wietlania podzia u arkusza na strony jest otwarcie okna dialogowego Opcjeprogramu Excel przej cie na kart Zaawansowane a nast pnie przewijanie zawarto ci tejkarty a do odszukania opcji Poka podzia y stron Je eli podczas wy czania tej opcjikorzysta e z rejestratora makr przekonasz si e Excel generuje poni szy kod

Kup książkę Poleć książkę

228 Cz III Podstawy programowania

ActiveSheetDisplayPageBreaks = False

Z drugiej strony je eli podczas rejestrowania makra podzia y stron nie s widoczneExcel generuje taki kod

ActiveSheetDisplayPageBreaks = True

Takie informacje mog doprowadzi do wniosku e b dziesz musia napisa a dwamakra mdash jedno do w czania podgl du podzia u stron a drugie do jego wy czaniaNa szcz cie to nieprawda Procedura przedstawiona poni ej wykorzystuje operatorNot do zmiany warto ci logicznej True na False i odwrotnie Wykonanie proceduryTogglePageBreaks to prosty sposoacuteb na cykliczne w czanie i wy czanie podgl du podzia ustron arkusza

Sub TogglePageBreaks() On Error Resume Next ActiveSheetDisplayPageBreaks = Not _ ActiveSheetDisplayPageBreaksEnd Sub

Pierwsze polecenie informuje Excel e powinien ignorowa ewentualne b dy Przyk adowopodzia y stron nie s wy wietlane na arkuszach wykresoacutew Kiedy wprowadzisz takiepolecenie i sproacutebujesz wykona t procedur dla arkusza wykresu na ekranie nie pojawisi komunikat o b dzie

Techniki u ytej w procedurze TogglePageBreaks mo esz u ywa do zmiany dowolnychopcji logicznych (czyli takich ktoacuterych warto ciami s True albo False)

Zmiana innych opcji (typu non-Boolean)Do zmiany opcji ktoacutere nie s typu logicznego mo esz u ywa konstrukcji Select CaseW przyk adzie przedstawionym poni ej zmieniam tryb przeliczania skoroszytu z r cznegona automatyczny i odwrotnie i nakazuj wy wietlenie na ekranie komunikatu opisuj cegoaktualny tryb przeliczania arkusza

Sub ToggleCalcMode() Select Case ApplicationCalculation Case xlManual ApplicationCalculation = xlCalculationAutomatic MsgBox Automatyczne przeliczanie skoroszytu Case xlAutomatic ApplicationCalculation = xlCalculationManual MsgBox R czne przeliczanie skoroszytu End SelectEnd Sub

Techniki u ytej w procedurze ToggleCalcMode mo esz u ywa do zmiany dowolnychopcji ktoacutere nie posiadaj warto ci logicznych

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 7: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

10 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kiedy ignorowa b dy 199Rozpoznawanie okre lonych b doacutew 200

Zamierzony b d 201

Rozdzia 13 Dezynsekcja kodu czyli jak walczy z pluskwami 203Rodzaje pluskiew 203Podstawy entomologii czyli jak zidentyfikowa pluskw 205Metody i techniki walki z pluskwami 205

Przegl danie kodu VBA 206Umieszczanie funkcji MsgBox w kluczowych miejscach kodu 206Umieszczanie polecenia DebugPrint w kluczowych miejscach kodu 208Korzystanie z wbudowanych narz dzi Excela wspomagaj cych odpluskwianie kodu VBA 209

Kilka s oacutew o debuggerze 209Ustawianie punktoacutew przerwa w kodzie programu 209Zastosowanie okna Watch 212Zastosowanie okna Locals 213

Jak zredukowa liczb b doacutew w kodzie programu 215

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 217Przetwarzanie zakresoacutew komoacuterek 217

Kopiowanie zakresoacutew 218Kopiowanie zakresu o zmiennej wielko ci 219Zaznaczanie komoacuterek do ko ca wiersza lub kolumny 220Zaznaczanie ca ego wiersza lub ca ej kolumny 221Przenoszenie zakresoacutew 222Wydajne przetwarzanie komoacuterek zaznaczonego zakresu przy u yciu p tli 222Wydajne przetwarzanie komoacuterek zaznaczonego zakresu przy u yciu p tli (cz II) 224Wprowadzanie warto ci do komoacuterki 225Okre lanie typu zaznaczonego zakresu 226Identyfikowanie zaznacze wielokrotnych 226

Zmiana ustawie Excela 227Zmiana ustawie logicznych (opcje typu Boolean) 227Zmiana innych opcji (typu non-Boolean) 228

Praca z wykresami 229Metoda AddChart kontra metoda AddChart2 230Modyfikowanie typu wykresu 231Przechodzenie w p tli przez elementy kolekcji ChartObjects 232Modyfikowanie w a ciwo ci wykresu 232Zmiana formatowania wykresoacutew 233

Jak przyspieszy dzia anie kodu VBA 234Wy czanie aktualizacji ekranu 234Wy czenie automatycznego przeliczania skoroszytu 235Wy czanie irytuj cych ostrze e 236Upraszczanie odwo a do obiektoacutew 236Deklarowanie typoacutew zmiennych 237Zastosowanie struktury With-End With 238

Kup książkę Poleć książkę

Spis tre ci 11

Cz IV Komunikacja z u ytkownikiem 239Rozdzia 15 Proste okna dialogowe 241

Co zamiast formularzy UserForm 241Funkcja MsgBox 242

Wy wietlanie prostych okien dialogowych 243Pobieranie odpowiedzi z okna dialogowego 243Dostosowywanie wygl du okien dialogowych do w asnych potrzeb 244

Funkcja InputBox 247Sk adnia funkcji InputBox 248Przyk ad zastosowania funkcji InputBox 248Inny rodzaj okna dialogowego InputBox 249

Metoda GetOpenFilename 250Sk adnia metody GetOpenFilename 251Przyk ad zastosowania metody GetOpenFilename 251

Metoda GetSaveAsFilename 253Pobieranie nazwy folderu 254Wy wietlanie wbudowanych okien dialogowych programu Excel 254

Rozdzia 16 Wprowadzenie do formularzy UserForm 257Kiedy u ywa formularzy UserForm 257Tworzenie formularzy UserForm mdash wprowadzenie 258Praca z formularzami UserForm 259

Wstawianie nowego formularza UserForm 259Umieszczanie formantoacutew na formularzu UserForm 260Modyfikacja w a ciwo ci formantoacutew formularza UserForm 261Przegl danie okna Code formularza UserForm 263Wy wietlanie formularzy UserForm 263Pobieranie i wykorzystywanie informacji z formularzy UserForm 264

Przyk ad tworzenia formularza UserForm 264Tworzenie formularza UserForm 265Dodawanie przyciskoacutew polece (formanty CommandButton) 265Dodawanie przyciskoacutew opcji (formanty OptionButton) 267Dodawanie procedur obs ugi zdarze 268Tworzenie makra ktoacutere wy wietla formularz na ekranie 270Udost pnianie makra u ytkownikowi 271Testowanie dzia ania makra 272

Rozdzia 17 Praca z formantami formularza UserForm 275Rozpoczynamy prac z formantami formularzy UserForm 275

Dodawanie formantoacutew 276Wprowadzenie do w a ciwo ci formantoacutew 277

Formanty okien dialogowych mdash szczegoacute y 278Formant CheckBox (pole wyboru) 279Formant ComboBox (pole kombi) 280Formant CommandButton (przycisk polecenia) 281Formant Frame (pole grupy) 281Formant Image (pole obrazu) 282

Kup książkę Poleć książkę

12 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Formant Label (pole etykiety) 283Formant ListBox (pole listy) 283Formant MultiPage 284Formant OptionButton (przycisk opcji) 285Formant RefEdit (pole zakresu) 286Formant ScrollBar (pasek przewijania) 286Formant SpinButton (pokr t o) 287Formant TabStrip (pole karty) 288Formant TextBox (pole tekstowe) 288Formant ToggleButton (przycisk prze cznika) 289

Praca z formantami w oknach dialogowych 289Zmiana rozmiaroacutew i przenoszenie formantoacutew w inne miejsce 289Rozmieszczanie i wyroacutewnywanie po o enia formantoacutew w oknie dialogowym 290Obs uga u ytkownikoacutew preferuj cych korzystanie z klawiatury 291Testowanie formularzy UserForm 293

Estetyka okien dialogowych 293

Rozdzia 18 Techniki pracy z formularzami UserForm 295Zastosowanie w asnych okien dialogowych 295Przyk adowy formularz UserForm 296

Tworzenie okna dialogowego 296Tworzenie kodu procedury wy wietlaj cej okno dialogowe 298Udost pnianie makra u ytkownikowi 299Testowanie okna dialogowego 299Dodawanie procedur obs ugi zdarze 300Sprawdzanie poprawno ci danych 302Teraz okno dialogowe dzia a tak jak powinno 302

Wi cej przyk adoacutew formularzy UserForm 302Zastosowanie formantoacutew ListBox 303Zaznaczanie zakresoacutew 307Praca z wieloma grupami formantoacutew OptionButton 309Zastosowanie formantoacutew SpinButton oraz TextBox 310Wykorzystywanie formularza UserForm jako wska nika post pu zadania 312Tworzenie niemodalnych okien dialogowych z wieloma kartami 315Wy wietlanie wykresoacutew na formularzach UserForm 317

Lista kontrolna tworzenia i testowania okien dialogowych 318

Rozdzia 19 Udost pnianie makr z poziomu interfejsu u ytkownika 321Dostosowywanie Wst ki 321

R czne dopasowywanie Wst ki do w asnych potrzeb 322Dodawanie do Wst ki przycisku w asnego makra 324Dostosowywanie Wst ki za pomoc kodu XML 324

Dostosowywanie menu podr cznego 329Rodzaje obiektoacutew CommandBar 329Wy wietlanie wszystkich menu podr cznych 329Odwo ania do elementoacutew kolekcji CommandBars 330Odwo ania do formantoacutew obiektu CommandBar 331W a ciwo ci formantoacutew obiektu CommandBar 332

Kup książkę Poleć książkę

Spis tre ci 13

Przyk ady zastosowania VBA do modyfikacji menu podr cznego 334Resetowanie wszystkich wbudowanych menu podr cznych 334Dodawanie nowego elementu do menu podr cznego Cell 335Wy czanie menu podr cznego 337

Tworzenie w asnych paskoacutew narz dzi 338

Cz V Od teorii do praktyki 341Rozdzia 20 Jak tworzy w asne funkcje arkuszowe i jak prze y aby o tym opowiedzie 343

Dlaczego tworzymy w asne funkcje 343Podstawowe informacje o funkcjach VBA 344Tworzenie funkcji 345Praca z argumentami funkcji 345Przyk ady funkcji 346

Funkcje bezargumentowe 346Funkcje jednoargumentowe 346Funkcje z dwoma argumentami 348Funkcje pobieraj ce zakres jako argument 349Funkcje z argumentami opcjonalnymi 351

Funkcje opakowuj ce 353Funkcja NumberFormat 353Funkcja ExtractElement 354Funkcja SayIt 354Funkcja IsLike 355

Funkcje zwracaj ce tablice 355Zwracanie tablicy zawieraj cej nazwy miesi cy 355Zwracanie posortowanej listy 356

Okno dialogowe Wstawianie funkcji 358Wy wietlanie opisoacutew funkcji 358Opisy argumentoacutew 360

Rozdzia 21 Tworzenie dodatkoacutew 361No dobrzehellip czym zatem s dodatki 361Po co tworzy si dodatki 362Praca z dodatkami 363Podstawy tworzenia dodatkoacutew 364Tworzymy przyk adowy dodatek 365

Konfiguracja skoroszytu 365Testowanie skoroszytu 367Tworzenie opisoacutew dodatku 368Ochrona kodu VBA 369Tworzenie dodatku 369Otwieranie dodatku 369Dystrybucja dodatkoacutew 370Modyfikowanie dodatkoacutew 371

Kup książkę Poleć książkę

14 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Cz VI Dekalogi 373Rozdzia 22 Dziesi pyta na temat VBA (wraz z odpowiedziami) 375

Rozdzia 23 (Prawie) dziesi roacutede informacji na temat Excela 379System pomocy j zyka VBA 379Wsparcie techniczne firmy Microsoft 380Inne strony internetowe 380Blogi po wi cone Excelowi 380Google 381Bing 381Lokalne grupy u ytkownikoacutew 381Moje inne ksi ki 381

Rozdzia 24 Dziesi rzeczy ktoacutere powiniene robi w j zyku VBAi ktoacuterych nie powiniene robi 383

Zawsze deklaruj wszystkie zmienne 383Nigdy nie powiniene myli has a chroni cego kod VBA z bezpiecze stwem aplikacji 384Zawsze staraj si wyczy ci i zoptymalizowa kod aplikacji 384Nigdy nie umieszczaj wszystkiego w jednej procedurze 385Zawsze powiniene rozwa y zastosowanie innego oprogramowania 385Nigdy nie zak adaj e ka dy u ytkownik zezwala na uruchamianie makr 386Zawsze staraj si eksperymentowa z nowymi rozwi zaniami 386Nigdy z goacutery nie zak adaj e Twoacutej kod b dzie poprawnie dzia a z innymi wersjami Excela 386Zawsze pami taj o u ytkownikach Twojej aplikacji 387Nigdy nie zapominaj o tworzeniu kopii zapasowych 387

Skorowidz 389

Kup książkę Poleć książkę

Rozdzia 14

Przyk ady i technikiprogramowania w j zyku VBA

W tym rozdziale poznasz szereg przyk adoacutew technik programowania w j zyku VBA dowiesz si jak mo esz przyspieszy dzia anie kodu VBA w Twojej aplikacji

ierz e nauka programowania jest znacznie szybsza i zdecydowanie bardziejefektywna kiedy pracujemy na konkretnych przyk adach Dobrze opracowany

przyk ad o wiele lepiej obja nia zagadnienie ni najbardziej rozbudowany i szczegoacute owyale teoretyczny opis Poniewa czytasz t ksi k prawdopodobnie zgadzasz si ze mnw tej materii W tym rozdziale znajdziesz szereg przyk adoacutew demonstruj cych u ytecznepraktyczne techniki programowania w j zyku VBA

Przyk ady omawiane w tym rozdziale zosta y podzielone na kilka kategorii Oto one

Praca z zakresami

Modyfikacja ustawie Excela

Praca z wykresami

Przyspieszanie i optymalizacja dzia ania kodu VBA

Niektoacutere z prezentowanych przyk adoacutew b dziesz moacuteg od razu wykorzysta w swoichaplikacjach jednak w wi kszo ci przypadkoacutew b d wymaga y pewnego dostosowaniado Twoich aplikacji

Przetwarzanie zakresoacutew komoacuterekWi kszo zada z jakimi b dziesz si styka programuj c w j zyku VBA b dzie zapewnewymaga a mniejszego b d wi kszego przetwarzania zakresoacutew komoacuterek (aby od wie ysobie wiadomo ci na temat obiektu Range powiniene zajrze do rozdzia u 8) Kiedypracujesz z obiektami Range powiniene pami ta o nast puj cych sprawach

Kod VBA nie musi zaznacza danego zakresu aby go przetwarza

Je eli kod VBA zaznacza wybrany zakres przechowuj cy go skoroszyt musi byaktywny

W

Kup książkę Poleć książkę

218 Cz III Podstawy programowania

Rejestrator makr nie zawsze b dzie w stanie wygenerowa optymalny kod VBABardzo cz sto jednak mo esz za jego pomoc utworzy bazowe makro i potemodpowiednio zmodyfikowa kod tak aby sta si bardziej efektywny

Zazwyczaj bardzo dobrym rozwi zaniem jest nadawanie nazw zakresom komoacuterekwykorzystywanym w kodzie VBA Przyk adowo polecenie Range(Total)jestznacznie lepszym rozwi zaniem ni Range(D45) Je li w tym drugim przypadkupoacute niej wstawisz dodatkowy wiersz powy ej wiersza 45 to eby wszystko dzia a opoprawnie b dziesz musia zmodyfikowa makro tak aby korzysta o z nowegopoprawnego adresu komoacuterki a ta po wykonaniu takiej operacji b dzie mia a innyadres (D46) Aby nada nazw wybranemu zakresowi komoacuterek powiniene przejna kart FORMU Y i wybra polecenie Definiuj nazw znajduj ce si w grupiepolece Nazwy zdefiniowane

Kiedy tworzysz makro ktoacutere b dzie przetwarza o zakres komoacuterek zaznaczonyprzez u ytkownika pami taj e u ytkownik mo e zaznaczy kilka ca ych kolumnczy wierszy W wi kszo ci przypadkoacutew z pewno ci nie b dziesz chcia aby makrow p tli przechodzi o w takiej sytuacji przez wszystkie zaznaczone komoacuterki (w czniez pustymi) co mog oby zaj bardzo wiele czasu Dobre makro powinno odszukai przetwarza tylko komoacuterki ktoacutere nie s puste

Excel pozwala na jednoczesne zaznaczanie wielu zakresoacutew komoacuterek Aby to zrobi powiniene zaznaczy pierwszy zakres komoacuterek potem wcisn i przytrzymaklawisz Ctrl i zaznacza kolejne zakresy komoacuterek przy u yciu myszy Kod Twojejaplikacji powinien by przygotowany na takie sytuacje i podejmowa odpowiednieakcje

Skoroszyty z wybranymi przyk adami omawianymi w tym rozdziale znajdziesz na stronieinternetowej naszej ksi ki

Je eli chcesz samodzielnie wpisywa kod omawianych przyk adoacutew przejd do edytoraVBE naciskaj c kombinacj klawiszy lewyAlt+F11 a nast pnie wstaw nowy modu VBAi wpisz kod prezentowanych procedur Upewnij si e Twoacutej skoroszyt jest poprawnieskonfigurowany Je eli na przyk ad kod danego przyk adu odwo uje si do arkuszyo nazwach Arkusz1 i Arkusz2 upewnij si e takie arkusze istniej w Twoim skoroszycie

Kopiowanie zakresoacutewKopiowanie zakresoacutew komoacuterek mo e mia o pretendowa do miana jednej z najcz ciejwykonywanych operacji w Excelu Kiedy w czysz rejestrator makr i skopiujesz zakreskomoacuterek o adresie A1A5 do zakresu B1B5 otrzymasz nast puj ce makro

Sub CopyRange() Range(A1A5)Select SelectionCopy Range(B1)Select ActiveSheetPaste ApplicationCutCopyMode = FalseEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 219

Zwroacute uwag na ostatnie polecenie Zosta o ono wygenerowane przez naci ni cieklawisza Esc po skopiowaniu zakresu komoacuterek co spowodowa o usuni cie przerywanejlinii reprezentuj cej na arkuszu obramowanie kopiowanego zakresu

Przedstawione makro dzia a poprawnie ale zakresy komoacuterek mo na kopiowa w znaczniebardziej efektywny sposoacuteb Identyczny rezultat mo esz osi gn za pomoc proceduryktoacutera sk ada si z tylko jednego wiersza polecenia i nie zaznacza adnych komoacuterek(dzi ki czemu nie wymaga ustawiania w a ciwo ci CutCopyMode na warto False)

Sub CopyRange2() Range(A1A5)Copy Range(B1)End Sub

Procedura przedstawiona powy ej korzysta z tego e metoda Copy mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe kopiowanego zakresu Informacje o tymznalaz em w pomocy systemowej VBA Powy szy przyk ad doskonale roacutewnie ilustrujefakt e rejestrator makr nie zawsze generuje najbardziej efektywny kod

Kopiowanie zakresu o zmiennej wielko ciW wielu przypadkach konieczne jest skopiowanie zakresu komoacuterek dla ktoacuterego dok adnaliczba wierszy i kolumn okre laj cych jego wielko nie jest z goacutery znana Przyk adowomo esz dysponowa skoroszytem ledz cym tygodniow sprzeda w ktoacuterym liczba wierszyzmienia si ka dego tygodnia po wprowadzeniu nowych danych

Na rysunku 141 przedstawiam przyk ad cz sto spotykanego typu arkusza Znajduj cysi w nim zakres komoacuterek sk ada si z kilku wierszy ktoacuterych liczba zmienia si ka degodnia Poniewa nie wiesz jaki jest rozmiar zakresu w danej chwili musisz utworzykod ktoacutery b dzie dzia a bez u ywania adresu zakresu kopiowanych komoacuterek

Rysunek 141Przyk ad zakre-su ktoacutery mo e

sk ada siz dowolnej

liczby wierszy

Makro przedstawione poni ej ilustruje sposoacuteb kopiowania zakresu komoacuterek z arkuszaArkusz1 do arkusza Arkusz2 (pocz wszy od komoacuterki A1) Makro wykorzystuje w a ciwoCurrentRegion ktoacutera zwraca obiekt Range odpowiadaj cy blokowi komoacuterek otaczaj cychokre lon komoacuterk (w tym przypadku o adresie A1)

Kup książkę Poleć książkę

220 Cz III Podstawy programowania

Sub CopyCurrentRegion() Range(A1)CurrentRegionCopy Sheets(Arkusz2)Select Range(A1)Select ActiveSheetPaste Sheets(Arkusz1)Select ApplicationCutCopyMode = FalseEnd Sub

Zastosowanie w a ciwo ci CurrentRegion jest roacutewnowa ne z przej ciem na kartNARZ DZIA G OacuteWNE i wybraniem polecenia Znajd i zaznaczPrzejd do mdashspecjalnie znajduj cego si w grupie opcji Edytowanie i nast pnie zaznaczeniem opcjiBie cy obszar Aby przekona si jak to dzia a podczas wykonywania tych polecepowiniene u y rejestratora makr Zazwyczaj warto w a ciwo ci CurrentRegionreprezentuje prostok tny blok komoacuterek otoczony przez puste wiersze i kolumny

Oczywi cie mo esz zoptymalizowa kod makra przedstawionego powy ej i niezaznacza obszaru docelowego dla kopiowanych komoacuterek Makro przedstawione poni ejkorzysta z faktu e metoda Copy mo e u ywa argumentu wywo ania reprezentuj cegomiejsce docelowe kopiowanego zakresu

Sub CopyCurrentRegion2() Range(A1)CurrentRegionCopy _ Sheets(Arkusz2)Range(A1)End Sub

Je eli zakres komoacuterek ktoacutery chcesz skopiowa jest tabel (zdefiniowan przy u yciapolecenia WSTAWIANIETabeleTabela) ca e zadanie b dzie jeszcze atwiejsze Ka databela posiada swoj nazw (na przyk ad Tabela1) i automatycznie rozszerza si w miardodawania nowych wierszy

Sub CopyTable() Range(Tabela1)Copy Sheets(Arkusz2)Range(A1)End Sub

Je eli sproacutebujesz wykona procedur przedstawion powy ej przekonasz si e wiersznag oacutewka tabeli nie jest kopiowany poniewa obiekt Tabela1 nie obejmuje tegowiersza Je li chcesz aby wiersz nag oacutewka roacutewnie by kopiowany powiniene zmieniodwo anie do tabeli tak jak to zosta o przedstawione poni ej

Range(Tabela1[All])

Zaznaczanie komoacuterekdo ko ca wiersza lub kolumnyPrawdopodobnie bardzo cz sto u ywasz kombinacji klawiszy takich jak Ctrl+Shift+ czy Ctrl+Shift+ do zaznaczania zakresoacutew sk adaj cych si ze wszystkich komoacuterekod komoacuterki aktywnej a do ko ca kolumny czy wiersza Nie jest wi c chyba zaskoczenieme mo esz napisa makro ktoacutere b dzie zaznacza komoacuterki w podobny sposoacuteb

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 221

Do zaznaczania ca ego bloku komoacuterek mo esz u y w a ciwo ci CurrentRegion Ale copowiniene zrobi je eli chcesz zaznaczy powiedzmy tylko jedn kolumn z tegobloku komoacuterek Na szcz cie VBA pozwala na wykonywanie takich operacji Proceduraktoacuterej kod przedstawiam poni ej zaznacza zakres komoacuterek pocz wszy od bie cejaktywnej komoacuterki w doacute kolumny a do komoacuterki znajduj cej si o jeden wiersz powy ejpierwszej pustej komoacuterki tej kolumny Po zaznaczeniu zakresu mo esz przetwarza gow dowolny sposoacuteb mdash kopiowa komoacuterki przenosi je w inne miejsce arkusza zmieniaformatowanie i tak dalej

Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))SelectEnd Sub

Oczywi cie taki sam obszar mo esz roacutewnie zaznaczy r cznie Aby to zrobi powinienezaznaczy pierwsz komoacuterk nast pnie wcisn i przytrzyma klawisz Shift nacisnklawisz End i wreszcie nacisn klawisz (strza ka w doacute )

W przyk adzie wykorzystuj metod End obiektu ActiveCell ktoacutera zwraca obiekt typuRange Metoda End pobiera jeden argument okre laj cy kierunek w ktoacuterym zostaniewykonane zaznaczenie Argumentami tej metody mo e by dowolna ze sta ychprzedstawionych poni ej

xlUp

xlDown

xlToLeft

xlToRight

Pami taj e zaznaczanie zakresu nie jest potrzebne do jego przetwarzania Makroprzedstawione poni ej zmienia czcionk w komoacuterkach zmiennego zakresu (pojedynczakolumna) na pogrubion bez uprzedniego zaznaczenia zakresu

Sub MakeBold() Range(ActiveCell ActiveCellEnd(xlDown)) _ FontBold = TrueEnd Sub

Zaznaczanie ca ego wiersza lub ca ej kolumnyProcedura przedstawiona poni ej ilustruje sposoacuteb zaznaczania kolumny w ktoacuterej znajdujesi aktywna komoacuterka Makro wykorzystuje w a ciwo EntireColumn ktoacutera zwracaobiekt typu Range reprezentuj cy ca kolumn

Sub SelectColumn() ActiveCellEntireColumnSelectEnd Sub

Jak pewnie si spodziewasz w j zyku VBA dost pna jest roacutewnie w a ciwo EntireRowktoacutera zwraca obiekt typu Range reprezentuj cy ca y wiersz

Kup książkę Poleć książkę

222 Cz III Podstawy programowania

Przenoszenie zakresoacutewZazwyczaj aby przenie zakres komoacuterek zaznaczasz go wycinasz do schowka systemowegoi nast pnie wklejasz w inne miejsce Je eli u yjesz rejestratora makr do zapisania takiejoperacji przekonasz si e wygenerowany zostanie kod podobny do przedstawionegoponi ej

Sub MoveRange() Range(A1C6)Select SelectionCut Range(A10)Select ActiveSheetPasteEnd Sub

Podobnie jak podczas kopiowania komoacuterek takie rozwi zanie nie jest najbardziejefektywnym sposobem przenoszenia zakresu komoacuterek w inne miejsce W praktyce takoperacj mo esz wykona za pomoc procedury sk adaj cej si z jednego wiersza koduco prezentuj poni ej

Sub MoveRange2() Range(A1C6)Cut Range(A10)End Sub

Makro przedstawione powy ej korzysta z faktu e metoda Cut mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe przenoszonego zakresu Zwroacute roacutewnieuwag na fakt e podczas przenoszenia aden zakres komoacuterek nie jest zaznaczanyWska nik aktywnej komoacuterki przez ca y czas pozostaje w tym samym miejscu arkusza

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tliJednym z zada cz sto wykonywanych przez makra jest sprawdzanie poszczegoacutelnychkomoacuterek zakresu i wykonywanie okre lonych operacji na podstawie ich zawarto ci Takiemakra zazwyczaj wykorzystuj p tl For-Next za pomoc ktoacuterej przetwarzane s komoacuterkizakresu

Przyk ad przedstawiony ni ej ilustruje sposoacuteb przechodzenia kolejno przez wszystkiekomoacuterki danego zakresu W naszym przypadku przetwarzany jest aktualnie zaznaczonyzakres komoacuterek Zmienna obiektowa o nazwie Cell reprezentuje aktualnie przetwarzankomoacuterk W p tli For Each-Next znajduje si jedno polecenie ktoacutere sprawdza aktualnieprzetwarzan komoacuterk i zmienia jej czcionk na pogrubion je eli warto przechowywanaw komoacuterce jest dodatnia

Sub ProcessCells() Dim Cell As Range For Each Cell In Selection If CellValue gt 0 Then CellFontBold = True Next CellEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 223

Taka procedura dzia a poprawnie ale co si stanie je eli u ytkownik zaznaczy cakolumn lub ca y wiersz To wcale nie jest takie nieprawdopodobne bo przecie Excelpozwala na wykonywanie operacji na ca ych wierszach i kolumnach W takiej sytuacjiwykonanie makra mo e zaj naprawd du o czasu poniewa nasza p tla przetwarzaka d komoacuterk zaznaczonego zakresu a cznie z pustymi w jednej kolumnie komoacuterekjest a 1 048 576hellip Aby zatem nasze makro by o bardziej wydajne musimy je takzmodyfikowa eby przetwarzane by y tylko i wy cznie komoacuterki ktoacutere nie s puste

Procedura przedstawiona poni ej przetwarza wy cznie niepuste komoacuterki zaznaczonegozakresu dzi ki zastosowaniu metody SpecialCells (wi cej szczegoacute owych informacji natemat tej metody znajdziesz w pomocy systemowej VBA) Nasza procedura za pomocpolecenia Set tworzy dwa obiekty typu Range pierwszy z nich to podzakres komoacuterekzakresu wej ciowego zawieraj cy wy cznie komoacuterki z warto ciami sta ymi (na przyk adteksty warto ci liczbowe litera y i tak dalej) a drugi sk ada si z komoacuterek zawieraj cychformu y Procedura przetwarza tylko komoacuterki nale ce do tych podzakresoacutew co w efekciepowoduje pomini cie przetwarzania wszystkich pozosta ych pustych komoacuterek zakresuwej ciowego Sprytne prawda

Sub SkipBlanks() Dim ConstantCells As Range Dim FormulaCells As Range Dim cell As Range Ignoruj b dy On Error Resume Next

Przetwarzaj komoacuterki zawieraj ce warto ci sta e Set ConstantCells = Selection _ SpecialCells(xlConstants) For Each cell In ConstantCells If cellValue gt 0 Then cellFontBold = True End If Next cell

Przetwarzaj komoacuterki zawieraj ce formu y Set FormulaCells = Selection _ SpecialCells(xlFormulas) For Each cell In FormulaCells If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Procedura SkipBlanks dzia a tak samo szybko niezale nie od tego jaki zakres komoacuterekzaznaczy e Mo esz na przyk ad zaznaczy zakres sk adaj cy si z kilku komoacuterek zaznaczywszystkie kolumny w danym zakresie albo wszystkie wiersze w danym zakresie albonawet ca y arkusz Jak wida jest to ogromne usprawnienie w stosunku do oryginalnejprocedury ProcessCells ktoacuter omoacutewi em nieco wcze niej

Zwroacute uwag e w kodzie procedury u yli my polecenia

On Error Resume Next

Kup książkę Poleć książkę

224 Cz III Podstawy programowania

Polecenie to powoduje e Excel po prostu ignoruje b dy (inaczej moacutewi c je eli proacutebawykonania danego polecenia ko czy si b dem Excel ignoruje ten b d i po prostuprzechodzi do kolejnego polecenia wi cej szczegoacute owych informacji na temat obs ugib doacutew znajdziesz w rozdziale 12) W naszym przypadku zastosowanie polecenia OnError jest konieczne poniewa metoda SpecialCells generuje b d gdy adna komoacuterkanie spe nia podanego kryterium

Zastosowanie metody SpecialCells jest roacutewnowa ne z przej ciem na kart NARZ DZIAG OacuteWNE wybraniem polecenia Znajd i zaznaczPrzejd do mdash specjalnie znajduj cegosi w grupie opcji Edytowanie i nast pnie zaznaczeniem opcji Sta e lub Formu y Abyprzekona si jak to dzia a podczas wykonywania tych polece powiniene u yrejestratora makr i zaznacza roacute ne opcje

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tli(cz II)A teraz ci g dalszy naszej opowie ci W tym punkcie przedstawi inny sposoacuteb efektywnegoprzetwarzania komoacuterek znajduj cych si w zaznaczonym zakresie Tym razem procedurab dzie korzysta a z w a ciwo ci UsedRange ktoacutera zwraca obiekt typu Range reprezentuj cyu ywany zakres arkusza Procedura korzysta roacutewnie z metody Intersect ktoacutera zwracaobiekt typu Range zawieraj cy komoacuterki b d ce cz ci wspoacuteln dwoacutech zakresoacutew

Poni ej przedstawiam zmodyfikowan wersj procedury SkipBlanks omawianejw poprzednim punkcie

Sub SkipBlanks2() Dim WorkRange As Range Dim cell As Range Set WorkRange = Intersect(Selection ActiveSheetUsedRange) For Each cell In WorkRange If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Zmienna obiektowa WorkRange zawiera komoacuterki ktoacutere s cz ci wspoacuteln zakresuzaznaczonego przez u ytkownika oraz zakresu u ywanych komoacuterek arkusza Je lizatem u ytkownik zaznaczy ca kolumn zmienna WorkRange b dzie zawiera a tylkokomoacuterki ktoacutere znajduj si jednocze nie w zaznaczonej kolumnie i w u ywanymzakresie arkusza Jak wida jest to bardzo szybka i efektywna metoda pozwalaj ca naunikni cie przetwarzania komoacuterek znajduj cych si poza zakresem u ywanychkomoacuterek arkusza

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 225

Wprowadzanie warto ci do komoacuterkiNa rysunku 142 pokazuj w jaki sposoacuteb mo esz u y funkcji InputBox j zyka VBA dopobierania od u ytkownika warto ci ktoacutera nast pnie mo e zosta zapisana w wybranejkomoacuterce W procedurze przedstawionej poni ej demonstruj jak poprosi u ytkownikao podanie warto ci i wstawi j do komoacuterki A1 aktywnego arkusza (i to wszystkoza pomoc jednego polecenia)

Sub GetValue() Range(A1)Value = InputBox( _ Wprowad warto dla komoacuterki A1)End Sub

Rysunek 142Zastosowaniefunkcji Input-

Box do pobie-rania warto ci

od u ytkownika

Przedstawiona procedura mo e jednak sprawia pewien problem Je eli u ytkowniknaci nie w oknie dialogowym przycisk Cancel procedura usunie wszelkie dane juznajduj ce si w komoacuterce A1 a takie zachowanie nie jest zbyt dobr praktyk programistyczn Naci ni cie przycisku Cancel powinno po prostu usuwa z ekranu okno dialogowe bezwykonywania adnych dodatkowych operacji

Makro przedstawione poni ej ilustruje znacznie lepsze podej cie do takiego zagadnieniai do zapami tania warto ci wprowadzonej przez u ytkownika wykorzystuje zmienn xJe eli zmienna zawiera co innego ni pusty ci g znakoacutew (czyli kiedy u ytkownikwprowadzi jak warto ) warto zmiennej jest zapisywana w komoacuterce A1 W przeciwnymprzypadku procedura ko czy dzia anie nie wykonuj c adnych dodatkowych operacji

Sub GetValue2() Dim x as Variant x = InputBox(Wprowad warto dla komoacuterki A1) If x ltgt Then Range(A1)Value = xEnd Sub

Zmienna x zosta a zdefiniowana jako zmienna typu Variant poniewa jej warto cimo e by warto albo pusty ci g znakoacutew (je eli u ytkownik naci nie przycisk Cancel)

Kup książkę Poleć książkę

226 Cz III Podstawy programowania

Okre lanie typu zaznaczonego zakresuJe eli zadaniem Twojego makra b dzie przetwarzanie zaznaczonego zakresu takiemakro musi mie zdolno sprawdzenia czy przed jego wywo aniem u ytkownikrzeczywi cie zaznaczy zakres komoacuterek W przeciwnym razie je eli przed wywo aniemmakra zaznaczony zostanie inny obiekt (na przyk ad wykres lub kszta t) proacuteba wykonaniamakra najprawdopodobniej zako czy si niepowodzeniem Polecenie przedstawioneponi ej wykorzystuje funkcj TypeName j zyka VBA do wy wietlania na ekranie typuaktualnie zaznaczonego obiektu

MsgBox TypeName(Selection)

Je eli aktualnie zaznaczony jest obiekt typu Range wykonanie takiego polecenia spowodujewy wietlenie s owa Range Je li Twoje makro dzia a tylko z zakresami komoacuterek mo eszu y polecenia If do sprawdzenia czy aktualnie zaznaczony obiekt to zakres (obiekttypu Range) Procedura przedstawiona poni ej sprawdza typ zaznaczonego obiektui je eli nie jest to obiekt typu Range na ekranie wy wietlany jest odpowiedni komunikati procedura ko czy dzia anie

Sub CheckSelection() If TypeName(Selection) ltgt Range Then MsgBox Zaznacz zakres komoacuterek Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Identyfikowanie zaznacze wielokrotnychJak pami tasz Excel pozwala na jednoczesne zaznaczanie wielu obiektoacutew Aby to zrobi powiniene podczas zaznaczania obiektoacutew lub zakresoacutew trzyma wci ni ty klawisz CtrlZaznaczenia wielokrotne mog by przyczyn problemoacutew z wykonywaniem niektoacuterychmakr Przyk adowo nie mo esz skopiowa zakresu komoacuterek ktoacutery zosta utworzonypoprzez wiele zaznacze nieci g ych zakresoacutew komoacuterek Je eli sproacutebujesz wykonatak operacj Excel wy wietli na ekranie komunikat przedstawiony na rysunku 143

Makro przedstawione ni ej pokazuje w jaki sposoacuteb mo esz sprawdzi czy u ytkownikdokona zaznaczenia wielokrotnego i na tej podstawie wykona odpowiedni operacj

Sub MultipleSelection() If SelectionAreasCount gt 1 Then MsgBox Zaznaczenia wielokrotne nie s dozwolone Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Przedstawiona procedura wykorzystuje metod Areas ktoacutera zwraca kolekcj wszystkichzakresoacutew w danym zaznaczeniu W a ciwo Count zwraca liczb obiektoacutew tej kolekcji

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 227

Rysunek 143Excel nie lubi

kiedy proacutebujeszkopiowa nie-ci g e zakresy

komoacuterek

Zmiana ustawie ExcelaChyba najbardziej u ytecznymi makrami s proste procedury ktoacutere zmieniaj jednolub kilka ustawie Excela Je li na przyk ad dojdziesz do wniosku e bardzo cz stoprzywo ujesz na ekran okno opcji programu Excel i zmieniasz jakie ustawienie takaoperacja z pewno ci b dzie bardzo dobrym kandydatem do napisania makraoszcz dzaj cego Twoacutej czas i u atwiaj cego zmian takiego ustawienia

W tym podrozdziale zaprezentuj dwa przyk ady procedur ktoacutere pokazuj w jakisposoacuteb mo na zmienia ustawienia Excela Ogoacutelne zasady dzia ania tych procedurmo esz z powodzeniem zastosowa do napisania w asnych makr zmieniaj cych inneustawienia Excela

Zmiana ustawie logicznych(opcje typu Boolean)Podobnie jak wy cznik wiat a opcje logiczne (typu Boolean) mog by albo w czonealbo wy czone Mo esz na przyk ad utworzy makro ktoacutere b dzie w cza o lub wy cza owy wietlanie podzia u arkusza na strony Kiedy wydrukujesz arkusz (lub skorzystaszz trybu podgl du wydruku) Excel wy wietla na arkuszu przerywane linie reprezentuj cemiejsca podzia u arkusza na strony wydruku Niektoacuterych u ytkownikoacutew (w czniez autorem tej ksi ki) takie zachowanie Excela irytuje Niestety jedynym sposobemwy czenia wy wietlania podzia u arkusza na strony jest otwarcie okna dialogowego Opcjeprogramu Excel przej cie na kart Zaawansowane a nast pnie przewijanie zawarto ci tejkarty a do odszukania opcji Poka podzia y stron Je eli podczas wy czania tej opcjikorzysta e z rejestratora makr przekonasz si e Excel generuje poni szy kod

Kup książkę Poleć książkę

228 Cz III Podstawy programowania

ActiveSheetDisplayPageBreaks = False

Z drugiej strony je eli podczas rejestrowania makra podzia y stron nie s widoczneExcel generuje taki kod

ActiveSheetDisplayPageBreaks = True

Takie informacje mog doprowadzi do wniosku e b dziesz musia napisa a dwamakra mdash jedno do w czania podgl du podzia u stron a drugie do jego wy czaniaNa szcz cie to nieprawda Procedura przedstawiona poni ej wykorzystuje operatorNot do zmiany warto ci logicznej True na False i odwrotnie Wykonanie proceduryTogglePageBreaks to prosty sposoacuteb na cykliczne w czanie i wy czanie podgl du podzia ustron arkusza

Sub TogglePageBreaks() On Error Resume Next ActiveSheetDisplayPageBreaks = Not _ ActiveSheetDisplayPageBreaksEnd Sub

Pierwsze polecenie informuje Excel e powinien ignorowa ewentualne b dy Przyk adowopodzia y stron nie s wy wietlane na arkuszach wykresoacutew Kiedy wprowadzisz takiepolecenie i sproacutebujesz wykona t procedur dla arkusza wykresu na ekranie nie pojawisi komunikat o b dzie

Techniki u ytej w procedurze TogglePageBreaks mo esz u ywa do zmiany dowolnychopcji logicznych (czyli takich ktoacuterych warto ciami s True albo False)

Zmiana innych opcji (typu non-Boolean)Do zmiany opcji ktoacutere nie s typu logicznego mo esz u ywa konstrukcji Select CaseW przyk adzie przedstawionym poni ej zmieniam tryb przeliczania skoroszytu z r cznegona automatyczny i odwrotnie i nakazuj wy wietlenie na ekranie komunikatu opisuj cegoaktualny tryb przeliczania arkusza

Sub ToggleCalcMode() Select Case ApplicationCalculation Case xlManual ApplicationCalculation = xlCalculationAutomatic MsgBox Automatyczne przeliczanie skoroszytu Case xlAutomatic ApplicationCalculation = xlCalculationManual MsgBox R czne przeliczanie skoroszytu End SelectEnd Sub

Techniki u ytej w procedurze ToggleCalcMode mo esz u ywa do zmiany dowolnychopcji ktoacutere nie posiadaj warto ci logicznych

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 8: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

Spis tre ci 11

Cz IV Komunikacja z u ytkownikiem 239Rozdzia 15 Proste okna dialogowe 241

Co zamiast formularzy UserForm 241Funkcja MsgBox 242

Wy wietlanie prostych okien dialogowych 243Pobieranie odpowiedzi z okna dialogowego 243Dostosowywanie wygl du okien dialogowych do w asnych potrzeb 244

Funkcja InputBox 247Sk adnia funkcji InputBox 248Przyk ad zastosowania funkcji InputBox 248Inny rodzaj okna dialogowego InputBox 249

Metoda GetOpenFilename 250Sk adnia metody GetOpenFilename 251Przyk ad zastosowania metody GetOpenFilename 251

Metoda GetSaveAsFilename 253Pobieranie nazwy folderu 254Wy wietlanie wbudowanych okien dialogowych programu Excel 254

Rozdzia 16 Wprowadzenie do formularzy UserForm 257Kiedy u ywa formularzy UserForm 257Tworzenie formularzy UserForm mdash wprowadzenie 258Praca z formularzami UserForm 259

Wstawianie nowego formularza UserForm 259Umieszczanie formantoacutew na formularzu UserForm 260Modyfikacja w a ciwo ci formantoacutew formularza UserForm 261Przegl danie okna Code formularza UserForm 263Wy wietlanie formularzy UserForm 263Pobieranie i wykorzystywanie informacji z formularzy UserForm 264

Przyk ad tworzenia formularza UserForm 264Tworzenie formularza UserForm 265Dodawanie przyciskoacutew polece (formanty CommandButton) 265Dodawanie przyciskoacutew opcji (formanty OptionButton) 267Dodawanie procedur obs ugi zdarze 268Tworzenie makra ktoacutere wy wietla formularz na ekranie 270Udost pnianie makra u ytkownikowi 271Testowanie dzia ania makra 272

Rozdzia 17 Praca z formantami formularza UserForm 275Rozpoczynamy prac z formantami formularzy UserForm 275

Dodawanie formantoacutew 276Wprowadzenie do w a ciwo ci formantoacutew 277

Formanty okien dialogowych mdash szczegoacute y 278Formant CheckBox (pole wyboru) 279Formant ComboBox (pole kombi) 280Formant CommandButton (przycisk polecenia) 281Formant Frame (pole grupy) 281Formant Image (pole obrazu) 282

Kup książkę Poleć książkę

12 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Formant Label (pole etykiety) 283Formant ListBox (pole listy) 283Formant MultiPage 284Formant OptionButton (przycisk opcji) 285Formant RefEdit (pole zakresu) 286Formant ScrollBar (pasek przewijania) 286Formant SpinButton (pokr t o) 287Formant TabStrip (pole karty) 288Formant TextBox (pole tekstowe) 288Formant ToggleButton (przycisk prze cznika) 289

Praca z formantami w oknach dialogowych 289Zmiana rozmiaroacutew i przenoszenie formantoacutew w inne miejsce 289Rozmieszczanie i wyroacutewnywanie po o enia formantoacutew w oknie dialogowym 290Obs uga u ytkownikoacutew preferuj cych korzystanie z klawiatury 291Testowanie formularzy UserForm 293

Estetyka okien dialogowych 293

Rozdzia 18 Techniki pracy z formularzami UserForm 295Zastosowanie w asnych okien dialogowych 295Przyk adowy formularz UserForm 296

Tworzenie okna dialogowego 296Tworzenie kodu procedury wy wietlaj cej okno dialogowe 298Udost pnianie makra u ytkownikowi 299Testowanie okna dialogowego 299Dodawanie procedur obs ugi zdarze 300Sprawdzanie poprawno ci danych 302Teraz okno dialogowe dzia a tak jak powinno 302

Wi cej przyk adoacutew formularzy UserForm 302Zastosowanie formantoacutew ListBox 303Zaznaczanie zakresoacutew 307Praca z wieloma grupami formantoacutew OptionButton 309Zastosowanie formantoacutew SpinButton oraz TextBox 310Wykorzystywanie formularza UserForm jako wska nika post pu zadania 312Tworzenie niemodalnych okien dialogowych z wieloma kartami 315Wy wietlanie wykresoacutew na formularzach UserForm 317

Lista kontrolna tworzenia i testowania okien dialogowych 318

Rozdzia 19 Udost pnianie makr z poziomu interfejsu u ytkownika 321Dostosowywanie Wst ki 321

R czne dopasowywanie Wst ki do w asnych potrzeb 322Dodawanie do Wst ki przycisku w asnego makra 324Dostosowywanie Wst ki za pomoc kodu XML 324

Dostosowywanie menu podr cznego 329Rodzaje obiektoacutew CommandBar 329Wy wietlanie wszystkich menu podr cznych 329Odwo ania do elementoacutew kolekcji CommandBars 330Odwo ania do formantoacutew obiektu CommandBar 331W a ciwo ci formantoacutew obiektu CommandBar 332

Kup książkę Poleć książkę

Spis tre ci 13

Przyk ady zastosowania VBA do modyfikacji menu podr cznego 334Resetowanie wszystkich wbudowanych menu podr cznych 334Dodawanie nowego elementu do menu podr cznego Cell 335Wy czanie menu podr cznego 337

Tworzenie w asnych paskoacutew narz dzi 338

Cz V Od teorii do praktyki 341Rozdzia 20 Jak tworzy w asne funkcje arkuszowe i jak prze y aby o tym opowiedzie 343

Dlaczego tworzymy w asne funkcje 343Podstawowe informacje o funkcjach VBA 344Tworzenie funkcji 345Praca z argumentami funkcji 345Przyk ady funkcji 346

Funkcje bezargumentowe 346Funkcje jednoargumentowe 346Funkcje z dwoma argumentami 348Funkcje pobieraj ce zakres jako argument 349Funkcje z argumentami opcjonalnymi 351

Funkcje opakowuj ce 353Funkcja NumberFormat 353Funkcja ExtractElement 354Funkcja SayIt 354Funkcja IsLike 355

Funkcje zwracaj ce tablice 355Zwracanie tablicy zawieraj cej nazwy miesi cy 355Zwracanie posortowanej listy 356

Okno dialogowe Wstawianie funkcji 358Wy wietlanie opisoacutew funkcji 358Opisy argumentoacutew 360

Rozdzia 21 Tworzenie dodatkoacutew 361No dobrzehellip czym zatem s dodatki 361Po co tworzy si dodatki 362Praca z dodatkami 363Podstawy tworzenia dodatkoacutew 364Tworzymy przyk adowy dodatek 365

Konfiguracja skoroszytu 365Testowanie skoroszytu 367Tworzenie opisoacutew dodatku 368Ochrona kodu VBA 369Tworzenie dodatku 369Otwieranie dodatku 369Dystrybucja dodatkoacutew 370Modyfikowanie dodatkoacutew 371

Kup książkę Poleć książkę

14 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Cz VI Dekalogi 373Rozdzia 22 Dziesi pyta na temat VBA (wraz z odpowiedziami) 375

Rozdzia 23 (Prawie) dziesi roacutede informacji na temat Excela 379System pomocy j zyka VBA 379Wsparcie techniczne firmy Microsoft 380Inne strony internetowe 380Blogi po wi cone Excelowi 380Google 381Bing 381Lokalne grupy u ytkownikoacutew 381Moje inne ksi ki 381

Rozdzia 24 Dziesi rzeczy ktoacutere powiniene robi w j zyku VBAi ktoacuterych nie powiniene robi 383

Zawsze deklaruj wszystkie zmienne 383Nigdy nie powiniene myli has a chroni cego kod VBA z bezpiecze stwem aplikacji 384Zawsze staraj si wyczy ci i zoptymalizowa kod aplikacji 384Nigdy nie umieszczaj wszystkiego w jednej procedurze 385Zawsze powiniene rozwa y zastosowanie innego oprogramowania 385Nigdy nie zak adaj e ka dy u ytkownik zezwala na uruchamianie makr 386Zawsze staraj si eksperymentowa z nowymi rozwi zaniami 386Nigdy z goacutery nie zak adaj e Twoacutej kod b dzie poprawnie dzia a z innymi wersjami Excela 386Zawsze pami taj o u ytkownikach Twojej aplikacji 387Nigdy nie zapominaj o tworzeniu kopii zapasowych 387

Skorowidz 389

Kup książkę Poleć książkę

Rozdzia 14

Przyk ady i technikiprogramowania w j zyku VBA

W tym rozdziale poznasz szereg przyk adoacutew technik programowania w j zyku VBA dowiesz si jak mo esz przyspieszy dzia anie kodu VBA w Twojej aplikacji

ierz e nauka programowania jest znacznie szybsza i zdecydowanie bardziejefektywna kiedy pracujemy na konkretnych przyk adach Dobrze opracowany

przyk ad o wiele lepiej obja nia zagadnienie ni najbardziej rozbudowany i szczegoacute owyale teoretyczny opis Poniewa czytasz t ksi k prawdopodobnie zgadzasz si ze mnw tej materii W tym rozdziale znajdziesz szereg przyk adoacutew demonstruj cych u ytecznepraktyczne techniki programowania w j zyku VBA

Przyk ady omawiane w tym rozdziale zosta y podzielone na kilka kategorii Oto one

Praca z zakresami

Modyfikacja ustawie Excela

Praca z wykresami

Przyspieszanie i optymalizacja dzia ania kodu VBA

Niektoacutere z prezentowanych przyk adoacutew b dziesz moacuteg od razu wykorzysta w swoichaplikacjach jednak w wi kszo ci przypadkoacutew b d wymaga y pewnego dostosowaniado Twoich aplikacji

Przetwarzanie zakresoacutew komoacuterekWi kszo zada z jakimi b dziesz si styka programuj c w j zyku VBA b dzie zapewnewymaga a mniejszego b d wi kszego przetwarzania zakresoacutew komoacuterek (aby od wie ysobie wiadomo ci na temat obiektu Range powiniene zajrze do rozdzia u 8) Kiedypracujesz z obiektami Range powiniene pami ta o nast puj cych sprawach

Kod VBA nie musi zaznacza danego zakresu aby go przetwarza

Je eli kod VBA zaznacza wybrany zakres przechowuj cy go skoroszyt musi byaktywny

W

Kup książkę Poleć książkę

218 Cz III Podstawy programowania

Rejestrator makr nie zawsze b dzie w stanie wygenerowa optymalny kod VBABardzo cz sto jednak mo esz za jego pomoc utworzy bazowe makro i potemodpowiednio zmodyfikowa kod tak aby sta si bardziej efektywny

Zazwyczaj bardzo dobrym rozwi zaniem jest nadawanie nazw zakresom komoacuterekwykorzystywanym w kodzie VBA Przyk adowo polecenie Range(Total)jestznacznie lepszym rozwi zaniem ni Range(D45) Je li w tym drugim przypadkupoacute niej wstawisz dodatkowy wiersz powy ej wiersza 45 to eby wszystko dzia a opoprawnie b dziesz musia zmodyfikowa makro tak aby korzysta o z nowegopoprawnego adresu komoacuterki a ta po wykonaniu takiej operacji b dzie mia a innyadres (D46) Aby nada nazw wybranemu zakresowi komoacuterek powiniene przejna kart FORMU Y i wybra polecenie Definiuj nazw znajduj ce si w grupiepolece Nazwy zdefiniowane

Kiedy tworzysz makro ktoacutere b dzie przetwarza o zakres komoacuterek zaznaczonyprzez u ytkownika pami taj e u ytkownik mo e zaznaczy kilka ca ych kolumnczy wierszy W wi kszo ci przypadkoacutew z pewno ci nie b dziesz chcia aby makrow p tli przechodzi o w takiej sytuacji przez wszystkie zaznaczone komoacuterki (w czniez pustymi) co mog oby zaj bardzo wiele czasu Dobre makro powinno odszukai przetwarza tylko komoacuterki ktoacutere nie s puste

Excel pozwala na jednoczesne zaznaczanie wielu zakresoacutew komoacuterek Aby to zrobi powiniene zaznaczy pierwszy zakres komoacuterek potem wcisn i przytrzymaklawisz Ctrl i zaznacza kolejne zakresy komoacuterek przy u yciu myszy Kod Twojejaplikacji powinien by przygotowany na takie sytuacje i podejmowa odpowiednieakcje

Skoroszyty z wybranymi przyk adami omawianymi w tym rozdziale znajdziesz na stronieinternetowej naszej ksi ki

Je eli chcesz samodzielnie wpisywa kod omawianych przyk adoacutew przejd do edytoraVBE naciskaj c kombinacj klawiszy lewyAlt+F11 a nast pnie wstaw nowy modu VBAi wpisz kod prezentowanych procedur Upewnij si e Twoacutej skoroszyt jest poprawnieskonfigurowany Je eli na przyk ad kod danego przyk adu odwo uje si do arkuszyo nazwach Arkusz1 i Arkusz2 upewnij si e takie arkusze istniej w Twoim skoroszycie

Kopiowanie zakresoacutewKopiowanie zakresoacutew komoacuterek mo e mia o pretendowa do miana jednej z najcz ciejwykonywanych operacji w Excelu Kiedy w czysz rejestrator makr i skopiujesz zakreskomoacuterek o adresie A1A5 do zakresu B1B5 otrzymasz nast puj ce makro

Sub CopyRange() Range(A1A5)Select SelectionCopy Range(B1)Select ActiveSheetPaste ApplicationCutCopyMode = FalseEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 219

Zwroacute uwag na ostatnie polecenie Zosta o ono wygenerowane przez naci ni cieklawisza Esc po skopiowaniu zakresu komoacuterek co spowodowa o usuni cie przerywanejlinii reprezentuj cej na arkuszu obramowanie kopiowanego zakresu

Przedstawione makro dzia a poprawnie ale zakresy komoacuterek mo na kopiowa w znaczniebardziej efektywny sposoacuteb Identyczny rezultat mo esz osi gn za pomoc proceduryktoacutera sk ada si z tylko jednego wiersza polecenia i nie zaznacza adnych komoacuterek(dzi ki czemu nie wymaga ustawiania w a ciwo ci CutCopyMode na warto False)

Sub CopyRange2() Range(A1A5)Copy Range(B1)End Sub

Procedura przedstawiona powy ej korzysta z tego e metoda Copy mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe kopiowanego zakresu Informacje o tymznalaz em w pomocy systemowej VBA Powy szy przyk ad doskonale roacutewnie ilustrujefakt e rejestrator makr nie zawsze generuje najbardziej efektywny kod

Kopiowanie zakresu o zmiennej wielko ciW wielu przypadkach konieczne jest skopiowanie zakresu komoacuterek dla ktoacuterego dok adnaliczba wierszy i kolumn okre laj cych jego wielko nie jest z goacutery znana Przyk adowomo esz dysponowa skoroszytem ledz cym tygodniow sprzeda w ktoacuterym liczba wierszyzmienia si ka dego tygodnia po wprowadzeniu nowych danych

Na rysunku 141 przedstawiam przyk ad cz sto spotykanego typu arkusza Znajduj cysi w nim zakres komoacuterek sk ada si z kilku wierszy ktoacuterych liczba zmienia si ka degodnia Poniewa nie wiesz jaki jest rozmiar zakresu w danej chwili musisz utworzykod ktoacutery b dzie dzia a bez u ywania adresu zakresu kopiowanych komoacuterek

Rysunek 141Przyk ad zakre-su ktoacutery mo e

sk ada siz dowolnej

liczby wierszy

Makro przedstawione poni ej ilustruje sposoacuteb kopiowania zakresu komoacuterek z arkuszaArkusz1 do arkusza Arkusz2 (pocz wszy od komoacuterki A1) Makro wykorzystuje w a ciwoCurrentRegion ktoacutera zwraca obiekt Range odpowiadaj cy blokowi komoacuterek otaczaj cychokre lon komoacuterk (w tym przypadku o adresie A1)

Kup książkę Poleć książkę

220 Cz III Podstawy programowania

Sub CopyCurrentRegion() Range(A1)CurrentRegionCopy Sheets(Arkusz2)Select Range(A1)Select ActiveSheetPaste Sheets(Arkusz1)Select ApplicationCutCopyMode = FalseEnd Sub

Zastosowanie w a ciwo ci CurrentRegion jest roacutewnowa ne z przej ciem na kartNARZ DZIA G OacuteWNE i wybraniem polecenia Znajd i zaznaczPrzejd do mdashspecjalnie znajduj cego si w grupie opcji Edytowanie i nast pnie zaznaczeniem opcjiBie cy obszar Aby przekona si jak to dzia a podczas wykonywania tych polecepowiniene u y rejestratora makr Zazwyczaj warto w a ciwo ci CurrentRegionreprezentuje prostok tny blok komoacuterek otoczony przez puste wiersze i kolumny

Oczywi cie mo esz zoptymalizowa kod makra przedstawionego powy ej i niezaznacza obszaru docelowego dla kopiowanych komoacuterek Makro przedstawione poni ejkorzysta z faktu e metoda Copy mo e u ywa argumentu wywo ania reprezentuj cegomiejsce docelowe kopiowanego zakresu

Sub CopyCurrentRegion2() Range(A1)CurrentRegionCopy _ Sheets(Arkusz2)Range(A1)End Sub

Je eli zakres komoacuterek ktoacutery chcesz skopiowa jest tabel (zdefiniowan przy u yciapolecenia WSTAWIANIETabeleTabela) ca e zadanie b dzie jeszcze atwiejsze Ka databela posiada swoj nazw (na przyk ad Tabela1) i automatycznie rozszerza si w miardodawania nowych wierszy

Sub CopyTable() Range(Tabela1)Copy Sheets(Arkusz2)Range(A1)End Sub

Je eli sproacutebujesz wykona procedur przedstawion powy ej przekonasz si e wiersznag oacutewka tabeli nie jest kopiowany poniewa obiekt Tabela1 nie obejmuje tegowiersza Je li chcesz aby wiersz nag oacutewka roacutewnie by kopiowany powiniene zmieniodwo anie do tabeli tak jak to zosta o przedstawione poni ej

Range(Tabela1[All])

Zaznaczanie komoacuterekdo ko ca wiersza lub kolumnyPrawdopodobnie bardzo cz sto u ywasz kombinacji klawiszy takich jak Ctrl+Shift+ czy Ctrl+Shift+ do zaznaczania zakresoacutew sk adaj cych si ze wszystkich komoacuterekod komoacuterki aktywnej a do ko ca kolumny czy wiersza Nie jest wi c chyba zaskoczenieme mo esz napisa makro ktoacutere b dzie zaznacza komoacuterki w podobny sposoacuteb

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 221

Do zaznaczania ca ego bloku komoacuterek mo esz u y w a ciwo ci CurrentRegion Ale copowiniene zrobi je eli chcesz zaznaczy powiedzmy tylko jedn kolumn z tegobloku komoacuterek Na szcz cie VBA pozwala na wykonywanie takich operacji Proceduraktoacuterej kod przedstawiam poni ej zaznacza zakres komoacuterek pocz wszy od bie cejaktywnej komoacuterki w doacute kolumny a do komoacuterki znajduj cej si o jeden wiersz powy ejpierwszej pustej komoacuterki tej kolumny Po zaznaczeniu zakresu mo esz przetwarza gow dowolny sposoacuteb mdash kopiowa komoacuterki przenosi je w inne miejsce arkusza zmieniaformatowanie i tak dalej

Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))SelectEnd Sub

Oczywi cie taki sam obszar mo esz roacutewnie zaznaczy r cznie Aby to zrobi powinienezaznaczy pierwsz komoacuterk nast pnie wcisn i przytrzyma klawisz Shift nacisnklawisz End i wreszcie nacisn klawisz (strza ka w doacute )

W przyk adzie wykorzystuj metod End obiektu ActiveCell ktoacutera zwraca obiekt typuRange Metoda End pobiera jeden argument okre laj cy kierunek w ktoacuterym zostaniewykonane zaznaczenie Argumentami tej metody mo e by dowolna ze sta ychprzedstawionych poni ej

xlUp

xlDown

xlToLeft

xlToRight

Pami taj e zaznaczanie zakresu nie jest potrzebne do jego przetwarzania Makroprzedstawione poni ej zmienia czcionk w komoacuterkach zmiennego zakresu (pojedynczakolumna) na pogrubion bez uprzedniego zaznaczenia zakresu

Sub MakeBold() Range(ActiveCell ActiveCellEnd(xlDown)) _ FontBold = TrueEnd Sub

Zaznaczanie ca ego wiersza lub ca ej kolumnyProcedura przedstawiona poni ej ilustruje sposoacuteb zaznaczania kolumny w ktoacuterej znajdujesi aktywna komoacuterka Makro wykorzystuje w a ciwo EntireColumn ktoacutera zwracaobiekt typu Range reprezentuj cy ca kolumn

Sub SelectColumn() ActiveCellEntireColumnSelectEnd Sub

Jak pewnie si spodziewasz w j zyku VBA dost pna jest roacutewnie w a ciwo EntireRowktoacutera zwraca obiekt typu Range reprezentuj cy ca y wiersz

Kup książkę Poleć książkę

222 Cz III Podstawy programowania

Przenoszenie zakresoacutewZazwyczaj aby przenie zakres komoacuterek zaznaczasz go wycinasz do schowka systemowegoi nast pnie wklejasz w inne miejsce Je eli u yjesz rejestratora makr do zapisania takiejoperacji przekonasz si e wygenerowany zostanie kod podobny do przedstawionegoponi ej

Sub MoveRange() Range(A1C6)Select SelectionCut Range(A10)Select ActiveSheetPasteEnd Sub

Podobnie jak podczas kopiowania komoacuterek takie rozwi zanie nie jest najbardziejefektywnym sposobem przenoszenia zakresu komoacuterek w inne miejsce W praktyce takoperacj mo esz wykona za pomoc procedury sk adaj cej si z jednego wiersza koduco prezentuj poni ej

Sub MoveRange2() Range(A1C6)Cut Range(A10)End Sub

Makro przedstawione powy ej korzysta z faktu e metoda Cut mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe przenoszonego zakresu Zwroacute roacutewnieuwag na fakt e podczas przenoszenia aden zakres komoacuterek nie jest zaznaczanyWska nik aktywnej komoacuterki przez ca y czas pozostaje w tym samym miejscu arkusza

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tliJednym z zada cz sto wykonywanych przez makra jest sprawdzanie poszczegoacutelnychkomoacuterek zakresu i wykonywanie okre lonych operacji na podstawie ich zawarto ci Takiemakra zazwyczaj wykorzystuj p tl For-Next za pomoc ktoacuterej przetwarzane s komoacuterkizakresu

Przyk ad przedstawiony ni ej ilustruje sposoacuteb przechodzenia kolejno przez wszystkiekomoacuterki danego zakresu W naszym przypadku przetwarzany jest aktualnie zaznaczonyzakres komoacuterek Zmienna obiektowa o nazwie Cell reprezentuje aktualnie przetwarzankomoacuterk W p tli For Each-Next znajduje si jedno polecenie ktoacutere sprawdza aktualnieprzetwarzan komoacuterk i zmienia jej czcionk na pogrubion je eli warto przechowywanaw komoacuterce jest dodatnia

Sub ProcessCells() Dim Cell As Range For Each Cell In Selection If CellValue gt 0 Then CellFontBold = True Next CellEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 223

Taka procedura dzia a poprawnie ale co si stanie je eli u ytkownik zaznaczy cakolumn lub ca y wiersz To wcale nie jest takie nieprawdopodobne bo przecie Excelpozwala na wykonywanie operacji na ca ych wierszach i kolumnach W takiej sytuacjiwykonanie makra mo e zaj naprawd du o czasu poniewa nasza p tla przetwarzaka d komoacuterk zaznaczonego zakresu a cznie z pustymi w jednej kolumnie komoacuterekjest a 1 048 576hellip Aby zatem nasze makro by o bardziej wydajne musimy je takzmodyfikowa eby przetwarzane by y tylko i wy cznie komoacuterki ktoacutere nie s puste

Procedura przedstawiona poni ej przetwarza wy cznie niepuste komoacuterki zaznaczonegozakresu dzi ki zastosowaniu metody SpecialCells (wi cej szczegoacute owych informacji natemat tej metody znajdziesz w pomocy systemowej VBA) Nasza procedura za pomocpolecenia Set tworzy dwa obiekty typu Range pierwszy z nich to podzakres komoacuterekzakresu wej ciowego zawieraj cy wy cznie komoacuterki z warto ciami sta ymi (na przyk adteksty warto ci liczbowe litera y i tak dalej) a drugi sk ada si z komoacuterek zawieraj cychformu y Procedura przetwarza tylko komoacuterki nale ce do tych podzakresoacutew co w efekciepowoduje pomini cie przetwarzania wszystkich pozosta ych pustych komoacuterek zakresuwej ciowego Sprytne prawda

Sub SkipBlanks() Dim ConstantCells As Range Dim FormulaCells As Range Dim cell As Range Ignoruj b dy On Error Resume Next

Przetwarzaj komoacuterki zawieraj ce warto ci sta e Set ConstantCells = Selection _ SpecialCells(xlConstants) For Each cell In ConstantCells If cellValue gt 0 Then cellFontBold = True End If Next cell

Przetwarzaj komoacuterki zawieraj ce formu y Set FormulaCells = Selection _ SpecialCells(xlFormulas) For Each cell In FormulaCells If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Procedura SkipBlanks dzia a tak samo szybko niezale nie od tego jaki zakres komoacuterekzaznaczy e Mo esz na przyk ad zaznaczy zakres sk adaj cy si z kilku komoacuterek zaznaczywszystkie kolumny w danym zakresie albo wszystkie wiersze w danym zakresie albonawet ca y arkusz Jak wida jest to ogromne usprawnienie w stosunku do oryginalnejprocedury ProcessCells ktoacuter omoacutewi em nieco wcze niej

Zwroacute uwag e w kodzie procedury u yli my polecenia

On Error Resume Next

Kup książkę Poleć książkę

224 Cz III Podstawy programowania

Polecenie to powoduje e Excel po prostu ignoruje b dy (inaczej moacutewi c je eli proacutebawykonania danego polecenia ko czy si b dem Excel ignoruje ten b d i po prostuprzechodzi do kolejnego polecenia wi cej szczegoacute owych informacji na temat obs ugib doacutew znajdziesz w rozdziale 12) W naszym przypadku zastosowanie polecenia OnError jest konieczne poniewa metoda SpecialCells generuje b d gdy adna komoacuterkanie spe nia podanego kryterium

Zastosowanie metody SpecialCells jest roacutewnowa ne z przej ciem na kart NARZ DZIAG OacuteWNE wybraniem polecenia Znajd i zaznaczPrzejd do mdash specjalnie znajduj cegosi w grupie opcji Edytowanie i nast pnie zaznaczeniem opcji Sta e lub Formu y Abyprzekona si jak to dzia a podczas wykonywania tych polece powiniene u yrejestratora makr i zaznacza roacute ne opcje

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tli(cz II)A teraz ci g dalszy naszej opowie ci W tym punkcie przedstawi inny sposoacuteb efektywnegoprzetwarzania komoacuterek znajduj cych si w zaznaczonym zakresie Tym razem procedurab dzie korzysta a z w a ciwo ci UsedRange ktoacutera zwraca obiekt typu Range reprezentuj cyu ywany zakres arkusza Procedura korzysta roacutewnie z metody Intersect ktoacutera zwracaobiekt typu Range zawieraj cy komoacuterki b d ce cz ci wspoacuteln dwoacutech zakresoacutew

Poni ej przedstawiam zmodyfikowan wersj procedury SkipBlanks omawianejw poprzednim punkcie

Sub SkipBlanks2() Dim WorkRange As Range Dim cell As Range Set WorkRange = Intersect(Selection ActiveSheetUsedRange) For Each cell In WorkRange If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Zmienna obiektowa WorkRange zawiera komoacuterki ktoacutere s cz ci wspoacuteln zakresuzaznaczonego przez u ytkownika oraz zakresu u ywanych komoacuterek arkusza Je lizatem u ytkownik zaznaczy ca kolumn zmienna WorkRange b dzie zawiera a tylkokomoacuterki ktoacutere znajduj si jednocze nie w zaznaczonej kolumnie i w u ywanymzakresie arkusza Jak wida jest to bardzo szybka i efektywna metoda pozwalaj ca naunikni cie przetwarzania komoacuterek znajduj cych si poza zakresem u ywanychkomoacuterek arkusza

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 225

Wprowadzanie warto ci do komoacuterkiNa rysunku 142 pokazuj w jaki sposoacuteb mo esz u y funkcji InputBox j zyka VBA dopobierania od u ytkownika warto ci ktoacutera nast pnie mo e zosta zapisana w wybranejkomoacuterce W procedurze przedstawionej poni ej demonstruj jak poprosi u ytkownikao podanie warto ci i wstawi j do komoacuterki A1 aktywnego arkusza (i to wszystkoza pomoc jednego polecenia)

Sub GetValue() Range(A1)Value = InputBox( _ Wprowad warto dla komoacuterki A1)End Sub

Rysunek 142Zastosowaniefunkcji Input-

Box do pobie-rania warto ci

od u ytkownika

Przedstawiona procedura mo e jednak sprawia pewien problem Je eli u ytkowniknaci nie w oknie dialogowym przycisk Cancel procedura usunie wszelkie dane juznajduj ce si w komoacuterce A1 a takie zachowanie nie jest zbyt dobr praktyk programistyczn Naci ni cie przycisku Cancel powinno po prostu usuwa z ekranu okno dialogowe bezwykonywania adnych dodatkowych operacji

Makro przedstawione poni ej ilustruje znacznie lepsze podej cie do takiego zagadnieniai do zapami tania warto ci wprowadzonej przez u ytkownika wykorzystuje zmienn xJe eli zmienna zawiera co innego ni pusty ci g znakoacutew (czyli kiedy u ytkownikwprowadzi jak warto ) warto zmiennej jest zapisywana w komoacuterce A1 W przeciwnymprzypadku procedura ko czy dzia anie nie wykonuj c adnych dodatkowych operacji

Sub GetValue2() Dim x as Variant x = InputBox(Wprowad warto dla komoacuterki A1) If x ltgt Then Range(A1)Value = xEnd Sub

Zmienna x zosta a zdefiniowana jako zmienna typu Variant poniewa jej warto cimo e by warto albo pusty ci g znakoacutew (je eli u ytkownik naci nie przycisk Cancel)

Kup książkę Poleć książkę

226 Cz III Podstawy programowania

Okre lanie typu zaznaczonego zakresuJe eli zadaniem Twojego makra b dzie przetwarzanie zaznaczonego zakresu takiemakro musi mie zdolno sprawdzenia czy przed jego wywo aniem u ytkownikrzeczywi cie zaznaczy zakres komoacuterek W przeciwnym razie je eli przed wywo aniemmakra zaznaczony zostanie inny obiekt (na przyk ad wykres lub kszta t) proacuteba wykonaniamakra najprawdopodobniej zako czy si niepowodzeniem Polecenie przedstawioneponi ej wykorzystuje funkcj TypeName j zyka VBA do wy wietlania na ekranie typuaktualnie zaznaczonego obiektu

MsgBox TypeName(Selection)

Je eli aktualnie zaznaczony jest obiekt typu Range wykonanie takiego polecenia spowodujewy wietlenie s owa Range Je li Twoje makro dzia a tylko z zakresami komoacuterek mo eszu y polecenia If do sprawdzenia czy aktualnie zaznaczony obiekt to zakres (obiekttypu Range) Procedura przedstawiona poni ej sprawdza typ zaznaczonego obiektui je eli nie jest to obiekt typu Range na ekranie wy wietlany jest odpowiedni komunikati procedura ko czy dzia anie

Sub CheckSelection() If TypeName(Selection) ltgt Range Then MsgBox Zaznacz zakres komoacuterek Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Identyfikowanie zaznacze wielokrotnychJak pami tasz Excel pozwala na jednoczesne zaznaczanie wielu obiektoacutew Aby to zrobi powiniene podczas zaznaczania obiektoacutew lub zakresoacutew trzyma wci ni ty klawisz CtrlZaznaczenia wielokrotne mog by przyczyn problemoacutew z wykonywaniem niektoacuterychmakr Przyk adowo nie mo esz skopiowa zakresu komoacuterek ktoacutery zosta utworzonypoprzez wiele zaznacze nieci g ych zakresoacutew komoacuterek Je eli sproacutebujesz wykonatak operacj Excel wy wietli na ekranie komunikat przedstawiony na rysunku 143

Makro przedstawione ni ej pokazuje w jaki sposoacuteb mo esz sprawdzi czy u ytkownikdokona zaznaczenia wielokrotnego i na tej podstawie wykona odpowiedni operacj

Sub MultipleSelection() If SelectionAreasCount gt 1 Then MsgBox Zaznaczenia wielokrotne nie s dozwolone Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Przedstawiona procedura wykorzystuje metod Areas ktoacutera zwraca kolekcj wszystkichzakresoacutew w danym zaznaczeniu W a ciwo Count zwraca liczb obiektoacutew tej kolekcji

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 227

Rysunek 143Excel nie lubi

kiedy proacutebujeszkopiowa nie-ci g e zakresy

komoacuterek

Zmiana ustawie ExcelaChyba najbardziej u ytecznymi makrami s proste procedury ktoacutere zmieniaj jednolub kilka ustawie Excela Je li na przyk ad dojdziesz do wniosku e bardzo cz stoprzywo ujesz na ekran okno opcji programu Excel i zmieniasz jakie ustawienie takaoperacja z pewno ci b dzie bardzo dobrym kandydatem do napisania makraoszcz dzaj cego Twoacutej czas i u atwiaj cego zmian takiego ustawienia

W tym podrozdziale zaprezentuj dwa przyk ady procedur ktoacutere pokazuj w jakisposoacuteb mo na zmienia ustawienia Excela Ogoacutelne zasady dzia ania tych procedurmo esz z powodzeniem zastosowa do napisania w asnych makr zmieniaj cych inneustawienia Excela

Zmiana ustawie logicznych(opcje typu Boolean)Podobnie jak wy cznik wiat a opcje logiczne (typu Boolean) mog by albo w czonealbo wy czone Mo esz na przyk ad utworzy makro ktoacutere b dzie w cza o lub wy cza owy wietlanie podzia u arkusza na strony Kiedy wydrukujesz arkusz (lub skorzystaszz trybu podgl du wydruku) Excel wy wietla na arkuszu przerywane linie reprezentuj cemiejsca podzia u arkusza na strony wydruku Niektoacuterych u ytkownikoacutew (w czniez autorem tej ksi ki) takie zachowanie Excela irytuje Niestety jedynym sposobemwy czenia wy wietlania podzia u arkusza na strony jest otwarcie okna dialogowego Opcjeprogramu Excel przej cie na kart Zaawansowane a nast pnie przewijanie zawarto ci tejkarty a do odszukania opcji Poka podzia y stron Je eli podczas wy czania tej opcjikorzysta e z rejestratora makr przekonasz si e Excel generuje poni szy kod

Kup książkę Poleć książkę

228 Cz III Podstawy programowania

ActiveSheetDisplayPageBreaks = False

Z drugiej strony je eli podczas rejestrowania makra podzia y stron nie s widoczneExcel generuje taki kod

ActiveSheetDisplayPageBreaks = True

Takie informacje mog doprowadzi do wniosku e b dziesz musia napisa a dwamakra mdash jedno do w czania podgl du podzia u stron a drugie do jego wy czaniaNa szcz cie to nieprawda Procedura przedstawiona poni ej wykorzystuje operatorNot do zmiany warto ci logicznej True na False i odwrotnie Wykonanie proceduryTogglePageBreaks to prosty sposoacuteb na cykliczne w czanie i wy czanie podgl du podzia ustron arkusza

Sub TogglePageBreaks() On Error Resume Next ActiveSheetDisplayPageBreaks = Not _ ActiveSheetDisplayPageBreaksEnd Sub

Pierwsze polecenie informuje Excel e powinien ignorowa ewentualne b dy Przyk adowopodzia y stron nie s wy wietlane na arkuszach wykresoacutew Kiedy wprowadzisz takiepolecenie i sproacutebujesz wykona t procedur dla arkusza wykresu na ekranie nie pojawisi komunikat o b dzie

Techniki u ytej w procedurze TogglePageBreaks mo esz u ywa do zmiany dowolnychopcji logicznych (czyli takich ktoacuterych warto ciami s True albo False)

Zmiana innych opcji (typu non-Boolean)Do zmiany opcji ktoacutere nie s typu logicznego mo esz u ywa konstrukcji Select CaseW przyk adzie przedstawionym poni ej zmieniam tryb przeliczania skoroszytu z r cznegona automatyczny i odwrotnie i nakazuj wy wietlenie na ekranie komunikatu opisuj cegoaktualny tryb przeliczania arkusza

Sub ToggleCalcMode() Select Case ApplicationCalculation Case xlManual ApplicationCalculation = xlCalculationAutomatic MsgBox Automatyczne przeliczanie skoroszytu Case xlAutomatic ApplicationCalculation = xlCalculationManual MsgBox R czne przeliczanie skoroszytu End SelectEnd Sub

Techniki u ytej w procedurze ToggleCalcMode mo esz u ywa do zmiany dowolnychopcji ktoacutere nie posiadaj warto ci logicznych

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 9: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

12 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Formant Label (pole etykiety) 283Formant ListBox (pole listy) 283Formant MultiPage 284Formant OptionButton (przycisk opcji) 285Formant RefEdit (pole zakresu) 286Formant ScrollBar (pasek przewijania) 286Formant SpinButton (pokr t o) 287Formant TabStrip (pole karty) 288Formant TextBox (pole tekstowe) 288Formant ToggleButton (przycisk prze cznika) 289

Praca z formantami w oknach dialogowych 289Zmiana rozmiaroacutew i przenoszenie formantoacutew w inne miejsce 289Rozmieszczanie i wyroacutewnywanie po o enia formantoacutew w oknie dialogowym 290Obs uga u ytkownikoacutew preferuj cych korzystanie z klawiatury 291Testowanie formularzy UserForm 293

Estetyka okien dialogowych 293

Rozdzia 18 Techniki pracy z formularzami UserForm 295Zastosowanie w asnych okien dialogowych 295Przyk adowy formularz UserForm 296

Tworzenie okna dialogowego 296Tworzenie kodu procedury wy wietlaj cej okno dialogowe 298Udost pnianie makra u ytkownikowi 299Testowanie okna dialogowego 299Dodawanie procedur obs ugi zdarze 300Sprawdzanie poprawno ci danych 302Teraz okno dialogowe dzia a tak jak powinno 302

Wi cej przyk adoacutew formularzy UserForm 302Zastosowanie formantoacutew ListBox 303Zaznaczanie zakresoacutew 307Praca z wieloma grupami formantoacutew OptionButton 309Zastosowanie formantoacutew SpinButton oraz TextBox 310Wykorzystywanie formularza UserForm jako wska nika post pu zadania 312Tworzenie niemodalnych okien dialogowych z wieloma kartami 315Wy wietlanie wykresoacutew na formularzach UserForm 317

Lista kontrolna tworzenia i testowania okien dialogowych 318

Rozdzia 19 Udost pnianie makr z poziomu interfejsu u ytkownika 321Dostosowywanie Wst ki 321

R czne dopasowywanie Wst ki do w asnych potrzeb 322Dodawanie do Wst ki przycisku w asnego makra 324Dostosowywanie Wst ki za pomoc kodu XML 324

Dostosowywanie menu podr cznego 329Rodzaje obiektoacutew CommandBar 329Wy wietlanie wszystkich menu podr cznych 329Odwo ania do elementoacutew kolekcji CommandBars 330Odwo ania do formantoacutew obiektu CommandBar 331W a ciwo ci formantoacutew obiektu CommandBar 332

Kup książkę Poleć książkę

Spis tre ci 13

Przyk ady zastosowania VBA do modyfikacji menu podr cznego 334Resetowanie wszystkich wbudowanych menu podr cznych 334Dodawanie nowego elementu do menu podr cznego Cell 335Wy czanie menu podr cznego 337

Tworzenie w asnych paskoacutew narz dzi 338

Cz V Od teorii do praktyki 341Rozdzia 20 Jak tworzy w asne funkcje arkuszowe i jak prze y aby o tym opowiedzie 343

Dlaczego tworzymy w asne funkcje 343Podstawowe informacje o funkcjach VBA 344Tworzenie funkcji 345Praca z argumentami funkcji 345Przyk ady funkcji 346

Funkcje bezargumentowe 346Funkcje jednoargumentowe 346Funkcje z dwoma argumentami 348Funkcje pobieraj ce zakres jako argument 349Funkcje z argumentami opcjonalnymi 351

Funkcje opakowuj ce 353Funkcja NumberFormat 353Funkcja ExtractElement 354Funkcja SayIt 354Funkcja IsLike 355

Funkcje zwracaj ce tablice 355Zwracanie tablicy zawieraj cej nazwy miesi cy 355Zwracanie posortowanej listy 356

Okno dialogowe Wstawianie funkcji 358Wy wietlanie opisoacutew funkcji 358Opisy argumentoacutew 360

Rozdzia 21 Tworzenie dodatkoacutew 361No dobrzehellip czym zatem s dodatki 361Po co tworzy si dodatki 362Praca z dodatkami 363Podstawy tworzenia dodatkoacutew 364Tworzymy przyk adowy dodatek 365

Konfiguracja skoroszytu 365Testowanie skoroszytu 367Tworzenie opisoacutew dodatku 368Ochrona kodu VBA 369Tworzenie dodatku 369Otwieranie dodatku 369Dystrybucja dodatkoacutew 370Modyfikowanie dodatkoacutew 371

Kup książkę Poleć książkę

14 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Cz VI Dekalogi 373Rozdzia 22 Dziesi pyta na temat VBA (wraz z odpowiedziami) 375

Rozdzia 23 (Prawie) dziesi roacutede informacji na temat Excela 379System pomocy j zyka VBA 379Wsparcie techniczne firmy Microsoft 380Inne strony internetowe 380Blogi po wi cone Excelowi 380Google 381Bing 381Lokalne grupy u ytkownikoacutew 381Moje inne ksi ki 381

Rozdzia 24 Dziesi rzeczy ktoacutere powiniene robi w j zyku VBAi ktoacuterych nie powiniene robi 383

Zawsze deklaruj wszystkie zmienne 383Nigdy nie powiniene myli has a chroni cego kod VBA z bezpiecze stwem aplikacji 384Zawsze staraj si wyczy ci i zoptymalizowa kod aplikacji 384Nigdy nie umieszczaj wszystkiego w jednej procedurze 385Zawsze powiniene rozwa y zastosowanie innego oprogramowania 385Nigdy nie zak adaj e ka dy u ytkownik zezwala na uruchamianie makr 386Zawsze staraj si eksperymentowa z nowymi rozwi zaniami 386Nigdy z goacutery nie zak adaj e Twoacutej kod b dzie poprawnie dzia a z innymi wersjami Excela 386Zawsze pami taj o u ytkownikach Twojej aplikacji 387Nigdy nie zapominaj o tworzeniu kopii zapasowych 387

Skorowidz 389

Kup książkę Poleć książkę

Rozdzia 14

Przyk ady i technikiprogramowania w j zyku VBA

W tym rozdziale poznasz szereg przyk adoacutew technik programowania w j zyku VBA dowiesz si jak mo esz przyspieszy dzia anie kodu VBA w Twojej aplikacji

ierz e nauka programowania jest znacznie szybsza i zdecydowanie bardziejefektywna kiedy pracujemy na konkretnych przyk adach Dobrze opracowany

przyk ad o wiele lepiej obja nia zagadnienie ni najbardziej rozbudowany i szczegoacute owyale teoretyczny opis Poniewa czytasz t ksi k prawdopodobnie zgadzasz si ze mnw tej materii W tym rozdziale znajdziesz szereg przyk adoacutew demonstruj cych u ytecznepraktyczne techniki programowania w j zyku VBA

Przyk ady omawiane w tym rozdziale zosta y podzielone na kilka kategorii Oto one

Praca z zakresami

Modyfikacja ustawie Excela

Praca z wykresami

Przyspieszanie i optymalizacja dzia ania kodu VBA

Niektoacutere z prezentowanych przyk adoacutew b dziesz moacuteg od razu wykorzysta w swoichaplikacjach jednak w wi kszo ci przypadkoacutew b d wymaga y pewnego dostosowaniado Twoich aplikacji

Przetwarzanie zakresoacutew komoacuterekWi kszo zada z jakimi b dziesz si styka programuj c w j zyku VBA b dzie zapewnewymaga a mniejszego b d wi kszego przetwarzania zakresoacutew komoacuterek (aby od wie ysobie wiadomo ci na temat obiektu Range powiniene zajrze do rozdzia u 8) Kiedypracujesz z obiektami Range powiniene pami ta o nast puj cych sprawach

Kod VBA nie musi zaznacza danego zakresu aby go przetwarza

Je eli kod VBA zaznacza wybrany zakres przechowuj cy go skoroszyt musi byaktywny

W

Kup książkę Poleć książkę

218 Cz III Podstawy programowania

Rejestrator makr nie zawsze b dzie w stanie wygenerowa optymalny kod VBABardzo cz sto jednak mo esz za jego pomoc utworzy bazowe makro i potemodpowiednio zmodyfikowa kod tak aby sta si bardziej efektywny

Zazwyczaj bardzo dobrym rozwi zaniem jest nadawanie nazw zakresom komoacuterekwykorzystywanym w kodzie VBA Przyk adowo polecenie Range(Total)jestznacznie lepszym rozwi zaniem ni Range(D45) Je li w tym drugim przypadkupoacute niej wstawisz dodatkowy wiersz powy ej wiersza 45 to eby wszystko dzia a opoprawnie b dziesz musia zmodyfikowa makro tak aby korzysta o z nowegopoprawnego adresu komoacuterki a ta po wykonaniu takiej operacji b dzie mia a innyadres (D46) Aby nada nazw wybranemu zakresowi komoacuterek powiniene przejna kart FORMU Y i wybra polecenie Definiuj nazw znajduj ce si w grupiepolece Nazwy zdefiniowane

Kiedy tworzysz makro ktoacutere b dzie przetwarza o zakres komoacuterek zaznaczonyprzez u ytkownika pami taj e u ytkownik mo e zaznaczy kilka ca ych kolumnczy wierszy W wi kszo ci przypadkoacutew z pewno ci nie b dziesz chcia aby makrow p tli przechodzi o w takiej sytuacji przez wszystkie zaznaczone komoacuterki (w czniez pustymi) co mog oby zaj bardzo wiele czasu Dobre makro powinno odszukai przetwarza tylko komoacuterki ktoacutere nie s puste

Excel pozwala na jednoczesne zaznaczanie wielu zakresoacutew komoacuterek Aby to zrobi powiniene zaznaczy pierwszy zakres komoacuterek potem wcisn i przytrzymaklawisz Ctrl i zaznacza kolejne zakresy komoacuterek przy u yciu myszy Kod Twojejaplikacji powinien by przygotowany na takie sytuacje i podejmowa odpowiednieakcje

Skoroszyty z wybranymi przyk adami omawianymi w tym rozdziale znajdziesz na stronieinternetowej naszej ksi ki

Je eli chcesz samodzielnie wpisywa kod omawianych przyk adoacutew przejd do edytoraVBE naciskaj c kombinacj klawiszy lewyAlt+F11 a nast pnie wstaw nowy modu VBAi wpisz kod prezentowanych procedur Upewnij si e Twoacutej skoroszyt jest poprawnieskonfigurowany Je eli na przyk ad kod danego przyk adu odwo uje si do arkuszyo nazwach Arkusz1 i Arkusz2 upewnij si e takie arkusze istniej w Twoim skoroszycie

Kopiowanie zakresoacutewKopiowanie zakresoacutew komoacuterek mo e mia o pretendowa do miana jednej z najcz ciejwykonywanych operacji w Excelu Kiedy w czysz rejestrator makr i skopiujesz zakreskomoacuterek o adresie A1A5 do zakresu B1B5 otrzymasz nast puj ce makro

Sub CopyRange() Range(A1A5)Select SelectionCopy Range(B1)Select ActiveSheetPaste ApplicationCutCopyMode = FalseEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 219

Zwroacute uwag na ostatnie polecenie Zosta o ono wygenerowane przez naci ni cieklawisza Esc po skopiowaniu zakresu komoacuterek co spowodowa o usuni cie przerywanejlinii reprezentuj cej na arkuszu obramowanie kopiowanego zakresu

Przedstawione makro dzia a poprawnie ale zakresy komoacuterek mo na kopiowa w znaczniebardziej efektywny sposoacuteb Identyczny rezultat mo esz osi gn za pomoc proceduryktoacutera sk ada si z tylko jednego wiersza polecenia i nie zaznacza adnych komoacuterek(dzi ki czemu nie wymaga ustawiania w a ciwo ci CutCopyMode na warto False)

Sub CopyRange2() Range(A1A5)Copy Range(B1)End Sub

Procedura przedstawiona powy ej korzysta z tego e metoda Copy mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe kopiowanego zakresu Informacje o tymznalaz em w pomocy systemowej VBA Powy szy przyk ad doskonale roacutewnie ilustrujefakt e rejestrator makr nie zawsze generuje najbardziej efektywny kod

Kopiowanie zakresu o zmiennej wielko ciW wielu przypadkach konieczne jest skopiowanie zakresu komoacuterek dla ktoacuterego dok adnaliczba wierszy i kolumn okre laj cych jego wielko nie jest z goacutery znana Przyk adowomo esz dysponowa skoroszytem ledz cym tygodniow sprzeda w ktoacuterym liczba wierszyzmienia si ka dego tygodnia po wprowadzeniu nowych danych

Na rysunku 141 przedstawiam przyk ad cz sto spotykanego typu arkusza Znajduj cysi w nim zakres komoacuterek sk ada si z kilku wierszy ktoacuterych liczba zmienia si ka degodnia Poniewa nie wiesz jaki jest rozmiar zakresu w danej chwili musisz utworzykod ktoacutery b dzie dzia a bez u ywania adresu zakresu kopiowanych komoacuterek

Rysunek 141Przyk ad zakre-su ktoacutery mo e

sk ada siz dowolnej

liczby wierszy

Makro przedstawione poni ej ilustruje sposoacuteb kopiowania zakresu komoacuterek z arkuszaArkusz1 do arkusza Arkusz2 (pocz wszy od komoacuterki A1) Makro wykorzystuje w a ciwoCurrentRegion ktoacutera zwraca obiekt Range odpowiadaj cy blokowi komoacuterek otaczaj cychokre lon komoacuterk (w tym przypadku o adresie A1)

Kup książkę Poleć książkę

220 Cz III Podstawy programowania

Sub CopyCurrentRegion() Range(A1)CurrentRegionCopy Sheets(Arkusz2)Select Range(A1)Select ActiveSheetPaste Sheets(Arkusz1)Select ApplicationCutCopyMode = FalseEnd Sub

Zastosowanie w a ciwo ci CurrentRegion jest roacutewnowa ne z przej ciem na kartNARZ DZIA G OacuteWNE i wybraniem polecenia Znajd i zaznaczPrzejd do mdashspecjalnie znajduj cego si w grupie opcji Edytowanie i nast pnie zaznaczeniem opcjiBie cy obszar Aby przekona si jak to dzia a podczas wykonywania tych polecepowiniene u y rejestratora makr Zazwyczaj warto w a ciwo ci CurrentRegionreprezentuje prostok tny blok komoacuterek otoczony przez puste wiersze i kolumny

Oczywi cie mo esz zoptymalizowa kod makra przedstawionego powy ej i niezaznacza obszaru docelowego dla kopiowanych komoacuterek Makro przedstawione poni ejkorzysta z faktu e metoda Copy mo e u ywa argumentu wywo ania reprezentuj cegomiejsce docelowe kopiowanego zakresu

Sub CopyCurrentRegion2() Range(A1)CurrentRegionCopy _ Sheets(Arkusz2)Range(A1)End Sub

Je eli zakres komoacuterek ktoacutery chcesz skopiowa jest tabel (zdefiniowan przy u yciapolecenia WSTAWIANIETabeleTabela) ca e zadanie b dzie jeszcze atwiejsze Ka databela posiada swoj nazw (na przyk ad Tabela1) i automatycznie rozszerza si w miardodawania nowych wierszy

Sub CopyTable() Range(Tabela1)Copy Sheets(Arkusz2)Range(A1)End Sub

Je eli sproacutebujesz wykona procedur przedstawion powy ej przekonasz si e wiersznag oacutewka tabeli nie jest kopiowany poniewa obiekt Tabela1 nie obejmuje tegowiersza Je li chcesz aby wiersz nag oacutewka roacutewnie by kopiowany powiniene zmieniodwo anie do tabeli tak jak to zosta o przedstawione poni ej

Range(Tabela1[All])

Zaznaczanie komoacuterekdo ko ca wiersza lub kolumnyPrawdopodobnie bardzo cz sto u ywasz kombinacji klawiszy takich jak Ctrl+Shift+ czy Ctrl+Shift+ do zaznaczania zakresoacutew sk adaj cych si ze wszystkich komoacuterekod komoacuterki aktywnej a do ko ca kolumny czy wiersza Nie jest wi c chyba zaskoczenieme mo esz napisa makro ktoacutere b dzie zaznacza komoacuterki w podobny sposoacuteb

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 221

Do zaznaczania ca ego bloku komoacuterek mo esz u y w a ciwo ci CurrentRegion Ale copowiniene zrobi je eli chcesz zaznaczy powiedzmy tylko jedn kolumn z tegobloku komoacuterek Na szcz cie VBA pozwala na wykonywanie takich operacji Proceduraktoacuterej kod przedstawiam poni ej zaznacza zakres komoacuterek pocz wszy od bie cejaktywnej komoacuterki w doacute kolumny a do komoacuterki znajduj cej si o jeden wiersz powy ejpierwszej pustej komoacuterki tej kolumny Po zaznaczeniu zakresu mo esz przetwarza gow dowolny sposoacuteb mdash kopiowa komoacuterki przenosi je w inne miejsce arkusza zmieniaformatowanie i tak dalej

Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))SelectEnd Sub

Oczywi cie taki sam obszar mo esz roacutewnie zaznaczy r cznie Aby to zrobi powinienezaznaczy pierwsz komoacuterk nast pnie wcisn i przytrzyma klawisz Shift nacisnklawisz End i wreszcie nacisn klawisz (strza ka w doacute )

W przyk adzie wykorzystuj metod End obiektu ActiveCell ktoacutera zwraca obiekt typuRange Metoda End pobiera jeden argument okre laj cy kierunek w ktoacuterym zostaniewykonane zaznaczenie Argumentami tej metody mo e by dowolna ze sta ychprzedstawionych poni ej

xlUp

xlDown

xlToLeft

xlToRight

Pami taj e zaznaczanie zakresu nie jest potrzebne do jego przetwarzania Makroprzedstawione poni ej zmienia czcionk w komoacuterkach zmiennego zakresu (pojedynczakolumna) na pogrubion bez uprzedniego zaznaczenia zakresu

Sub MakeBold() Range(ActiveCell ActiveCellEnd(xlDown)) _ FontBold = TrueEnd Sub

Zaznaczanie ca ego wiersza lub ca ej kolumnyProcedura przedstawiona poni ej ilustruje sposoacuteb zaznaczania kolumny w ktoacuterej znajdujesi aktywna komoacuterka Makro wykorzystuje w a ciwo EntireColumn ktoacutera zwracaobiekt typu Range reprezentuj cy ca kolumn

Sub SelectColumn() ActiveCellEntireColumnSelectEnd Sub

Jak pewnie si spodziewasz w j zyku VBA dost pna jest roacutewnie w a ciwo EntireRowktoacutera zwraca obiekt typu Range reprezentuj cy ca y wiersz

Kup książkę Poleć książkę

222 Cz III Podstawy programowania

Przenoszenie zakresoacutewZazwyczaj aby przenie zakres komoacuterek zaznaczasz go wycinasz do schowka systemowegoi nast pnie wklejasz w inne miejsce Je eli u yjesz rejestratora makr do zapisania takiejoperacji przekonasz si e wygenerowany zostanie kod podobny do przedstawionegoponi ej

Sub MoveRange() Range(A1C6)Select SelectionCut Range(A10)Select ActiveSheetPasteEnd Sub

Podobnie jak podczas kopiowania komoacuterek takie rozwi zanie nie jest najbardziejefektywnym sposobem przenoszenia zakresu komoacuterek w inne miejsce W praktyce takoperacj mo esz wykona za pomoc procedury sk adaj cej si z jednego wiersza koduco prezentuj poni ej

Sub MoveRange2() Range(A1C6)Cut Range(A10)End Sub

Makro przedstawione powy ej korzysta z faktu e metoda Cut mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe przenoszonego zakresu Zwroacute roacutewnieuwag na fakt e podczas przenoszenia aden zakres komoacuterek nie jest zaznaczanyWska nik aktywnej komoacuterki przez ca y czas pozostaje w tym samym miejscu arkusza

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tliJednym z zada cz sto wykonywanych przez makra jest sprawdzanie poszczegoacutelnychkomoacuterek zakresu i wykonywanie okre lonych operacji na podstawie ich zawarto ci Takiemakra zazwyczaj wykorzystuj p tl For-Next za pomoc ktoacuterej przetwarzane s komoacuterkizakresu

Przyk ad przedstawiony ni ej ilustruje sposoacuteb przechodzenia kolejno przez wszystkiekomoacuterki danego zakresu W naszym przypadku przetwarzany jest aktualnie zaznaczonyzakres komoacuterek Zmienna obiektowa o nazwie Cell reprezentuje aktualnie przetwarzankomoacuterk W p tli For Each-Next znajduje si jedno polecenie ktoacutere sprawdza aktualnieprzetwarzan komoacuterk i zmienia jej czcionk na pogrubion je eli warto przechowywanaw komoacuterce jest dodatnia

Sub ProcessCells() Dim Cell As Range For Each Cell In Selection If CellValue gt 0 Then CellFontBold = True Next CellEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 223

Taka procedura dzia a poprawnie ale co si stanie je eli u ytkownik zaznaczy cakolumn lub ca y wiersz To wcale nie jest takie nieprawdopodobne bo przecie Excelpozwala na wykonywanie operacji na ca ych wierszach i kolumnach W takiej sytuacjiwykonanie makra mo e zaj naprawd du o czasu poniewa nasza p tla przetwarzaka d komoacuterk zaznaczonego zakresu a cznie z pustymi w jednej kolumnie komoacuterekjest a 1 048 576hellip Aby zatem nasze makro by o bardziej wydajne musimy je takzmodyfikowa eby przetwarzane by y tylko i wy cznie komoacuterki ktoacutere nie s puste

Procedura przedstawiona poni ej przetwarza wy cznie niepuste komoacuterki zaznaczonegozakresu dzi ki zastosowaniu metody SpecialCells (wi cej szczegoacute owych informacji natemat tej metody znajdziesz w pomocy systemowej VBA) Nasza procedura za pomocpolecenia Set tworzy dwa obiekty typu Range pierwszy z nich to podzakres komoacuterekzakresu wej ciowego zawieraj cy wy cznie komoacuterki z warto ciami sta ymi (na przyk adteksty warto ci liczbowe litera y i tak dalej) a drugi sk ada si z komoacuterek zawieraj cychformu y Procedura przetwarza tylko komoacuterki nale ce do tych podzakresoacutew co w efekciepowoduje pomini cie przetwarzania wszystkich pozosta ych pustych komoacuterek zakresuwej ciowego Sprytne prawda

Sub SkipBlanks() Dim ConstantCells As Range Dim FormulaCells As Range Dim cell As Range Ignoruj b dy On Error Resume Next

Przetwarzaj komoacuterki zawieraj ce warto ci sta e Set ConstantCells = Selection _ SpecialCells(xlConstants) For Each cell In ConstantCells If cellValue gt 0 Then cellFontBold = True End If Next cell

Przetwarzaj komoacuterki zawieraj ce formu y Set FormulaCells = Selection _ SpecialCells(xlFormulas) For Each cell In FormulaCells If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Procedura SkipBlanks dzia a tak samo szybko niezale nie od tego jaki zakres komoacuterekzaznaczy e Mo esz na przyk ad zaznaczy zakres sk adaj cy si z kilku komoacuterek zaznaczywszystkie kolumny w danym zakresie albo wszystkie wiersze w danym zakresie albonawet ca y arkusz Jak wida jest to ogromne usprawnienie w stosunku do oryginalnejprocedury ProcessCells ktoacuter omoacutewi em nieco wcze niej

Zwroacute uwag e w kodzie procedury u yli my polecenia

On Error Resume Next

Kup książkę Poleć książkę

224 Cz III Podstawy programowania

Polecenie to powoduje e Excel po prostu ignoruje b dy (inaczej moacutewi c je eli proacutebawykonania danego polecenia ko czy si b dem Excel ignoruje ten b d i po prostuprzechodzi do kolejnego polecenia wi cej szczegoacute owych informacji na temat obs ugib doacutew znajdziesz w rozdziale 12) W naszym przypadku zastosowanie polecenia OnError jest konieczne poniewa metoda SpecialCells generuje b d gdy adna komoacuterkanie spe nia podanego kryterium

Zastosowanie metody SpecialCells jest roacutewnowa ne z przej ciem na kart NARZ DZIAG OacuteWNE wybraniem polecenia Znajd i zaznaczPrzejd do mdash specjalnie znajduj cegosi w grupie opcji Edytowanie i nast pnie zaznaczeniem opcji Sta e lub Formu y Abyprzekona si jak to dzia a podczas wykonywania tych polece powiniene u yrejestratora makr i zaznacza roacute ne opcje

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tli(cz II)A teraz ci g dalszy naszej opowie ci W tym punkcie przedstawi inny sposoacuteb efektywnegoprzetwarzania komoacuterek znajduj cych si w zaznaczonym zakresie Tym razem procedurab dzie korzysta a z w a ciwo ci UsedRange ktoacutera zwraca obiekt typu Range reprezentuj cyu ywany zakres arkusza Procedura korzysta roacutewnie z metody Intersect ktoacutera zwracaobiekt typu Range zawieraj cy komoacuterki b d ce cz ci wspoacuteln dwoacutech zakresoacutew

Poni ej przedstawiam zmodyfikowan wersj procedury SkipBlanks omawianejw poprzednim punkcie

Sub SkipBlanks2() Dim WorkRange As Range Dim cell As Range Set WorkRange = Intersect(Selection ActiveSheetUsedRange) For Each cell In WorkRange If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Zmienna obiektowa WorkRange zawiera komoacuterki ktoacutere s cz ci wspoacuteln zakresuzaznaczonego przez u ytkownika oraz zakresu u ywanych komoacuterek arkusza Je lizatem u ytkownik zaznaczy ca kolumn zmienna WorkRange b dzie zawiera a tylkokomoacuterki ktoacutere znajduj si jednocze nie w zaznaczonej kolumnie i w u ywanymzakresie arkusza Jak wida jest to bardzo szybka i efektywna metoda pozwalaj ca naunikni cie przetwarzania komoacuterek znajduj cych si poza zakresem u ywanychkomoacuterek arkusza

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 225

Wprowadzanie warto ci do komoacuterkiNa rysunku 142 pokazuj w jaki sposoacuteb mo esz u y funkcji InputBox j zyka VBA dopobierania od u ytkownika warto ci ktoacutera nast pnie mo e zosta zapisana w wybranejkomoacuterce W procedurze przedstawionej poni ej demonstruj jak poprosi u ytkownikao podanie warto ci i wstawi j do komoacuterki A1 aktywnego arkusza (i to wszystkoza pomoc jednego polecenia)

Sub GetValue() Range(A1)Value = InputBox( _ Wprowad warto dla komoacuterki A1)End Sub

Rysunek 142Zastosowaniefunkcji Input-

Box do pobie-rania warto ci

od u ytkownika

Przedstawiona procedura mo e jednak sprawia pewien problem Je eli u ytkowniknaci nie w oknie dialogowym przycisk Cancel procedura usunie wszelkie dane juznajduj ce si w komoacuterce A1 a takie zachowanie nie jest zbyt dobr praktyk programistyczn Naci ni cie przycisku Cancel powinno po prostu usuwa z ekranu okno dialogowe bezwykonywania adnych dodatkowych operacji

Makro przedstawione poni ej ilustruje znacznie lepsze podej cie do takiego zagadnieniai do zapami tania warto ci wprowadzonej przez u ytkownika wykorzystuje zmienn xJe eli zmienna zawiera co innego ni pusty ci g znakoacutew (czyli kiedy u ytkownikwprowadzi jak warto ) warto zmiennej jest zapisywana w komoacuterce A1 W przeciwnymprzypadku procedura ko czy dzia anie nie wykonuj c adnych dodatkowych operacji

Sub GetValue2() Dim x as Variant x = InputBox(Wprowad warto dla komoacuterki A1) If x ltgt Then Range(A1)Value = xEnd Sub

Zmienna x zosta a zdefiniowana jako zmienna typu Variant poniewa jej warto cimo e by warto albo pusty ci g znakoacutew (je eli u ytkownik naci nie przycisk Cancel)

Kup książkę Poleć książkę

226 Cz III Podstawy programowania

Okre lanie typu zaznaczonego zakresuJe eli zadaniem Twojego makra b dzie przetwarzanie zaznaczonego zakresu takiemakro musi mie zdolno sprawdzenia czy przed jego wywo aniem u ytkownikrzeczywi cie zaznaczy zakres komoacuterek W przeciwnym razie je eli przed wywo aniemmakra zaznaczony zostanie inny obiekt (na przyk ad wykres lub kszta t) proacuteba wykonaniamakra najprawdopodobniej zako czy si niepowodzeniem Polecenie przedstawioneponi ej wykorzystuje funkcj TypeName j zyka VBA do wy wietlania na ekranie typuaktualnie zaznaczonego obiektu

MsgBox TypeName(Selection)

Je eli aktualnie zaznaczony jest obiekt typu Range wykonanie takiego polecenia spowodujewy wietlenie s owa Range Je li Twoje makro dzia a tylko z zakresami komoacuterek mo eszu y polecenia If do sprawdzenia czy aktualnie zaznaczony obiekt to zakres (obiekttypu Range) Procedura przedstawiona poni ej sprawdza typ zaznaczonego obiektui je eli nie jest to obiekt typu Range na ekranie wy wietlany jest odpowiedni komunikati procedura ko czy dzia anie

Sub CheckSelection() If TypeName(Selection) ltgt Range Then MsgBox Zaznacz zakres komoacuterek Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Identyfikowanie zaznacze wielokrotnychJak pami tasz Excel pozwala na jednoczesne zaznaczanie wielu obiektoacutew Aby to zrobi powiniene podczas zaznaczania obiektoacutew lub zakresoacutew trzyma wci ni ty klawisz CtrlZaznaczenia wielokrotne mog by przyczyn problemoacutew z wykonywaniem niektoacuterychmakr Przyk adowo nie mo esz skopiowa zakresu komoacuterek ktoacutery zosta utworzonypoprzez wiele zaznacze nieci g ych zakresoacutew komoacuterek Je eli sproacutebujesz wykonatak operacj Excel wy wietli na ekranie komunikat przedstawiony na rysunku 143

Makro przedstawione ni ej pokazuje w jaki sposoacuteb mo esz sprawdzi czy u ytkownikdokona zaznaczenia wielokrotnego i na tej podstawie wykona odpowiedni operacj

Sub MultipleSelection() If SelectionAreasCount gt 1 Then MsgBox Zaznaczenia wielokrotne nie s dozwolone Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Przedstawiona procedura wykorzystuje metod Areas ktoacutera zwraca kolekcj wszystkichzakresoacutew w danym zaznaczeniu W a ciwo Count zwraca liczb obiektoacutew tej kolekcji

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 227

Rysunek 143Excel nie lubi

kiedy proacutebujeszkopiowa nie-ci g e zakresy

komoacuterek

Zmiana ustawie ExcelaChyba najbardziej u ytecznymi makrami s proste procedury ktoacutere zmieniaj jednolub kilka ustawie Excela Je li na przyk ad dojdziesz do wniosku e bardzo cz stoprzywo ujesz na ekran okno opcji programu Excel i zmieniasz jakie ustawienie takaoperacja z pewno ci b dzie bardzo dobrym kandydatem do napisania makraoszcz dzaj cego Twoacutej czas i u atwiaj cego zmian takiego ustawienia

W tym podrozdziale zaprezentuj dwa przyk ady procedur ktoacutere pokazuj w jakisposoacuteb mo na zmienia ustawienia Excela Ogoacutelne zasady dzia ania tych procedurmo esz z powodzeniem zastosowa do napisania w asnych makr zmieniaj cych inneustawienia Excela

Zmiana ustawie logicznych(opcje typu Boolean)Podobnie jak wy cznik wiat a opcje logiczne (typu Boolean) mog by albo w czonealbo wy czone Mo esz na przyk ad utworzy makro ktoacutere b dzie w cza o lub wy cza owy wietlanie podzia u arkusza na strony Kiedy wydrukujesz arkusz (lub skorzystaszz trybu podgl du wydruku) Excel wy wietla na arkuszu przerywane linie reprezentuj cemiejsca podzia u arkusza na strony wydruku Niektoacuterych u ytkownikoacutew (w czniez autorem tej ksi ki) takie zachowanie Excela irytuje Niestety jedynym sposobemwy czenia wy wietlania podzia u arkusza na strony jest otwarcie okna dialogowego Opcjeprogramu Excel przej cie na kart Zaawansowane a nast pnie przewijanie zawarto ci tejkarty a do odszukania opcji Poka podzia y stron Je eli podczas wy czania tej opcjikorzysta e z rejestratora makr przekonasz si e Excel generuje poni szy kod

Kup książkę Poleć książkę

228 Cz III Podstawy programowania

ActiveSheetDisplayPageBreaks = False

Z drugiej strony je eli podczas rejestrowania makra podzia y stron nie s widoczneExcel generuje taki kod

ActiveSheetDisplayPageBreaks = True

Takie informacje mog doprowadzi do wniosku e b dziesz musia napisa a dwamakra mdash jedno do w czania podgl du podzia u stron a drugie do jego wy czaniaNa szcz cie to nieprawda Procedura przedstawiona poni ej wykorzystuje operatorNot do zmiany warto ci logicznej True na False i odwrotnie Wykonanie proceduryTogglePageBreaks to prosty sposoacuteb na cykliczne w czanie i wy czanie podgl du podzia ustron arkusza

Sub TogglePageBreaks() On Error Resume Next ActiveSheetDisplayPageBreaks = Not _ ActiveSheetDisplayPageBreaksEnd Sub

Pierwsze polecenie informuje Excel e powinien ignorowa ewentualne b dy Przyk adowopodzia y stron nie s wy wietlane na arkuszach wykresoacutew Kiedy wprowadzisz takiepolecenie i sproacutebujesz wykona t procedur dla arkusza wykresu na ekranie nie pojawisi komunikat o b dzie

Techniki u ytej w procedurze TogglePageBreaks mo esz u ywa do zmiany dowolnychopcji logicznych (czyli takich ktoacuterych warto ciami s True albo False)

Zmiana innych opcji (typu non-Boolean)Do zmiany opcji ktoacutere nie s typu logicznego mo esz u ywa konstrukcji Select CaseW przyk adzie przedstawionym poni ej zmieniam tryb przeliczania skoroszytu z r cznegona automatyczny i odwrotnie i nakazuj wy wietlenie na ekranie komunikatu opisuj cegoaktualny tryb przeliczania arkusza

Sub ToggleCalcMode() Select Case ApplicationCalculation Case xlManual ApplicationCalculation = xlCalculationAutomatic MsgBox Automatyczne przeliczanie skoroszytu Case xlAutomatic ApplicationCalculation = xlCalculationManual MsgBox R czne przeliczanie skoroszytu End SelectEnd Sub

Techniki u ytej w procedurze ToggleCalcMode mo esz u ywa do zmiany dowolnychopcji ktoacutere nie posiadaj warto ci logicznych

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 10: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

Spis tre ci 13

Przyk ady zastosowania VBA do modyfikacji menu podr cznego 334Resetowanie wszystkich wbudowanych menu podr cznych 334Dodawanie nowego elementu do menu podr cznego Cell 335Wy czanie menu podr cznego 337

Tworzenie w asnych paskoacutew narz dzi 338

Cz V Od teorii do praktyki 341Rozdzia 20 Jak tworzy w asne funkcje arkuszowe i jak prze y aby o tym opowiedzie 343

Dlaczego tworzymy w asne funkcje 343Podstawowe informacje o funkcjach VBA 344Tworzenie funkcji 345Praca z argumentami funkcji 345Przyk ady funkcji 346

Funkcje bezargumentowe 346Funkcje jednoargumentowe 346Funkcje z dwoma argumentami 348Funkcje pobieraj ce zakres jako argument 349Funkcje z argumentami opcjonalnymi 351

Funkcje opakowuj ce 353Funkcja NumberFormat 353Funkcja ExtractElement 354Funkcja SayIt 354Funkcja IsLike 355

Funkcje zwracaj ce tablice 355Zwracanie tablicy zawieraj cej nazwy miesi cy 355Zwracanie posortowanej listy 356

Okno dialogowe Wstawianie funkcji 358Wy wietlanie opisoacutew funkcji 358Opisy argumentoacutew 360

Rozdzia 21 Tworzenie dodatkoacutew 361No dobrzehellip czym zatem s dodatki 361Po co tworzy si dodatki 362Praca z dodatkami 363Podstawy tworzenia dodatkoacutew 364Tworzymy przyk adowy dodatek 365

Konfiguracja skoroszytu 365Testowanie skoroszytu 367Tworzenie opisoacutew dodatku 368Ochrona kodu VBA 369Tworzenie dodatku 369Otwieranie dodatku 369Dystrybucja dodatkoacutew 370Modyfikowanie dodatkoacutew 371

Kup książkę Poleć książkę

14 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Cz VI Dekalogi 373Rozdzia 22 Dziesi pyta na temat VBA (wraz z odpowiedziami) 375

Rozdzia 23 (Prawie) dziesi roacutede informacji na temat Excela 379System pomocy j zyka VBA 379Wsparcie techniczne firmy Microsoft 380Inne strony internetowe 380Blogi po wi cone Excelowi 380Google 381Bing 381Lokalne grupy u ytkownikoacutew 381Moje inne ksi ki 381

Rozdzia 24 Dziesi rzeczy ktoacutere powiniene robi w j zyku VBAi ktoacuterych nie powiniene robi 383

Zawsze deklaruj wszystkie zmienne 383Nigdy nie powiniene myli has a chroni cego kod VBA z bezpiecze stwem aplikacji 384Zawsze staraj si wyczy ci i zoptymalizowa kod aplikacji 384Nigdy nie umieszczaj wszystkiego w jednej procedurze 385Zawsze powiniene rozwa y zastosowanie innego oprogramowania 385Nigdy nie zak adaj e ka dy u ytkownik zezwala na uruchamianie makr 386Zawsze staraj si eksperymentowa z nowymi rozwi zaniami 386Nigdy z goacutery nie zak adaj e Twoacutej kod b dzie poprawnie dzia a z innymi wersjami Excela 386Zawsze pami taj o u ytkownikach Twojej aplikacji 387Nigdy nie zapominaj o tworzeniu kopii zapasowych 387

Skorowidz 389

Kup książkę Poleć książkę

Rozdzia 14

Przyk ady i technikiprogramowania w j zyku VBA

W tym rozdziale poznasz szereg przyk adoacutew technik programowania w j zyku VBA dowiesz si jak mo esz przyspieszy dzia anie kodu VBA w Twojej aplikacji

ierz e nauka programowania jest znacznie szybsza i zdecydowanie bardziejefektywna kiedy pracujemy na konkretnych przyk adach Dobrze opracowany

przyk ad o wiele lepiej obja nia zagadnienie ni najbardziej rozbudowany i szczegoacute owyale teoretyczny opis Poniewa czytasz t ksi k prawdopodobnie zgadzasz si ze mnw tej materii W tym rozdziale znajdziesz szereg przyk adoacutew demonstruj cych u ytecznepraktyczne techniki programowania w j zyku VBA

Przyk ady omawiane w tym rozdziale zosta y podzielone na kilka kategorii Oto one

Praca z zakresami

Modyfikacja ustawie Excela

Praca z wykresami

Przyspieszanie i optymalizacja dzia ania kodu VBA

Niektoacutere z prezentowanych przyk adoacutew b dziesz moacuteg od razu wykorzysta w swoichaplikacjach jednak w wi kszo ci przypadkoacutew b d wymaga y pewnego dostosowaniado Twoich aplikacji

Przetwarzanie zakresoacutew komoacuterekWi kszo zada z jakimi b dziesz si styka programuj c w j zyku VBA b dzie zapewnewymaga a mniejszego b d wi kszego przetwarzania zakresoacutew komoacuterek (aby od wie ysobie wiadomo ci na temat obiektu Range powiniene zajrze do rozdzia u 8) Kiedypracujesz z obiektami Range powiniene pami ta o nast puj cych sprawach

Kod VBA nie musi zaznacza danego zakresu aby go przetwarza

Je eli kod VBA zaznacza wybrany zakres przechowuj cy go skoroszyt musi byaktywny

W

Kup książkę Poleć książkę

218 Cz III Podstawy programowania

Rejestrator makr nie zawsze b dzie w stanie wygenerowa optymalny kod VBABardzo cz sto jednak mo esz za jego pomoc utworzy bazowe makro i potemodpowiednio zmodyfikowa kod tak aby sta si bardziej efektywny

Zazwyczaj bardzo dobrym rozwi zaniem jest nadawanie nazw zakresom komoacuterekwykorzystywanym w kodzie VBA Przyk adowo polecenie Range(Total)jestznacznie lepszym rozwi zaniem ni Range(D45) Je li w tym drugim przypadkupoacute niej wstawisz dodatkowy wiersz powy ej wiersza 45 to eby wszystko dzia a opoprawnie b dziesz musia zmodyfikowa makro tak aby korzysta o z nowegopoprawnego adresu komoacuterki a ta po wykonaniu takiej operacji b dzie mia a innyadres (D46) Aby nada nazw wybranemu zakresowi komoacuterek powiniene przejna kart FORMU Y i wybra polecenie Definiuj nazw znajduj ce si w grupiepolece Nazwy zdefiniowane

Kiedy tworzysz makro ktoacutere b dzie przetwarza o zakres komoacuterek zaznaczonyprzez u ytkownika pami taj e u ytkownik mo e zaznaczy kilka ca ych kolumnczy wierszy W wi kszo ci przypadkoacutew z pewno ci nie b dziesz chcia aby makrow p tli przechodzi o w takiej sytuacji przez wszystkie zaznaczone komoacuterki (w czniez pustymi) co mog oby zaj bardzo wiele czasu Dobre makro powinno odszukai przetwarza tylko komoacuterki ktoacutere nie s puste

Excel pozwala na jednoczesne zaznaczanie wielu zakresoacutew komoacuterek Aby to zrobi powiniene zaznaczy pierwszy zakres komoacuterek potem wcisn i przytrzymaklawisz Ctrl i zaznacza kolejne zakresy komoacuterek przy u yciu myszy Kod Twojejaplikacji powinien by przygotowany na takie sytuacje i podejmowa odpowiednieakcje

Skoroszyty z wybranymi przyk adami omawianymi w tym rozdziale znajdziesz na stronieinternetowej naszej ksi ki

Je eli chcesz samodzielnie wpisywa kod omawianych przyk adoacutew przejd do edytoraVBE naciskaj c kombinacj klawiszy lewyAlt+F11 a nast pnie wstaw nowy modu VBAi wpisz kod prezentowanych procedur Upewnij si e Twoacutej skoroszyt jest poprawnieskonfigurowany Je eli na przyk ad kod danego przyk adu odwo uje si do arkuszyo nazwach Arkusz1 i Arkusz2 upewnij si e takie arkusze istniej w Twoim skoroszycie

Kopiowanie zakresoacutewKopiowanie zakresoacutew komoacuterek mo e mia o pretendowa do miana jednej z najcz ciejwykonywanych operacji w Excelu Kiedy w czysz rejestrator makr i skopiujesz zakreskomoacuterek o adresie A1A5 do zakresu B1B5 otrzymasz nast puj ce makro

Sub CopyRange() Range(A1A5)Select SelectionCopy Range(B1)Select ActiveSheetPaste ApplicationCutCopyMode = FalseEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 219

Zwroacute uwag na ostatnie polecenie Zosta o ono wygenerowane przez naci ni cieklawisza Esc po skopiowaniu zakresu komoacuterek co spowodowa o usuni cie przerywanejlinii reprezentuj cej na arkuszu obramowanie kopiowanego zakresu

Przedstawione makro dzia a poprawnie ale zakresy komoacuterek mo na kopiowa w znaczniebardziej efektywny sposoacuteb Identyczny rezultat mo esz osi gn za pomoc proceduryktoacutera sk ada si z tylko jednego wiersza polecenia i nie zaznacza adnych komoacuterek(dzi ki czemu nie wymaga ustawiania w a ciwo ci CutCopyMode na warto False)

Sub CopyRange2() Range(A1A5)Copy Range(B1)End Sub

Procedura przedstawiona powy ej korzysta z tego e metoda Copy mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe kopiowanego zakresu Informacje o tymznalaz em w pomocy systemowej VBA Powy szy przyk ad doskonale roacutewnie ilustrujefakt e rejestrator makr nie zawsze generuje najbardziej efektywny kod

Kopiowanie zakresu o zmiennej wielko ciW wielu przypadkach konieczne jest skopiowanie zakresu komoacuterek dla ktoacuterego dok adnaliczba wierszy i kolumn okre laj cych jego wielko nie jest z goacutery znana Przyk adowomo esz dysponowa skoroszytem ledz cym tygodniow sprzeda w ktoacuterym liczba wierszyzmienia si ka dego tygodnia po wprowadzeniu nowych danych

Na rysunku 141 przedstawiam przyk ad cz sto spotykanego typu arkusza Znajduj cysi w nim zakres komoacuterek sk ada si z kilku wierszy ktoacuterych liczba zmienia si ka degodnia Poniewa nie wiesz jaki jest rozmiar zakresu w danej chwili musisz utworzykod ktoacutery b dzie dzia a bez u ywania adresu zakresu kopiowanych komoacuterek

Rysunek 141Przyk ad zakre-su ktoacutery mo e

sk ada siz dowolnej

liczby wierszy

Makro przedstawione poni ej ilustruje sposoacuteb kopiowania zakresu komoacuterek z arkuszaArkusz1 do arkusza Arkusz2 (pocz wszy od komoacuterki A1) Makro wykorzystuje w a ciwoCurrentRegion ktoacutera zwraca obiekt Range odpowiadaj cy blokowi komoacuterek otaczaj cychokre lon komoacuterk (w tym przypadku o adresie A1)

Kup książkę Poleć książkę

220 Cz III Podstawy programowania

Sub CopyCurrentRegion() Range(A1)CurrentRegionCopy Sheets(Arkusz2)Select Range(A1)Select ActiveSheetPaste Sheets(Arkusz1)Select ApplicationCutCopyMode = FalseEnd Sub

Zastosowanie w a ciwo ci CurrentRegion jest roacutewnowa ne z przej ciem na kartNARZ DZIA G OacuteWNE i wybraniem polecenia Znajd i zaznaczPrzejd do mdashspecjalnie znajduj cego si w grupie opcji Edytowanie i nast pnie zaznaczeniem opcjiBie cy obszar Aby przekona si jak to dzia a podczas wykonywania tych polecepowiniene u y rejestratora makr Zazwyczaj warto w a ciwo ci CurrentRegionreprezentuje prostok tny blok komoacuterek otoczony przez puste wiersze i kolumny

Oczywi cie mo esz zoptymalizowa kod makra przedstawionego powy ej i niezaznacza obszaru docelowego dla kopiowanych komoacuterek Makro przedstawione poni ejkorzysta z faktu e metoda Copy mo e u ywa argumentu wywo ania reprezentuj cegomiejsce docelowe kopiowanego zakresu

Sub CopyCurrentRegion2() Range(A1)CurrentRegionCopy _ Sheets(Arkusz2)Range(A1)End Sub

Je eli zakres komoacuterek ktoacutery chcesz skopiowa jest tabel (zdefiniowan przy u yciapolecenia WSTAWIANIETabeleTabela) ca e zadanie b dzie jeszcze atwiejsze Ka databela posiada swoj nazw (na przyk ad Tabela1) i automatycznie rozszerza si w miardodawania nowych wierszy

Sub CopyTable() Range(Tabela1)Copy Sheets(Arkusz2)Range(A1)End Sub

Je eli sproacutebujesz wykona procedur przedstawion powy ej przekonasz si e wiersznag oacutewka tabeli nie jest kopiowany poniewa obiekt Tabela1 nie obejmuje tegowiersza Je li chcesz aby wiersz nag oacutewka roacutewnie by kopiowany powiniene zmieniodwo anie do tabeli tak jak to zosta o przedstawione poni ej

Range(Tabela1[All])

Zaznaczanie komoacuterekdo ko ca wiersza lub kolumnyPrawdopodobnie bardzo cz sto u ywasz kombinacji klawiszy takich jak Ctrl+Shift+ czy Ctrl+Shift+ do zaznaczania zakresoacutew sk adaj cych si ze wszystkich komoacuterekod komoacuterki aktywnej a do ko ca kolumny czy wiersza Nie jest wi c chyba zaskoczenieme mo esz napisa makro ktoacutere b dzie zaznacza komoacuterki w podobny sposoacuteb

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 221

Do zaznaczania ca ego bloku komoacuterek mo esz u y w a ciwo ci CurrentRegion Ale copowiniene zrobi je eli chcesz zaznaczy powiedzmy tylko jedn kolumn z tegobloku komoacuterek Na szcz cie VBA pozwala na wykonywanie takich operacji Proceduraktoacuterej kod przedstawiam poni ej zaznacza zakres komoacuterek pocz wszy od bie cejaktywnej komoacuterki w doacute kolumny a do komoacuterki znajduj cej si o jeden wiersz powy ejpierwszej pustej komoacuterki tej kolumny Po zaznaczeniu zakresu mo esz przetwarza gow dowolny sposoacuteb mdash kopiowa komoacuterki przenosi je w inne miejsce arkusza zmieniaformatowanie i tak dalej

Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))SelectEnd Sub

Oczywi cie taki sam obszar mo esz roacutewnie zaznaczy r cznie Aby to zrobi powinienezaznaczy pierwsz komoacuterk nast pnie wcisn i przytrzyma klawisz Shift nacisnklawisz End i wreszcie nacisn klawisz (strza ka w doacute )

W przyk adzie wykorzystuj metod End obiektu ActiveCell ktoacutera zwraca obiekt typuRange Metoda End pobiera jeden argument okre laj cy kierunek w ktoacuterym zostaniewykonane zaznaczenie Argumentami tej metody mo e by dowolna ze sta ychprzedstawionych poni ej

xlUp

xlDown

xlToLeft

xlToRight

Pami taj e zaznaczanie zakresu nie jest potrzebne do jego przetwarzania Makroprzedstawione poni ej zmienia czcionk w komoacuterkach zmiennego zakresu (pojedynczakolumna) na pogrubion bez uprzedniego zaznaczenia zakresu

Sub MakeBold() Range(ActiveCell ActiveCellEnd(xlDown)) _ FontBold = TrueEnd Sub

Zaznaczanie ca ego wiersza lub ca ej kolumnyProcedura przedstawiona poni ej ilustruje sposoacuteb zaznaczania kolumny w ktoacuterej znajdujesi aktywna komoacuterka Makro wykorzystuje w a ciwo EntireColumn ktoacutera zwracaobiekt typu Range reprezentuj cy ca kolumn

Sub SelectColumn() ActiveCellEntireColumnSelectEnd Sub

Jak pewnie si spodziewasz w j zyku VBA dost pna jest roacutewnie w a ciwo EntireRowktoacutera zwraca obiekt typu Range reprezentuj cy ca y wiersz

Kup książkę Poleć książkę

222 Cz III Podstawy programowania

Przenoszenie zakresoacutewZazwyczaj aby przenie zakres komoacuterek zaznaczasz go wycinasz do schowka systemowegoi nast pnie wklejasz w inne miejsce Je eli u yjesz rejestratora makr do zapisania takiejoperacji przekonasz si e wygenerowany zostanie kod podobny do przedstawionegoponi ej

Sub MoveRange() Range(A1C6)Select SelectionCut Range(A10)Select ActiveSheetPasteEnd Sub

Podobnie jak podczas kopiowania komoacuterek takie rozwi zanie nie jest najbardziejefektywnym sposobem przenoszenia zakresu komoacuterek w inne miejsce W praktyce takoperacj mo esz wykona za pomoc procedury sk adaj cej si z jednego wiersza koduco prezentuj poni ej

Sub MoveRange2() Range(A1C6)Cut Range(A10)End Sub

Makro przedstawione powy ej korzysta z faktu e metoda Cut mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe przenoszonego zakresu Zwroacute roacutewnieuwag na fakt e podczas przenoszenia aden zakres komoacuterek nie jest zaznaczanyWska nik aktywnej komoacuterki przez ca y czas pozostaje w tym samym miejscu arkusza

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tliJednym z zada cz sto wykonywanych przez makra jest sprawdzanie poszczegoacutelnychkomoacuterek zakresu i wykonywanie okre lonych operacji na podstawie ich zawarto ci Takiemakra zazwyczaj wykorzystuj p tl For-Next za pomoc ktoacuterej przetwarzane s komoacuterkizakresu

Przyk ad przedstawiony ni ej ilustruje sposoacuteb przechodzenia kolejno przez wszystkiekomoacuterki danego zakresu W naszym przypadku przetwarzany jest aktualnie zaznaczonyzakres komoacuterek Zmienna obiektowa o nazwie Cell reprezentuje aktualnie przetwarzankomoacuterk W p tli For Each-Next znajduje si jedno polecenie ktoacutere sprawdza aktualnieprzetwarzan komoacuterk i zmienia jej czcionk na pogrubion je eli warto przechowywanaw komoacuterce jest dodatnia

Sub ProcessCells() Dim Cell As Range For Each Cell In Selection If CellValue gt 0 Then CellFontBold = True Next CellEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 223

Taka procedura dzia a poprawnie ale co si stanie je eli u ytkownik zaznaczy cakolumn lub ca y wiersz To wcale nie jest takie nieprawdopodobne bo przecie Excelpozwala na wykonywanie operacji na ca ych wierszach i kolumnach W takiej sytuacjiwykonanie makra mo e zaj naprawd du o czasu poniewa nasza p tla przetwarzaka d komoacuterk zaznaczonego zakresu a cznie z pustymi w jednej kolumnie komoacuterekjest a 1 048 576hellip Aby zatem nasze makro by o bardziej wydajne musimy je takzmodyfikowa eby przetwarzane by y tylko i wy cznie komoacuterki ktoacutere nie s puste

Procedura przedstawiona poni ej przetwarza wy cznie niepuste komoacuterki zaznaczonegozakresu dzi ki zastosowaniu metody SpecialCells (wi cej szczegoacute owych informacji natemat tej metody znajdziesz w pomocy systemowej VBA) Nasza procedura za pomocpolecenia Set tworzy dwa obiekty typu Range pierwszy z nich to podzakres komoacuterekzakresu wej ciowego zawieraj cy wy cznie komoacuterki z warto ciami sta ymi (na przyk adteksty warto ci liczbowe litera y i tak dalej) a drugi sk ada si z komoacuterek zawieraj cychformu y Procedura przetwarza tylko komoacuterki nale ce do tych podzakresoacutew co w efekciepowoduje pomini cie przetwarzania wszystkich pozosta ych pustych komoacuterek zakresuwej ciowego Sprytne prawda

Sub SkipBlanks() Dim ConstantCells As Range Dim FormulaCells As Range Dim cell As Range Ignoruj b dy On Error Resume Next

Przetwarzaj komoacuterki zawieraj ce warto ci sta e Set ConstantCells = Selection _ SpecialCells(xlConstants) For Each cell In ConstantCells If cellValue gt 0 Then cellFontBold = True End If Next cell

Przetwarzaj komoacuterki zawieraj ce formu y Set FormulaCells = Selection _ SpecialCells(xlFormulas) For Each cell In FormulaCells If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Procedura SkipBlanks dzia a tak samo szybko niezale nie od tego jaki zakres komoacuterekzaznaczy e Mo esz na przyk ad zaznaczy zakres sk adaj cy si z kilku komoacuterek zaznaczywszystkie kolumny w danym zakresie albo wszystkie wiersze w danym zakresie albonawet ca y arkusz Jak wida jest to ogromne usprawnienie w stosunku do oryginalnejprocedury ProcessCells ktoacuter omoacutewi em nieco wcze niej

Zwroacute uwag e w kodzie procedury u yli my polecenia

On Error Resume Next

Kup książkę Poleć książkę

224 Cz III Podstawy programowania

Polecenie to powoduje e Excel po prostu ignoruje b dy (inaczej moacutewi c je eli proacutebawykonania danego polecenia ko czy si b dem Excel ignoruje ten b d i po prostuprzechodzi do kolejnego polecenia wi cej szczegoacute owych informacji na temat obs ugib doacutew znajdziesz w rozdziale 12) W naszym przypadku zastosowanie polecenia OnError jest konieczne poniewa metoda SpecialCells generuje b d gdy adna komoacuterkanie spe nia podanego kryterium

Zastosowanie metody SpecialCells jest roacutewnowa ne z przej ciem na kart NARZ DZIAG OacuteWNE wybraniem polecenia Znajd i zaznaczPrzejd do mdash specjalnie znajduj cegosi w grupie opcji Edytowanie i nast pnie zaznaczeniem opcji Sta e lub Formu y Abyprzekona si jak to dzia a podczas wykonywania tych polece powiniene u yrejestratora makr i zaznacza roacute ne opcje

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tli(cz II)A teraz ci g dalszy naszej opowie ci W tym punkcie przedstawi inny sposoacuteb efektywnegoprzetwarzania komoacuterek znajduj cych si w zaznaczonym zakresie Tym razem procedurab dzie korzysta a z w a ciwo ci UsedRange ktoacutera zwraca obiekt typu Range reprezentuj cyu ywany zakres arkusza Procedura korzysta roacutewnie z metody Intersect ktoacutera zwracaobiekt typu Range zawieraj cy komoacuterki b d ce cz ci wspoacuteln dwoacutech zakresoacutew

Poni ej przedstawiam zmodyfikowan wersj procedury SkipBlanks omawianejw poprzednim punkcie

Sub SkipBlanks2() Dim WorkRange As Range Dim cell As Range Set WorkRange = Intersect(Selection ActiveSheetUsedRange) For Each cell In WorkRange If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Zmienna obiektowa WorkRange zawiera komoacuterki ktoacutere s cz ci wspoacuteln zakresuzaznaczonego przez u ytkownika oraz zakresu u ywanych komoacuterek arkusza Je lizatem u ytkownik zaznaczy ca kolumn zmienna WorkRange b dzie zawiera a tylkokomoacuterki ktoacutere znajduj si jednocze nie w zaznaczonej kolumnie i w u ywanymzakresie arkusza Jak wida jest to bardzo szybka i efektywna metoda pozwalaj ca naunikni cie przetwarzania komoacuterek znajduj cych si poza zakresem u ywanychkomoacuterek arkusza

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 225

Wprowadzanie warto ci do komoacuterkiNa rysunku 142 pokazuj w jaki sposoacuteb mo esz u y funkcji InputBox j zyka VBA dopobierania od u ytkownika warto ci ktoacutera nast pnie mo e zosta zapisana w wybranejkomoacuterce W procedurze przedstawionej poni ej demonstruj jak poprosi u ytkownikao podanie warto ci i wstawi j do komoacuterki A1 aktywnego arkusza (i to wszystkoza pomoc jednego polecenia)

Sub GetValue() Range(A1)Value = InputBox( _ Wprowad warto dla komoacuterki A1)End Sub

Rysunek 142Zastosowaniefunkcji Input-

Box do pobie-rania warto ci

od u ytkownika

Przedstawiona procedura mo e jednak sprawia pewien problem Je eli u ytkowniknaci nie w oknie dialogowym przycisk Cancel procedura usunie wszelkie dane juznajduj ce si w komoacuterce A1 a takie zachowanie nie jest zbyt dobr praktyk programistyczn Naci ni cie przycisku Cancel powinno po prostu usuwa z ekranu okno dialogowe bezwykonywania adnych dodatkowych operacji

Makro przedstawione poni ej ilustruje znacznie lepsze podej cie do takiego zagadnieniai do zapami tania warto ci wprowadzonej przez u ytkownika wykorzystuje zmienn xJe eli zmienna zawiera co innego ni pusty ci g znakoacutew (czyli kiedy u ytkownikwprowadzi jak warto ) warto zmiennej jest zapisywana w komoacuterce A1 W przeciwnymprzypadku procedura ko czy dzia anie nie wykonuj c adnych dodatkowych operacji

Sub GetValue2() Dim x as Variant x = InputBox(Wprowad warto dla komoacuterki A1) If x ltgt Then Range(A1)Value = xEnd Sub

Zmienna x zosta a zdefiniowana jako zmienna typu Variant poniewa jej warto cimo e by warto albo pusty ci g znakoacutew (je eli u ytkownik naci nie przycisk Cancel)

Kup książkę Poleć książkę

226 Cz III Podstawy programowania

Okre lanie typu zaznaczonego zakresuJe eli zadaniem Twojego makra b dzie przetwarzanie zaznaczonego zakresu takiemakro musi mie zdolno sprawdzenia czy przed jego wywo aniem u ytkownikrzeczywi cie zaznaczy zakres komoacuterek W przeciwnym razie je eli przed wywo aniemmakra zaznaczony zostanie inny obiekt (na przyk ad wykres lub kszta t) proacuteba wykonaniamakra najprawdopodobniej zako czy si niepowodzeniem Polecenie przedstawioneponi ej wykorzystuje funkcj TypeName j zyka VBA do wy wietlania na ekranie typuaktualnie zaznaczonego obiektu

MsgBox TypeName(Selection)

Je eli aktualnie zaznaczony jest obiekt typu Range wykonanie takiego polecenia spowodujewy wietlenie s owa Range Je li Twoje makro dzia a tylko z zakresami komoacuterek mo eszu y polecenia If do sprawdzenia czy aktualnie zaznaczony obiekt to zakres (obiekttypu Range) Procedura przedstawiona poni ej sprawdza typ zaznaczonego obiektui je eli nie jest to obiekt typu Range na ekranie wy wietlany jest odpowiedni komunikati procedura ko czy dzia anie

Sub CheckSelection() If TypeName(Selection) ltgt Range Then MsgBox Zaznacz zakres komoacuterek Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Identyfikowanie zaznacze wielokrotnychJak pami tasz Excel pozwala na jednoczesne zaznaczanie wielu obiektoacutew Aby to zrobi powiniene podczas zaznaczania obiektoacutew lub zakresoacutew trzyma wci ni ty klawisz CtrlZaznaczenia wielokrotne mog by przyczyn problemoacutew z wykonywaniem niektoacuterychmakr Przyk adowo nie mo esz skopiowa zakresu komoacuterek ktoacutery zosta utworzonypoprzez wiele zaznacze nieci g ych zakresoacutew komoacuterek Je eli sproacutebujesz wykonatak operacj Excel wy wietli na ekranie komunikat przedstawiony na rysunku 143

Makro przedstawione ni ej pokazuje w jaki sposoacuteb mo esz sprawdzi czy u ytkownikdokona zaznaczenia wielokrotnego i na tej podstawie wykona odpowiedni operacj

Sub MultipleSelection() If SelectionAreasCount gt 1 Then MsgBox Zaznaczenia wielokrotne nie s dozwolone Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Przedstawiona procedura wykorzystuje metod Areas ktoacutera zwraca kolekcj wszystkichzakresoacutew w danym zaznaczeniu W a ciwo Count zwraca liczb obiektoacutew tej kolekcji

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 227

Rysunek 143Excel nie lubi

kiedy proacutebujeszkopiowa nie-ci g e zakresy

komoacuterek

Zmiana ustawie ExcelaChyba najbardziej u ytecznymi makrami s proste procedury ktoacutere zmieniaj jednolub kilka ustawie Excela Je li na przyk ad dojdziesz do wniosku e bardzo cz stoprzywo ujesz na ekran okno opcji programu Excel i zmieniasz jakie ustawienie takaoperacja z pewno ci b dzie bardzo dobrym kandydatem do napisania makraoszcz dzaj cego Twoacutej czas i u atwiaj cego zmian takiego ustawienia

W tym podrozdziale zaprezentuj dwa przyk ady procedur ktoacutere pokazuj w jakisposoacuteb mo na zmienia ustawienia Excela Ogoacutelne zasady dzia ania tych procedurmo esz z powodzeniem zastosowa do napisania w asnych makr zmieniaj cych inneustawienia Excela

Zmiana ustawie logicznych(opcje typu Boolean)Podobnie jak wy cznik wiat a opcje logiczne (typu Boolean) mog by albo w czonealbo wy czone Mo esz na przyk ad utworzy makro ktoacutere b dzie w cza o lub wy cza owy wietlanie podzia u arkusza na strony Kiedy wydrukujesz arkusz (lub skorzystaszz trybu podgl du wydruku) Excel wy wietla na arkuszu przerywane linie reprezentuj cemiejsca podzia u arkusza na strony wydruku Niektoacuterych u ytkownikoacutew (w czniez autorem tej ksi ki) takie zachowanie Excela irytuje Niestety jedynym sposobemwy czenia wy wietlania podzia u arkusza na strony jest otwarcie okna dialogowego Opcjeprogramu Excel przej cie na kart Zaawansowane a nast pnie przewijanie zawarto ci tejkarty a do odszukania opcji Poka podzia y stron Je eli podczas wy czania tej opcjikorzysta e z rejestratora makr przekonasz si e Excel generuje poni szy kod

Kup książkę Poleć książkę

228 Cz III Podstawy programowania

ActiveSheetDisplayPageBreaks = False

Z drugiej strony je eli podczas rejestrowania makra podzia y stron nie s widoczneExcel generuje taki kod

ActiveSheetDisplayPageBreaks = True

Takie informacje mog doprowadzi do wniosku e b dziesz musia napisa a dwamakra mdash jedno do w czania podgl du podzia u stron a drugie do jego wy czaniaNa szcz cie to nieprawda Procedura przedstawiona poni ej wykorzystuje operatorNot do zmiany warto ci logicznej True na False i odwrotnie Wykonanie proceduryTogglePageBreaks to prosty sposoacuteb na cykliczne w czanie i wy czanie podgl du podzia ustron arkusza

Sub TogglePageBreaks() On Error Resume Next ActiveSheetDisplayPageBreaks = Not _ ActiveSheetDisplayPageBreaksEnd Sub

Pierwsze polecenie informuje Excel e powinien ignorowa ewentualne b dy Przyk adowopodzia y stron nie s wy wietlane na arkuszach wykresoacutew Kiedy wprowadzisz takiepolecenie i sproacutebujesz wykona t procedur dla arkusza wykresu na ekranie nie pojawisi komunikat o b dzie

Techniki u ytej w procedurze TogglePageBreaks mo esz u ywa do zmiany dowolnychopcji logicznych (czyli takich ktoacuterych warto ciami s True albo False)

Zmiana innych opcji (typu non-Boolean)Do zmiany opcji ktoacutere nie s typu logicznego mo esz u ywa konstrukcji Select CaseW przyk adzie przedstawionym poni ej zmieniam tryb przeliczania skoroszytu z r cznegona automatyczny i odwrotnie i nakazuj wy wietlenie na ekranie komunikatu opisuj cegoaktualny tryb przeliczania arkusza

Sub ToggleCalcMode() Select Case ApplicationCalculation Case xlManual ApplicationCalculation = xlCalculationAutomatic MsgBox Automatyczne przeliczanie skoroszytu Case xlAutomatic ApplicationCalculation = xlCalculationManual MsgBox R czne przeliczanie skoroszytu End SelectEnd Sub

Techniki u ytej w procedurze ToggleCalcMode mo esz u ywa do zmiany dowolnychopcji ktoacutere nie posiadaj warto ci logicznych

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 11: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

14 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Cz VI Dekalogi 373Rozdzia 22 Dziesi pyta na temat VBA (wraz z odpowiedziami) 375

Rozdzia 23 (Prawie) dziesi roacutede informacji na temat Excela 379System pomocy j zyka VBA 379Wsparcie techniczne firmy Microsoft 380Inne strony internetowe 380Blogi po wi cone Excelowi 380Google 381Bing 381Lokalne grupy u ytkownikoacutew 381Moje inne ksi ki 381

Rozdzia 24 Dziesi rzeczy ktoacutere powiniene robi w j zyku VBAi ktoacuterych nie powiniene robi 383

Zawsze deklaruj wszystkie zmienne 383Nigdy nie powiniene myli has a chroni cego kod VBA z bezpiecze stwem aplikacji 384Zawsze staraj si wyczy ci i zoptymalizowa kod aplikacji 384Nigdy nie umieszczaj wszystkiego w jednej procedurze 385Zawsze powiniene rozwa y zastosowanie innego oprogramowania 385Nigdy nie zak adaj e ka dy u ytkownik zezwala na uruchamianie makr 386Zawsze staraj si eksperymentowa z nowymi rozwi zaniami 386Nigdy z goacutery nie zak adaj e Twoacutej kod b dzie poprawnie dzia a z innymi wersjami Excela 386Zawsze pami taj o u ytkownikach Twojej aplikacji 387Nigdy nie zapominaj o tworzeniu kopii zapasowych 387

Skorowidz 389

Kup książkę Poleć książkę

Rozdzia 14

Przyk ady i technikiprogramowania w j zyku VBA

W tym rozdziale poznasz szereg przyk adoacutew technik programowania w j zyku VBA dowiesz si jak mo esz przyspieszy dzia anie kodu VBA w Twojej aplikacji

ierz e nauka programowania jest znacznie szybsza i zdecydowanie bardziejefektywna kiedy pracujemy na konkretnych przyk adach Dobrze opracowany

przyk ad o wiele lepiej obja nia zagadnienie ni najbardziej rozbudowany i szczegoacute owyale teoretyczny opis Poniewa czytasz t ksi k prawdopodobnie zgadzasz si ze mnw tej materii W tym rozdziale znajdziesz szereg przyk adoacutew demonstruj cych u ytecznepraktyczne techniki programowania w j zyku VBA

Przyk ady omawiane w tym rozdziale zosta y podzielone na kilka kategorii Oto one

Praca z zakresami

Modyfikacja ustawie Excela

Praca z wykresami

Przyspieszanie i optymalizacja dzia ania kodu VBA

Niektoacutere z prezentowanych przyk adoacutew b dziesz moacuteg od razu wykorzysta w swoichaplikacjach jednak w wi kszo ci przypadkoacutew b d wymaga y pewnego dostosowaniado Twoich aplikacji

Przetwarzanie zakresoacutew komoacuterekWi kszo zada z jakimi b dziesz si styka programuj c w j zyku VBA b dzie zapewnewymaga a mniejszego b d wi kszego przetwarzania zakresoacutew komoacuterek (aby od wie ysobie wiadomo ci na temat obiektu Range powiniene zajrze do rozdzia u 8) Kiedypracujesz z obiektami Range powiniene pami ta o nast puj cych sprawach

Kod VBA nie musi zaznacza danego zakresu aby go przetwarza

Je eli kod VBA zaznacza wybrany zakres przechowuj cy go skoroszyt musi byaktywny

W

Kup książkę Poleć książkę

218 Cz III Podstawy programowania

Rejestrator makr nie zawsze b dzie w stanie wygenerowa optymalny kod VBABardzo cz sto jednak mo esz za jego pomoc utworzy bazowe makro i potemodpowiednio zmodyfikowa kod tak aby sta si bardziej efektywny

Zazwyczaj bardzo dobrym rozwi zaniem jest nadawanie nazw zakresom komoacuterekwykorzystywanym w kodzie VBA Przyk adowo polecenie Range(Total)jestznacznie lepszym rozwi zaniem ni Range(D45) Je li w tym drugim przypadkupoacute niej wstawisz dodatkowy wiersz powy ej wiersza 45 to eby wszystko dzia a opoprawnie b dziesz musia zmodyfikowa makro tak aby korzysta o z nowegopoprawnego adresu komoacuterki a ta po wykonaniu takiej operacji b dzie mia a innyadres (D46) Aby nada nazw wybranemu zakresowi komoacuterek powiniene przejna kart FORMU Y i wybra polecenie Definiuj nazw znajduj ce si w grupiepolece Nazwy zdefiniowane

Kiedy tworzysz makro ktoacutere b dzie przetwarza o zakres komoacuterek zaznaczonyprzez u ytkownika pami taj e u ytkownik mo e zaznaczy kilka ca ych kolumnczy wierszy W wi kszo ci przypadkoacutew z pewno ci nie b dziesz chcia aby makrow p tli przechodzi o w takiej sytuacji przez wszystkie zaznaczone komoacuterki (w czniez pustymi) co mog oby zaj bardzo wiele czasu Dobre makro powinno odszukai przetwarza tylko komoacuterki ktoacutere nie s puste

Excel pozwala na jednoczesne zaznaczanie wielu zakresoacutew komoacuterek Aby to zrobi powiniene zaznaczy pierwszy zakres komoacuterek potem wcisn i przytrzymaklawisz Ctrl i zaznacza kolejne zakresy komoacuterek przy u yciu myszy Kod Twojejaplikacji powinien by przygotowany na takie sytuacje i podejmowa odpowiednieakcje

Skoroszyty z wybranymi przyk adami omawianymi w tym rozdziale znajdziesz na stronieinternetowej naszej ksi ki

Je eli chcesz samodzielnie wpisywa kod omawianych przyk adoacutew przejd do edytoraVBE naciskaj c kombinacj klawiszy lewyAlt+F11 a nast pnie wstaw nowy modu VBAi wpisz kod prezentowanych procedur Upewnij si e Twoacutej skoroszyt jest poprawnieskonfigurowany Je eli na przyk ad kod danego przyk adu odwo uje si do arkuszyo nazwach Arkusz1 i Arkusz2 upewnij si e takie arkusze istniej w Twoim skoroszycie

Kopiowanie zakresoacutewKopiowanie zakresoacutew komoacuterek mo e mia o pretendowa do miana jednej z najcz ciejwykonywanych operacji w Excelu Kiedy w czysz rejestrator makr i skopiujesz zakreskomoacuterek o adresie A1A5 do zakresu B1B5 otrzymasz nast puj ce makro

Sub CopyRange() Range(A1A5)Select SelectionCopy Range(B1)Select ActiveSheetPaste ApplicationCutCopyMode = FalseEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 219

Zwroacute uwag na ostatnie polecenie Zosta o ono wygenerowane przez naci ni cieklawisza Esc po skopiowaniu zakresu komoacuterek co spowodowa o usuni cie przerywanejlinii reprezentuj cej na arkuszu obramowanie kopiowanego zakresu

Przedstawione makro dzia a poprawnie ale zakresy komoacuterek mo na kopiowa w znaczniebardziej efektywny sposoacuteb Identyczny rezultat mo esz osi gn za pomoc proceduryktoacutera sk ada si z tylko jednego wiersza polecenia i nie zaznacza adnych komoacuterek(dzi ki czemu nie wymaga ustawiania w a ciwo ci CutCopyMode na warto False)

Sub CopyRange2() Range(A1A5)Copy Range(B1)End Sub

Procedura przedstawiona powy ej korzysta z tego e metoda Copy mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe kopiowanego zakresu Informacje o tymznalaz em w pomocy systemowej VBA Powy szy przyk ad doskonale roacutewnie ilustrujefakt e rejestrator makr nie zawsze generuje najbardziej efektywny kod

Kopiowanie zakresu o zmiennej wielko ciW wielu przypadkach konieczne jest skopiowanie zakresu komoacuterek dla ktoacuterego dok adnaliczba wierszy i kolumn okre laj cych jego wielko nie jest z goacutery znana Przyk adowomo esz dysponowa skoroszytem ledz cym tygodniow sprzeda w ktoacuterym liczba wierszyzmienia si ka dego tygodnia po wprowadzeniu nowych danych

Na rysunku 141 przedstawiam przyk ad cz sto spotykanego typu arkusza Znajduj cysi w nim zakres komoacuterek sk ada si z kilku wierszy ktoacuterych liczba zmienia si ka degodnia Poniewa nie wiesz jaki jest rozmiar zakresu w danej chwili musisz utworzykod ktoacutery b dzie dzia a bez u ywania adresu zakresu kopiowanych komoacuterek

Rysunek 141Przyk ad zakre-su ktoacutery mo e

sk ada siz dowolnej

liczby wierszy

Makro przedstawione poni ej ilustruje sposoacuteb kopiowania zakresu komoacuterek z arkuszaArkusz1 do arkusza Arkusz2 (pocz wszy od komoacuterki A1) Makro wykorzystuje w a ciwoCurrentRegion ktoacutera zwraca obiekt Range odpowiadaj cy blokowi komoacuterek otaczaj cychokre lon komoacuterk (w tym przypadku o adresie A1)

Kup książkę Poleć książkę

220 Cz III Podstawy programowania

Sub CopyCurrentRegion() Range(A1)CurrentRegionCopy Sheets(Arkusz2)Select Range(A1)Select ActiveSheetPaste Sheets(Arkusz1)Select ApplicationCutCopyMode = FalseEnd Sub

Zastosowanie w a ciwo ci CurrentRegion jest roacutewnowa ne z przej ciem na kartNARZ DZIA G OacuteWNE i wybraniem polecenia Znajd i zaznaczPrzejd do mdashspecjalnie znajduj cego si w grupie opcji Edytowanie i nast pnie zaznaczeniem opcjiBie cy obszar Aby przekona si jak to dzia a podczas wykonywania tych polecepowiniene u y rejestratora makr Zazwyczaj warto w a ciwo ci CurrentRegionreprezentuje prostok tny blok komoacuterek otoczony przez puste wiersze i kolumny

Oczywi cie mo esz zoptymalizowa kod makra przedstawionego powy ej i niezaznacza obszaru docelowego dla kopiowanych komoacuterek Makro przedstawione poni ejkorzysta z faktu e metoda Copy mo e u ywa argumentu wywo ania reprezentuj cegomiejsce docelowe kopiowanego zakresu

Sub CopyCurrentRegion2() Range(A1)CurrentRegionCopy _ Sheets(Arkusz2)Range(A1)End Sub

Je eli zakres komoacuterek ktoacutery chcesz skopiowa jest tabel (zdefiniowan przy u yciapolecenia WSTAWIANIETabeleTabela) ca e zadanie b dzie jeszcze atwiejsze Ka databela posiada swoj nazw (na przyk ad Tabela1) i automatycznie rozszerza si w miardodawania nowych wierszy

Sub CopyTable() Range(Tabela1)Copy Sheets(Arkusz2)Range(A1)End Sub

Je eli sproacutebujesz wykona procedur przedstawion powy ej przekonasz si e wiersznag oacutewka tabeli nie jest kopiowany poniewa obiekt Tabela1 nie obejmuje tegowiersza Je li chcesz aby wiersz nag oacutewka roacutewnie by kopiowany powiniene zmieniodwo anie do tabeli tak jak to zosta o przedstawione poni ej

Range(Tabela1[All])

Zaznaczanie komoacuterekdo ko ca wiersza lub kolumnyPrawdopodobnie bardzo cz sto u ywasz kombinacji klawiszy takich jak Ctrl+Shift+ czy Ctrl+Shift+ do zaznaczania zakresoacutew sk adaj cych si ze wszystkich komoacuterekod komoacuterki aktywnej a do ko ca kolumny czy wiersza Nie jest wi c chyba zaskoczenieme mo esz napisa makro ktoacutere b dzie zaznacza komoacuterki w podobny sposoacuteb

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 221

Do zaznaczania ca ego bloku komoacuterek mo esz u y w a ciwo ci CurrentRegion Ale copowiniene zrobi je eli chcesz zaznaczy powiedzmy tylko jedn kolumn z tegobloku komoacuterek Na szcz cie VBA pozwala na wykonywanie takich operacji Proceduraktoacuterej kod przedstawiam poni ej zaznacza zakres komoacuterek pocz wszy od bie cejaktywnej komoacuterki w doacute kolumny a do komoacuterki znajduj cej si o jeden wiersz powy ejpierwszej pustej komoacuterki tej kolumny Po zaznaczeniu zakresu mo esz przetwarza gow dowolny sposoacuteb mdash kopiowa komoacuterki przenosi je w inne miejsce arkusza zmieniaformatowanie i tak dalej

Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))SelectEnd Sub

Oczywi cie taki sam obszar mo esz roacutewnie zaznaczy r cznie Aby to zrobi powinienezaznaczy pierwsz komoacuterk nast pnie wcisn i przytrzyma klawisz Shift nacisnklawisz End i wreszcie nacisn klawisz (strza ka w doacute )

W przyk adzie wykorzystuj metod End obiektu ActiveCell ktoacutera zwraca obiekt typuRange Metoda End pobiera jeden argument okre laj cy kierunek w ktoacuterym zostaniewykonane zaznaczenie Argumentami tej metody mo e by dowolna ze sta ychprzedstawionych poni ej

xlUp

xlDown

xlToLeft

xlToRight

Pami taj e zaznaczanie zakresu nie jest potrzebne do jego przetwarzania Makroprzedstawione poni ej zmienia czcionk w komoacuterkach zmiennego zakresu (pojedynczakolumna) na pogrubion bez uprzedniego zaznaczenia zakresu

Sub MakeBold() Range(ActiveCell ActiveCellEnd(xlDown)) _ FontBold = TrueEnd Sub

Zaznaczanie ca ego wiersza lub ca ej kolumnyProcedura przedstawiona poni ej ilustruje sposoacuteb zaznaczania kolumny w ktoacuterej znajdujesi aktywna komoacuterka Makro wykorzystuje w a ciwo EntireColumn ktoacutera zwracaobiekt typu Range reprezentuj cy ca kolumn

Sub SelectColumn() ActiveCellEntireColumnSelectEnd Sub

Jak pewnie si spodziewasz w j zyku VBA dost pna jest roacutewnie w a ciwo EntireRowktoacutera zwraca obiekt typu Range reprezentuj cy ca y wiersz

Kup książkę Poleć książkę

222 Cz III Podstawy programowania

Przenoszenie zakresoacutewZazwyczaj aby przenie zakres komoacuterek zaznaczasz go wycinasz do schowka systemowegoi nast pnie wklejasz w inne miejsce Je eli u yjesz rejestratora makr do zapisania takiejoperacji przekonasz si e wygenerowany zostanie kod podobny do przedstawionegoponi ej

Sub MoveRange() Range(A1C6)Select SelectionCut Range(A10)Select ActiveSheetPasteEnd Sub

Podobnie jak podczas kopiowania komoacuterek takie rozwi zanie nie jest najbardziejefektywnym sposobem przenoszenia zakresu komoacuterek w inne miejsce W praktyce takoperacj mo esz wykona za pomoc procedury sk adaj cej si z jednego wiersza koduco prezentuj poni ej

Sub MoveRange2() Range(A1C6)Cut Range(A10)End Sub

Makro przedstawione powy ej korzysta z faktu e metoda Cut mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe przenoszonego zakresu Zwroacute roacutewnieuwag na fakt e podczas przenoszenia aden zakres komoacuterek nie jest zaznaczanyWska nik aktywnej komoacuterki przez ca y czas pozostaje w tym samym miejscu arkusza

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tliJednym z zada cz sto wykonywanych przez makra jest sprawdzanie poszczegoacutelnychkomoacuterek zakresu i wykonywanie okre lonych operacji na podstawie ich zawarto ci Takiemakra zazwyczaj wykorzystuj p tl For-Next za pomoc ktoacuterej przetwarzane s komoacuterkizakresu

Przyk ad przedstawiony ni ej ilustruje sposoacuteb przechodzenia kolejno przez wszystkiekomoacuterki danego zakresu W naszym przypadku przetwarzany jest aktualnie zaznaczonyzakres komoacuterek Zmienna obiektowa o nazwie Cell reprezentuje aktualnie przetwarzankomoacuterk W p tli For Each-Next znajduje si jedno polecenie ktoacutere sprawdza aktualnieprzetwarzan komoacuterk i zmienia jej czcionk na pogrubion je eli warto przechowywanaw komoacuterce jest dodatnia

Sub ProcessCells() Dim Cell As Range For Each Cell In Selection If CellValue gt 0 Then CellFontBold = True Next CellEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 223

Taka procedura dzia a poprawnie ale co si stanie je eli u ytkownik zaznaczy cakolumn lub ca y wiersz To wcale nie jest takie nieprawdopodobne bo przecie Excelpozwala na wykonywanie operacji na ca ych wierszach i kolumnach W takiej sytuacjiwykonanie makra mo e zaj naprawd du o czasu poniewa nasza p tla przetwarzaka d komoacuterk zaznaczonego zakresu a cznie z pustymi w jednej kolumnie komoacuterekjest a 1 048 576hellip Aby zatem nasze makro by o bardziej wydajne musimy je takzmodyfikowa eby przetwarzane by y tylko i wy cznie komoacuterki ktoacutere nie s puste

Procedura przedstawiona poni ej przetwarza wy cznie niepuste komoacuterki zaznaczonegozakresu dzi ki zastosowaniu metody SpecialCells (wi cej szczegoacute owych informacji natemat tej metody znajdziesz w pomocy systemowej VBA) Nasza procedura za pomocpolecenia Set tworzy dwa obiekty typu Range pierwszy z nich to podzakres komoacuterekzakresu wej ciowego zawieraj cy wy cznie komoacuterki z warto ciami sta ymi (na przyk adteksty warto ci liczbowe litera y i tak dalej) a drugi sk ada si z komoacuterek zawieraj cychformu y Procedura przetwarza tylko komoacuterki nale ce do tych podzakresoacutew co w efekciepowoduje pomini cie przetwarzania wszystkich pozosta ych pustych komoacuterek zakresuwej ciowego Sprytne prawda

Sub SkipBlanks() Dim ConstantCells As Range Dim FormulaCells As Range Dim cell As Range Ignoruj b dy On Error Resume Next

Przetwarzaj komoacuterki zawieraj ce warto ci sta e Set ConstantCells = Selection _ SpecialCells(xlConstants) For Each cell In ConstantCells If cellValue gt 0 Then cellFontBold = True End If Next cell

Przetwarzaj komoacuterki zawieraj ce formu y Set FormulaCells = Selection _ SpecialCells(xlFormulas) For Each cell In FormulaCells If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Procedura SkipBlanks dzia a tak samo szybko niezale nie od tego jaki zakres komoacuterekzaznaczy e Mo esz na przyk ad zaznaczy zakres sk adaj cy si z kilku komoacuterek zaznaczywszystkie kolumny w danym zakresie albo wszystkie wiersze w danym zakresie albonawet ca y arkusz Jak wida jest to ogromne usprawnienie w stosunku do oryginalnejprocedury ProcessCells ktoacuter omoacutewi em nieco wcze niej

Zwroacute uwag e w kodzie procedury u yli my polecenia

On Error Resume Next

Kup książkę Poleć książkę

224 Cz III Podstawy programowania

Polecenie to powoduje e Excel po prostu ignoruje b dy (inaczej moacutewi c je eli proacutebawykonania danego polecenia ko czy si b dem Excel ignoruje ten b d i po prostuprzechodzi do kolejnego polecenia wi cej szczegoacute owych informacji na temat obs ugib doacutew znajdziesz w rozdziale 12) W naszym przypadku zastosowanie polecenia OnError jest konieczne poniewa metoda SpecialCells generuje b d gdy adna komoacuterkanie spe nia podanego kryterium

Zastosowanie metody SpecialCells jest roacutewnowa ne z przej ciem na kart NARZ DZIAG OacuteWNE wybraniem polecenia Znajd i zaznaczPrzejd do mdash specjalnie znajduj cegosi w grupie opcji Edytowanie i nast pnie zaznaczeniem opcji Sta e lub Formu y Abyprzekona si jak to dzia a podczas wykonywania tych polece powiniene u yrejestratora makr i zaznacza roacute ne opcje

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tli(cz II)A teraz ci g dalszy naszej opowie ci W tym punkcie przedstawi inny sposoacuteb efektywnegoprzetwarzania komoacuterek znajduj cych si w zaznaczonym zakresie Tym razem procedurab dzie korzysta a z w a ciwo ci UsedRange ktoacutera zwraca obiekt typu Range reprezentuj cyu ywany zakres arkusza Procedura korzysta roacutewnie z metody Intersect ktoacutera zwracaobiekt typu Range zawieraj cy komoacuterki b d ce cz ci wspoacuteln dwoacutech zakresoacutew

Poni ej przedstawiam zmodyfikowan wersj procedury SkipBlanks omawianejw poprzednim punkcie

Sub SkipBlanks2() Dim WorkRange As Range Dim cell As Range Set WorkRange = Intersect(Selection ActiveSheetUsedRange) For Each cell In WorkRange If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Zmienna obiektowa WorkRange zawiera komoacuterki ktoacutere s cz ci wspoacuteln zakresuzaznaczonego przez u ytkownika oraz zakresu u ywanych komoacuterek arkusza Je lizatem u ytkownik zaznaczy ca kolumn zmienna WorkRange b dzie zawiera a tylkokomoacuterki ktoacutere znajduj si jednocze nie w zaznaczonej kolumnie i w u ywanymzakresie arkusza Jak wida jest to bardzo szybka i efektywna metoda pozwalaj ca naunikni cie przetwarzania komoacuterek znajduj cych si poza zakresem u ywanychkomoacuterek arkusza

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 225

Wprowadzanie warto ci do komoacuterkiNa rysunku 142 pokazuj w jaki sposoacuteb mo esz u y funkcji InputBox j zyka VBA dopobierania od u ytkownika warto ci ktoacutera nast pnie mo e zosta zapisana w wybranejkomoacuterce W procedurze przedstawionej poni ej demonstruj jak poprosi u ytkownikao podanie warto ci i wstawi j do komoacuterki A1 aktywnego arkusza (i to wszystkoza pomoc jednego polecenia)

Sub GetValue() Range(A1)Value = InputBox( _ Wprowad warto dla komoacuterki A1)End Sub

Rysunek 142Zastosowaniefunkcji Input-

Box do pobie-rania warto ci

od u ytkownika

Przedstawiona procedura mo e jednak sprawia pewien problem Je eli u ytkowniknaci nie w oknie dialogowym przycisk Cancel procedura usunie wszelkie dane juznajduj ce si w komoacuterce A1 a takie zachowanie nie jest zbyt dobr praktyk programistyczn Naci ni cie przycisku Cancel powinno po prostu usuwa z ekranu okno dialogowe bezwykonywania adnych dodatkowych operacji

Makro przedstawione poni ej ilustruje znacznie lepsze podej cie do takiego zagadnieniai do zapami tania warto ci wprowadzonej przez u ytkownika wykorzystuje zmienn xJe eli zmienna zawiera co innego ni pusty ci g znakoacutew (czyli kiedy u ytkownikwprowadzi jak warto ) warto zmiennej jest zapisywana w komoacuterce A1 W przeciwnymprzypadku procedura ko czy dzia anie nie wykonuj c adnych dodatkowych operacji

Sub GetValue2() Dim x as Variant x = InputBox(Wprowad warto dla komoacuterki A1) If x ltgt Then Range(A1)Value = xEnd Sub

Zmienna x zosta a zdefiniowana jako zmienna typu Variant poniewa jej warto cimo e by warto albo pusty ci g znakoacutew (je eli u ytkownik naci nie przycisk Cancel)

Kup książkę Poleć książkę

226 Cz III Podstawy programowania

Okre lanie typu zaznaczonego zakresuJe eli zadaniem Twojego makra b dzie przetwarzanie zaznaczonego zakresu takiemakro musi mie zdolno sprawdzenia czy przed jego wywo aniem u ytkownikrzeczywi cie zaznaczy zakres komoacuterek W przeciwnym razie je eli przed wywo aniemmakra zaznaczony zostanie inny obiekt (na przyk ad wykres lub kszta t) proacuteba wykonaniamakra najprawdopodobniej zako czy si niepowodzeniem Polecenie przedstawioneponi ej wykorzystuje funkcj TypeName j zyka VBA do wy wietlania na ekranie typuaktualnie zaznaczonego obiektu

MsgBox TypeName(Selection)

Je eli aktualnie zaznaczony jest obiekt typu Range wykonanie takiego polecenia spowodujewy wietlenie s owa Range Je li Twoje makro dzia a tylko z zakresami komoacuterek mo eszu y polecenia If do sprawdzenia czy aktualnie zaznaczony obiekt to zakres (obiekttypu Range) Procedura przedstawiona poni ej sprawdza typ zaznaczonego obiektui je eli nie jest to obiekt typu Range na ekranie wy wietlany jest odpowiedni komunikati procedura ko czy dzia anie

Sub CheckSelection() If TypeName(Selection) ltgt Range Then MsgBox Zaznacz zakres komoacuterek Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Identyfikowanie zaznacze wielokrotnychJak pami tasz Excel pozwala na jednoczesne zaznaczanie wielu obiektoacutew Aby to zrobi powiniene podczas zaznaczania obiektoacutew lub zakresoacutew trzyma wci ni ty klawisz CtrlZaznaczenia wielokrotne mog by przyczyn problemoacutew z wykonywaniem niektoacuterychmakr Przyk adowo nie mo esz skopiowa zakresu komoacuterek ktoacutery zosta utworzonypoprzez wiele zaznacze nieci g ych zakresoacutew komoacuterek Je eli sproacutebujesz wykonatak operacj Excel wy wietli na ekranie komunikat przedstawiony na rysunku 143

Makro przedstawione ni ej pokazuje w jaki sposoacuteb mo esz sprawdzi czy u ytkownikdokona zaznaczenia wielokrotnego i na tej podstawie wykona odpowiedni operacj

Sub MultipleSelection() If SelectionAreasCount gt 1 Then MsgBox Zaznaczenia wielokrotne nie s dozwolone Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Przedstawiona procedura wykorzystuje metod Areas ktoacutera zwraca kolekcj wszystkichzakresoacutew w danym zaznaczeniu W a ciwo Count zwraca liczb obiektoacutew tej kolekcji

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 227

Rysunek 143Excel nie lubi

kiedy proacutebujeszkopiowa nie-ci g e zakresy

komoacuterek

Zmiana ustawie ExcelaChyba najbardziej u ytecznymi makrami s proste procedury ktoacutere zmieniaj jednolub kilka ustawie Excela Je li na przyk ad dojdziesz do wniosku e bardzo cz stoprzywo ujesz na ekran okno opcji programu Excel i zmieniasz jakie ustawienie takaoperacja z pewno ci b dzie bardzo dobrym kandydatem do napisania makraoszcz dzaj cego Twoacutej czas i u atwiaj cego zmian takiego ustawienia

W tym podrozdziale zaprezentuj dwa przyk ady procedur ktoacutere pokazuj w jakisposoacuteb mo na zmienia ustawienia Excela Ogoacutelne zasady dzia ania tych procedurmo esz z powodzeniem zastosowa do napisania w asnych makr zmieniaj cych inneustawienia Excela

Zmiana ustawie logicznych(opcje typu Boolean)Podobnie jak wy cznik wiat a opcje logiczne (typu Boolean) mog by albo w czonealbo wy czone Mo esz na przyk ad utworzy makro ktoacutere b dzie w cza o lub wy cza owy wietlanie podzia u arkusza na strony Kiedy wydrukujesz arkusz (lub skorzystaszz trybu podgl du wydruku) Excel wy wietla na arkuszu przerywane linie reprezentuj cemiejsca podzia u arkusza na strony wydruku Niektoacuterych u ytkownikoacutew (w czniez autorem tej ksi ki) takie zachowanie Excela irytuje Niestety jedynym sposobemwy czenia wy wietlania podzia u arkusza na strony jest otwarcie okna dialogowego Opcjeprogramu Excel przej cie na kart Zaawansowane a nast pnie przewijanie zawarto ci tejkarty a do odszukania opcji Poka podzia y stron Je eli podczas wy czania tej opcjikorzysta e z rejestratora makr przekonasz si e Excel generuje poni szy kod

Kup książkę Poleć książkę

228 Cz III Podstawy programowania

ActiveSheetDisplayPageBreaks = False

Z drugiej strony je eli podczas rejestrowania makra podzia y stron nie s widoczneExcel generuje taki kod

ActiveSheetDisplayPageBreaks = True

Takie informacje mog doprowadzi do wniosku e b dziesz musia napisa a dwamakra mdash jedno do w czania podgl du podzia u stron a drugie do jego wy czaniaNa szcz cie to nieprawda Procedura przedstawiona poni ej wykorzystuje operatorNot do zmiany warto ci logicznej True na False i odwrotnie Wykonanie proceduryTogglePageBreaks to prosty sposoacuteb na cykliczne w czanie i wy czanie podgl du podzia ustron arkusza

Sub TogglePageBreaks() On Error Resume Next ActiveSheetDisplayPageBreaks = Not _ ActiveSheetDisplayPageBreaksEnd Sub

Pierwsze polecenie informuje Excel e powinien ignorowa ewentualne b dy Przyk adowopodzia y stron nie s wy wietlane na arkuszach wykresoacutew Kiedy wprowadzisz takiepolecenie i sproacutebujesz wykona t procedur dla arkusza wykresu na ekranie nie pojawisi komunikat o b dzie

Techniki u ytej w procedurze TogglePageBreaks mo esz u ywa do zmiany dowolnychopcji logicznych (czyli takich ktoacuterych warto ciami s True albo False)

Zmiana innych opcji (typu non-Boolean)Do zmiany opcji ktoacutere nie s typu logicznego mo esz u ywa konstrukcji Select CaseW przyk adzie przedstawionym poni ej zmieniam tryb przeliczania skoroszytu z r cznegona automatyczny i odwrotnie i nakazuj wy wietlenie na ekranie komunikatu opisuj cegoaktualny tryb przeliczania arkusza

Sub ToggleCalcMode() Select Case ApplicationCalculation Case xlManual ApplicationCalculation = xlCalculationAutomatic MsgBox Automatyczne przeliczanie skoroszytu Case xlAutomatic ApplicationCalculation = xlCalculationManual MsgBox R czne przeliczanie skoroszytu End SelectEnd Sub

Techniki u ytej w procedurze ToggleCalcMode mo esz u ywa do zmiany dowolnychopcji ktoacutere nie posiadaj warto ci logicznych

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 12: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

Rozdzia 14

Przyk ady i technikiprogramowania w j zyku VBA

W tym rozdziale poznasz szereg przyk adoacutew technik programowania w j zyku VBA dowiesz si jak mo esz przyspieszy dzia anie kodu VBA w Twojej aplikacji

ierz e nauka programowania jest znacznie szybsza i zdecydowanie bardziejefektywna kiedy pracujemy na konkretnych przyk adach Dobrze opracowany

przyk ad o wiele lepiej obja nia zagadnienie ni najbardziej rozbudowany i szczegoacute owyale teoretyczny opis Poniewa czytasz t ksi k prawdopodobnie zgadzasz si ze mnw tej materii W tym rozdziale znajdziesz szereg przyk adoacutew demonstruj cych u ytecznepraktyczne techniki programowania w j zyku VBA

Przyk ady omawiane w tym rozdziale zosta y podzielone na kilka kategorii Oto one

Praca z zakresami

Modyfikacja ustawie Excela

Praca z wykresami

Przyspieszanie i optymalizacja dzia ania kodu VBA

Niektoacutere z prezentowanych przyk adoacutew b dziesz moacuteg od razu wykorzysta w swoichaplikacjach jednak w wi kszo ci przypadkoacutew b d wymaga y pewnego dostosowaniado Twoich aplikacji

Przetwarzanie zakresoacutew komoacuterekWi kszo zada z jakimi b dziesz si styka programuj c w j zyku VBA b dzie zapewnewymaga a mniejszego b d wi kszego przetwarzania zakresoacutew komoacuterek (aby od wie ysobie wiadomo ci na temat obiektu Range powiniene zajrze do rozdzia u 8) Kiedypracujesz z obiektami Range powiniene pami ta o nast puj cych sprawach

Kod VBA nie musi zaznacza danego zakresu aby go przetwarza

Je eli kod VBA zaznacza wybrany zakres przechowuj cy go skoroszyt musi byaktywny

W

Kup książkę Poleć książkę

218 Cz III Podstawy programowania

Rejestrator makr nie zawsze b dzie w stanie wygenerowa optymalny kod VBABardzo cz sto jednak mo esz za jego pomoc utworzy bazowe makro i potemodpowiednio zmodyfikowa kod tak aby sta si bardziej efektywny

Zazwyczaj bardzo dobrym rozwi zaniem jest nadawanie nazw zakresom komoacuterekwykorzystywanym w kodzie VBA Przyk adowo polecenie Range(Total)jestznacznie lepszym rozwi zaniem ni Range(D45) Je li w tym drugim przypadkupoacute niej wstawisz dodatkowy wiersz powy ej wiersza 45 to eby wszystko dzia a opoprawnie b dziesz musia zmodyfikowa makro tak aby korzysta o z nowegopoprawnego adresu komoacuterki a ta po wykonaniu takiej operacji b dzie mia a innyadres (D46) Aby nada nazw wybranemu zakresowi komoacuterek powiniene przejna kart FORMU Y i wybra polecenie Definiuj nazw znajduj ce si w grupiepolece Nazwy zdefiniowane

Kiedy tworzysz makro ktoacutere b dzie przetwarza o zakres komoacuterek zaznaczonyprzez u ytkownika pami taj e u ytkownik mo e zaznaczy kilka ca ych kolumnczy wierszy W wi kszo ci przypadkoacutew z pewno ci nie b dziesz chcia aby makrow p tli przechodzi o w takiej sytuacji przez wszystkie zaznaczone komoacuterki (w czniez pustymi) co mog oby zaj bardzo wiele czasu Dobre makro powinno odszukai przetwarza tylko komoacuterki ktoacutere nie s puste

Excel pozwala na jednoczesne zaznaczanie wielu zakresoacutew komoacuterek Aby to zrobi powiniene zaznaczy pierwszy zakres komoacuterek potem wcisn i przytrzymaklawisz Ctrl i zaznacza kolejne zakresy komoacuterek przy u yciu myszy Kod Twojejaplikacji powinien by przygotowany na takie sytuacje i podejmowa odpowiednieakcje

Skoroszyty z wybranymi przyk adami omawianymi w tym rozdziale znajdziesz na stronieinternetowej naszej ksi ki

Je eli chcesz samodzielnie wpisywa kod omawianych przyk adoacutew przejd do edytoraVBE naciskaj c kombinacj klawiszy lewyAlt+F11 a nast pnie wstaw nowy modu VBAi wpisz kod prezentowanych procedur Upewnij si e Twoacutej skoroszyt jest poprawnieskonfigurowany Je eli na przyk ad kod danego przyk adu odwo uje si do arkuszyo nazwach Arkusz1 i Arkusz2 upewnij si e takie arkusze istniej w Twoim skoroszycie

Kopiowanie zakresoacutewKopiowanie zakresoacutew komoacuterek mo e mia o pretendowa do miana jednej z najcz ciejwykonywanych operacji w Excelu Kiedy w czysz rejestrator makr i skopiujesz zakreskomoacuterek o adresie A1A5 do zakresu B1B5 otrzymasz nast puj ce makro

Sub CopyRange() Range(A1A5)Select SelectionCopy Range(B1)Select ActiveSheetPaste ApplicationCutCopyMode = FalseEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 219

Zwroacute uwag na ostatnie polecenie Zosta o ono wygenerowane przez naci ni cieklawisza Esc po skopiowaniu zakresu komoacuterek co spowodowa o usuni cie przerywanejlinii reprezentuj cej na arkuszu obramowanie kopiowanego zakresu

Przedstawione makro dzia a poprawnie ale zakresy komoacuterek mo na kopiowa w znaczniebardziej efektywny sposoacuteb Identyczny rezultat mo esz osi gn za pomoc proceduryktoacutera sk ada si z tylko jednego wiersza polecenia i nie zaznacza adnych komoacuterek(dzi ki czemu nie wymaga ustawiania w a ciwo ci CutCopyMode na warto False)

Sub CopyRange2() Range(A1A5)Copy Range(B1)End Sub

Procedura przedstawiona powy ej korzysta z tego e metoda Copy mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe kopiowanego zakresu Informacje o tymznalaz em w pomocy systemowej VBA Powy szy przyk ad doskonale roacutewnie ilustrujefakt e rejestrator makr nie zawsze generuje najbardziej efektywny kod

Kopiowanie zakresu o zmiennej wielko ciW wielu przypadkach konieczne jest skopiowanie zakresu komoacuterek dla ktoacuterego dok adnaliczba wierszy i kolumn okre laj cych jego wielko nie jest z goacutery znana Przyk adowomo esz dysponowa skoroszytem ledz cym tygodniow sprzeda w ktoacuterym liczba wierszyzmienia si ka dego tygodnia po wprowadzeniu nowych danych

Na rysunku 141 przedstawiam przyk ad cz sto spotykanego typu arkusza Znajduj cysi w nim zakres komoacuterek sk ada si z kilku wierszy ktoacuterych liczba zmienia si ka degodnia Poniewa nie wiesz jaki jest rozmiar zakresu w danej chwili musisz utworzykod ktoacutery b dzie dzia a bez u ywania adresu zakresu kopiowanych komoacuterek

Rysunek 141Przyk ad zakre-su ktoacutery mo e

sk ada siz dowolnej

liczby wierszy

Makro przedstawione poni ej ilustruje sposoacuteb kopiowania zakresu komoacuterek z arkuszaArkusz1 do arkusza Arkusz2 (pocz wszy od komoacuterki A1) Makro wykorzystuje w a ciwoCurrentRegion ktoacutera zwraca obiekt Range odpowiadaj cy blokowi komoacuterek otaczaj cychokre lon komoacuterk (w tym przypadku o adresie A1)

Kup książkę Poleć książkę

220 Cz III Podstawy programowania

Sub CopyCurrentRegion() Range(A1)CurrentRegionCopy Sheets(Arkusz2)Select Range(A1)Select ActiveSheetPaste Sheets(Arkusz1)Select ApplicationCutCopyMode = FalseEnd Sub

Zastosowanie w a ciwo ci CurrentRegion jest roacutewnowa ne z przej ciem na kartNARZ DZIA G OacuteWNE i wybraniem polecenia Znajd i zaznaczPrzejd do mdashspecjalnie znajduj cego si w grupie opcji Edytowanie i nast pnie zaznaczeniem opcjiBie cy obszar Aby przekona si jak to dzia a podczas wykonywania tych polecepowiniene u y rejestratora makr Zazwyczaj warto w a ciwo ci CurrentRegionreprezentuje prostok tny blok komoacuterek otoczony przez puste wiersze i kolumny

Oczywi cie mo esz zoptymalizowa kod makra przedstawionego powy ej i niezaznacza obszaru docelowego dla kopiowanych komoacuterek Makro przedstawione poni ejkorzysta z faktu e metoda Copy mo e u ywa argumentu wywo ania reprezentuj cegomiejsce docelowe kopiowanego zakresu

Sub CopyCurrentRegion2() Range(A1)CurrentRegionCopy _ Sheets(Arkusz2)Range(A1)End Sub

Je eli zakres komoacuterek ktoacutery chcesz skopiowa jest tabel (zdefiniowan przy u yciapolecenia WSTAWIANIETabeleTabela) ca e zadanie b dzie jeszcze atwiejsze Ka databela posiada swoj nazw (na przyk ad Tabela1) i automatycznie rozszerza si w miardodawania nowych wierszy

Sub CopyTable() Range(Tabela1)Copy Sheets(Arkusz2)Range(A1)End Sub

Je eli sproacutebujesz wykona procedur przedstawion powy ej przekonasz si e wiersznag oacutewka tabeli nie jest kopiowany poniewa obiekt Tabela1 nie obejmuje tegowiersza Je li chcesz aby wiersz nag oacutewka roacutewnie by kopiowany powiniene zmieniodwo anie do tabeli tak jak to zosta o przedstawione poni ej

Range(Tabela1[All])

Zaznaczanie komoacuterekdo ko ca wiersza lub kolumnyPrawdopodobnie bardzo cz sto u ywasz kombinacji klawiszy takich jak Ctrl+Shift+ czy Ctrl+Shift+ do zaznaczania zakresoacutew sk adaj cych si ze wszystkich komoacuterekod komoacuterki aktywnej a do ko ca kolumny czy wiersza Nie jest wi c chyba zaskoczenieme mo esz napisa makro ktoacutere b dzie zaznacza komoacuterki w podobny sposoacuteb

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 221

Do zaznaczania ca ego bloku komoacuterek mo esz u y w a ciwo ci CurrentRegion Ale copowiniene zrobi je eli chcesz zaznaczy powiedzmy tylko jedn kolumn z tegobloku komoacuterek Na szcz cie VBA pozwala na wykonywanie takich operacji Proceduraktoacuterej kod przedstawiam poni ej zaznacza zakres komoacuterek pocz wszy od bie cejaktywnej komoacuterki w doacute kolumny a do komoacuterki znajduj cej si o jeden wiersz powy ejpierwszej pustej komoacuterki tej kolumny Po zaznaczeniu zakresu mo esz przetwarza gow dowolny sposoacuteb mdash kopiowa komoacuterki przenosi je w inne miejsce arkusza zmieniaformatowanie i tak dalej

Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))SelectEnd Sub

Oczywi cie taki sam obszar mo esz roacutewnie zaznaczy r cznie Aby to zrobi powinienezaznaczy pierwsz komoacuterk nast pnie wcisn i przytrzyma klawisz Shift nacisnklawisz End i wreszcie nacisn klawisz (strza ka w doacute )

W przyk adzie wykorzystuj metod End obiektu ActiveCell ktoacutera zwraca obiekt typuRange Metoda End pobiera jeden argument okre laj cy kierunek w ktoacuterym zostaniewykonane zaznaczenie Argumentami tej metody mo e by dowolna ze sta ychprzedstawionych poni ej

xlUp

xlDown

xlToLeft

xlToRight

Pami taj e zaznaczanie zakresu nie jest potrzebne do jego przetwarzania Makroprzedstawione poni ej zmienia czcionk w komoacuterkach zmiennego zakresu (pojedynczakolumna) na pogrubion bez uprzedniego zaznaczenia zakresu

Sub MakeBold() Range(ActiveCell ActiveCellEnd(xlDown)) _ FontBold = TrueEnd Sub

Zaznaczanie ca ego wiersza lub ca ej kolumnyProcedura przedstawiona poni ej ilustruje sposoacuteb zaznaczania kolumny w ktoacuterej znajdujesi aktywna komoacuterka Makro wykorzystuje w a ciwo EntireColumn ktoacutera zwracaobiekt typu Range reprezentuj cy ca kolumn

Sub SelectColumn() ActiveCellEntireColumnSelectEnd Sub

Jak pewnie si spodziewasz w j zyku VBA dost pna jest roacutewnie w a ciwo EntireRowktoacutera zwraca obiekt typu Range reprezentuj cy ca y wiersz

Kup książkę Poleć książkę

222 Cz III Podstawy programowania

Przenoszenie zakresoacutewZazwyczaj aby przenie zakres komoacuterek zaznaczasz go wycinasz do schowka systemowegoi nast pnie wklejasz w inne miejsce Je eli u yjesz rejestratora makr do zapisania takiejoperacji przekonasz si e wygenerowany zostanie kod podobny do przedstawionegoponi ej

Sub MoveRange() Range(A1C6)Select SelectionCut Range(A10)Select ActiveSheetPasteEnd Sub

Podobnie jak podczas kopiowania komoacuterek takie rozwi zanie nie jest najbardziejefektywnym sposobem przenoszenia zakresu komoacuterek w inne miejsce W praktyce takoperacj mo esz wykona za pomoc procedury sk adaj cej si z jednego wiersza koduco prezentuj poni ej

Sub MoveRange2() Range(A1C6)Cut Range(A10)End Sub

Makro przedstawione powy ej korzysta z faktu e metoda Cut mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe przenoszonego zakresu Zwroacute roacutewnieuwag na fakt e podczas przenoszenia aden zakres komoacuterek nie jest zaznaczanyWska nik aktywnej komoacuterki przez ca y czas pozostaje w tym samym miejscu arkusza

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tliJednym z zada cz sto wykonywanych przez makra jest sprawdzanie poszczegoacutelnychkomoacuterek zakresu i wykonywanie okre lonych operacji na podstawie ich zawarto ci Takiemakra zazwyczaj wykorzystuj p tl For-Next za pomoc ktoacuterej przetwarzane s komoacuterkizakresu

Przyk ad przedstawiony ni ej ilustruje sposoacuteb przechodzenia kolejno przez wszystkiekomoacuterki danego zakresu W naszym przypadku przetwarzany jest aktualnie zaznaczonyzakres komoacuterek Zmienna obiektowa o nazwie Cell reprezentuje aktualnie przetwarzankomoacuterk W p tli For Each-Next znajduje si jedno polecenie ktoacutere sprawdza aktualnieprzetwarzan komoacuterk i zmienia jej czcionk na pogrubion je eli warto przechowywanaw komoacuterce jest dodatnia

Sub ProcessCells() Dim Cell As Range For Each Cell In Selection If CellValue gt 0 Then CellFontBold = True Next CellEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 223

Taka procedura dzia a poprawnie ale co si stanie je eli u ytkownik zaznaczy cakolumn lub ca y wiersz To wcale nie jest takie nieprawdopodobne bo przecie Excelpozwala na wykonywanie operacji na ca ych wierszach i kolumnach W takiej sytuacjiwykonanie makra mo e zaj naprawd du o czasu poniewa nasza p tla przetwarzaka d komoacuterk zaznaczonego zakresu a cznie z pustymi w jednej kolumnie komoacuterekjest a 1 048 576hellip Aby zatem nasze makro by o bardziej wydajne musimy je takzmodyfikowa eby przetwarzane by y tylko i wy cznie komoacuterki ktoacutere nie s puste

Procedura przedstawiona poni ej przetwarza wy cznie niepuste komoacuterki zaznaczonegozakresu dzi ki zastosowaniu metody SpecialCells (wi cej szczegoacute owych informacji natemat tej metody znajdziesz w pomocy systemowej VBA) Nasza procedura za pomocpolecenia Set tworzy dwa obiekty typu Range pierwszy z nich to podzakres komoacuterekzakresu wej ciowego zawieraj cy wy cznie komoacuterki z warto ciami sta ymi (na przyk adteksty warto ci liczbowe litera y i tak dalej) a drugi sk ada si z komoacuterek zawieraj cychformu y Procedura przetwarza tylko komoacuterki nale ce do tych podzakresoacutew co w efekciepowoduje pomini cie przetwarzania wszystkich pozosta ych pustych komoacuterek zakresuwej ciowego Sprytne prawda

Sub SkipBlanks() Dim ConstantCells As Range Dim FormulaCells As Range Dim cell As Range Ignoruj b dy On Error Resume Next

Przetwarzaj komoacuterki zawieraj ce warto ci sta e Set ConstantCells = Selection _ SpecialCells(xlConstants) For Each cell In ConstantCells If cellValue gt 0 Then cellFontBold = True End If Next cell

Przetwarzaj komoacuterki zawieraj ce formu y Set FormulaCells = Selection _ SpecialCells(xlFormulas) For Each cell In FormulaCells If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Procedura SkipBlanks dzia a tak samo szybko niezale nie od tego jaki zakres komoacuterekzaznaczy e Mo esz na przyk ad zaznaczy zakres sk adaj cy si z kilku komoacuterek zaznaczywszystkie kolumny w danym zakresie albo wszystkie wiersze w danym zakresie albonawet ca y arkusz Jak wida jest to ogromne usprawnienie w stosunku do oryginalnejprocedury ProcessCells ktoacuter omoacutewi em nieco wcze niej

Zwroacute uwag e w kodzie procedury u yli my polecenia

On Error Resume Next

Kup książkę Poleć książkę

224 Cz III Podstawy programowania

Polecenie to powoduje e Excel po prostu ignoruje b dy (inaczej moacutewi c je eli proacutebawykonania danego polecenia ko czy si b dem Excel ignoruje ten b d i po prostuprzechodzi do kolejnego polecenia wi cej szczegoacute owych informacji na temat obs ugib doacutew znajdziesz w rozdziale 12) W naszym przypadku zastosowanie polecenia OnError jest konieczne poniewa metoda SpecialCells generuje b d gdy adna komoacuterkanie spe nia podanego kryterium

Zastosowanie metody SpecialCells jest roacutewnowa ne z przej ciem na kart NARZ DZIAG OacuteWNE wybraniem polecenia Znajd i zaznaczPrzejd do mdash specjalnie znajduj cegosi w grupie opcji Edytowanie i nast pnie zaznaczeniem opcji Sta e lub Formu y Abyprzekona si jak to dzia a podczas wykonywania tych polece powiniene u yrejestratora makr i zaznacza roacute ne opcje

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tli(cz II)A teraz ci g dalszy naszej opowie ci W tym punkcie przedstawi inny sposoacuteb efektywnegoprzetwarzania komoacuterek znajduj cych si w zaznaczonym zakresie Tym razem procedurab dzie korzysta a z w a ciwo ci UsedRange ktoacutera zwraca obiekt typu Range reprezentuj cyu ywany zakres arkusza Procedura korzysta roacutewnie z metody Intersect ktoacutera zwracaobiekt typu Range zawieraj cy komoacuterki b d ce cz ci wspoacuteln dwoacutech zakresoacutew

Poni ej przedstawiam zmodyfikowan wersj procedury SkipBlanks omawianejw poprzednim punkcie

Sub SkipBlanks2() Dim WorkRange As Range Dim cell As Range Set WorkRange = Intersect(Selection ActiveSheetUsedRange) For Each cell In WorkRange If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Zmienna obiektowa WorkRange zawiera komoacuterki ktoacutere s cz ci wspoacuteln zakresuzaznaczonego przez u ytkownika oraz zakresu u ywanych komoacuterek arkusza Je lizatem u ytkownik zaznaczy ca kolumn zmienna WorkRange b dzie zawiera a tylkokomoacuterki ktoacutere znajduj si jednocze nie w zaznaczonej kolumnie i w u ywanymzakresie arkusza Jak wida jest to bardzo szybka i efektywna metoda pozwalaj ca naunikni cie przetwarzania komoacuterek znajduj cych si poza zakresem u ywanychkomoacuterek arkusza

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 225

Wprowadzanie warto ci do komoacuterkiNa rysunku 142 pokazuj w jaki sposoacuteb mo esz u y funkcji InputBox j zyka VBA dopobierania od u ytkownika warto ci ktoacutera nast pnie mo e zosta zapisana w wybranejkomoacuterce W procedurze przedstawionej poni ej demonstruj jak poprosi u ytkownikao podanie warto ci i wstawi j do komoacuterki A1 aktywnego arkusza (i to wszystkoza pomoc jednego polecenia)

Sub GetValue() Range(A1)Value = InputBox( _ Wprowad warto dla komoacuterki A1)End Sub

Rysunek 142Zastosowaniefunkcji Input-

Box do pobie-rania warto ci

od u ytkownika

Przedstawiona procedura mo e jednak sprawia pewien problem Je eli u ytkowniknaci nie w oknie dialogowym przycisk Cancel procedura usunie wszelkie dane juznajduj ce si w komoacuterce A1 a takie zachowanie nie jest zbyt dobr praktyk programistyczn Naci ni cie przycisku Cancel powinno po prostu usuwa z ekranu okno dialogowe bezwykonywania adnych dodatkowych operacji

Makro przedstawione poni ej ilustruje znacznie lepsze podej cie do takiego zagadnieniai do zapami tania warto ci wprowadzonej przez u ytkownika wykorzystuje zmienn xJe eli zmienna zawiera co innego ni pusty ci g znakoacutew (czyli kiedy u ytkownikwprowadzi jak warto ) warto zmiennej jest zapisywana w komoacuterce A1 W przeciwnymprzypadku procedura ko czy dzia anie nie wykonuj c adnych dodatkowych operacji

Sub GetValue2() Dim x as Variant x = InputBox(Wprowad warto dla komoacuterki A1) If x ltgt Then Range(A1)Value = xEnd Sub

Zmienna x zosta a zdefiniowana jako zmienna typu Variant poniewa jej warto cimo e by warto albo pusty ci g znakoacutew (je eli u ytkownik naci nie przycisk Cancel)

Kup książkę Poleć książkę

226 Cz III Podstawy programowania

Okre lanie typu zaznaczonego zakresuJe eli zadaniem Twojego makra b dzie przetwarzanie zaznaczonego zakresu takiemakro musi mie zdolno sprawdzenia czy przed jego wywo aniem u ytkownikrzeczywi cie zaznaczy zakres komoacuterek W przeciwnym razie je eli przed wywo aniemmakra zaznaczony zostanie inny obiekt (na przyk ad wykres lub kszta t) proacuteba wykonaniamakra najprawdopodobniej zako czy si niepowodzeniem Polecenie przedstawioneponi ej wykorzystuje funkcj TypeName j zyka VBA do wy wietlania na ekranie typuaktualnie zaznaczonego obiektu

MsgBox TypeName(Selection)

Je eli aktualnie zaznaczony jest obiekt typu Range wykonanie takiego polecenia spowodujewy wietlenie s owa Range Je li Twoje makro dzia a tylko z zakresami komoacuterek mo eszu y polecenia If do sprawdzenia czy aktualnie zaznaczony obiekt to zakres (obiekttypu Range) Procedura przedstawiona poni ej sprawdza typ zaznaczonego obiektui je eli nie jest to obiekt typu Range na ekranie wy wietlany jest odpowiedni komunikati procedura ko czy dzia anie

Sub CheckSelection() If TypeName(Selection) ltgt Range Then MsgBox Zaznacz zakres komoacuterek Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Identyfikowanie zaznacze wielokrotnychJak pami tasz Excel pozwala na jednoczesne zaznaczanie wielu obiektoacutew Aby to zrobi powiniene podczas zaznaczania obiektoacutew lub zakresoacutew trzyma wci ni ty klawisz CtrlZaznaczenia wielokrotne mog by przyczyn problemoacutew z wykonywaniem niektoacuterychmakr Przyk adowo nie mo esz skopiowa zakresu komoacuterek ktoacutery zosta utworzonypoprzez wiele zaznacze nieci g ych zakresoacutew komoacuterek Je eli sproacutebujesz wykonatak operacj Excel wy wietli na ekranie komunikat przedstawiony na rysunku 143

Makro przedstawione ni ej pokazuje w jaki sposoacuteb mo esz sprawdzi czy u ytkownikdokona zaznaczenia wielokrotnego i na tej podstawie wykona odpowiedni operacj

Sub MultipleSelection() If SelectionAreasCount gt 1 Then MsgBox Zaznaczenia wielokrotne nie s dozwolone Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Przedstawiona procedura wykorzystuje metod Areas ktoacutera zwraca kolekcj wszystkichzakresoacutew w danym zaznaczeniu W a ciwo Count zwraca liczb obiektoacutew tej kolekcji

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 227

Rysunek 143Excel nie lubi

kiedy proacutebujeszkopiowa nie-ci g e zakresy

komoacuterek

Zmiana ustawie ExcelaChyba najbardziej u ytecznymi makrami s proste procedury ktoacutere zmieniaj jednolub kilka ustawie Excela Je li na przyk ad dojdziesz do wniosku e bardzo cz stoprzywo ujesz na ekran okno opcji programu Excel i zmieniasz jakie ustawienie takaoperacja z pewno ci b dzie bardzo dobrym kandydatem do napisania makraoszcz dzaj cego Twoacutej czas i u atwiaj cego zmian takiego ustawienia

W tym podrozdziale zaprezentuj dwa przyk ady procedur ktoacutere pokazuj w jakisposoacuteb mo na zmienia ustawienia Excela Ogoacutelne zasady dzia ania tych procedurmo esz z powodzeniem zastosowa do napisania w asnych makr zmieniaj cych inneustawienia Excela

Zmiana ustawie logicznych(opcje typu Boolean)Podobnie jak wy cznik wiat a opcje logiczne (typu Boolean) mog by albo w czonealbo wy czone Mo esz na przyk ad utworzy makro ktoacutere b dzie w cza o lub wy cza owy wietlanie podzia u arkusza na strony Kiedy wydrukujesz arkusz (lub skorzystaszz trybu podgl du wydruku) Excel wy wietla na arkuszu przerywane linie reprezentuj cemiejsca podzia u arkusza na strony wydruku Niektoacuterych u ytkownikoacutew (w czniez autorem tej ksi ki) takie zachowanie Excela irytuje Niestety jedynym sposobemwy czenia wy wietlania podzia u arkusza na strony jest otwarcie okna dialogowego Opcjeprogramu Excel przej cie na kart Zaawansowane a nast pnie przewijanie zawarto ci tejkarty a do odszukania opcji Poka podzia y stron Je eli podczas wy czania tej opcjikorzysta e z rejestratora makr przekonasz si e Excel generuje poni szy kod

Kup książkę Poleć książkę

228 Cz III Podstawy programowania

ActiveSheetDisplayPageBreaks = False

Z drugiej strony je eli podczas rejestrowania makra podzia y stron nie s widoczneExcel generuje taki kod

ActiveSheetDisplayPageBreaks = True

Takie informacje mog doprowadzi do wniosku e b dziesz musia napisa a dwamakra mdash jedno do w czania podgl du podzia u stron a drugie do jego wy czaniaNa szcz cie to nieprawda Procedura przedstawiona poni ej wykorzystuje operatorNot do zmiany warto ci logicznej True na False i odwrotnie Wykonanie proceduryTogglePageBreaks to prosty sposoacuteb na cykliczne w czanie i wy czanie podgl du podzia ustron arkusza

Sub TogglePageBreaks() On Error Resume Next ActiveSheetDisplayPageBreaks = Not _ ActiveSheetDisplayPageBreaksEnd Sub

Pierwsze polecenie informuje Excel e powinien ignorowa ewentualne b dy Przyk adowopodzia y stron nie s wy wietlane na arkuszach wykresoacutew Kiedy wprowadzisz takiepolecenie i sproacutebujesz wykona t procedur dla arkusza wykresu na ekranie nie pojawisi komunikat o b dzie

Techniki u ytej w procedurze TogglePageBreaks mo esz u ywa do zmiany dowolnychopcji logicznych (czyli takich ktoacuterych warto ciami s True albo False)

Zmiana innych opcji (typu non-Boolean)Do zmiany opcji ktoacutere nie s typu logicznego mo esz u ywa konstrukcji Select CaseW przyk adzie przedstawionym poni ej zmieniam tryb przeliczania skoroszytu z r cznegona automatyczny i odwrotnie i nakazuj wy wietlenie na ekranie komunikatu opisuj cegoaktualny tryb przeliczania arkusza

Sub ToggleCalcMode() Select Case ApplicationCalculation Case xlManual ApplicationCalculation = xlCalculationAutomatic MsgBox Automatyczne przeliczanie skoroszytu Case xlAutomatic ApplicationCalculation = xlCalculationManual MsgBox R czne przeliczanie skoroszytu End SelectEnd Sub

Techniki u ytej w procedurze ToggleCalcMode mo esz u ywa do zmiany dowolnychopcji ktoacutere nie posiadaj warto ci logicznych

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 13: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

218 Cz III Podstawy programowania

Rejestrator makr nie zawsze b dzie w stanie wygenerowa optymalny kod VBABardzo cz sto jednak mo esz za jego pomoc utworzy bazowe makro i potemodpowiednio zmodyfikowa kod tak aby sta si bardziej efektywny

Zazwyczaj bardzo dobrym rozwi zaniem jest nadawanie nazw zakresom komoacuterekwykorzystywanym w kodzie VBA Przyk adowo polecenie Range(Total)jestznacznie lepszym rozwi zaniem ni Range(D45) Je li w tym drugim przypadkupoacute niej wstawisz dodatkowy wiersz powy ej wiersza 45 to eby wszystko dzia a opoprawnie b dziesz musia zmodyfikowa makro tak aby korzysta o z nowegopoprawnego adresu komoacuterki a ta po wykonaniu takiej operacji b dzie mia a innyadres (D46) Aby nada nazw wybranemu zakresowi komoacuterek powiniene przejna kart FORMU Y i wybra polecenie Definiuj nazw znajduj ce si w grupiepolece Nazwy zdefiniowane

Kiedy tworzysz makro ktoacutere b dzie przetwarza o zakres komoacuterek zaznaczonyprzez u ytkownika pami taj e u ytkownik mo e zaznaczy kilka ca ych kolumnczy wierszy W wi kszo ci przypadkoacutew z pewno ci nie b dziesz chcia aby makrow p tli przechodzi o w takiej sytuacji przez wszystkie zaznaczone komoacuterki (w czniez pustymi) co mog oby zaj bardzo wiele czasu Dobre makro powinno odszukai przetwarza tylko komoacuterki ktoacutere nie s puste

Excel pozwala na jednoczesne zaznaczanie wielu zakresoacutew komoacuterek Aby to zrobi powiniene zaznaczy pierwszy zakres komoacuterek potem wcisn i przytrzymaklawisz Ctrl i zaznacza kolejne zakresy komoacuterek przy u yciu myszy Kod Twojejaplikacji powinien by przygotowany na takie sytuacje i podejmowa odpowiednieakcje

Skoroszyty z wybranymi przyk adami omawianymi w tym rozdziale znajdziesz na stronieinternetowej naszej ksi ki

Je eli chcesz samodzielnie wpisywa kod omawianych przyk adoacutew przejd do edytoraVBE naciskaj c kombinacj klawiszy lewyAlt+F11 a nast pnie wstaw nowy modu VBAi wpisz kod prezentowanych procedur Upewnij si e Twoacutej skoroszyt jest poprawnieskonfigurowany Je eli na przyk ad kod danego przyk adu odwo uje si do arkuszyo nazwach Arkusz1 i Arkusz2 upewnij si e takie arkusze istniej w Twoim skoroszycie

Kopiowanie zakresoacutewKopiowanie zakresoacutew komoacuterek mo e mia o pretendowa do miana jednej z najcz ciejwykonywanych operacji w Excelu Kiedy w czysz rejestrator makr i skopiujesz zakreskomoacuterek o adresie A1A5 do zakresu B1B5 otrzymasz nast puj ce makro

Sub CopyRange() Range(A1A5)Select SelectionCopy Range(B1)Select ActiveSheetPaste ApplicationCutCopyMode = FalseEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 219

Zwroacute uwag na ostatnie polecenie Zosta o ono wygenerowane przez naci ni cieklawisza Esc po skopiowaniu zakresu komoacuterek co spowodowa o usuni cie przerywanejlinii reprezentuj cej na arkuszu obramowanie kopiowanego zakresu

Przedstawione makro dzia a poprawnie ale zakresy komoacuterek mo na kopiowa w znaczniebardziej efektywny sposoacuteb Identyczny rezultat mo esz osi gn za pomoc proceduryktoacutera sk ada si z tylko jednego wiersza polecenia i nie zaznacza adnych komoacuterek(dzi ki czemu nie wymaga ustawiania w a ciwo ci CutCopyMode na warto False)

Sub CopyRange2() Range(A1A5)Copy Range(B1)End Sub

Procedura przedstawiona powy ej korzysta z tego e metoda Copy mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe kopiowanego zakresu Informacje o tymznalaz em w pomocy systemowej VBA Powy szy przyk ad doskonale roacutewnie ilustrujefakt e rejestrator makr nie zawsze generuje najbardziej efektywny kod

Kopiowanie zakresu o zmiennej wielko ciW wielu przypadkach konieczne jest skopiowanie zakresu komoacuterek dla ktoacuterego dok adnaliczba wierszy i kolumn okre laj cych jego wielko nie jest z goacutery znana Przyk adowomo esz dysponowa skoroszytem ledz cym tygodniow sprzeda w ktoacuterym liczba wierszyzmienia si ka dego tygodnia po wprowadzeniu nowych danych

Na rysunku 141 przedstawiam przyk ad cz sto spotykanego typu arkusza Znajduj cysi w nim zakres komoacuterek sk ada si z kilku wierszy ktoacuterych liczba zmienia si ka degodnia Poniewa nie wiesz jaki jest rozmiar zakresu w danej chwili musisz utworzykod ktoacutery b dzie dzia a bez u ywania adresu zakresu kopiowanych komoacuterek

Rysunek 141Przyk ad zakre-su ktoacutery mo e

sk ada siz dowolnej

liczby wierszy

Makro przedstawione poni ej ilustruje sposoacuteb kopiowania zakresu komoacuterek z arkuszaArkusz1 do arkusza Arkusz2 (pocz wszy od komoacuterki A1) Makro wykorzystuje w a ciwoCurrentRegion ktoacutera zwraca obiekt Range odpowiadaj cy blokowi komoacuterek otaczaj cychokre lon komoacuterk (w tym przypadku o adresie A1)

Kup książkę Poleć książkę

220 Cz III Podstawy programowania

Sub CopyCurrentRegion() Range(A1)CurrentRegionCopy Sheets(Arkusz2)Select Range(A1)Select ActiveSheetPaste Sheets(Arkusz1)Select ApplicationCutCopyMode = FalseEnd Sub

Zastosowanie w a ciwo ci CurrentRegion jest roacutewnowa ne z przej ciem na kartNARZ DZIA G OacuteWNE i wybraniem polecenia Znajd i zaznaczPrzejd do mdashspecjalnie znajduj cego si w grupie opcji Edytowanie i nast pnie zaznaczeniem opcjiBie cy obszar Aby przekona si jak to dzia a podczas wykonywania tych polecepowiniene u y rejestratora makr Zazwyczaj warto w a ciwo ci CurrentRegionreprezentuje prostok tny blok komoacuterek otoczony przez puste wiersze i kolumny

Oczywi cie mo esz zoptymalizowa kod makra przedstawionego powy ej i niezaznacza obszaru docelowego dla kopiowanych komoacuterek Makro przedstawione poni ejkorzysta z faktu e metoda Copy mo e u ywa argumentu wywo ania reprezentuj cegomiejsce docelowe kopiowanego zakresu

Sub CopyCurrentRegion2() Range(A1)CurrentRegionCopy _ Sheets(Arkusz2)Range(A1)End Sub

Je eli zakres komoacuterek ktoacutery chcesz skopiowa jest tabel (zdefiniowan przy u yciapolecenia WSTAWIANIETabeleTabela) ca e zadanie b dzie jeszcze atwiejsze Ka databela posiada swoj nazw (na przyk ad Tabela1) i automatycznie rozszerza si w miardodawania nowych wierszy

Sub CopyTable() Range(Tabela1)Copy Sheets(Arkusz2)Range(A1)End Sub

Je eli sproacutebujesz wykona procedur przedstawion powy ej przekonasz si e wiersznag oacutewka tabeli nie jest kopiowany poniewa obiekt Tabela1 nie obejmuje tegowiersza Je li chcesz aby wiersz nag oacutewka roacutewnie by kopiowany powiniene zmieniodwo anie do tabeli tak jak to zosta o przedstawione poni ej

Range(Tabela1[All])

Zaznaczanie komoacuterekdo ko ca wiersza lub kolumnyPrawdopodobnie bardzo cz sto u ywasz kombinacji klawiszy takich jak Ctrl+Shift+ czy Ctrl+Shift+ do zaznaczania zakresoacutew sk adaj cych si ze wszystkich komoacuterekod komoacuterki aktywnej a do ko ca kolumny czy wiersza Nie jest wi c chyba zaskoczenieme mo esz napisa makro ktoacutere b dzie zaznacza komoacuterki w podobny sposoacuteb

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 221

Do zaznaczania ca ego bloku komoacuterek mo esz u y w a ciwo ci CurrentRegion Ale copowiniene zrobi je eli chcesz zaznaczy powiedzmy tylko jedn kolumn z tegobloku komoacuterek Na szcz cie VBA pozwala na wykonywanie takich operacji Proceduraktoacuterej kod przedstawiam poni ej zaznacza zakres komoacuterek pocz wszy od bie cejaktywnej komoacuterki w doacute kolumny a do komoacuterki znajduj cej si o jeden wiersz powy ejpierwszej pustej komoacuterki tej kolumny Po zaznaczeniu zakresu mo esz przetwarza gow dowolny sposoacuteb mdash kopiowa komoacuterki przenosi je w inne miejsce arkusza zmieniaformatowanie i tak dalej

Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))SelectEnd Sub

Oczywi cie taki sam obszar mo esz roacutewnie zaznaczy r cznie Aby to zrobi powinienezaznaczy pierwsz komoacuterk nast pnie wcisn i przytrzyma klawisz Shift nacisnklawisz End i wreszcie nacisn klawisz (strza ka w doacute )

W przyk adzie wykorzystuj metod End obiektu ActiveCell ktoacutera zwraca obiekt typuRange Metoda End pobiera jeden argument okre laj cy kierunek w ktoacuterym zostaniewykonane zaznaczenie Argumentami tej metody mo e by dowolna ze sta ychprzedstawionych poni ej

xlUp

xlDown

xlToLeft

xlToRight

Pami taj e zaznaczanie zakresu nie jest potrzebne do jego przetwarzania Makroprzedstawione poni ej zmienia czcionk w komoacuterkach zmiennego zakresu (pojedynczakolumna) na pogrubion bez uprzedniego zaznaczenia zakresu

Sub MakeBold() Range(ActiveCell ActiveCellEnd(xlDown)) _ FontBold = TrueEnd Sub

Zaznaczanie ca ego wiersza lub ca ej kolumnyProcedura przedstawiona poni ej ilustruje sposoacuteb zaznaczania kolumny w ktoacuterej znajdujesi aktywna komoacuterka Makro wykorzystuje w a ciwo EntireColumn ktoacutera zwracaobiekt typu Range reprezentuj cy ca kolumn

Sub SelectColumn() ActiveCellEntireColumnSelectEnd Sub

Jak pewnie si spodziewasz w j zyku VBA dost pna jest roacutewnie w a ciwo EntireRowktoacutera zwraca obiekt typu Range reprezentuj cy ca y wiersz

Kup książkę Poleć książkę

222 Cz III Podstawy programowania

Przenoszenie zakresoacutewZazwyczaj aby przenie zakres komoacuterek zaznaczasz go wycinasz do schowka systemowegoi nast pnie wklejasz w inne miejsce Je eli u yjesz rejestratora makr do zapisania takiejoperacji przekonasz si e wygenerowany zostanie kod podobny do przedstawionegoponi ej

Sub MoveRange() Range(A1C6)Select SelectionCut Range(A10)Select ActiveSheetPasteEnd Sub

Podobnie jak podczas kopiowania komoacuterek takie rozwi zanie nie jest najbardziejefektywnym sposobem przenoszenia zakresu komoacuterek w inne miejsce W praktyce takoperacj mo esz wykona za pomoc procedury sk adaj cej si z jednego wiersza koduco prezentuj poni ej

Sub MoveRange2() Range(A1C6)Cut Range(A10)End Sub

Makro przedstawione powy ej korzysta z faktu e metoda Cut mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe przenoszonego zakresu Zwroacute roacutewnieuwag na fakt e podczas przenoszenia aden zakres komoacuterek nie jest zaznaczanyWska nik aktywnej komoacuterki przez ca y czas pozostaje w tym samym miejscu arkusza

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tliJednym z zada cz sto wykonywanych przez makra jest sprawdzanie poszczegoacutelnychkomoacuterek zakresu i wykonywanie okre lonych operacji na podstawie ich zawarto ci Takiemakra zazwyczaj wykorzystuj p tl For-Next za pomoc ktoacuterej przetwarzane s komoacuterkizakresu

Przyk ad przedstawiony ni ej ilustruje sposoacuteb przechodzenia kolejno przez wszystkiekomoacuterki danego zakresu W naszym przypadku przetwarzany jest aktualnie zaznaczonyzakres komoacuterek Zmienna obiektowa o nazwie Cell reprezentuje aktualnie przetwarzankomoacuterk W p tli For Each-Next znajduje si jedno polecenie ktoacutere sprawdza aktualnieprzetwarzan komoacuterk i zmienia jej czcionk na pogrubion je eli warto przechowywanaw komoacuterce jest dodatnia

Sub ProcessCells() Dim Cell As Range For Each Cell In Selection If CellValue gt 0 Then CellFontBold = True Next CellEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 223

Taka procedura dzia a poprawnie ale co si stanie je eli u ytkownik zaznaczy cakolumn lub ca y wiersz To wcale nie jest takie nieprawdopodobne bo przecie Excelpozwala na wykonywanie operacji na ca ych wierszach i kolumnach W takiej sytuacjiwykonanie makra mo e zaj naprawd du o czasu poniewa nasza p tla przetwarzaka d komoacuterk zaznaczonego zakresu a cznie z pustymi w jednej kolumnie komoacuterekjest a 1 048 576hellip Aby zatem nasze makro by o bardziej wydajne musimy je takzmodyfikowa eby przetwarzane by y tylko i wy cznie komoacuterki ktoacutere nie s puste

Procedura przedstawiona poni ej przetwarza wy cznie niepuste komoacuterki zaznaczonegozakresu dzi ki zastosowaniu metody SpecialCells (wi cej szczegoacute owych informacji natemat tej metody znajdziesz w pomocy systemowej VBA) Nasza procedura za pomocpolecenia Set tworzy dwa obiekty typu Range pierwszy z nich to podzakres komoacuterekzakresu wej ciowego zawieraj cy wy cznie komoacuterki z warto ciami sta ymi (na przyk adteksty warto ci liczbowe litera y i tak dalej) a drugi sk ada si z komoacuterek zawieraj cychformu y Procedura przetwarza tylko komoacuterki nale ce do tych podzakresoacutew co w efekciepowoduje pomini cie przetwarzania wszystkich pozosta ych pustych komoacuterek zakresuwej ciowego Sprytne prawda

Sub SkipBlanks() Dim ConstantCells As Range Dim FormulaCells As Range Dim cell As Range Ignoruj b dy On Error Resume Next

Przetwarzaj komoacuterki zawieraj ce warto ci sta e Set ConstantCells = Selection _ SpecialCells(xlConstants) For Each cell In ConstantCells If cellValue gt 0 Then cellFontBold = True End If Next cell

Przetwarzaj komoacuterki zawieraj ce formu y Set FormulaCells = Selection _ SpecialCells(xlFormulas) For Each cell In FormulaCells If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Procedura SkipBlanks dzia a tak samo szybko niezale nie od tego jaki zakres komoacuterekzaznaczy e Mo esz na przyk ad zaznaczy zakres sk adaj cy si z kilku komoacuterek zaznaczywszystkie kolumny w danym zakresie albo wszystkie wiersze w danym zakresie albonawet ca y arkusz Jak wida jest to ogromne usprawnienie w stosunku do oryginalnejprocedury ProcessCells ktoacuter omoacutewi em nieco wcze niej

Zwroacute uwag e w kodzie procedury u yli my polecenia

On Error Resume Next

Kup książkę Poleć książkę

224 Cz III Podstawy programowania

Polecenie to powoduje e Excel po prostu ignoruje b dy (inaczej moacutewi c je eli proacutebawykonania danego polecenia ko czy si b dem Excel ignoruje ten b d i po prostuprzechodzi do kolejnego polecenia wi cej szczegoacute owych informacji na temat obs ugib doacutew znajdziesz w rozdziale 12) W naszym przypadku zastosowanie polecenia OnError jest konieczne poniewa metoda SpecialCells generuje b d gdy adna komoacuterkanie spe nia podanego kryterium

Zastosowanie metody SpecialCells jest roacutewnowa ne z przej ciem na kart NARZ DZIAG OacuteWNE wybraniem polecenia Znajd i zaznaczPrzejd do mdash specjalnie znajduj cegosi w grupie opcji Edytowanie i nast pnie zaznaczeniem opcji Sta e lub Formu y Abyprzekona si jak to dzia a podczas wykonywania tych polece powiniene u yrejestratora makr i zaznacza roacute ne opcje

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tli(cz II)A teraz ci g dalszy naszej opowie ci W tym punkcie przedstawi inny sposoacuteb efektywnegoprzetwarzania komoacuterek znajduj cych si w zaznaczonym zakresie Tym razem procedurab dzie korzysta a z w a ciwo ci UsedRange ktoacutera zwraca obiekt typu Range reprezentuj cyu ywany zakres arkusza Procedura korzysta roacutewnie z metody Intersect ktoacutera zwracaobiekt typu Range zawieraj cy komoacuterki b d ce cz ci wspoacuteln dwoacutech zakresoacutew

Poni ej przedstawiam zmodyfikowan wersj procedury SkipBlanks omawianejw poprzednim punkcie

Sub SkipBlanks2() Dim WorkRange As Range Dim cell As Range Set WorkRange = Intersect(Selection ActiveSheetUsedRange) For Each cell In WorkRange If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Zmienna obiektowa WorkRange zawiera komoacuterki ktoacutere s cz ci wspoacuteln zakresuzaznaczonego przez u ytkownika oraz zakresu u ywanych komoacuterek arkusza Je lizatem u ytkownik zaznaczy ca kolumn zmienna WorkRange b dzie zawiera a tylkokomoacuterki ktoacutere znajduj si jednocze nie w zaznaczonej kolumnie i w u ywanymzakresie arkusza Jak wida jest to bardzo szybka i efektywna metoda pozwalaj ca naunikni cie przetwarzania komoacuterek znajduj cych si poza zakresem u ywanychkomoacuterek arkusza

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 225

Wprowadzanie warto ci do komoacuterkiNa rysunku 142 pokazuj w jaki sposoacuteb mo esz u y funkcji InputBox j zyka VBA dopobierania od u ytkownika warto ci ktoacutera nast pnie mo e zosta zapisana w wybranejkomoacuterce W procedurze przedstawionej poni ej demonstruj jak poprosi u ytkownikao podanie warto ci i wstawi j do komoacuterki A1 aktywnego arkusza (i to wszystkoza pomoc jednego polecenia)

Sub GetValue() Range(A1)Value = InputBox( _ Wprowad warto dla komoacuterki A1)End Sub

Rysunek 142Zastosowaniefunkcji Input-

Box do pobie-rania warto ci

od u ytkownika

Przedstawiona procedura mo e jednak sprawia pewien problem Je eli u ytkowniknaci nie w oknie dialogowym przycisk Cancel procedura usunie wszelkie dane juznajduj ce si w komoacuterce A1 a takie zachowanie nie jest zbyt dobr praktyk programistyczn Naci ni cie przycisku Cancel powinno po prostu usuwa z ekranu okno dialogowe bezwykonywania adnych dodatkowych operacji

Makro przedstawione poni ej ilustruje znacznie lepsze podej cie do takiego zagadnieniai do zapami tania warto ci wprowadzonej przez u ytkownika wykorzystuje zmienn xJe eli zmienna zawiera co innego ni pusty ci g znakoacutew (czyli kiedy u ytkownikwprowadzi jak warto ) warto zmiennej jest zapisywana w komoacuterce A1 W przeciwnymprzypadku procedura ko czy dzia anie nie wykonuj c adnych dodatkowych operacji

Sub GetValue2() Dim x as Variant x = InputBox(Wprowad warto dla komoacuterki A1) If x ltgt Then Range(A1)Value = xEnd Sub

Zmienna x zosta a zdefiniowana jako zmienna typu Variant poniewa jej warto cimo e by warto albo pusty ci g znakoacutew (je eli u ytkownik naci nie przycisk Cancel)

Kup książkę Poleć książkę

226 Cz III Podstawy programowania

Okre lanie typu zaznaczonego zakresuJe eli zadaniem Twojego makra b dzie przetwarzanie zaznaczonego zakresu takiemakro musi mie zdolno sprawdzenia czy przed jego wywo aniem u ytkownikrzeczywi cie zaznaczy zakres komoacuterek W przeciwnym razie je eli przed wywo aniemmakra zaznaczony zostanie inny obiekt (na przyk ad wykres lub kszta t) proacuteba wykonaniamakra najprawdopodobniej zako czy si niepowodzeniem Polecenie przedstawioneponi ej wykorzystuje funkcj TypeName j zyka VBA do wy wietlania na ekranie typuaktualnie zaznaczonego obiektu

MsgBox TypeName(Selection)

Je eli aktualnie zaznaczony jest obiekt typu Range wykonanie takiego polecenia spowodujewy wietlenie s owa Range Je li Twoje makro dzia a tylko z zakresami komoacuterek mo eszu y polecenia If do sprawdzenia czy aktualnie zaznaczony obiekt to zakres (obiekttypu Range) Procedura przedstawiona poni ej sprawdza typ zaznaczonego obiektui je eli nie jest to obiekt typu Range na ekranie wy wietlany jest odpowiedni komunikati procedura ko czy dzia anie

Sub CheckSelection() If TypeName(Selection) ltgt Range Then MsgBox Zaznacz zakres komoacuterek Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Identyfikowanie zaznacze wielokrotnychJak pami tasz Excel pozwala na jednoczesne zaznaczanie wielu obiektoacutew Aby to zrobi powiniene podczas zaznaczania obiektoacutew lub zakresoacutew trzyma wci ni ty klawisz CtrlZaznaczenia wielokrotne mog by przyczyn problemoacutew z wykonywaniem niektoacuterychmakr Przyk adowo nie mo esz skopiowa zakresu komoacuterek ktoacutery zosta utworzonypoprzez wiele zaznacze nieci g ych zakresoacutew komoacuterek Je eli sproacutebujesz wykonatak operacj Excel wy wietli na ekranie komunikat przedstawiony na rysunku 143

Makro przedstawione ni ej pokazuje w jaki sposoacuteb mo esz sprawdzi czy u ytkownikdokona zaznaczenia wielokrotnego i na tej podstawie wykona odpowiedni operacj

Sub MultipleSelection() If SelectionAreasCount gt 1 Then MsgBox Zaznaczenia wielokrotne nie s dozwolone Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Przedstawiona procedura wykorzystuje metod Areas ktoacutera zwraca kolekcj wszystkichzakresoacutew w danym zaznaczeniu W a ciwo Count zwraca liczb obiektoacutew tej kolekcji

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 227

Rysunek 143Excel nie lubi

kiedy proacutebujeszkopiowa nie-ci g e zakresy

komoacuterek

Zmiana ustawie ExcelaChyba najbardziej u ytecznymi makrami s proste procedury ktoacutere zmieniaj jednolub kilka ustawie Excela Je li na przyk ad dojdziesz do wniosku e bardzo cz stoprzywo ujesz na ekran okno opcji programu Excel i zmieniasz jakie ustawienie takaoperacja z pewno ci b dzie bardzo dobrym kandydatem do napisania makraoszcz dzaj cego Twoacutej czas i u atwiaj cego zmian takiego ustawienia

W tym podrozdziale zaprezentuj dwa przyk ady procedur ktoacutere pokazuj w jakisposoacuteb mo na zmienia ustawienia Excela Ogoacutelne zasady dzia ania tych procedurmo esz z powodzeniem zastosowa do napisania w asnych makr zmieniaj cych inneustawienia Excela

Zmiana ustawie logicznych(opcje typu Boolean)Podobnie jak wy cznik wiat a opcje logiczne (typu Boolean) mog by albo w czonealbo wy czone Mo esz na przyk ad utworzy makro ktoacutere b dzie w cza o lub wy cza owy wietlanie podzia u arkusza na strony Kiedy wydrukujesz arkusz (lub skorzystaszz trybu podgl du wydruku) Excel wy wietla na arkuszu przerywane linie reprezentuj cemiejsca podzia u arkusza na strony wydruku Niektoacuterych u ytkownikoacutew (w czniez autorem tej ksi ki) takie zachowanie Excela irytuje Niestety jedynym sposobemwy czenia wy wietlania podzia u arkusza na strony jest otwarcie okna dialogowego Opcjeprogramu Excel przej cie na kart Zaawansowane a nast pnie przewijanie zawarto ci tejkarty a do odszukania opcji Poka podzia y stron Je eli podczas wy czania tej opcjikorzysta e z rejestratora makr przekonasz si e Excel generuje poni szy kod

Kup książkę Poleć książkę

228 Cz III Podstawy programowania

ActiveSheetDisplayPageBreaks = False

Z drugiej strony je eli podczas rejestrowania makra podzia y stron nie s widoczneExcel generuje taki kod

ActiveSheetDisplayPageBreaks = True

Takie informacje mog doprowadzi do wniosku e b dziesz musia napisa a dwamakra mdash jedno do w czania podgl du podzia u stron a drugie do jego wy czaniaNa szcz cie to nieprawda Procedura przedstawiona poni ej wykorzystuje operatorNot do zmiany warto ci logicznej True na False i odwrotnie Wykonanie proceduryTogglePageBreaks to prosty sposoacuteb na cykliczne w czanie i wy czanie podgl du podzia ustron arkusza

Sub TogglePageBreaks() On Error Resume Next ActiveSheetDisplayPageBreaks = Not _ ActiveSheetDisplayPageBreaksEnd Sub

Pierwsze polecenie informuje Excel e powinien ignorowa ewentualne b dy Przyk adowopodzia y stron nie s wy wietlane na arkuszach wykresoacutew Kiedy wprowadzisz takiepolecenie i sproacutebujesz wykona t procedur dla arkusza wykresu na ekranie nie pojawisi komunikat o b dzie

Techniki u ytej w procedurze TogglePageBreaks mo esz u ywa do zmiany dowolnychopcji logicznych (czyli takich ktoacuterych warto ciami s True albo False)

Zmiana innych opcji (typu non-Boolean)Do zmiany opcji ktoacutere nie s typu logicznego mo esz u ywa konstrukcji Select CaseW przyk adzie przedstawionym poni ej zmieniam tryb przeliczania skoroszytu z r cznegona automatyczny i odwrotnie i nakazuj wy wietlenie na ekranie komunikatu opisuj cegoaktualny tryb przeliczania arkusza

Sub ToggleCalcMode() Select Case ApplicationCalculation Case xlManual ApplicationCalculation = xlCalculationAutomatic MsgBox Automatyczne przeliczanie skoroszytu Case xlAutomatic ApplicationCalculation = xlCalculationManual MsgBox R czne przeliczanie skoroszytu End SelectEnd Sub

Techniki u ytej w procedurze ToggleCalcMode mo esz u ywa do zmiany dowolnychopcji ktoacutere nie posiadaj warto ci logicznych

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 14: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 219

Zwroacute uwag na ostatnie polecenie Zosta o ono wygenerowane przez naci ni cieklawisza Esc po skopiowaniu zakresu komoacuterek co spowodowa o usuni cie przerywanejlinii reprezentuj cej na arkuszu obramowanie kopiowanego zakresu

Przedstawione makro dzia a poprawnie ale zakresy komoacuterek mo na kopiowa w znaczniebardziej efektywny sposoacuteb Identyczny rezultat mo esz osi gn za pomoc proceduryktoacutera sk ada si z tylko jednego wiersza polecenia i nie zaznacza adnych komoacuterek(dzi ki czemu nie wymaga ustawiania w a ciwo ci CutCopyMode na warto False)

Sub CopyRange2() Range(A1A5)Copy Range(B1)End Sub

Procedura przedstawiona powy ej korzysta z tego e metoda Copy mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe kopiowanego zakresu Informacje o tymznalaz em w pomocy systemowej VBA Powy szy przyk ad doskonale roacutewnie ilustrujefakt e rejestrator makr nie zawsze generuje najbardziej efektywny kod

Kopiowanie zakresu o zmiennej wielko ciW wielu przypadkach konieczne jest skopiowanie zakresu komoacuterek dla ktoacuterego dok adnaliczba wierszy i kolumn okre laj cych jego wielko nie jest z goacutery znana Przyk adowomo esz dysponowa skoroszytem ledz cym tygodniow sprzeda w ktoacuterym liczba wierszyzmienia si ka dego tygodnia po wprowadzeniu nowych danych

Na rysunku 141 przedstawiam przyk ad cz sto spotykanego typu arkusza Znajduj cysi w nim zakres komoacuterek sk ada si z kilku wierszy ktoacuterych liczba zmienia si ka degodnia Poniewa nie wiesz jaki jest rozmiar zakresu w danej chwili musisz utworzykod ktoacutery b dzie dzia a bez u ywania adresu zakresu kopiowanych komoacuterek

Rysunek 141Przyk ad zakre-su ktoacutery mo e

sk ada siz dowolnej

liczby wierszy

Makro przedstawione poni ej ilustruje sposoacuteb kopiowania zakresu komoacuterek z arkuszaArkusz1 do arkusza Arkusz2 (pocz wszy od komoacuterki A1) Makro wykorzystuje w a ciwoCurrentRegion ktoacutera zwraca obiekt Range odpowiadaj cy blokowi komoacuterek otaczaj cychokre lon komoacuterk (w tym przypadku o adresie A1)

Kup książkę Poleć książkę

220 Cz III Podstawy programowania

Sub CopyCurrentRegion() Range(A1)CurrentRegionCopy Sheets(Arkusz2)Select Range(A1)Select ActiveSheetPaste Sheets(Arkusz1)Select ApplicationCutCopyMode = FalseEnd Sub

Zastosowanie w a ciwo ci CurrentRegion jest roacutewnowa ne z przej ciem na kartNARZ DZIA G OacuteWNE i wybraniem polecenia Znajd i zaznaczPrzejd do mdashspecjalnie znajduj cego si w grupie opcji Edytowanie i nast pnie zaznaczeniem opcjiBie cy obszar Aby przekona si jak to dzia a podczas wykonywania tych polecepowiniene u y rejestratora makr Zazwyczaj warto w a ciwo ci CurrentRegionreprezentuje prostok tny blok komoacuterek otoczony przez puste wiersze i kolumny

Oczywi cie mo esz zoptymalizowa kod makra przedstawionego powy ej i niezaznacza obszaru docelowego dla kopiowanych komoacuterek Makro przedstawione poni ejkorzysta z faktu e metoda Copy mo e u ywa argumentu wywo ania reprezentuj cegomiejsce docelowe kopiowanego zakresu

Sub CopyCurrentRegion2() Range(A1)CurrentRegionCopy _ Sheets(Arkusz2)Range(A1)End Sub

Je eli zakres komoacuterek ktoacutery chcesz skopiowa jest tabel (zdefiniowan przy u yciapolecenia WSTAWIANIETabeleTabela) ca e zadanie b dzie jeszcze atwiejsze Ka databela posiada swoj nazw (na przyk ad Tabela1) i automatycznie rozszerza si w miardodawania nowych wierszy

Sub CopyTable() Range(Tabela1)Copy Sheets(Arkusz2)Range(A1)End Sub

Je eli sproacutebujesz wykona procedur przedstawion powy ej przekonasz si e wiersznag oacutewka tabeli nie jest kopiowany poniewa obiekt Tabela1 nie obejmuje tegowiersza Je li chcesz aby wiersz nag oacutewka roacutewnie by kopiowany powiniene zmieniodwo anie do tabeli tak jak to zosta o przedstawione poni ej

Range(Tabela1[All])

Zaznaczanie komoacuterekdo ko ca wiersza lub kolumnyPrawdopodobnie bardzo cz sto u ywasz kombinacji klawiszy takich jak Ctrl+Shift+ czy Ctrl+Shift+ do zaznaczania zakresoacutew sk adaj cych si ze wszystkich komoacuterekod komoacuterki aktywnej a do ko ca kolumny czy wiersza Nie jest wi c chyba zaskoczenieme mo esz napisa makro ktoacutere b dzie zaznacza komoacuterki w podobny sposoacuteb

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 221

Do zaznaczania ca ego bloku komoacuterek mo esz u y w a ciwo ci CurrentRegion Ale copowiniene zrobi je eli chcesz zaznaczy powiedzmy tylko jedn kolumn z tegobloku komoacuterek Na szcz cie VBA pozwala na wykonywanie takich operacji Proceduraktoacuterej kod przedstawiam poni ej zaznacza zakres komoacuterek pocz wszy od bie cejaktywnej komoacuterki w doacute kolumny a do komoacuterki znajduj cej si o jeden wiersz powy ejpierwszej pustej komoacuterki tej kolumny Po zaznaczeniu zakresu mo esz przetwarza gow dowolny sposoacuteb mdash kopiowa komoacuterki przenosi je w inne miejsce arkusza zmieniaformatowanie i tak dalej

Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))SelectEnd Sub

Oczywi cie taki sam obszar mo esz roacutewnie zaznaczy r cznie Aby to zrobi powinienezaznaczy pierwsz komoacuterk nast pnie wcisn i przytrzyma klawisz Shift nacisnklawisz End i wreszcie nacisn klawisz (strza ka w doacute )

W przyk adzie wykorzystuj metod End obiektu ActiveCell ktoacutera zwraca obiekt typuRange Metoda End pobiera jeden argument okre laj cy kierunek w ktoacuterym zostaniewykonane zaznaczenie Argumentami tej metody mo e by dowolna ze sta ychprzedstawionych poni ej

xlUp

xlDown

xlToLeft

xlToRight

Pami taj e zaznaczanie zakresu nie jest potrzebne do jego przetwarzania Makroprzedstawione poni ej zmienia czcionk w komoacuterkach zmiennego zakresu (pojedynczakolumna) na pogrubion bez uprzedniego zaznaczenia zakresu

Sub MakeBold() Range(ActiveCell ActiveCellEnd(xlDown)) _ FontBold = TrueEnd Sub

Zaznaczanie ca ego wiersza lub ca ej kolumnyProcedura przedstawiona poni ej ilustruje sposoacuteb zaznaczania kolumny w ktoacuterej znajdujesi aktywna komoacuterka Makro wykorzystuje w a ciwo EntireColumn ktoacutera zwracaobiekt typu Range reprezentuj cy ca kolumn

Sub SelectColumn() ActiveCellEntireColumnSelectEnd Sub

Jak pewnie si spodziewasz w j zyku VBA dost pna jest roacutewnie w a ciwo EntireRowktoacutera zwraca obiekt typu Range reprezentuj cy ca y wiersz

Kup książkę Poleć książkę

222 Cz III Podstawy programowania

Przenoszenie zakresoacutewZazwyczaj aby przenie zakres komoacuterek zaznaczasz go wycinasz do schowka systemowegoi nast pnie wklejasz w inne miejsce Je eli u yjesz rejestratora makr do zapisania takiejoperacji przekonasz si e wygenerowany zostanie kod podobny do przedstawionegoponi ej

Sub MoveRange() Range(A1C6)Select SelectionCut Range(A10)Select ActiveSheetPasteEnd Sub

Podobnie jak podczas kopiowania komoacuterek takie rozwi zanie nie jest najbardziejefektywnym sposobem przenoszenia zakresu komoacuterek w inne miejsce W praktyce takoperacj mo esz wykona za pomoc procedury sk adaj cej si z jednego wiersza koduco prezentuj poni ej

Sub MoveRange2() Range(A1C6)Cut Range(A10)End Sub

Makro przedstawione powy ej korzysta z faktu e metoda Cut mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe przenoszonego zakresu Zwroacute roacutewnieuwag na fakt e podczas przenoszenia aden zakres komoacuterek nie jest zaznaczanyWska nik aktywnej komoacuterki przez ca y czas pozostaje w tym samym miejscu arkusza

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tliJednym z zada cz sto wykonywanych przez makra jest sprawdzanie poszczegoacutelnychkomoacuterek zakresu i wykonywanie okre lonych operacji na podstawie ich zawarto ci Takiemakra zazwyczaj wykorzystuj p tl For-Next za pomoc ktoacuterej przetwarzane s komoacuterkizakresu

Przyk ad przedstawiony ni ej ilustruje sposoacuteb przechodzenia kolejno przez wszystkiekomoacuterki danego zakresu W naszym przypadku przetwarzany jest aktualnie zaznaczonyzakres komoacuterek Zmienna obiektowa o nazwie Cell reprezentuje aktualnie przetwarzankomoacuterk W p tli For Each-Next znajduje si jedno polecenie ktoacutere sprawdza aktualnieprzetwarzan komoacuterk i zmienia jej czcionk na pogrubion je eli warto przechowywanaw komoacuterce jest dodatnia

Sub ProcessCells() Dim Cell As Range For Each Cell In Selection If CellValue gt 0 Then CellFontBold = True Next CellEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 223

Taka procedura dzia a poprawnie ale co si stanie je eli u ytkownik zaznaczy cakolumn lub ca y wiersz To wcale nie jest takie nieprawdopodobne bo przecie Excelpozwala na wykonywanie operacji na ca ych wierszach i kolumnach W takiej sytuacjiwykonanie makra mo e zaj naprawd du o czasu poniewa nasza p tla przetwarzaka d komoacuterk zaznaczonego zakresu a cznie z pustymi w jednej kolumnie komoacuterekjest a 1 048 576hellip Aby zatem nasze makro by o bardziej wydajne musimy je takzmodyfikowa eby przetwarzane by y tylko i wy cznie komoacuterki ktoacutere nie s puste

Procedura przedstawiona poni ej przetwarza wy cznie niepuste komoacuterki zaznaczonegozakresu dzi ki zastosowaniu metody SpecialCells (wi cej szczegoacute owych informacji natemat tej metody znajdziesz w pomocy systemowej VBA) Nasza procedura za pomocpolecenia Set tworzy dwa obiekty typu Range pierwszy z nich to podzakres komoacuterekzakresu wej ciowego zawieraj cy wy cznie komoacuterki z warto ciami sta ymi (na przyk adteksty warto ci liczbowe litera y i tak dalej) a drugi sk ada si z komoacuterek zawieraj cychformu y Procedura przetwarza tylko komoacuterki nale ce do tych podzakresoacutew co w efekciepowoduje pomini cie przetwarzania wszystkich pozosta ych pustych komoacuterek zakresuwej ciowego Sprytne prawda

Sub SkipBlanks() Dim ConstantCells As Range Dim FormulaCells As Range Dim cell As Range Ignoruj b dy On Error Resume Next

Przetwarzaj komoacuterki zawieraj ce warto ci sta e Set ConstantCells = Selection _ SpecialCells(xlConstants) For Each cell In ConstantCells If cellValue gt 0 Then cellFontBold = True End If Next cell

Przetwarzaj komoacuterki zawieraj ce formu y Set FormulaCells = Selection _ SpecialCells(xlFormulas) For Each cell In FormulaCells If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Procedura SkipBlanks dzia a tak samo szybko niezale nie od tego jaki zakres komoacuterekzaznaczy e Mo esz na przyk ad zaznaczy zakres sk adaj cy si z kilku komoacuterek zaznaczywszystkie kolumny w danym zakresie albo wszystkie wiersze w danym zakresie albonawet ca y arkusz Jak wida jest to ogromne usprawnienie w stosunku do oryginalnejprocedury ProcessCells ktoacuter omoacutewi em nieco wcze niej

Zwroacute uwag e w kodzie procedury u yli my polecenia

On Error Resume Next

Kup książkę Poleć książkę

224 Cz III Podstawy programowania

Polecenie to powoduje e Excel po prostu ignoruje b dy (inaczej moacutewi c je eli proacutebawykonania danego polecenia ko czy si b dem Excel ignoruje ten b d i po prostuprzechodzi do kolejnego polecenia wi cej szczegoacute owych informacji na temat obs ugib doacutew znajdziesz w rozdziale 12) W naszym przypadku zastosowanie polecenia OnError jest konieczne poniewa metoda SpecialCells generuje b d gdy adna komoacuterkanie spe nia podanego kryterium

Zastosowanie metody SpecialCells jest roacutewnowa ne z przej ciem na kart NARZ DZIAG OacuteWNE wybraniem polecenia Znajd i zaznaczPrzejd do mdash specjalnie znajduj cegosi w grupie opcji Edytowanie i nast pnie zaznaczeniem opcji Sta e lub Formu y Abyprzekona si jak to dzia a podczas wykonywania tych polece powiniene u yrejestratora makr i zaznacza roacute ne opcje

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tli(cz II)A teraz ci g dalszy naszej opowie ci W tym punkcie przedstawi inny sposoacuteb efektywnegoprzetwarzania komoacuterek znajduj cych si w zaznaczonym zakresie Tym razem procedurab dzie korzysta a z w a ciwo ci UsedRange ktoacutera zwraca obiekt typu Range reprezentuj cyu ywany zakres arkusza Procedura korzysta roacutewnie z metody Intersect ktoacutera zwracaobiekt typu Range zawieraj cy komoacuterki b d ce cz ci wspoacuteln dwoacutech zakresoacutew

Poni ej przedstawiam zmodyfikowan wersj procedury SkipBlanks omawianejw poprzednim punkcie

Sub SkipBlanks2() Dim WorkRange As Range Dim cell As Range Set WorkRange = Intersect(Selection ActiveSheetUsedRange) For Each cell In WorkRange If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Zmienna obiektowa WorkRange zawiera komoacuterki ktoacutere s cz ci wspoacuteln zakresuzaznaczonego przez u ytkownika oraz zakresu u ywanych komoacuterek arkusza Je lizatem u ytkownik zaznaczy ca kolumn zmienna WorkRange b dzie zawiera a tylkokomoacuterki ktoacutere znajduj si jednocze nie w zaznaczonej kolumnie i w u ywanymzakresie arkusza Jak wida jest to bardzo szybka i efektywna metoda pozwalaj ca naunikni cie przetwarzania komoacuterek znajduj cych si poza zakresem u ywanychkomoacuterek arkusza

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 225

Wprowadzanie warto ci do komoacuterkiNa rysunku 142 pokazuj w jaki sposoacuteb mo esz u y funkcji InputBox j zyka VBA dopobierania od u ytkownika warto ci ktoacutera nast pnie mo e zosta zapisana w wybranejkomoacuterce W procedurze przedstawionej poni ej demonstruj jak poprosi u ytkownikao podanie warto ci i wstawi j do komoacuterki A1 aktywnego arkusza (i to wszystkoza pomoc jednego polecenia)

Sub GetValue() Range(A1)Value = InputBox( _ Wprowad warto dla komoacuterki A1)End Sub

Rysunek 142Zastosowaniefunkcji Input-

Box do pobie-rania warto ci

od u ytkownika

Przedstawiona procedura mo e jednak sprawia pewien problem Je eli u ytkowniknaci nie w oknie dialogowym przycisk Cancel procedura usunie wszelkie dane juznajduj ce si w komoacuterce A1 a takie zachowanie nie jest zbyt dobr praktyk programistyczn Naci ni cie przycisku Cancel powinno po prostu usuwa z ekranu okno dialogowe bezwykonywania adnych dodatkowych operacji

Makro przedstawione poni ej ilustruje znacznie lepsze podej cie do takiego zagadnieniai do zapami tania warto ci wprowadzonej przez u ytkownika wykorzystuje zmienn xJe eli zmienna zawiera co innego ni pusty ci g znakoacutew (czyli kiedy u ytkownikwprowadzi jak warto ) warto zmiennej jest zapisywana w komoacuterce A1 W przeciwnymprzypadku procedura ko czy dzia anie nie wykonuj c adnych dodatkowych operacji

Sub GetValue2() Dim x as Variant x = InputBox(Wprowad warto dla komoacuterki A1) If x ltgt Then Range(A1)Value = xEnd Sub

Zmienna x zosta a zdefiniowana jako zmienna typu Variant poniewa jej warto cimo e by warto albo pusty ci g znakoacutew (je eli u ytkownik naci nie przycisk Cancel)

Kup książkę Poleć książkę

226 Cz III Podstawy programowania

Okre lanie typu zaznaczonego zakresuJe eli zadaniem Twojego makra b dzie przetwarzanie zaznaczonego zakresu takiemakro musi mie zdolno sprawdzenia czy przed jego wywo aniem u ytkownikrzeczywi cie zaznaczy zakres komoacuterek W przeciwnym razie je eli przed wywo aniemmakra zaznaczony zostanie inny obiekt (na przyk ad wykres lub kszta t) proacuteba wykonaniamakra najprawdopodobniej zako czy si niepowodzeniem Polecenie przedstawioneponi ej wykorzystuje funkcj TypeName j zyka VBA do wy wietlania na ekranie typuaktualnie zaznaczonego obiektu

MsgBox TypeName(Selection)

Je eli aktualnie zaznaczony jest obiekt typu Range wykonanie takiego polecenia spowodujewy wietlenie s owa Range Je li Twoje makro dzia a tylko z zakresami komoacuterek mo eszu y polecenia If do sprawdzenia czy aktualnie zaznaczony obiekt to zakres (obiekttypu Range) Procedura przedstawiona poni ej sprawdza typ zaznaczonego obiektui je eli nie jest to obiekt typu Range na ekranie wy wietlany jest odpowiedni komunikati procedura ko czy dzia anie

Sub CheckSelection() If TypeName(Selection) ltgt Range Then MsgBox Zaznacz zakres komoacuterek Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Identyfikowanie zaznacze wielokrotnychJak pami tasz Excel pozwala na jednoczesne zaznaczanie wielu obiektoacutew Aby to zrobi powiniene podczas zaznaczania obiektoacutew lub zakresoacutew trzyma wci ni ty klawisz CtrlZaznaczenia wielokrotne mog by przyczyn problemoacutew z wykonywaniem niektoacuterychmakr Przyk adowo nie mo esz skopiowa zakresu komoacuterek ktoacutery zosta utworzonypoprzez wiele zaznacze nieci g ych zakresoacutew komoacuterek Je eli sproacutebujesz wykonatak operacj Excel wy wietli na ekranie komunikat przedstawiony na rysunku 143

Makro przedstawione ni ej pokazuje w jaki sposoacuteb mo esz sprawdzi czy u ytkownikdokona zaznaczenia wielokrotnego i na tej podstawie wykona odpowiedni operacj

Sub MultipleSelection() If SelectionAreasCount gt 1 Then MsgBox Zaznaczenia wielokrotne nie s dozwolone Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Przedstawiona procedura wykorzystuje metod Areas ktoacutera zwraca kolekcj wszystkichzakresoacutew w danym zaznaczeniu W a ciwo Count zwraca liczb obiektoacutew tej kolekcji

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 227

Rysunek 143Excel nie lubi

kiedy proacutebujeszkopiowa nie-ci g e zakresy

komoacuterek

Zmiana ustawie ExcelaChyba najbardziej u ytecznymi makrami s proste procedury ktoacutere zmieniaj jednolub kilka ustawie Excela Je li na przyk ad dojdziesz do wniosku e bardzo cz stoprzywo ujesz na ekran okno opcji programu Excel i zmieniasz jakie ustawienie takaoperacja z pewno ci b dzie bardzo dobrym kandydatem do napisania makraoszcz dzaj cego Twoacutej czas i u atwiaj cego zmian takiego ustawienia

W tym podrozdziale zaprezentuj dwa przyk ady procedur ktoacutere pokazuj w jakisposoacuteb mo na zmienia ustawienia Excela Ogoacutelne zasady dzia ania tych procedurmo esz z powodzeniem zastosowa do napisania w asnych makr zmieniaj cych inneustawienia Excela

Zmiana ustawie logicznych(opcje typu Boolean)Podobnie jak wy cznik wiat a opcje logiczne (typu Boolean) mog by albo w czonealbo wy czone Mo esz na przyk ad utworzy makro ktoacutere b dzie w cza o lub wy cza owy wietlanie podzia u arkusza na strony Kiedy wydrukujesz arkusz (lub skorzystaszz trybu podgl du wydruku) Excel wy wietla na arkuszu przerywane linie reprezentuj cemiejsca podzia u arkusza na strony wydruku Niektoacuterych u ytkownikoacutew (w czniez autorem tej ksi ki) takie zachowanie Excela irytuje Niestety jedynym sposobemwy czenia wy wietlania podzia u arkusza na strony jest otwarcie okna dialogowego Opcjeprogramu Excel przej cie na kart Zaawansowane a nast pnie przewijanie zawarto ci tejkarty a do odszukania opcji Poka podzia y stron Je eli podczas wy czania tej opcjikorzysta e z rejestratora makr przekonasz si e Excel generuje poni szy kod

Kup książkę Poleć książkę

228 Cz III Podstawy programowania

ActiveSheetDisplayPageBreaks = False

Z drugiej strony je eli podczas rejestrowania makra podzia y stron nie s widoczneExcel generuje taki kod

ActiveSheetDisplayPageBreaks = True

Takie informacje mog doprowadzi do wniosku e b dziesz musia napisa a dwamakra mdash jedno do w czania podgl du podzia u stron a drugie do jego wy czaniaNa szcz cie to nieprawda Procedura przedstawiona poni ej wykorzystuje operatorNot do zmiany warto ci logicznej True na False i odwrotnie Wykonanie proceduryTogglePageBreaks to prosty sposoacuteb na cykliczne w czanie i wy czanie podgl du podzia ustron arkusza

Sub TogglePageBreaks() On Error Resume Next ActiveSheetDisplayPageBreaks = Not _ ActiveSheetDisplayPageBreaksEnd Sub

Pierwsze polecenie informuje Excel e powinien ignorowa ewentualne b dy Przyk adowopodzia y stron nie s wy wietlane na arkuszach wykresoacutew Kiedy wprowadzisz takiepolecenie i sproacutebujesz wykona t procedur dla arkusza wykresu na ekranie nie pojawisi komunikat o b dzie

Techniki u ytej w procedurze TogglePageBreaks mo esz u ywa do zmiany dowolnychopcji logicznych (czyli takich ktoacuterych warto ciami s True albo False)

Zmiana innych opcji (typu non-Boolean)Do zmiany opcji ktoacutere nie s typu logicznego mo esz u ywa konstrukcji Select CaseW przyk adzie przedstawionym poni ej zmieniam tryb przeliczania skoroszytu z r cznegona automatyczny i odwrotnie i nakazuj wy wietlenie na ekranie komunikatu opisuj cegoaktualny tryb przeliczania arkusza

Sub ToggleCalcMode() Select Case ApplicationCalculation Case xlManual ApplicationCalculation = xlCalculationAutomatic MsgBox Automatyczne przeliczanie skoroszytu Case xlAutomatic ApplicationCalculation = xlCalculationManual MsgBox R czne przeliczanie skoroszytu End SelectEnd Sub

Techniki u ytej w procedurze ToggleCalcMode mo esz u ywa do zmiany dowolnychopcji ktoacutere nie posiadaj warto ci logicznych

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 15: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

220 Cz III Podstawy programowania

Sub CopyCurrentRegion() Range(A1)CurrentRegionCopy Sheets(Arkusz2)Select Range(A1)Select ActiveSheetPaste Sheets(Arkusz1)Select ApplicationCutCopyMode = FalseEnd Sub

Zastosowanie w a ciwo ci CurrentRegion jest roacutewnowa ne z przej ciem na kartNARZ DZIA G OacuteWNE i wybraniem polecenia Znajd i zaznaczPrzejd do mdashspecjalnie znajduj cego si w grupie opcji Edytowanie i nast pnie zaznaczeniem opcjiBie cy obszar Aby przekona si jak to dzia a podczas wykonywania tych polecepowiniene u y rejestratora makr Zazwyczaj warto w a ciwo ci CurrentRegionreprezentuje prostok tny blok komoacuterek otoczony przez puste wiersze i kolumny

Oczywi cie mo esz zoptymalizowa kod makra przedstawionego powy ej i niezaznacza obszaru docelowego dla kopiowanych komoacuterek Makro przedstawione poni ejkorzysta z faktu e metoda Copy mo e u ywa argumentu wywo ania reprezentuj cegomiejsce docelowe kopiowanego zakresu

Sub CopyCurrentRegion2() Range(A1)CurrentRegionCopy _ Sheets(Arkusz2)Range(A1)End Sub

Je eli zakres komoacuterek ktoacutery chcesz skopiowa jest tabel (zdefiniowan przy u yciapolecenia WSTAWIANIETabeleTabela) ca e zadanie b dzie jeszcze atwiejsze Ka databela posiada swoj nazw (na przyk ad Tabela1) i automatycznie rozszerza si w miardodawania nowych wierszy

Sub CopyTable() Range(Tabela1)Copy Sheets(Arkusz2)Range(A1)End Sub

Je eli sproacutebujesz wykona procedur przedstawion powy ej przekonasz si e wiersznag oacutewka tabeli nie jest kopiowany poniewa obiekt Tabela1 nie obejmuje tegowiersza Je li chcesz aby wiersz nag oacutewka roacutewnie by kopiowany powiniene zmieniodwo anie do tabeli tak jak to zosta o przedstawione poni ej

Range(Tabela1[All])

Zaznaczanie komoacuterekdo ko ca wiersza lub kolumnyPrawdopodobnie bardzo cz sto u ywasz kombinacji klawiszy takich jak Ctrl+Shift+ czy Ctrl+Shift+ do zaznaczania zakresoacutew sk adaj cych si ze wszystkich komoacuterekod komoacuterki aktywnej a do ko ca kolumny czy wiersza Nie jest wi c chyba zaskoczenieme mo esz napisa makro ktoacutere b dzie zaznacza komoacuterki w podobny sposoacuteb

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 221

Do zaznaczania ca ego bloku komoacuterek mo esz u y w a ciwo ci CurrentRegion Ale copowiniene zrobi je eli chcesz zaznaczy powiedzmy tylko jedn kolumn z tegobloku komoacuterek Na szcz cie VBA pozwala na wykonywanie takich operacji Proceduraktoacuterej kod przedstawiam poni ej zaznacza zakres komoacuterek pocz wszy od bie cejaktywnej komoacuterki w doacute kolumny a do komoacuterki znajduj cej si o jeden wiersz powy ejpierwszej pustej komoacuterki tej kolumny Po zaznaczeniu zakresu mo esz przetwarza gow dowolny sposoacuteb mdash kopiowa komoacuterki przenosi je w inne miejsce arkusza zmieniaformatowanie i tak dalej

Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))SelectEnd Sub

Oczywi cie taki sam obszar mo esz roacutewnie zaznaczy r cznie Aby to zrobi powinienezaznaczy pierwsz komoacuterk nast pnie wcisn i przytrzyma klawisz Shift nacisnklawisz End i wreszcie nacisn klawisz (strza ka w doacute )

W przyk adzie wykorzystuj metod End obiektu ActiveCell ktoacutera zwraca obiekt typuRange Metoda End pobiera jeden argument okre laj cy kierunek w ktoacuterym zostaniewykonane zaznaczenie Argumentami tej metody mo e by dowolna ze sta ychprzedstawionych poni ej

xlUp

xlDown

xlToLeft

xlToRight

Pami taj e zaznaczanie zakresu nie jest potrzebne do jego przetwarzania Makroprzedstawione poni ej zmienia czcionk w komoacuterkach zmiennego zakresu (pojedynczakolumna) na pogrubion bez uprzedniego zaznaczenia zakresu

Sub MakeBold() Range(ActiveCell ActiveCellEnd(xlDown)) _ FontBold = TrueEnd Sub

Zaznaczanie ca ego wiersza lub ca ej kolumnyProcedura przedstawiona poni ej ilustruje sposoacuteb zaznaczania kolumny w ktoacuterej znajdujesi aktywna komoacuterka Makro wykorzystuje w a ciwo EntireColumn ktoacutera zwracaobiekt typu Range reprezentuj cy ca kolumn

Sub SelectColumn() ActiveCellEntireColumnSelectEnd Sub

Jak pewnie si spodziewasz w j zyku VBA dost pna jest roacutewnie w a ciwo EntireRowktoacutera zwraca obiekt typu Range reprezentuj cy ca y wiersz

Kup książkę Poleć książkę

222 Cz III Podstawy programowania

Przenoszenie zakresoacutewZazwyczaj aby przenie zakres komoacuterek zaznaczasz go wycinasz do schowka systemowegoi nast pnie wklejasz w inne miejsce Je eli u yjesz rejestratora makr do zapisania takiejoperacji przekonasz si e wygenerowany zostanie kod podobny do przedstawionegoponi ej

Sub MoveRange() Range(A1C6)Select SelectionCut Range(A10)Select ActiveSheetPasteEnd Sub

Podobnie jak podczas kopiowania komoacuterek takie rozwi zanie nie jest najbardziejefektywnym sposobem przenoszenia zakresu komoacuterek w inne miejsce W praktyce takoperacj mo esz wykona za pomoc procedury sk adaj cej si z jednego wiersza koduco prezentuj poni ej

Sub MoveRange2() Range(A1C6)Cut Range(A10)End Sub

Makro przedstawione powy ej korzysta z faktu e metoda Cut mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe przenoszonego zakresu Zwroacute roacutewnieuwag na fakt e podczas przenoszenia aden zakres komoacuterek nie jest zaznaczanyWska nik aktywnej komoacuterki przez ca y czas pozostaje w tym samym miejscu arkusza

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tliJednym z zada cz sto wykonywanych przez makra jest sprawdzanie poszczegoacutelnychkomoacuterek zakresu i wykonywanie okre lonych operacji na podstawie ich zawarto ci Takiemakra zazwyczaj wykorzystuj p tl For-Next za pomoc ktoacuterej przetwarzane s komoacuterkizakresu

Przyk ad przedstawiony ni ej ilustruje sposoacuteb przechodzenia kolejno przez wszystkiekomoacuterki danego zakresu W naszym przypadku przetwarzany jest aktualnie zaznaczonyzakres komoacuterek Zmienna obiektowa o nazwie Cell reprezentuje aktualnie przetwarzankomoacuterk W p tli For Each-Next znajduje si jedno polecenie ktoacutere sprawdza aktualnieprzetwarzan komoacuterk i zmienia jej czcionk na pogrubion je eli warto przechowywanaw komoacuterce jest dodatnia

Sub ProcessCells() Dim Cell As Range For Each Cell In Selection If CellValue gt 0 Then CellFontBold = True Next CellEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 223

Taka procedura dzia a poprawnie ale co si stanie je eli u ytkownik zaznaczy cakolumn lub ca y wiersz To wcale nie jest takie nieprawdopodobne bo przecie Excelpozwala na wykonywanie operacji na ca ych wierszach i kolumnach W takiej sytuacjiwykonanie makra mo e zaj naprawd du o czasu poniewa nasza p tla przetwarzaka d komoacuterk zaznaczonego zakresu a cznie z pustymi w jednej kolumnie komoacuterekjest a 1 048 576hellip Aby zatem nasze makro by o bardziej wydajne musimy je takzmodyfikowa eby przetwarzane by y tylko i wy cznie komoacuterki ktoacutere nie s puste

Procedura przedstawiona poni ej przetwarza wy cznie niepuste komoacuterki zaznaczonegozakresu dzi ki zastosowaniu metody SpecialCells (wi cej szczegoacute owych informacji natemat tej metody znajdziesz w pomocy systemowej VBA) Nasza procedura za pomocpolecenia Set tworzy dwa obiekty typu Range pierwszy z nich to podzakres komoacuterekzakresu wej ciowego zawieraj cy wy cznie komoacuterki z warto ciami sta ymi (na przyk adteksty warto ci liczbowe litera y i tak dalej) a drugi sk ada si z komoacuterek zawieraj cychformu y Procedura przetwarza tylko komoacuterki nale ce do tych podzakresoacutew co w efekciepowoduje pomini cie przetwarzania wszystkich pozosta ych pustych komoacuterek zakresuwej ciowego Sprytne prawda

Sub SkipBlanks() Dim ConstantCells As Range Dim FormulaCells As Range Dim cell As Range Ignoruj b dy On Error Resume Next

Przetwarzaj komoacuterki zawieraj ce warto ci sta e Set ConstantCells = Selection _ SpecialCells(xlConstants) For Each cell In ConstantCells If cellValue gt 0 Then cellFontBold = True End If Next cell

Przetwarzaj komoacuterki zawieraj ce formu y Set FormulaCells = Selection _ SpecialCells(xlFormulas) For Each cell In FormulaCells If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Procedura SkipBlanks dzia a tak samo szybko niezale nie od tego jaki zakres komoacuterekzaznaczy e Mo esz na przyk ad zaznaczy zakres sk adaj cy si z kilku komoacuterek zaznaczywszystkie kolumny w danym zakresie albo wszystkie wiersze w danym zakresie albonawet ca y arkusz Jak wida jest to ogromne usprawnienie w stosunku do oryginalnejprocedury ProcessCells ktoacuter omoacutewi em nieco wcze niej

Zwroacute uwag e w kodzie procedury u yli my polecenia

On Error Resume Next

Kup książkę Poleć książkę

224 Cz III Podstawy programowania

Polecenie to powoduje e Excel po prostu ignoruje b dy (inaczej moacutewi c je eli proacutebawykonania danego polecenia ko czy si b dem Excel ignoruje ten b d i po prostuprzechodzi do kolejnego polecenia wi cej szczegoacute owych informacji na temat obs ugib doacutew znajdziesz w rozdziale 12) W naszym przypadku zastosowanie polecenia OnError jest konieczne poniewa metoda SpecialCells generuje b d gdy adna komoacuterkanie spe nia podanego kryterium

Zastosowanie metody SpecialCells jest roacutewnowa ne z przej ciem na kart NARZ DZIAG OacuteWNE wybraniem polecenia Znajd i zaznaczPrzejd do mdash specjalnie znajduj cegosi w grupie opcji Edytowanie i nast pnie zaznaczeniem opcji Sta e lub Formu y Abyprzekona si jak to dzia a podczas wykonywania tych polece powiniene u yrejestratora makr i zaznacza roacute ne opcje

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tli(cz II)A teraz ci g dalszy naszej opowie ci W tym punkcie przedstawi inny sposoacuteb efektywnegoprzetwarzania komoacuterek znajduj cych si w zaznaczonym zakresie Tym razem procedurab dzie korzysta a z w a ciwo ci UsedRange ktoacutera zwraca obiekt typu Range reprezentuj cyu ywany zakres arkusza Procedura korzysta roacutewnie z metody Intersect ktoacutera zwracaobiekt typu Range zawieraj cy komoacuterki b d ce cz ci wspoacuteln dwoacutech zakresoacutew

Poni ej przedstawiam zmodyfikowan wersj procedury SkipBlanks omawianejw poprzednim punkcie

Sub SkipBlanks2() Dim WorkRange As Range Dim cell As Range Set WorkRange = Intersect(Selection ActiveSheetUsedRange) For Each cell In WorkRange If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Zmienna obiektowa WorkRange zawiera komoacuterki ktoacutere s cz ci wspoacuteln zakresuzaznaczonego przez u ytkownika oraz zakresu u ywanych komoacuterek arkusza Je lizatem u ytkownik zaznaczy ca kolumn zmienna WorkRange b dzie zawiera a tylkokomoacuterki ktoacutere znajduj si jednocze nie w zaznaczonej kolumnie i w u ywanymzakresie arkusza Jak wida jest to bardzo szybka i efektywna metoda pozwalaj ca naunikni cie przetwarzania komoacuterek znajduj cych si poza zakresem u ywanychkomoacuterek arkusza

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 225

Wprowadzanie warto ci do komoacuterkiNa rysunku 142 pokazuj w jaki sposoacuteb mo esz u y funkcji InputBox j zyka VBA dopobierania od u ytkownika warto ci ktoacutera nast pnie mo e zosta zapisana w wybranejkomoacuterce W procedurze przedstawionej poni ej demonstruj jak poprosi u ytkownikao podanie warto ci i wstawi j do komoacuterki A1 aktywnego arkusza (i to wszystkoza pomoc jednego polecenia)

Sub GetValue() Range(A1)Value = InputBox( _ Wprowad warto dla komoacuterki A1)End Sub

Rysunek 142Zastosowaniefunkcji Input-

Box do pobie-rania warto ci

od u ytkownika

Przedstawiona procedura mo e jednak sprawia pewien problem Je eli u ytkowniknaci nie w oknie dialogowym przycisk Cancel procedura usunie wszelkie dane juznajduj ce si w komoacuterce A1 a takie zachowanie nie jest zbyt dobr praktyk programistyczn Naci ni cie przycisku Cancel powinno po prostu usuwa z ekranu okno dialogowe bezwykonywania adnych dodatkowych operacji

Makro przedstawione poni ej ilustruje znacznie lepsze podej cie do takiego zagadnieniai do zapami tania warto ci wprowadzonej przez u ytkownika wykorzystuje zmienn xJe eli zmienna zawiera co innego ni pusty ci g znakoacutew (czyli kiedy u ytkownikwprowadzi jak warto ) warto zmiennej jest zapisywana w komoacuterce A1 W przeciwnymprzypadku procedura ko czy dzia anie nie wykonuj c adnych dodatkowych operacji

Sub GetValue2() Dim x as Variant x = InputBox(Wprowad warto dla komoacuterki A1) If x ltgt Then Range(A1)Value = xEnd Sub

Zmienna x zosta a zdefiniowana jako zmienna typu Variant poniewa jej warto cimo e by warto albo pusty ci g znakoacutew (je eli u ytkownik naci nie przycisk Cancel)

Kup książkę Poleć książkę

226 Cz III Podstawy programowania

Okre lanie typu zaznaczonego zakresuJe eli zadaniem Twojego makra b dzie przetwarzanie zaznaczonego zakresu takiemakro musi mie zdolno sprawdzenia czy przed jego wywo aniem u ytkownikrzeczywi cie zaznaczy zakres komoacuterek W przeciwnym razie je eli przed wywo aniemmakra zaznaczony zostanie inny obiekt (na przyk ad wykres lub kszta t) proacuteba wykonaniamakra najprawdopodobniej zako czy si niepowodzeniem Polecenie przedstawioneponi ej wykorzystuje funkcj TypeName j zyka VBA do wy wietlania na ekranie typuaktualnie zaznaczonego obiektu

MsgBox TypeName(Selection)

Je eli aktualnie zaznaczony jest obiekt typu Range wykonanie takiego polecenia spowodujewy wietlenie s owa Range Je li Twoje makro dzia a tylko z zakresami komoacuterek mo eszu y polecenia If do sprawdzenia czy aktualnie zaznaczony obiekt to zakres (obiekttypu Range) Procedura przedstawiona poni ej sprawdza typ zaznaczonego obiektui je eli nie jest to obiekt typu Range na ekranie wy wietlany jest odpowiedni komunikati procedura ko czy dzia anie

Sub CheckSelection() If TypeName(Selection) ltgt Range Then MsgBox Zaznacz zakres komoacuterek Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Identyfikowanie zaznacze wielokrotnychJak pami tasz Excel pozwala na jednoczesne zaznaczanie wielu obiektoacutew Aby to zrobi powiniene podczas zaznaczania obiektoacutew lub zakresoacutew trzyma wci ni ty klawisz CtrlZaznaczenia wielokrotne mog by przyczyn problemoacutew z wykonywaniem niektoacuterychmakr Przyk adowo nie mo esz skopiowa zakresu komoacuterek ktoacutery zosta utworzonypoprzez wiele zaznacze nieci g ych zakresoacutew komoacuterek Je eli sproacutebujesz wykonatak operacj Excel wy wietli na ekranie komunikat przedstawiony na rysunku 143

Makro przedstawione ni ej pokazuje w jaki sposoacuteb mo esz sprawdzi czy u ytkownikdokona zaznaczenia wielokrotnego i na tej podstawie wykona odpowiedni operacj

Sub MultipleSelection() If SelectionAreasCount gt 1 Then MsgBox Zaznaczenia wielokrotne nie s dozwolone Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Przedstawiona procedura wykorzystuje metod Areas ktoacutera zwraca kolekcj wszystkichzakresoacutew w danym zaznaczeniu W a ciwo Count zwraca liczb obiektoacutew tej kolekcji

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 227

Rysunek 143Excel nie lubi

kiedy proacutebujeszkopiowa nie-ci g e zakresy

komoacuterek

Zmiana ustawie ExcelaChyba najbardziej u ytecznymi makrami s proste procedury ktoacutere zmieniaj jednolub kilka ustawie Excela Je li na przyk ad dojdziesz do wniosku e bardzo cz stoprzywo ujesz na ekran okno opcji programu Excel i zmieniasz jakie ustawienie takaoperacja z pewno ci b dzie bardzo dobrym kandydatem do napisania makraoszcz dzaj cego Twoacutej czas i u atwiaj cego zmian takiego ustawienia

W tym podrozdziale zaprezentuj dwa przyk ady procedur ktoacutere pokazuj w jakisposoacuteb mo na zmienia ustawienia Excela Ogoacutelne zasady dzia ania tych procedurmo esz z powodzeniem zastosowa do napisania w asnych makr zmieniaj cych inneustawienia Excela

Zmiana ustawie logicznych(opcje typu Boolean)Podobnie jak wy cznik wiat a opcje logiczne (typu Boolean) mog by albo w czonealbo wy czone Mo esz na przyk ad utworzy makro ktoacutere b dzie w cza o lub wy cza owy wietlanie podzia u arkusza na strony Kiedy wydrukujesz arkusz (lub skorzystaszz trybu podgl du wydruku) Excel wy wietla na arkuszu przerywane linie reprezentuj cemiejsca podzia u arkusza na strony wydruku Niektoacuterych u ytkownikoacutew (w czniez autorem tej ksi ki) takie zachowanie Excela irytuje Niestety jedynym sposobemwy czenia wy wietlania podzia u arkusza na strony jest otwarcie okna dialogowego Opcjeprogramu Excel przej cie na kart Zaawansowane a nast pnie przewijanie zawarto ci tejkarty a do odszukania opcji Poka podzia y stron Je eli podczas wy czania tej opcjikorzysta e z rejestratora makr przekonasz si e Excel generuje poni szy kod

Kup książkę Poleć książkę

228 Cz III Podstawy programowania

ActiveSheetDisplayPageBreaks = False

Z drugiej strony je eli podczas rejestrowania makra podzia y stron nie s widoczneExcel generuje taki kod

ActiveSheetDisplayPageBreaks = True

Takie informacje mog doprowadzi do wniosku e b dziesz musia napisa a dwamakra mdash jedno do w czania podgl du podzia u stron a drugie do jego wy czaniaNa szcz cie to nieprawda Procedura przedstawiona poni ej wykorzystuje operatorNot do zmiany warto ci logicznej True na False i odwrotnie Wykonanie proceduryTogglePageBreaks to prosty sposoacuteb na cykliczne w czanie i wy czanie podgl du podzia ustron arkusza

Sub TogglePageBreaks() On Error Resume Next ActiveSheetDisplayPageBreaks = Not _ ActiveSheetDisplayPageBreaksEnd Sub

Pierwsze polecenie informuje Excel e powinien ignorowa ewentualne b dy Przyk adowopodzia y stron nie s wy wietlane na arkuszach wykresoacutew Kiedy wprowadzisz takiepolecenie i sproacutebujesz wykona t procedur dla arkusza wykresu na ekranie nie pojawisi komunikat o b dzie

Techniki u ytej w procedurze TogglePageBreaks mo esz u ywa do zmiany dowolnychopcji logicznych (czyli takich ktoacuterych warto ciami s True albo False)

Zmiana innych opcji (typu non-Boolean)Do zmiany opcji ktoacutere nie s typu logicznego mo esz u ywa konstrukcji Select CaseW przyk adzie przedstawionym poni ej zmieniam tryb przeliczania skoroszytu z r cznegona automatyczny i odwrotnie i nakazuj wy wietlenie na ekranie komunikatu opisuj cegoaktualny tryb przeliczania arkusza

Sub ToggleCalcMode() Select Case ApplicationCalculation Case xlManual ApplicationCalculation = xlCalculationAutomatic MsgBox Automatyczne przeliczanie skoroszytu Case xlAutomatic ApplicationCalculation = xlCalculationManual MsgBox R czne przeliczanie skoroszytu End SelectEnd Sub

Techniki u ytej w procedurze ToggleCalcMode mo esz u ywa do zmiany dowolnychopcji ktoacutere nie posiadaj warto ci logicznych

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 16: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 221

Do zaznaczania ca ego bloku komoacuterek mo esz u y w a ciwo ci CurrentRegion Ale copowiniene zrobi je eli chcesz zaznaczy powiedzmy tylko jedn kolumn z tegobloku komoacuterek Na szcz cie VBA pozwala na wykonywanie takich operacji Proceduraktoacuterej kod przedstawiam poni ej zaznacza zakres komoacuterek pocz wszy od bie cejaktywnej komoacuterki w doacute kolumny a do komoacuterki znajduj cej si o jeden wiersz powy ejpierwszej pustej komoacuterki tej kolumny Po zaznaczeniu zakresu mo esz przetwarza gow dowolny sposoacuteb mdash kopiowa komoacuterki przenosi je w inne miejsce arkusza zmieniaformatowanie i tak dalej

Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))SelectEnd Sub

Oczywi cie taki sam obszar mo esz roacutewnie zaznaczy r cznie Aby to zrobi powinienezaznaczy pierwsz komoacuterk nast pnie wcisn i przytrzyma klawisz Shift nacisnklawisz End i wreszcie nacisn klawisz (strza ka w doacute )

W przyk adzie wykorzystuj metod End obiektu ActiveCell ktoacutera zwraca obiekt typuRange Metoda End pobiera jeden argument okre laj cy kierunek w ktoacuterym zostaniewykonane zaznaczenie Argumentami tej metody mo e by dowolna ze sta ychprzedstawionych poni ej

xlUp

xlDown

xlToLeft

xlToRight

Pami taj e zaznaczanie zakresu nie jest potrzebne do jego przetwarzania Makroprzedstawione poni ej zmienia czcionk w komoacuterkach zmiennego zakresu (pojedynczakolumna) na pogrubion bez uprzedniego zaznaczenia zakresu

Sub MakeBold() Range(ActiveCell ActiveCellEnd(xlDown)) _ FontBold = TrueEnd Sub

Zaznaczanie ca ego wiersza lub ca ej kolumnyProcedura przedstawiona poni ej ilustruje sposoacuteb zaznaczania kolumny w ktoacuterej znajdujesi aktywna komoacuterka Makro wykorzystuje w a ciwo EntireColumn ktoacutera zwracaobiekt typu Range reprezentuj cy ca kolumn

Sub SelectColumn() ActiveCellEntireColumnSelectEnd Sub

Jak pewnie si spodziewasz w j zyku VBA dost pna jest roacutewnie w a ciwo EntireRowktoacutera zwraca obiekt typu Range reprezentuj cy ca y wiersz

Kup książkę Poleć książkę

222 Cz III Podstawy programowania

Przenoszenie zakresoacutewZazwyczaj aby przenie zakres komoacuterek zaznaczasz go wycinasz do schowka systemowegoi nast pnie wklejasz w inne miejsce Je eli u yjesz rejestratora makr do zapisania takiejoperacji przekonasz si e wygenerowany zostanie kod podobny do przedstawionegoponi ej

Sub MoveRange() Range(A1C6)Select SelectionCut Range(A10)Select ActiveSheetPasteEnd Sub

Podobnie jak podczas kopiowania komoacuterek takie rozwi zanie nie jest najbardziejefektywnym sposobem przenoszenia zakresu komoacuterek w inne miejsce W praktyce takoperacj mo esz wykona za pomoc procedury sk adaj cej si z jednego wiersza koduco prezentuj poni ej

Sub MoveRange2() Range(A1C6)Cut Range(A10)End Sub

Makro przedstawione powy ej korzysta z faktu e metoda Cut mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe przenoszonego zakresu Zwroacute roacutewnieuwag na fakt e podczas przenoszenia aden zakres komoacuterek nie jest zaznaczanyWska nik aktywnej komoacuterki przez ca y czas pozostaje w tym samym miejscu arkusza

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tliJednym z zada cz sto wykonywanych przez makra jest sprawdzanie poszczegoacutelnychkomoacuterek zakresu i wykonywanie okre lonych operacji na podstawie ich zawarto ci Takiemakra zazwyczaj wykorzystuj p tl For-Next za pomoc ktoacuterej przetwarzane s komoacuterkizakresu

Przyk ad przedstawiony ni ej ilustruje sposoacuteb przechodzenia kolejno przez wszystkiekomoacuterki danego zakresu W naszym przypadku przetwarzany jest aktualnie zaznaczonyzakres komoacuterek Zmienna obiektowa o nazwie Cell reprezentuje aktualnie przetwarzankomoacuterk W p tli For Each-Next znajduje si jedno polecenie ktoacutere sprawdza aktualnieprzetwarzan komoacuterk i zmienia jej czcionk na pogrubion je eli warto przechowywanaw komoacuterce jest dodatnia

Sub ProcessCells() Dim Cell As Range For Each Cell In Selection If CellValue gt 0 Then CellFontBold = True Next CellEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 223

Taka procedura dzia a poprawnie ale co si stanie je eli u ytkownik zaznaczy cakolumn lub ca y wiersz To wcale nie jest takie nieprawdopodobne bo przecie Excelpozwala na wykonywanie operacji na ca ych wierszach i kolumnach W takiej sytuacjiwykonanie makra mo e zaj naprawd du o czasu poniewa nasza p tla przetwarzaka d komoacuterk zaznaczonego zakresu a cznie z pustymi w jednej kolumnie komoacuterekjest a 1 048 576hellip Aby zatem nasze makro by o bardziej wydajne musimy je takzmodyfikowa eby przetwarzane by y tylko i wy cznie komoacuterki ktoacutere nie s puste

Procedura przedstawiona poni ej przetwarza wy cznie niepuste komoacuterki zaznaczonegozakresu dzi ki zastosowaniu metody SpecialCells (wi cej szczegoacute owych informacji natemat tej metody znajdziesz w pomocy systemowej VBA) Nasza procedura za pomocpolecenia Set tworzy dwa obiekty typu Range pierwszy z nich to podzakres komoacuterekzakresu wej ciowego zawieraj cy wy cznie komoacuterki z warto ciami sta ymi (na przyk adteksty warto ci liczbowe litera y i tak dalej) a drugi sk ada si z komoacuterek zawieraj cychformu y Procedura przetwarza tylko komoacuterki nale ce do tych podzakresoacutew co w efekciepowoduje pomini cie przetwarzania wszystkich pozosta ych pustych komoacuterek zakresuwej ciowego Sprytne prawda

Sub SkipBlanks() Dim ConstantCells As Range Dim FormulaCells As Range Dim cell As Range Ignoruj b dy On Error Resume Next

Przetwarzaj komoacuterki zawieraj ce warto ci sta e Set ConstantCells = Selection _ SpecialCells(xlConstants) For Each cell In ConstantCells If cellValue gt 0 Then cellFontBold = True End If Next cell

Przetwarzaj komoacuterki zawieraj ce formu y Set FormulaCells = Selection _ SpecialCells(xlFormulas) For Each cell In FormulaCells If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Procedura SkipBlanks dzia a tak samo szybko niezale nie od tego jaki zakres komoacuterekzaznaczy e Mo esz na przyk ad zaznaczy zakres sk adaj cy si z kilku komoacuterek zaznaczywszystkie kolumny w danym zakresie albo wszystkie wiersze w danym zakresie albonawet ca y arkusz Jak wida jest to ogromne usprawnienie w stosunku do oryginalnejprocedury ProcessCells ktoacuter omoacutewi em nieco wcze niej

Zwroacute uwag e w kodzie procedury u yli my polecenia

On Error Resume Next

Kup książkę Poleć książkę

224 Cz III Podstawy programowania

Polecenie to powoduje e Excel po prostu ignoruje b dy (inaczej moacutewi c je eli proacutebawykonania danego polecenia ko czy si b dem Excel ignoruje ten b d i po prostuprzechodzi do kolejnego polecenia wi cej szczegoacute owych informacji na temat obs ugib doacutew znajdziesz w rozdziale 12) W naszym przypadku zastosowanie polecenia OnError jest konieczne poniewa metoda SpecialCells generuje b d gdy adna komoacuterkanie spe nia podanego kryterium

Zastosowanie metody SpecialCells jest roacutewnowa ne z przej ciem na kart NARZ DZIAG OacuteWNE wybraniem polecenia Znajd i zaznaczPrzejd do mdash specjalnie znajduj cegosi w grupie opcji Edytowanie i nast pnie zaznaczeniem opcji Sta e lub Formu y Abyprzekona si jak to dzia a podczas wykonywania tych polece powiniene u yrejestratora makr i zaznacza roacute ne opcje

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tli(cz II)A teraz ci g dalszy naszej opowie ci W tym punkcie przedstawi inny sposoacuteb efektywnegoprzetwarzania komoacuterek znajduj cych si w zaznaczonym zakresie Tym razem procedurab dzie korzysta a z w a ciwo ci UsedRange ktoacutera zwraca obiekt typu Range reprezentuj cyu ywany zakres arkusza Procedura korzysta roacutewnie z metody Intersect ktoacutera zwracaobiekt typu Range zawieraj cy komoacuterki b d ce cz ci wspoacuteln dwoacutech zakresoacutew

Poni ej przedstawiam zmodyfikowan wersj procedury SkipBlanks omawianejw poprzednim punkcie

Sub SkipBlanks2() Dim WorkRange As Range Dim cell As Range Set WorkRange = Intersect(Selection ActiveSheetUsedRange) For Each cell In WorkRange If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Zmienna obiektowa WorkRange zawiera komoacuterki ktoacutere s cz ci wspoacuteln zakresuzaznaczonego przez u ytkownika oraz zakresu u ywanych komoacuterek arkusza Je lizatem u ytkownik zaznaczy ca kolumn zmienna WorkRange b dzie zawiera a tylkokomoacuterki ktoacutere znajduj si jednocze nie w zaznaczonej kolumnie i w u ywanymzakresie arkusza Jak wida jest to bardzo szybka i efektywna metoda pozwalaj ca naunikni cie przetwarzania komoacuterek znajduj cych si poza zakresem u ywanychkomoacuterek arkusza

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 225

Wprowadzanie warto ci do komoacuterkiNa rysunku 142 pokazuj w jaki sposoacuteb mo esz u y funkcji InputBox j zyka VBA dopobierania od u ytkownika warto ci ktoacutera nast pnie mo e zosta zapisana w wybranejkomoacuterce W procedurze przedstawionej poni ej demonstruj jak poprosi u ytkownikao podanie warto ci i wstawi j do komoacuterki A1 aktywnego arkusza (i to wszystkoza pomoc jednego polecenia)

Sub GetValue() Range(A1)Value = InputBox( _ Wprowad warto dla komoacuterki A1)End Sub

Rysunek 142Zastosowaniefunkcji Input-

Box do pobie-rania warto ci

od u ytkownika

Przedstawiona procedura mo e jednak sprawia pewien problem Je eli u ytkowniknaci nie w oknie dialogowym przycisk Cancel procedura usunie wszelkie dane juznajduj ce si w komoacuterce A1 a takie zachowanie nie jest zbyt dobr praktyk programistyczn Naci ni cie przycisku Cancel powinno po prostu usuwa z ekranu okno dialogowe bezwykonywania adnych dodatkowych operacji

Makro przedstawione poni ej ilustruje znacznie lepsze podej cie do takiego zagadnieniai do zapami tania warto ci wprowadzonej przez u ytkownika wykorzystuje zmienn xJe eli zmienna zawiera co innego ni pusty ci g znakoacutew (czyli kiedy u ytkownikwprowadzi jak warto ) warto zmiennej jest zapisywana w komoacuterce A1 W przeciwnymprzypadku procedura ko czy dzia anie nie wykonuj c adnych dodatkowych operacji

Sub GetValue2() Dim x as Variant x = InputBox(Wprowad warto dla komoacuterki A1) If x ltgt Then Range(A1)Value = xEnd Sub

Zmienna x zosta a zdefiniowana jako zmienna typu Variant poniewa jej warto cimo e by warto albo pusty ci g znakoacutew (je eli u ytkownik naci nie przycisk Cancel)

Kup książkę Poleć książkę

226 Cz III Podstawy programowania

Okre lanie typu zaznaczonego zakresuJe eli zadaniem Twojego makra b dzie przetwarzanie zaznaczonego zakresu takiemakro musi mie zdolno sprawdzenia czy przed jego wywo aniem u ytkownikrzeczywi cie zaznaczy zakres komoacuterek W przeciwnym razie je eli przed wywo aniemmakra zaznaczony zostanie inny obiekt (na przyk ad wykres lub kszta t) proacuteba wykonaniamakra najprawdopodobniej zako czy si niepowodzeniem Polecenie przedstawioneponi ej wykorzystuje funkcj TypeName j zyka VBA do wy wietlania na ekranie typuaktualnie zaznaczonego obiektu

MsgBox TypeName(Selection)

Je eli aktualnie zaznaczony jest obiekt typu Range wykonanie takiego polecenia spowodujewy wietlenie s owa Range Je li Twoje makro dzia a tylko z zakresami komoacuterek mo eszu y polecenia If do sprawdzenia czy aktualnie zaznaczony obiekt to zakres (obiekttypu Range) Procedura przedstawiona poni ej sprawdza typ zaznaczonego obiektui je eli nie jest to obiekt typu Range na ekranie wy wietlany jest odpowiedni komunikati procedura ko czy dzia anie

Sub CheckSelection() If TypeName(Selection) ltgt Range Then MsgBox Zaznacz zakres komoacuterek Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Identyfikowanie zaznacze wielokrotnychJak pami tasz Excel pozwala na jednoczesne zaznaczanie wielu obiektoacutew Aby to zrobi powiniene podczas zaznaczania obiektoacutew lub zakresoacutew trzyma wci ni ty klawisz CtrlZaznaczenia wielokrotne mog by przyczyn problemoacutew z wykonywaniem niektoacuterychmakr Przyk adowo nie mo esz skopiowa zakresu komoacuterek ktoacutery zosta utworzonypoprzez wiele zaznacze nieci g ych zakresoacutew komoacuterek Je eli sproacutebujesz wykonatak operacj Excel wy wietli na ekranie komunikat przedstawiony na rysunku 143

Makro przedstawione ni ej pokazuje w jaki sposoacuteb mo esz sprawdzi czy u ytkownikdokona zaznaczenia wielokrotnego i na tej podstawie wykona odpowiedni operacj

Sub MultipleSelection() If SelectionAreasCount gt 1 Then MsgBox Zaznaczenia wielokrotne nie s dozwolone Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Przedstawiona procedura wykorzystuje metod Areas ktoacutera zwraca kolekcj wszystkichzakresoacutew w danym zaznaczeniu W a ciwo Count zwraca liczb obiektoacutew tej kolekcji

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 227

Rysunek 143Excel nie lubi

kiedy proacutebujeszkopiowa nie-ci g e zakresy

komoacuterek

Zmiana ustawie ExcelaChyba najbardziej u ytecznymi makrami s proste procedury ktoacutere zmieniaj jednolub kilka ustawie Excela Je li na przyk ad dojdziesz do wniosku e bardzo cz stoprzywo ujesz na ekran okno opcji programu Excel i zmieniasz jakie ustawienie takaoperacja z pewno ci b dzie bardzo dobrym kandydatem do napisania makraoszcz dzaj cego Twoacutej czas i u atwiaj cego zmian takiego ustawienia

W tym podrozdziale zaprezentuj dwa przyk ady procedur ktoacutere pokazuj w jakisposoacuteb mo na zmienia ustawienia Excela Ogoacutelne zasady dzia ania tych procedurmo esz z powodzeniem zastosowa do napisania w asnych makr zmieniaj cych inneustawienia Excela

Zmiana ustawie logicznych(opcje typu Boolean)Podobnie jak wy cznik wiat a opcje logiczne (typu Boolean) mog by albo w czonealbo wy czone Mo esz na przyk ad utworzy makro ktoacutere b dzie w cza o lub wy cza owy wietlanie podzia u arkusza na strony Kiedy wydrukujesz arkusz (lub skorzystaszz trybu podgl du wydruku) Excel wy wietla na arkuszu przerywane linie reprezentuj cemiejsca podzia u arkusza na strony wydruku Niektoacuterych u ytkownikoacutew (w czniez autorem tej ksi ki) takie zachowanie Excela irytuje Niestety jedynym sposobemwy czenia wy wietlania podzia u arkusza na strony jest otwarcie okna dialogowego Opcjeprogramu Excel przej cie na kart Zaawansowane a nast pnie przewijanie zawarto ci tejkarty a do odszukania opcji Poka podzia y stron Je eli podczas wy czania tej opcjikorzysta e z rejestratora makr przekonasz si e Excel generuje poni szy kod

Kup książkę Poleć książkę

228 Cz III Podstawy programowania

ActiveSheetDisplayPageBreaks = False

Z drugiej strony je eli podczas rejestrowania makra podzia y stron nie s widoczneExcel generuje taki kod

ActiveSheetDisplayPageBreaks = True

Takie informacje mog doprowadzi do wniosku e b dziesz musia napisa a dwamakra mdash jedno do w czania podgl du podzia u stron a drugie do jego wy czaniaNa szcz cie to nieprawda Procedura przedstawiona poni ej wykorzystuje operatorNot do zmiany warto ci logicznej True na False i odwrotnie Wykonanie proceduryTogglePageBreaks to prosty sposoacuteb na cykliczne w czanie i wy czanie podgl du podzia ustron arkusza

Sub TogglePageBreaks() On Error Resume Next ActiveSheetDisplayPageBreaks = Not _ ActiveSheetDisplayPageBreaksEnd Sub

Pierwsze polecenie informuje Excel e powinien ignorowa ewentualne b dy Przyk adowopodzia y stron nie s wy wietlane na arkuszach wykresoacutew Kiedy wprowadzisz takiepolecenie i sproacutebujesz wykona t procedur dla arkusza wykresu na ekranie nie pojawisi komunikat o b dzie

Techniki u ytej w procedurze TogglePageBreaks mo esz u ywa do zmiany dowolnychopcji logicznych (czyli takich ktoacuterych warto ciami s True albo False)

Zmiana innych opcji (typu non-Boolean)Do zmiany opcji ktoacutere nie s typu logicznego mo esz u ywa konstrukcji Select CaseW przyk adzie przedstawionym poni ej zmieniam tryb przeliczania skoroszytu z r cznegona automatyczny i odwrotnie i nakazuj wy wietlenie na ekranie komunikatu opisuj cegoaktualny tryb przeliczania arkusza

Sub ToggleCalcMode() Select Case ApplicationCalculation Case xlManual ApplicationCalculation = xlCalculationAutomatic MsgBox Automatyczne przeliczanie skoroszytu Case xlAutomatic ApplicationCalculation = xlCalculationManual MsgBox R czne przeliczanie skoroszytu End SelectEnd Sub

Techniki u ytej w procedurze ToggleCalcMode mo esz u ywa do zmiany dowolnychopcji ktoacutere nie posiadaj warto ci logicznych

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 17: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

222 Cz III Podstawy programowania

Przenoszenie zakresoacutewZazwyczaj aby przenie zakres komoacuterek zaznaczasz go wycinasz do schowka systemowegoi nast pnie wklejasz w inne miejsce Je eli u yjesz rejestratora makr do zapisania takiejoperacji przekonasz si e wygenerowany zostanie kod podobny do przedstawionegoponi ej

Sub MoveRange() Range(A1C6)Select SelectionCut Range(A10)Select ActiveSheetPasteEnd Sub

Podobnie jak podczas kopiowania komoacuterek takie rozwi zanie nie jest najbardziejefektywnym sposobem przenoszenia zakresu komoacuterek w inne miejsce W praktyce takoperacj mo esz wykona za pomoc procedury sk adaj cej si z jednego wiersza koduco prezentuj poni ej

Sub MoveRange2() Range(A1C6)Cut Range(A10)End Sub

Makro przedstawione powy ej korzysta z faktu e metoda Cut mo e u ywa argumentuwywo ania reprezentuj cego miejsce docelowe przenoszonego zakresu Zwroacute roacutewnieuwag na fakt e podczas przenoszenia aden zakres komoacuterek nie jest zaznaczanyWska nik aktywnej komoacuterki przez ca y czas pozostaje w tym samym miejscu arkusza

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tliJednym z zada cz sto wykonywanych przez makra jest sprawdzanie poszczegoacutelnychkomoacuterek zakresu i wykonywanie okre lonych operacji na podstawie ich zawarto ci Takiemakra zazwyczaj wykorzystuj p tl For-Next za pomoc ktoacuterej przetwarzane s komoacuterkizakresu

Przyk ad przedstawiony ni ej ilustruje sposoacuteb przechodzenia kolejno przez wszystkiekomoacuterki danego zakresu W naszym przypadku przetwarzany jest aktualnie zaznaczonyzakres komoacuterek Zmienna obiektowa o nazwie Cell reprezentuje aktualnie przetwarzankomoacuterk W p tli For Each-Next znajduje si jedno polecenie ktoacutere sprawdza aktualnieprzetwarzan komoacuterk i zmienia jej czcionk na pogrubion je eli warto przechowywanaw komoacuterce jest dodatnia

Sub ProcessCells() Dim Cell As Range For Each Cell In Selection If CellValue gt 0 Then CellFontBold = True Next CellEnd Sub

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 223

Taka procedura dzia a poprawnie ale co si stanie je eli u ytkownik zaznaczy cakolumn lub ca y wiersz To wcale nie jest takie nieprawdopodobne bo przecie Excelpozwala na wykonywanie operacji na ca ych wierszach i kolumnach W takiej sytuacjiwykonanie makra mo e zaj naprawd du o czasu poniewa nasza p tla przetwarzaka d komoacuterk zaznaczonego zakresu a cznie z pustymi w jednej kolumnie komoacuterekjest a 1 048 576hellip Aby zatem nasze makro by o bardziej wydajne musimy je takzmodyfikowa eby przetwarzane by y tylko i wy cznie komoacuterki ktoacutere nie s puste

Procedura przedstawiona poni ej przetwarza wy cznie niepuste komoacuterki zaznaczonegozakresu dzi ki zastosowaniu metody SpecialCells (wi cej szczegoacute owych informacji natemat tej metody znajdziesz w pomocy systemowej VBA) Nasza procedura za pomocpolecenia Set tworzy dwa obiekty typu Range pierwszy z nich to podzakres komoacuterekzakresu wej ciowego zawieraj cy wy cznie komoacuterki z warto ciami sta ymi (na przyk adteksty warto ci liczbowe litera y i tak dalej) a drugi sk ada si z komoacuterek zawieraj cychformu y Procedura przetwarza tylko komoacuterki nale ce do tych podzakresoacutew co w efekciepowoduje pomini cie przetwarzania wszystkich pozosta ych pustych komoacuterek zakresuwej ciowego Sprytne prawda

Sub SkipBlanks() Dim ConstantCells As Range Dim FormulaCells As Range Dim cell As Range Ignoruj b dy On Error Resume Next

Przetwarzaj komoacuterki zawieraj ce warto ci sta e Set ConstantCells = Selection _ SpecialCells(xlConstants) For Each cell In ConstantCells If cellValue gt 0 Then cellFontBold = True End If Next cell

Przetwarzaj komoacuterki zawieraj ce formu y Set FormulaCells = Selection _ SpecialCells(xlFormulas) For Each cell In FormulaCells If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Procedura SkipBlanks dzia a tak samo szybko niezale nie od tego jaki zakres komoacuterekzaznaczy e Mo esz na przyk ad zaznaczy zakres sk adaj cy si z kilku komoacuterek zaznaczywszystkie kolumny w danym zakresie albo wszystkie wiersze w danym zakresie albonawet ca y arkusz Jak wida jest to ogromne usprawnienie w stosunku do oryginalnejprocedury ProcessCells ktoacuter omoacutewi em nieco wcze niej

Zwroacute uwag e w kodzie procedury u yli my polecenia

On Error Resume Next

Kup książkę Poleć książkę

224 Cz III Podstawy programowania

Polecenie to powoduje e Excel po prostu ignoruje b dy (inaczej moacutewi c je eli proacutebawykonania danego polecenia ko czy si b dem Excel ignoruje ten b d i po prostuprzechodzi do kolejnego polecenia wi cej szczegoacute owych informacji na temat obs ugib doacutew znajdziesz w rozdziale 12) W naszym przypadku zastosowanie polecenia OnError jest konieczne poniewa metoda SpecialCells generuje b d gdy adna komoacuterkanie spe nia podanego kryterium

Zastosowanie metody SpecialCells jest roacutewnowa ne z przej ciem na kart NARZ DZIAG OacuteWNE wybraniem polecenia Znajd i zaznaczPrzejd do mdash specjalnie znajduj cegosi w grupie opcji Edytowanie i nast pnie zaznaczeniem opcji Sta e lub Formu y Abyprzekona si jak to dzia a podczas wykonywania tych polece powiniene u yrejestratora makr i zaznacza roacute ne opcje

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tli(cz II)A teraz ci g dalszy naszej opowie ci W tym punkcie przedstawi inny sposoacuteb efektywnegoprzetwarzania komoacuterek znajduj cych si w zaznaczonym zakresie Tym razem procedurab dzie korzysta a z w a ciwo ci UsedRange ktoacutera zwraca obiekt typu Range reprezentuj cyu ywany zakres arkusza Procedura korzysta roacutewnie z metody Intersect ktoacutera zwracaobiekt typu Range zawieraj cy komoacuterki b d ce cz ci wspoacuteln dwoacutech zakresoacutew

Poni ej przedstawiam zmodyfikowan wersj procedury SkipBlanks omawianejw poprzednim punkcie

Sub SkipBlanks2() Dim WorkRange As Range Dim cell As Range Set WorkRange = Intersect(Selection ActiveSheetUsedRange) For Each cell In WorkRange If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Zmienna obiektowa WorkRange zawiera komoacuterki ktoacutere s cz ci wspoacuteln zakresuzaznaczonego przez u ytkownika oraz zakresu u ywanych komoacuterek arkusza Je lizatem u ytkownik zaznaczy ca kolumn zmienna WorkRange b dzie zawiera a tylkokomoacuterki ktoacutere znajduj si jednocze nie w zaznaczonej kolumnie i w u ywanymzakresie arkusza Jak wida jest to bardzo szybka i efektywna metoda pozwalaj ca naunikni cie przetwarzania komoacuterek znajduj cych si poza zakresem u ywanychkomoacuterek arkusza

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 225

Wprowadzanie warto ci do komoacuterkiNa rysunku 142 pokazuj w jaki sposoacuteb mo esz u y funkcji InputBox j zyka VBA dopobierania od u ytkownika warto ci ktoacutera nast pnie mo e zosta zapisana w wybranejkomoacuterce W procedurze przedstawionej poni ej demonstruj jak poprosi u ytkownikao podanie warto ci i wstawi j do komoacuterki A1 aktywnego arkusza (i to wszystkoza pomoc jednego polecenia)

Sub GetValue() Range(A1)Value = InputBox( _ Wprowad warto dla komoacuterki A1)End Sub

Rysunek 142Zastosowaniefunkcji Input-

Box do pobie-rania warto ci

od u ytkownika

Przedstawiona procedura mo e jednak sprawia pewien problem Je eli u ytkowniknaci nie w oknie dialogowym przycisk Cancel procedura usunie wszelkie dane juznajduj ce si w komoacuterce A1 a takie zachowanie nie jest zbyt dobr praktyk programistyczn Naci ni cie przycisku Cancel powinno po prostu usuwa z ekranu okno dialogowe bezwykonywania adnych dodatkowych operacji

Makro przedstawione poni ej ilustruje znacznie lepsze podej cie do takiego zagadnieniai do zapami tania warto ci wprowadzonej przez u ytkownika wykorzystuje zmienn xJe eli zmienna zawiera co innego ni pusty ci g znakoacutew (czyli kiedy u ytkownikwprowadzi jak warto ) warto zmiennej jest zapisywana w komoacuterce A1 W przeciwnymprzypadku procedura ko czy dzia anie nie wykonuj c adnych dodatkowych operacji

Sub GetValue2() Dim x as Variant x = InputBox(Wprowad warto dla komoacuterki A1) If x ltgt Then Range(A1)Value = xEnd Sub

Zmienna x zosta a zdefiniowana jako zmienna typu Variant poniewa jej warto cimo e by warto albo pusty ci g znakoacutew (je eli u ytkownik naci nie przycisk Cancel)

Kup książkę Poleć książkę

226 Cz III Podstawy programowania

Okre lanie typu zaznaczonego zakresuJe eli zadaniem Twojego makra b dzie przetwarzanie zaznaczonego zakresu takiemakro musi mie zdolno sprawdzenia czy przed jego wywo aniem u ytkownikrzeczywi cie zaznaczy zakres komoacuterek W przeciwnym razie je eli przed wywo aniemmakra zaznaczony zostanie inny obiekt (na przyk ad wykres lub kszta t) proacuteba wykonaniamakra najprawdopodobniej zako czy si niepowodzeniem Polecenie przedstawioneponi ej wykorzystuje funkcj TypeName j zyka VBA do wy wietlania na ekranie typuaktualnie zaznaczonego obiektu

MsgBox TypeName(Selection)

Je eli aktualnie zaznaczony jest obiekt typu Range wykonanie takiego polecenia spowodujewy wietlenie s owa Range Je li Twoje makro dzia a tylko z zakresami komoacuterek mo eszu y polecenia If do sprawdzenia czy aktualnie zaznaczony obiekt to zakres (obiekttypu Range) Procedura przedstawiona poni ej sprawdza typ zaznaczonego obiektui je eli nie jest to obiekt typu Range na ekranie wy wietlany jest odpowiedni komunikati procedura ko czy dzia anie

Sub CheckSelection() If TypeName(Selection) ltgt Range Then MsgBox Zaznacz zakres komoacuterek Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Identyfikowanie zaznacze wielokrotnychJak pami tasz Excel pozwala na jednoczesne zaznaczanie wielu obiektoacutew Aby to zrobi powiniene podczas zaznaczania obiektoacutew lub zakresoacutew trzyma wci ni ty klawisz CtrlZaznaczenia wielokrotne mog by przyczyn problemoacutew z wykonywaniem niektoacuterychmakr Przyk adowo nie mo esz skopiowa zakresu komoacuterek ktoacutery zosta utworzonypoprzez wiele zaznacze nieci g ych zakresoacutew komoacuterek Je eli sproacutebujesz wykonatak operacj Excel wy wietli na ekranie komunikat przedstawiony na rysunku 143

Makro przedstawione ni ej pokazuje w jaki sposoacuteb mo esz sprawdzi czy u ytkownikdokona zaznaczenia wielokrotnego i na tej podstawie wykona odpowiedni operacj

Sub MultipleSelection() If SelectionAreasCount gt 1 Then MsgBox Zaznaczenia wielokrotne nie s dozwolone Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Przedstawiona procedura wykorzystuje metod Areas ktoacutera zwraca kolekcj wszystkichzakresoacutew w danym zaznaczeniu W a ciwo Count zwraca liczb obiektoacutew tej kolekcji

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 227

Rysunek 143Excel nie lubi

kiedy proacutebujeszkopiowa nie-ci g e zakresy

komoacuterek

Zmiana ustawie ExcelaChyba najbardziej u ytecznymi makrami s proste procedury ktoacutere zmieniaj jednolub kilka ustawie Excela Je li na przyk ad dojdziesz do wniosku e bardzo cz stoprzywo ujesz na ekran okno opcji programu Excel i zmieniasz jakie ustawienie takaoperacja z pewno ci b dzie bardzo dobrym kandydatem do napisania makraoszcz dzaj cego Twoacutej czas i u atwiaj cego zmian takiego ustawienia

W tym podrozdziale zaprezentuj dwa przyk ady procedur ktoacutere pokazuj w jakisposoacuteb mo na zmienia ustawienia Excela Ogoacutelne zasady dzia ania tych procedurmo esz z powodzeniem zastosowa do napisania w asnych makr zmieniaj cych inneustawienia Excela

Zmiana ustawie logicznych(opcje typu Boolean)Podobnie jak wy cznik wiat a opcje logiczne (typu Boolean) mog by albo w czonealbo wy czone Mo esz na przyk ad utworzy makro ktoacutere b dzie w cza o lub wy cza owy wietlanie podzia u arkusza na strony Kiedy wydrukujesz arkusz (lub skorzystaszz trybu podgl du wydruku) Excel wy wietla na arkuszu przerywane linie reprezentuj cemiejsca podzia u arkusza na strony wydruku Niektoacuterych u ytkownikoacutew (w czniez autorem tej ksi ki) takie zachowanie Excela irytuje Niestety jedynym sposobemwy czenia wy wietlania podzia u arkusza na strony jest otwarcie okna dialogowego Opcjeprogramu Excel przej cie na kart Zaawansowane a nast pnie przewijanie zawarto ci tejkarty a do odszukania opcji Poka podzia y stron Je eli podczas wy czania tej opcjikorzysta e z rejestratora makr przekonasz si e Excel generuje poni szy kod

Kup książkę Poleć książkę

228 Cz III Podstawy programowania

ActiveSheetDisplayPageBreaks = False

Z drugiej strony je eli podczas rejestrowania makra podzia y stron nie s widoczneExcel generuje taki kod

ActiveSheetDisplayPageBreaks = True

Takie informacje mog doprowadzi do wniosku e b dziesz musia napisa a dwamakra mdash jedno do w czania podgl du podzia u stron a drugie do jego wy czaniaNa szcz cie to nieprawda Procedura przedstawiona poni ej wykorzystuje operatorNot do zmiany warto ci logicznej True na False i odwrotnie Wykonanie proceduryTogglePageBreaks to prosty sposoacuteb na cykliczne w czanie i wy czanie podgl du podzia ustron arkusza

Sub TogglePageBreaks() On Error Resume Next ActiveSheetDisplayPageBreaks = Not _ ActiveSheetDisplayPageBreaksEnd Sub

Pierwsze polecenie informuje Excel e powinien ignorowa ewentualne b dy Przyk adowopodzia y stron nie s wy wietlane na arkuszach wykresoacutew Kiedy wprowadzisz takiepolecenie i sproacutebujesz wykona t procedur dla arkusza wykresu na ekranie nie pojawisi komunikat o b dzie

Techniki u ytej w procedurze TogglePageBreaks mo esz u ywa do zmiany dowolnychopcji logicznych (czyli takich ktoacuterych warto ciami s True albo False)

Zmiana innych opcji (typu non-Boolean)Do zmiany opcji ktoacutere nie s typu logicznego mo esz u ywa konstrukcji Select CaseW przyk adzie przedstawionym poni ej zmieniam tryb przeliczania skoroszytu z r cznegona automatyczny i odwrotnie i nakazuj wy wietlenie na ekranie komunikatu opisuj cegoaktualny tryb przeliczania arkusza

Sub ToggleCalcMode() Select Case ApplicationCalculation Case xlManual ApplicationCalculation = xlCalculationAutomatic MsgBox Automatyczne przeliczanie skoroszytu Case xlAutomatic ApplicationCalculation = xlCalculationManual MsgBox R czne przeliczanie skoroszytu End SelectEnd Sub

Techniki u ytej w procedurze ToggleCalcMode mo esz u ywa do zmiany dowolnychopcji ktoacutere nie posiadaj warto ci logicznych

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 18: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 223

Taka procedura dzia a poprawnie ale co si stanie je eli u ytkownik zaznaczy cakolumn lub ca y wiersz To wcale nie jest takie nieprawdopodobne bo przecie Excelpozwala na wykonywanie operacji na ca ych wierszach i kolumnach W takiej sytuacjiwykonanie makra mo e zaj naprawd du o czasu poniewa nasza p tla przetwarzaka d komoacuterk zaznaczonego zakresu a cznie z pustymi w jednej kolumnie komoacuterekjest a 1 048 576hellip Aby zatem nasze makro by o bardziej wydajne musimy je takzmodyfikowa eby przetwarzane by y tylko i wy cznie komoacuterki ktoacutere nie s puste

Procedura przedstawiona poni ej przetwarza wy cznie niepuste komoacuterki zaznaczonegozakresu dzi ki zastosowaniu metody SpecialCells (wi cej szczegoacute owych informacji natemat tej metody znajdziesz w pomocy systemowej VBA) Nasza procedura za pomocpolecenia Set tworzy dwa obiekty typu Range pierwszy z nich to podzakres komoacuterekzakresu wej ciowego zawieraj cy wy cznie komoacuterki z warto ciami sta ymi (na przyk adteksty warto ci liczbowe litera y i tak dalej) a drugi sk ada si z komoacuterek zawieraj cychformu y Procedura przetwarza tylko komoacuterki nale ce do tych podzakresoacutew co w efekciepowoduje pomini cie przetwarzania wszystkich pozosta ych pustych komoacuterek zakresuwej ciowego Sprytne prawda

Sub SkipBlanks() Dim ConstantCells As Range Dim FormulaCells As Range Dim cell As Range Ignoruj b dy On Error Resume Next

Przetwarzaj komoacuterki zawieraj ce warto ci sta e Set ConstantCells = Selection _ SpecialCells(xlConstants) For Each cell In ConstantCells If cellValue gt 0 Then cellFontBold = True End If Next cell

Przetwarzaj komoacuterki zawieraj ce formu y Set FormulaCells = Selection _ SpecialCells(xlFormulas) For Each cell In FormulaCells If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Procedura SkipBlanks dzia a tak samo szybko niezale nie od tego jaki zakres komoacuterekzaznaczy e Mo esz na przyk ad zaznaczy zakres sk adaj cy si z kilku komoacuterek zaznaczywszystkie kolumny w danym zakresie albo wszystkie wiersze w danym zakresie albonawet ca y arkusz Jak wida jest to ogromne usprawnienie w stosunku do oryginalnejprocedury ProcessCells ktoacuter omoacutewi em nieco wcze niej

Zwroacute uwag e w kodzie procedury u yli my polecenia

On Error Resume Next

Kup książkę Poleć książkę

224 Cz III Podstawy programowania

Polecenie to powoduje e Excel po prostu ignoruje b dy (inaczej moacutewi c je eli proacutebawykonania danego polecenia ko czy si b dem Excel ignoruje ten b d i po prostuprzechodzi do kolejnego polecenia wi cej szczegoacute owych informacji na temat obs ugib doacutew znajdziesz w rozdziale 12) W naszym przypadku zastosowanie polecenia OnError jest konieczne poniewa metoda SpecialCells generuje b d gdy adna komoacuterkanie spe nia podanego kryterium

Zastosowanie metody SpecialCells jest roacutewnowa ne z przej ciem na kart NARZ DZIAG OacuteWNE wybraniem polecenia Znajd i zaznaczPrzejd do mdash specjalnie znajduj cegosi w grupie opcji Edytowanie i nast pnie zaznaczeniem opcji Sta e lub Formu y Abyprzekona si jak to dzia a podczas wykonywania tych polece powiniene u yrejestratora makr i zaznacza roacute ne opcje

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tli(cz II)A teraz ci g dalszy naszej opowie ci W tym punkcie przedstawi inny sposoacuteb efektywnegoprzetwarzania komoacuterek znajduj cych si w zaznaczonym zakresie Tym razem procedurab dzie korzysta a z w a ciwo ci UsedRange ktoacutera zwraca obiekt typu Range reprezentuj cyu ywany zakres arkusza Procedura korzysta roacutewnie z metody Intersect ktoacutera zwracaobiekt typu Range zawieraj cy komoacuterki b d ce cz ci wspoacuteln dwoacutech zakresoacutew

Poni ej przedstawiam zmodyfikowan wersj procedury SkipBlanks omawianejw poprzednim punkcie

Sub SkipBlanks2() Dim WorkRange As Range Dim cell As Range Set WorkRange = Intersect(Selection ActiveSheetUsedRange) For Each cell In WorkRange If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Zmienna obiektowa WorkRange zawiera komoacuterki ktoacutere s cz ci wspoacuteln zakresuzaznaczonego przez u ytkownika oraz zakresu u ywanych komoacuterek arkusza Je lizatem u ytkownik zaznaczy ca kolumn zmienna WorkRange b dzie zawiera a tylkokomoacuterki ktoacutere znajduj si jednocze nie w zaznaczonej kolumnie i w u ywanymzakresie arkusza Jak wida jest to bardzo szybka i efektywna metoda pozwalaj ca naunikni cie przetwarzania komoacuterek znajduj cych si poza zakresem u ywanychkomoacuterek arkusza

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 225

Wprowadzanie warto ci do komoacuterkiNa rysunku 142 pokazuj w jaki sposoacuteb mo esz u y funkcji InputBox j zyka VBA dopobierania od u ytkownika warto ci ktoacutera nast pnie mo e zosta zapisana w wybranejkomoacuterce W procedurze przedstawionej poni ej demonstruj jak poprosi u ytkownikao podanie warto ci i wstawi j do komoacuterki A1 aktywnego arkusza (i to wszystkoza pomoc jednego polecenia)

Sub GetValue() Range(A1)Value = InputBox( _ Wprowad warto dla komoacuterki A1)End Sub

Rysunek 142Zastosowaniefunkcji Input-

Box do pobie-rania warto ci

od u ytkownika

Przedstawiona procedura mo e jednak sprawia pewien problem Je eli u ytkowniknaci nie w oknie dialogowym przycisk Cancel procedura usunie wszelkie dane juznajduj ce si w komoacuterce A1 a takie zachowanie nie jest zbyt dobr praktyk programistyczn Naci ni cie przycisku Cancel powinno po prostu usuwa z ekranu okno dialogowe bezwykonywania adnych dodatkowych operacji

Makro przedstawione poni ej ilustruje znacznie lepsze podej cie do takiego zagadnieniai do zapami tania warto ci wprowadzonej przez u ytkownika wykorzystuje zmienn xJe eli zmienna zawiera co innego ni pusty ci g znakoacutew (czyli kiedy u ytkownikwprowadzi jak warto ) warto zmiennej jest zapisywana w komoacuterce A1 W przeciwnymprzypadku procedura ko czy dzia anie nie wykonuj c adnych dodatkowych operacji

Sub GetValue2() Dim x as Variant x = InputBox(Wprowad warto dla komoacuterki A1) If x ltgt Then Range(A1)Value = xEnd Sub

Zmienna x zosta a zdefiniowana jako zmienna typu Variant poniewa jej warto cimo e by warto albo pusty ci g znakoacutew (je eli u ytkownik naci nie przycisk Cancel)

Kup książkę Poleć książkę

226 Cz III Podstawy programowania

Okre lanie typu zaznaczonego zakresuJe eli zadaniem Twojego makra b dzie przetwarzanie zaznaczonego zakresu takiemakro musi mie zdolno sprawdzenia czy przed jego wywo aniem u ytkownikrzeczywi cie zaznaczy zakres komoacuterek W przeciwnym razie je eli przed wywo aniemmakra zaznaczony zostanie inny obiekt (na przyk ad wykres lub kszta t) proacuteba wykonaniamakra najprawdopodobniej zako czy si niepowodzeniem Polecenie przedstawioneponi ej wykorzystuje funkcj TypeName j zyka VBA do wy wietlania na ekranie typuaktualnie zaznaczonego obiektu

MsgBox TypeName(Selection)

Je eli aktualnie zaznaczony jest obiekt typu Range wykonanie takiego polecenia spowodujewy wietlenie s owa Range Je li Twoje makro dzia a tylko z zakresami komoacuterek mo eszu y polecenia If do sprawdzenia czy aktualnie zaznaczony obiekt to zakres (obiekttypu Range) Procedura przedstawiona poni ej sprawdza typ zaznaczonego obiektui je eli nie jest to obiekt typu Range na ekranie wy wietlany jest odpowiedni komunikati procedura ko czy dzia anie

Sub CheckSelection() If TypeName(Selection) ltgt Range Then MsgBox Zaznacz zakres komoacuterek Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Identyfikowanie zaznacze wielokrotnychJak pami tasz Excel pozwala na jednoczesne zaznaczanie wielu obiektoacutew Aby to zrobi powiniene podczas zaznaczania obiektoacutew lub zakresoacutew trzyma wci ni ty klawisz CtrlZaznaczenia wielokrotne mog by przyczyn problemoacutew z wykonywaniem niektoacuterychmakr Przyk adowo nie mo esz skopiowa zakresu komoacuterek ktoacutery zosta utworzonypoprzez wiele zaznacze nieci g ych zakresoacutew komoacuterek Je eli sproacutebujesz wykonatak operacj Excel wy wietli na ekranie komunikat przedstawiony na rysunku 143

Makro przedstawione ni ej pokazuje w jaki sposoacuteb mo esz sprawdzi czy u ytkownikdokona zaznaczenia wielokrotnego i na tej podstawie wykona odpowiedni operacj

Sub MultipleSelection() If SelectionAreasCount gt 1 Then MsgBox Zaznaczenia wielokrotne nie s dozwolone Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Przedstawiona procedura wykorzystuje metod Areas ktoacutera zwraca kolekcj wszystkichzakresoacutew w danym zaznaczeniu W a ciwo Count zwraca liczb obiektoacutew tej kolekcji

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 227

Rysunek 143Excel nie lubi

kiedy proacutebujeszkopiowa nie-ci g e zakresy

komoacuterek

Zmiana ustawie ExcelaChyba najbardziej u ytecznymi makrami s proste procedury ktoacutere zmieniaj jednolub kilka ustawie Excela Je li na przyk ad dojdziesz do wniosku e bardzo cz stoprzywo ujesz na ekran okno opcji programu Excel i zmieniasz jakie ustawienie takaoperacja z pewno ci b dzie bardzo dobrym kandydatem do napisania makraoszcz dzaj cego Twoacutej czas i u atwiaj cego zmian takiego ustawienia

W tym podrozdziale zaprezentuj dwa przyk ady procedur ktoacutere pokazuj w jakisposoacuteb mo na zmienia ustawienia Excela Ogoacutelne zasady dzia ania tych procedurmo esz z powodzeniem zastosowa do napisania w asnych makr zmieniaj cych inneustawienia Excela

Zmiana ustawie logicznych(opcje typu Boolean)Podobnie jak wy cznik wiat a opcje logiczne (typu Boolean) mog by albo w czonealbo wy czone Mo esz na przyk ad utworzy makro ktoacutere b dzie w cza o lub wy cza owy wietlanie podzia u arkusza na strony Kiedy wydrukujesz arkusz (lub skorzystaszz trybu podgl du wydruku) Excel wy wietla na arkuszu przerywane linie reprezentuj cemiejsca podzia u arkusza na strony wydruku Niektoacuterych u ytkownikoacutew (w czniez autorem tej ksi ki) takie zachowanie Excela irytuje Niestety jedynym sposobemwy czenia wy wietlania podzia u arkusza na strony jest otwarcie okna dialogowego Opcjeprogramu Excel przej cie na kart Zaawansowane a nast pnie przewijanie zawarto ci tejkarty a do odszukania opcji Poka podzia y stron Je eli podczas wy czania tej opcjikorzysta e z rejestratora makr przekonasz si e Excel generuje poni szy kod

Kup książkę Poleć książkę

228 Cz III Podstawy programowania

ActiveSheetDisplayPageBreaks = False

Z drugiej strony je eli podczas rejestrowania makra podzia y stron nie s widoczneExcel generuje taki kod

ActiveSheetDisplayPageBreaks = True

Takie informacje mog doprowadzi do wniosku e b dziesz musia napisa a dwamakra mdash jedno do w czania podgl du podzia u stron a drugie do jego wy czaniaNa szcz cie to nieprawda Procedura przedstawiona poni ej wykorzystuje operatorNot do zmiany warto ci logicznej True na False i odwrotnie Wykonanie proceduryTogglePageBreaks to prosty sposoacuteb na cykliczne w czanie i wy czanie podgl du podzia ustron arkusza

Sub TogglePageBreaks() On Error Resume Next ActiveSheetDisplayPageBreaks = Not _ ActiveSheetDisplayPageBreaksEnd Sub

Pierwsze polecenie informuje Excel e powinien ignorowa ewentualne b dy Przyk adowopodzia y stron nie s wy wietlane na arkuszach wykresoacutew Kiedy wprowadzisz takiepolecenie i sproacutebujesz wykona t procedur dla arkusza wykresu na ekranie nie pojawisi komunikat o b dzie

Techniki u ytej w procedurze TogglePageBreaks mo esz u ywa do zmiany dowolnychopcji logicznych (czyli takich ktoacuterych warto ciami s True albo False)

Zmiana innych opcji (typu non-Boolean)Do zmiany opcji ktoacutere nie s typu logicznego mo esz u ywa konstrukcji Select CaseW przyk adzie przedstawionym poni ej zmieniam tryb przeliczania skoroszytu z r cznegona automatyczny i odwrotnie i nakazuj wy wietlenie na ekranie komunikatu opisuj cegoaktualny tryb przeliczania arkusza

Sub ToggleCalcMode() Select Case ApplicationCalculation Case xlManual ApplicationCalculation = xlCalculationAutomatic MsgBox Automatyczne przeliczanie skoroszytu Case xlAutomatic ApplicationCalculation = xlCalculationManual MsgBox R czne przeliczanie skoroszytu End SelectEnd Sub

Techniki u ytej w procedurze ToggleCalcMode mo esz u ywa do zmiany dowolnychopcji ktoacutere nie posiadaj warto ci logicznych

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 19: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

224 Cz III Podstawy programowania

Polecenie to powoduje e Excel po prostu ignoruje b dy (inaczej moacutewi c je eli proacutebawykonania danego polecenia ko czy si b dem Excel ignoruje ten b d i po prostuprzechodzi do kolejnego polecenia wi cej szczegoacute owych informacji na temat obs ugib doacutew znajdziesz w rozdziale 12) W naszym przypadku zastosowanie polecenia OnError jest konieczne poniewa metoda SpecialCells generuje b d gdy adna komoacuterkanie spe nia podanego kryterium

Zastosowanie metody SpecialCells jest roacutewnowa ne z przej ciem na kart NARZ DZIAG OacuteWNE wybraniem polecenia Znajd i zaznaczPrzejd do mdash specjalnie znajduj cegosi w grupie opcji Edytowanie i nast pnie zaznaczeniem opcji Sta e lub Formu y Abyprzekona si jak to dzia a podczas wykonywania tych polece powiniene u yrejestratora makr i zaznacza roacute ne opcje

Wydajne przetwarzanie komoacuterekzaznaczonego zakresu przy u yciu p tli(cz II)A teraz ci g dalszy naszej opowie ci W tym punkcie przedstawi inny sposoacuteb efektywnegoprzetwarzania komoacuterek znajduj cych si w zaznaczonym zakresie Tym razem procedurab dzie korzysta a z w a ciwo ci UsedRange ktoacutera zwraca obiekt typu Range reprezentuj cyu ywany zakres arkusza Procedura korzysta roacutewnie z metody Intersect ktoacutera zwracaobiekt typu Range zawieraj cy komoacuterki b d ce cz ci wspoacuteln dwoacutech zakresoacutew

Poni ej przedstawiam zmodyfikowan wersj procedury SkipBlanks omawianejw poprzednim punkcie

Sub SkipBlanks2() Dim WorkRange As Range Dim cell As Range Set WorkRange = Intersect(Selection ActiveSheetUsedRange) For Each cell In WorkRange If cellValue gt 0 Then cellFontBold = True End If Next cellEnd Sub

Zmienna obiektowa WorkRange zawiera komoacuterki ktoacutere s cz ci wspoacuteln zakresuzaznaczonego przez u ytkownika oraz zakresu u ywanych komoacuterek arkusza Je lizatem u ytkownik zaznaczy ca kolumn zmienna WorkRange b dzie zawiera a tylkokomoacuterki ktoacutere znajduj si jednocze nie w zaznaczonej kolumnie i w u ywanymzakresie arkusza Jak wida jest to bardzo szybka i efektywna metoda pozwalaj ca naunikni cie przetwarzania komoacuterek znajduj cych si poza zakresem u ywanychkomoacuterek arkusza

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 225

Wprowadzanie warto ci do komoacuterkiNa rysunku 142 pokazuj w jaki sposoacuteb mo esz u y funkcji InputBox j zyka VBA dopobierania od u ytkownika warto ci ktoacutera nast pnie mo e zosta zapisana w wybranejkomoacuterce W procedurze przedstawionej poni ej demonstruj jak poprosi u ytkownikao podanie warto ci i wstawi j do komoacuterki A1 aktywnego arkusza (i to wszystkoza pomoc jednego polecenia)

Sub GetValue() Range(A1)Value = InputBox( _ Wprowad warto dla komoacuterki A1)End Sub

Rysunek 142Zastosowaniefunkcji Input-

Box do pobie-rania warto ci

od u ytkownika

Przedstawiona procedura mo e jednak sprawia pewien problem Je eli u ytkowniknaci nie w oknie dialogowym przycisk Cancel procedura usunie wszelkie dane juznajduj ce si w komoacuterce A1 a takie zachowanie nie jest zbyt dobr praktyk programistyczn Naci ni cie przycisku Cancel powinno po prostu usuwa z ekranu okno dialogowe bezwykonywania adnych dodatkowych operacji

Makro przedstawione poni ej ilustruje znacznie lepsze podej cie do takiego zagadnieniai do zapami tania warto ci wprowadzonej przez u ytkownika wykorzystuje zmienn xJe eli zmienna zawiera co innego ni pusty ci g znakoacutew (czyli kiedy u ytkownikwprowadzi jak warto ) warto zmiennej jest zapisywana w komoacuterce A1 W przeciwnymprzypadku procedura ko czy dzia anie nie wykonuj c adnych dodatkowych operacji

Sub GetValue2() Dim x as Variant x = InputBox(Wprowad warto dla komoacuterki A1) If x ltgt Then Range(A1)Value = xEnd Sub

Zmienna x zosta a zdefiniowana jako zmienna typu Variant poniewa jej warto cimo e by warto albo pusty ci g znakoacutew (je eli u ytkownik naci nie przycisk Cancel)

Kup książkę Poleć książkę

226 Cz III Podstawy programowania

Okre lanie typu zaznaczonego zakresuJe eli zadaniem Twojego makra b dzie przetwarzanie zaznaczonego zakresu takiemakro musi mie zdolno sprawdzenia czy przed jego wywo aniem u ytkownikrzeczywi cie zaznaczy zakres komoacuterek W przeciwnym razie je eli przed wywo aniemmakra zaznaczony zostanie inny obiekt (na przyk ad wykres lub kszta t) proacuteba wykonaniamakra najprawdopodobniej zako czy si niepowodzeniem Polecenie przedstawioneponi ej wykorzystuje funkcj TypeName j zyka VBA do wy wietlania na ekranie typuaktualnie zaznaczonego obiektu

MsgBox TypeName(Selection)

Je eli aktualnie zaznaczony jest obiekt typu Range wykonanie takiego polecenia spowodujewy wietlenie s owa Range Je li Twoje makro dzia a tylko z zakresami komoacuterek mo eszu y polecenia If do sprawdzenia czy aktualnie zaznaczony obiekt to zakres (obiekttypu Range) Procedura przedstawiona poni ej sprawdza typ zaznaczonego obiektui je eli nie jest to obiekt typu Range na ekranie wy wietlany jest odpowiedni komunikati procedura ko czy dzia anie

Sub CheckSelection() If TypeName(Selection) ltgt Range Then MsgBox Zaznacz zakres komoacuterek Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Identyfikowanie zaznacze wielokrotnychJak pami tasz Excel pozwala na jednoczesne zaznaczanie wielu obiektoacutew Aby to zrobi powiniene podczas zaznaczania obiektoacutew lub zakresoacutew trzyma wci ni ty klawisz CtrlZaznaczenia wielokrotne mog by przyczyn problemoacutew z wykonywaniem niektoacuterychmakr Przyk adowo nie mo esz skopiowa zakresu komoacuterek ktoacutery zosta utworzonypoprzez wiele zaznacze nieci g ych zakresoacutew komoacuterek Je eli sproacutebujesz wykonatak operacj Excel wy wietli na ekranie komunikat przedstawiony na rysunku 143

Makro przedstawione ni ej pokazuje w jaki sposoacuteb mo esz sprawdzi czy u ytkownikdokona zaznaczenia wielokrotnego i na tej podstawie wykona odpowiedni operacj

Sub MultipleSelection() If SelectionAreasCount gt 1 Then MsgBox Zaznaczenia wielokrotne nie s dozwolone Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Przedstawiona procedura wykorzystuje metod Areas ktoacutera zwraca kolekcj wszystkichzakresoacutew w danym zaznaczeniu W a ciwo Count zwraca liczb obiektoacutew tej kolekcji

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 227

Rysunek 143Excel nie lubi

kiedy proacutebujeszkopiowa nie-ci g e zakresy

komoacuterek

Zmiana ustawie ExcelaChyba najbardziej u ytecznymi makrami s proste procedury ktoacutere zmieniaj jednolub kilka ustawie Excela Je li na przyk ad dojdziesz do wniosku e bardzo cz stoprzywo ujesz na ekran okno opcji programu Excel i zmieniasz jakie ustawienie takaoperacja z pewno ci b dzie bardzo dobrym kandydatem do napisania makraoszcz dzaj cego Twoacutej czas i u atwiaj cego zmian takiego ustawienia

W tym podrozdziale zaprezentuj dwa przyk ady procedur ktoacutere pokazuj w jakisposoacuteb mo na zmienia ustawienia Excela Ogoacutelne zasady dzia ania tych procedurmo esz z powodzeniem zastosowa do napisania w asnych makr zmieniaj cych inneustawienia Excela

Zmiana ustawie logicznych(opcje typu Boolean)Podobnie jak wy cznik wiat a opcje logiczne (typu Boolean) mog by albo w czonealbo wy czone Mo esz na przyk ad utworzy makro ktoacutere b dzie w cza o lub wy cza owy wietlanie podzia u arkusza na strony Kiedy wydrukujesz arkusz (lub skorzystaszz trybu podgl du wydruku) Excel wy wietla na arkuszu przerywane linie reprezentuj cemiejsca podzia u arkusza na strony wydruku Niektoacuterych u ytkownikoacutew (w czniez autorem tej ksi ki) takie zachowanie Excela irytuje Niestety jedynym sposobemwy czenia wy wietlania podzia u arkusza na strony jest otwarcie okna dialogowego Opcjeprogramu Excel przej cie na kart Zaawansowane a nast pnie przewijanie zawarto ci tejkarty a do odszukania opcji Poka podzia y stron Je eli podczas wy czania tej opcjikorzysta e z rejestratora makr przekonasz si e Excel generuje poni szy kod

Kup książkę Poleć książkę

228 Cz III Podstawy programowania

ActiveSheetDisplayPageBreaks = False

Z drugiej strony je eli podczas rejestrowania makra podzia y stron nie s widoczneExcel generuje taki kod

ActiveSheetDisplayPageBreaks = True

Takie informacje mog doprowadzi do wniosku e b dziesz musia napisa a dwamakra mdash jedno do w czania podgl du podzia u stron a drugie do jego wy czaniaNa szcz cie to nieprawda Procedura przedstawiona poni ej wykorzystuje operatorNot do zmiany warto ci logicznej True na False i odwrotnie Wykonanie proceduryTogglePageBreaks to prosty sposoacuteb na cykliczne w czanie i wy czanie podgl du podzia ustron arkusza

Sub TogglePageBreaks() On Error Resume Next ActiveSheetDisplayPageBreaks = Not _ ActiveSheetDisplayPageBreaksEnd Sub

Pierwsze polecenie informuje Excel e powinien ignorowa ewentualne b dy Przyk adowopodzia y stron nie s wy wietlane na arkuszach wykresoacutew Kiedy wprowadzisz takiepolecenie i sproacutebujesz wykona t procedur dla arkusza wykresu na ekranie nie pojawisi komunikat o b dzie

Techniki u ytej w procedurze TogglePageBreaks mo esz u ywa do zmiany dowolnychopcji logicznych (czyli takich ktoacuterych warto ciami s True albo False)

Zmiana innych opcji (typu non-Boolean)Do zmiany opcji ktoacutere nie s typu logicznego mo esz u ywa konstrukcji Select CaseW przyk adzie przedstawionym poni ej zmieniam tryb przeliczania skoroszytu z r cznegona automatyczny i odwrotnie i nakazuj wy wietlenie na ekranie komunikatu opisuj cegoaktualny tryb przeliczania arkusza

Sub ToggleCalcMode() Select Case ApplicationCalculation Case xlManual ApplicationCalculation = xlCalculationAutomatic MsgBox Automatyczne przeliczanie skoroszytu Case xlAutomatic ApplicationCalculation = xlCalculationManual MsgBox R czne przeliczanie skoroszytu End SelectEnd Sub

Techniki u ytej w procedurze ToggleCalcMode mo esz u ywa do zmiany dowolnychopcji ktoacutere nie posiadaj warto ci logicznych

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 20: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 225

Wprowadzanie warto ci do komoacuterkiNa rysunku 142 pokazuj w jaki sposoacuteb mo esz u y funkcji InputBox j zyka VBA dopobierania od u ytkownika warto ci ktoacutera nast pnie mo e zosta zapisana w wybranejkomoacuterce W procedurze przedstawionej poni ej demonstruj jak poprosi u ytkownikao podanie warto ci i wstawi j do komoacuterki A1 aktywnego arkusza (i to wszystkoza pomoc jednego polecenia)

Sub GetValue() Range(A1)Value = InputBox( _ Wprowad warto dla komoacuterki A1)End Sub

Rysunek 142Zastosowaniefunkcji Input-

Box do pobie-rania warto ci

od u ytkownika

Przedstawiona procedura mo e jednak sprawia pewien problem Je eli u ytkowniknaci nie w oknie dialogowym przycisk Cancel procedura usunie wszelkie dane juznajduj ce si w komoacuterce A1 a takie zachowanie nie jest zbyt dobr praktyk programistyczn Naci ni cie przycisku Cancel powinno po prostu usuwa z ekranu okno dialogowe bezwykonywania adnych dodatkowych operacji

Makro przedstawione poni ej ilustruje znacznie lepsze podej cie do takiego zagadnieniai do zapami tania warto ci wprowadzonej przez u ytkownika wykorzystuje zmienn xJe eli zmienna zawiera co innego ni pusty ci g znakoacutew (czyli kiedy u ytkownikwprowadzi jak warto ) warto zmiennej jest zapisywana w komoacuterce A1 W przeciwnymprzypadku procedura ko czy dzia anie nie wykonuj c adnych dodatkowych operacji

Sub GetValue2() Dim x as Variant x = InputBox(Wprowad warto dla komoacuterki A1) If x ltgt Then Range(A1)Value = xEnd Sub

Zmienna x zosta a zdefiniowana jako zmienna typu Variant poniewa jej warto cimo e by warto albo pusty ci g znakoacutew (je eli u ytkownik naci nie przycisk Cancel)

Kup książkę Poleć książkę

226 Cz III Podstawy programowania

Okre lanie typu zaznaczonego zakresuJe eli zadaniem Twojego makra b dzie przetwarzanie zaznaczonego zakresu takiemakro musi mie zdolno sprawdzenia czy przed jego wywo aniem u ytkownikrzeczywi cie zaznaczy zakres komoacuterek W przeciwnym razie je eli przed wywo aniemmakra zaznaczony zostanie inny obiekt (na przyk ad wykres lub kszta t) proacuteba wykonaniamakra najprawdopodobniej zako czy si niepowodzeniem Polecenie przedstawioneponi ej wykorzystuje funkcj TypeName j zyka VBA do wy wietlania na ekranie typuaktualnie zaznaczonego obiektu

MsgBox TypeName(Selection)

Je eli aktualnie zaznaczony jest obiekt typu Range wykonanie takiego polecenia spowodujewy wietlenie s owa Range Je li Twoje makro dzia a tylko z zakresami komoacuterek mo eszu y polecenia If do sprawdzenia czy aktualnie zaznaczony obiekt to zakres (obiekttypu Range) Procedura przedstawiona poni ej sprawdza typ zaznaczonego obiektui je eli nie jest to obiekt typu Range na ekranie wy wietlany jest odpowiedni komunikati procedura ko czy dzia anie

Sub CheckSelection() If TypeName(Selection) ltgt Range Then MsgBox Zaznacz zakres komoacuterek Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Identyfikowanie zaznacze wielokrotnychJak pami tasz Excel pozwala na jednoczesne zaznaczanie wielu obiektoacutew Aby to zrobi powiniene podczas zaznaczania obiektoacutew lub zakresoacutew trzyma wci ni ty klawisz CtrlZaznaczenia wielokrotne mog by przyczyn problemoacutew z wykonywaniem niektoacuterychmakr Przyk adowo nie mo esz skopiowa zakresu komoacuterek ktoacutery zosta utworzonypoprzez wiele zaznacze nieci g ych zakresoacutew komoacuterek Je eli sproacutebujesz wykonatak operacj Excel wy wietli na ekranie komunikat przedstawiony na rysunku 143

Makro przedstawione ni ej pokazuje w jaki sposoacuteb mo esz sprawdzi czy u ytkownikdokona zaznaczenia wielokrotnego i na tej podstawie wykona odpowiedni operacj

Sub MultipleSelection() If SelectionAreasCount gt 1 Then MsgBox Zaznaczenia wielokrotne nie s dozwolone Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Przedstawiona procedura wykorzystuje metod Areas ktoacutera zwraca kolekcj wszystkichzakresoacutew w danym zaznaczeniu W a ciwo Count zwraca liczb obiektoacutew tej kolekcji

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 227

Rysunek 143Excel nie lubi

kiedy proacutebujeszkopiowa nie-ci g e zakresy

komoacuterek

Zmiana ustawie ExcelaChyba najbardziej u ytecznymi makrami s proste procedury ktoacutere zmieniaj jednolub kilka ustawie Excela Je li na przyk ad dojdziesz do wniosku e bardzo cz stoprzywo ujesz na ekran okno opcji programu Excel i zmieniasz jakie ustawienie takaoperacja z pewno ci b dzie bardzo dobrym kandydatem do napisania makraoszcz dzaj cego Twoacutej czas i u atwiaj cego zmian takiego ustawienia

W tym podrozdziale zaprezentuj dwa przyk ady procedur ktoacutere pokazuj w jakisposoacuteb mo na zmienia ustawienia Excela Ogoacutelne zasady dzia ania tych procedurmo esz z powodzeniem zastosowa do napisania w asnych makr zmieniaj cych inneustawienia Excela

Zmiana ustawie logicznych(opcje typu Boolean)Podobnie jak wy cznik wiat a opcje logiczne (typu Boolean) mog by albo w czonealbo wy czone Mo esz na przyk ad utworzy makro ktoacutere b dzie w cza o lub wy cza owy wietlanie podzia u arkusza na strony Kiedy wydrukujesz arkusz (lub skorzystaszz trybu podgl du wydruku) Excel wy wietla na arkuszu przerywane linie reprezentuj cemiejsca podzia u arkusza na strony wydruku Niektoacuterych u ytkownikoacutew (w czniez autorem tej ksi ki) takie zachowanie Excela irytuje Niestety jedynym sposobemwy czenia wy wietlania podzia u arkusza na strony jest otwarcie okna dialogowego Opcjeprogramu Excel przej cie na kart Zaawansowane a nast pnie przewijanie zawarto ci tejkarty a do odszukania opcji Poka podzia y stron Je eli podczas wy czania tej opcjikorzysta e z rejestratora makr przekonasz si e Excel generuje poni szy kod

Kup książkę Poleć książkę

228 Cz III Podstawy programowania

ActiveSheetDisplayPageBreaks = False

Z drugiej strony je eli podczas rejestrowania makra podzia y stron nie s widoczneExcel generuje taki kod

ActiveSheetDisplayPageBreaks = True

Takie informacje mog doprowadzi do wniosku e b dziesz musia napisa a dwamakra mdash jedno do w czania podgl du podzia u stron a drugie do jego wy czaniaNa szcz cie to nieprawda Procedura przedstawiona poni ej wykorzystuje operatorNot do zmiany warto ci logicznej True na False i odwrotnie Wykonanie proceduryTogglePageBreaks to prosty sposoacuteb na cykliczne w czanie i wy czanie podgl du podzia ustron arkusza

Sub TogglePageBreaks() On Error Resume Next ActiveSheetDisplayPageBreaks = Not _ ActiveSheetDisplayPageBreaksEnd Sub

Pierwsze polecenie informuje Excel e powinien ignorowa ewentualne b dy Przyk adowopodzia y stron nie s wy wietlane na arkuszach wykresoacutew Kiedy wprowadzisz takiepolecenie i sproacutebujesz wykona t procedur dla arkusza wykresu na ekranie nie pojawisi komunikat o b dzie

Techniki u ytej w procedurze TogglePageBreaks mo esz u ywa do zmiany dowolnychopcji logicznych (czyli takich ktoacuterych warto ciami s True albo False)

Zmiana innych opcji (typu non-Boolean)Do zmiany opcji ktoacutere nie s typu logicznego mo esz u ywa konstrukcji Select CaseW przyk adzie przedstawionym poni ej zmieniam tryb przeliczania skoroszytu z r cznegona automatyczny i odwrotnie i nakazuj wy wietlenie na ekranie komunikatu opisuj cegoaktualny tryb przeliczania arkusza

Sub ToggleCalcMode() Select Case ApplicationCalculation Case xlManual ApplicationCalculation = xlCalculationAutomatic MsgBox Automatyczne przeliczanie skoroszytu Case xlAutomatic ApplicationCalculation = xlCalculationManual MsgBox R czne przeliczanie skoroszytu End SelectEnd Sub

Techniki u ytej w procedurze ToggleCalcMode mo esz u ywa do zmiany dowolnychopcji ktoacutere nie posiadaj warto ci logicznych

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 21: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

226 Cz III Podstawy programowania

Okre lanie typu zaznaczonego zakresuJe eli zadaniem Twojego makra b dzie przetwarzanie zaznaczonego zakresu takiemakro musi mie zdolno sprawdzenia czy przed jego wywo aniem u ytkownikrzeczywi cie zaznaczy zakres komoacuterek W przeciwnym razie je eli przed wywo aniemmakra zaznaczony zostanie inny obiekt (na przyk ad wykres lub kszta t) proacuteba wykonaniamakra najprawdopodobniej zako czy si niepowodzeniem Polecenie przedstawioneponi ej wykorzystuje funkcj TypeName j zyka VBA do wy wietlania na ekranie typuaktualnie zaznaczonego obiektu

MsgBox TypeName(Selection)

Je eli aktualnie zaznaczony jest obiekt typu Range wykonanie takiego polecenia spowodujewy wietlenie s owa Range Je li Twoje makro dzia a tylko z zakresami komoacuterek mo eszu y polecenia If do sprawdzenia czy aktualnie zaznaczony obiekt to zakres (obiekttypu Range) Procedura przedstawiona poni ej sprawdza typ zaznaczonego obiektui je eli nie jest to obiekt typu Range na ekranie wy wietlany jest odpowiedni komunikati procedura ko czy dzia anie

Sub CheckSelection() If TypeName(Selection) ltgt Range Then MsgBox Zaznacz zakres komoacuterek Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Identyfikowanie zaznacze wielokrotnychJak pami tasz Excel pozwala na jednoczesne zaznaczanie wielu obiektoacutew Aby to zrobi powiniene podczas zaznaczania obiektoacutew lub zakresoacutew trzyma wci ni ty klawisz CtrlZaznaczenia wielokrotne mog by przyczyn problemoacutew z wykonywaniem niektoacuterychmakr Przyk adowo nie mo esz skopiowa zakresu komoacuterek ktoacutery zosta utworzonypoprzez wiele zaznacze nieci g ych zakresoacutew komoacuterek Je eli sproacutebujesz wykonatak operacj Excel wy wietli na ekranie komunikat przedstawiony na rysunku 143

Makro przedstawione ni ej pokazuje w jaki sposoacuteb mo esz sprawdzi czy u ytkownikdokona zaznaczenia wielokrotnego i na tej podstawie wykona odpowiedni operacj

Sub MultipleSelection() If SelectionAreasCount gt 1 Then MsgBox Zaznaczenia wielokrotne nie s dozwolone Exit Sub End If hellip [Tutaj wstaw dalsz cz kodu procedury]End Sub

Przedstawiona procedura wykorzystuje metod Areas ktoacutera zwraca kolekcj wszystkichzakresoacutew w danym zaznaczeniu W a ciwo Count zwraca liczb obiektoacutew tej kolekcji

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 227

Rysunek 143Excel nie lubi

kiedy proacutebujeszkopiowa nie-ci g e zakresy

komoacuterek

Zmiana ustawie ExcelaChyba najbardziej u ytecznymi makrami s proste procedury ktoacutere zmieniaj jednolub kilka ustawie Excela Je li na przyk ad dojdziesz do wniosku e bardzo cz stoprzywo ujesz na ekran okno opcji programu Excel i zmieniasz jakie ustawienie takaoperacja z pewno ci b dzie bardzo dobrym kandydatem do napisania makraoszcz dzaj cego Twoacutej czas i u atwiaj cego zmian takiego ustawienia

W tym podrozdziale zaprezentuj dwa przyk ady procedur ktoacutere pokazuj w jakisposoacuteb mo na zmienia ustawienia Excela Ogoacutelne zasady dzia ania tych procedurmo esz z powodzeniem zastosowa do napisania w asnych makr zmieniaj cych inneustawienia Excela

Zmiana ustawie logicznych(opcje typu Boolean)Podobnie jak wy cznik wiat a opcje logiczne (typu Boolean) mog by albo w czonealbo wy czone Mo esz na przyk ad utworzy makro ktoacutere b dzie w cza o lub wy cza owy wietlanie podzia u arkusza na strony Kiedy wydrukujesz arkusz (lub skorzystaszz trybu podgl du wydruku) Excel wy wietla na arkuszu przerywane linie reprezentuj cemiejsca podzia u arkusza na strony wydruku Niektoacuterych u ytkownikoacutew (w czniez autorem tej ksi ki) takie zachowanie Excela irytuje Niestety jedynym sposobemwy czenia wy wietlania podzia u arkusza na strony jest otwarcie okna dialogowego Opcjeprogramu Excel przej cie na kart Zaawansowane a nast pnie przewijanie zawarto ci tejkarty a do odszukania opcji Poka podzia y stron Je eli podczas wy czania tej opcjikorzysta e z rejestratora makr przekonasz si e Excel generuje poni szy kod

Kup książkę Poleć książkę

228 Cz III Podstawy programowania

ActiveSheetDisplayPageBreaks = False

Z drugiej strony je eli podczas rejestrowania makra podzia y stron nie s widoczneExcel generuje taki kod

ActiveSheetDisplayPageBreaks = True

Takie informacje mog doprowadzi do wniosku e b dziesz musia napisa a dwamakra mdash jedno do w czania podgl du podzia u stron a drugie do jego wy czaniaNa szcz cie to nieprawda Procedura przedstawiona poni ej wykorzystuje operatorNot do zmiany warto ci logicznej True na False i odwrotnie Wykonanie proceduryTogglePageBreaks to prosty sposoacuteb na cykliczne w czanie i wy czanie podgl du podzia ustron arkusza

Sub TogglePageBreaks() On Error Resume Next ActiveSheetDisplayPageBreaks = Not _ ActiveSheetDisplayPageBreaksEnd Sub

Pierwsze polecenie informuje Excel e powinien ignorowa ewentualne b dy Przyk adowopodzia y stron nie s wy wietlane na arkuszach wykresoacutew Kiedy wprowadzisz takiepolecenie i sproacutebujesz wykona t procedur dla arkusza wykresu na ekranie nie pojawisi komunikat o b dzie

Techniki u ytej w procedurze TogglePageBreaks mo esz u ywa do zmiany dowolnychopcji logicznych (czyli takich ktoacuterych warto ciami s True albo False)

Zmiana innych opcji (typu non-Boolean)Do zmiany opcji ktoacutere nie s typu logicznego mo esz u ywa konstrukcji Select CaseW przyk adzie przedstawionym poni ej zmieniam tryb przeliczania skoroszytu z r cznegona automatyczny i odwrotnie i nakazuj wy wietlenie na ekranie komunikatu opisuj cegoaktualny tryb przeliczania arkusza

Sub ToggleCalcMode() Select Case ApplicationCalculation Case xlManual ApplicationCalculation = xlCalculationAutomatic MsgBox Automatyczne przeliczanie skoroszytu Case xlAutomatic ApplicationCalculation = xlCalculationManual MsgBox R czne przeliczanie skoroszytu End SelectEnd Sub

Techniki u ytej w procedurze ToggleCalcMode mo esz u ywa do zmiany dowolnychopcji ktoacutere nie posiadaj warto ci logicznych

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 22: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 227

Rysunek 143Excel nie lubi

kiedy proacutebujeszkopiowa nie-ci g e zakresy

komoacuterek

Zmiana ustawie ExcelaChyba najbardziej u ytecznymi makrami s proste procedury ktoacutere zmieniaj jednolub kilka ustawie Excela Je li na przyk ad dojdziesz do wniosku e bardzo cz stoprzywo ujesz na ekran okno opcji programu Excel i zmieniasz jakie ustawienie takaoperacja z pewno ci b dzie bardzo dobrym kandydatem do napisania makraoszcz dzaj cego Twoacutej czas i u atwiaj cego zmian takiego ustawienia

W tym podrozdziale zaprezentuj dwa przyk ady procedur ktoacutere pokazuj w jakisposoacuteb mo na zmienia ustawienia Excela Ogoacutelne zasady dzia ania tych procedurmo esz z powodzeniem zastosowa do napisania w asnych makr zmieniaj cych inneustawienia Excela

Zmiana ustawie logicznych(opcje typu Boolean)Podobnie jak wy cznik wiat a opcje logiczne (typu Boolean) mog by albo w czonealbo wy czone Mo esz na przyk ad utworzy makro ktoacutere b dzie w cza o lub wy cza owy wietlanie podzia u arkusza na strony Kiedy wydrukujesz arkusz (lub skorzystaszz trybu podgl du wydruku) Excel wy wietla na arkuszu przerywane linie reprezentuj cemiejsca podzia u arkusza na strony wydruku Niektoacuterych u ytkownikoacutew (w czniez autorem tej ksi ki) takie zachowanie Excela irytuje Niestety jedynym sposobemwy czenia wy wietlania podzia u arkusza na strony jest otwarcie okna dialogowego Opcjeprogramu Excel przej cie na kart Zaawansowane a nast pnie przewijanie zawarto ci tejkarty a do odszukania opcji Poka podzia y stron Je eli podczas wy czania tej opcjikorzysta e z rejestratora makr przekonasz si e Excel generuje poni szy kod

Kup książkę Poleć książkę

228 Cz III Podstawy programowania

ActiveSheetDisplayPageBreaks = False

Z drugiej strony je eli podczas rejestrowania makra podzia y stron nie s widoczneExcel generuje taki kod

ActiveSheetDisplayPageBreaks = True

Takie informacje mog doprowadzi do wniosku e b dziesz musia napisa a dwamakra mdash jedno do w czania podgl du podzia u stron a drugie do jego wy czaniaNa szcz cie to nieprawda Procedura przedstawiona poni ej wykorzystuje operatorNot do zmiany warto ci logicznej True na False i odwrotnie Wykonanie proceduryTogglePageBreaks to prosty sposoacuteb na cykliczne w czanie i wy czanie podgl du podzia ustron arkusza

Sub TogglePageBreaks() On Error Resume Next ActiveSheetDisplayPageBreaks = Not _ ActiveSheetDisplayPageBreaksEnd Sub

Pierwsze polecenie informuje Excel e powinien ignorowa ewentualne b dy Przyk adowopodzia y stron nie s wy wietlane na arkuszach wykresoacutew Kiedy wprowadzisz takiepolecenie i sproacutebujesz wykona t procedur dla arkusza wykresu na ekranie nie pojawisi komunikat o b dzie

Techniki u ytej w procedurze TogglePageBreaks mo esz u ywa do zmiany dowolnychopcji logicznych (czyli takich ktoacuterych warto ciami s True albo False)

Zmiana innych opcji (typu non-Boolean)Do zmiany opcji ktoacutere nie s typu logicznego mo esz u ywa konstrukcji Select CaseW przyk adzie przedstawionym poni ej zmieniam tryb przeliczania skoroszytu z r cznegona automatyczny i odwrotnie i nakazuj wy wietlenie na ekranie komunikatu opisuj cegoaktualny tryb przeliczania arkusza

Sub ToggleCalcMode() Select Case ApplicationCalculation Case xlManual ApplicationCalculation = xlCalculationAutomatic MsgBox Automatyczne przeliczanie skoroszytu Case xlAutomatic ApplicationCalculation = xlCalculationManual MsgBox R czne przeliczanie skoroszytu End SelectEnd Sub

Techniki u ytej w procedurze ToggleCalcMode mo esz u ywa do zmiany dowolnychopcji ktoacutere nie posiadaj warto ci logicznych

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 23: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

228 Cz III Podstawy programowania

ActiveSheetDisplayPageBreaks = False

Z drugiej strony je eli podczas rejestrowania makra podzia y stron nie s widoczneExcel generuje taki kod

ActiveSheetDisplayPageBreaks = True

Takie informacje mog doprowadzi do wniosku e b dziesz musia napisa a dwamakra mdash jedno do w czania podgl du podzia u stron a drugie do jego wy czaniaNa szcz cie to nieprawda Procedura przedstawiona poni ej wykorzystuje operatorNot do zmiany warto ci logicznej True na False i odwrotnie Wykonanie proceduryTogglePageBreaks to prosty sposoacuteb na cykliczne w czanie i wy czanie podgl du podzia ustron arkusza

Sub TogglePageBreaks() On Error Resume Next ActiveSheetDisplayPageBreaks = Not _ ActiveSheetDisplayPageBreaksEnd Sub

Pierwsze polecenie informuje Excel e powinien ignorowa ewentualne b dy Przyk adowopodzia y stron nie s wy wietlane na arkuszach wykresoacutew Kiedy wprowadzisz takiepolecenie i sproacutebujesz wykona t procedur dla arkusza wykresu na ekranie nie pojawisi komunikat o b dzie

Techniki u ytej w procedurze TogglePageBreaks mo esz u ywa do zmiany dowolnychopcji logicznych (czyli takich ktoacuterych warto ciami s True albo False)

Zmiana innych opcji (typu non-Boolean)Do zmiany opcji ktoacutere nie s typu logicznego mo esz u ywa konstrukcji Select CaseW przyk adzie przedstawionym poni ej zmieniam tryb przeliczania skoroszytu z r cznegona automatyczny i odwrotnie i nakazuj wy wietlenie na ekranie komunikatu opisuj cegoaktualny tryb przeliczania arkusza

Sub ToggleCalcMode() Select Case ApplicationCalculation Case xlManual ApplicationCalculation = xlCalculationAutomatic MsgBox Automatyczne przeliczanie skoroszytu Case xlAutomatic ApplicationCalculation = xlCalculationManual MsgBox R czne przeliczanie skoroszytu End SelectEnd Sub

Techniki u ytej w procedurze ToggleCalcMode mo esz u ywa do zmiany dowolnychopcji ktoacutere nie posiadaj warto ci logicznych

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 24: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 229

Praca z wykresamiWykresy w Excelu s wr cz prze adowane najroacute niejszymi obiektami st d ichprzetwarzanie za pomoc kodu VBA mo e by niez ym wyzwaniem

Uruchomi em Excel 2013 w zakresie komoacuterek A1A3 wpisa em kilka liczb i zaznaczy emten obszar arkusza Nast pnie w czy em rejestrator makr i dla tych trzech punktoacutewdanych utworzy em prosty wykres kolumnowy Poacute niej usun em wy wietlanie siatkiwykresu i zmieni em jego tytu Oto zarejestrowane makro

Sub Macro1() Zarejestrowane w Excelu 2013 ActiveSheetShapesAddChart2(201 xlColumnClustered)Select ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartSetElement (msoElementPrimaryValueGridLinesNone) ActiveChartChartTitleSelect ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Kiedy zobaczy em ten kod by em nieco zaskoczony poniewa nigdy wcze niej nies ysza em o metodzie AddChart2 Okaza o si e metoda AddChart2 to nowo ktoacuterazosta a wprowadzona w Excelu 2013 Je eli wykonasz podobn operacj z rejestrowaniemmakra w Excelu 2010 wynik b dzie nast puj cy

Sub Macro1() Zarejestrowane w Excelu 2010 ActiveSheetShapesAddChartSelect ActiveChartChartType = xlColumnClustered ActiveChartSetSourceData Source=Range(Arkusz1$A$1$A$3) ActiveChartAxes(xlValue)MajorGridlinesSelect SelectionDelete ActiveChartSetElement (msoElementChartTitleAboveChart) ActiveChartChartTitleText = To jest moacutej wykresEnd Sub

Co to wszystko oznacza Ano tyle e makra zarejestrowane w Excelu 2013 po prostu nieb d dzia a y w Excelu 2010 ale makra rejestrowane w Excelu 2010 dzia aj w Excelu 2013Innymi s owy makra Excela 2010 s kompatybilne w przoacuted (czyli zachowuj zgodnoz przysz ymi wersjami Excela forward compatibility) a makra Excela 2013 zosta y pozbawionekompatybilno ci wstecznej (backward compatibility) czyli nie zachowuj zgodno ciz poprzednimi wersjami

Przeci tny u ytkownik Excela 2013 prawdopodobnie nie wie nic na temat kompatybilno cimakr w odniesieniu do tworzenia wykresoacutew Je eli jednak udost pnisz takie makrokomu kto u ywa starszej wersji Excela bardzo szybko si o tym dowiesz WnioskiGdy u ywasz rejestratora makr do tworzenia makr przetwarzaj cych wykresy powinieneprzetestowa takie makra na wszystkich wersjach Excela ktoacutere b d wykorzystywanedo uruchamiania takiego makra

Kup książkę Poleć książkę

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 25: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

230 Cz III Podstawy programowania

Metoda AddChart kontra metoda AddChart2Poni ej przedstawiam oficjaln sk adni metody AddChart (metoda jest kompatybilnaz Excelem 2007 i wersjami poacute niejszymi)

AddChart(Type Left Top Width Height)

A oto sk adnia metody AddChart2 (ktoacutera jest kompatybilna wy cznie z Excelem 2013)

AddChart2 (Style XlChartType Left Top Width Height NewLayout)

Jak wida metoda AddChart2 pobiera kilka dodatkowych argumentoacutew ktoacutere okre laj stylwykresu typ wykresu oraz jego uk ad Z drugiej strony metoda AddChart tworzy poprostu pusty wykres a wszystkie detale musz by zdefiniowane za pomoc dodatkowychpolece

Analiza zarejestrowanego kodu ujawnia kilka rzeczy ktoacutere mog by pomocne podczastworzenia w asnych makr przetwarzaj cych wykresy Je eli jeste ciekawy rzu okiemna zmodyfikowan r cznie procedur ktoacuterej zadaniem jest utworzenie wykresu na baziezaznaczonego zakresu komoacuterek

Sub CreateAChart() Dim ChartData As Range Dim ChartShape As Shape Dim NewChart As Chart

Tworzenie zmiennych obiektowych Set ChartData = ActiveWindowRangeSelection Set ChartShape = ActiveSheetShapesAddChart Set NewChart = ChartShapeChart

With NewChart ChartType = xlColumnClustered SetSourceData Source=Range(ChartDataAddress) SetElement (msoElementLegendRight) SetElement (msoElementChartTitleAboveChart) ChartTitleText = To jest moacutej wykres End WithEnd Sub

To makro jest kompatybilne z Excelem 2007 i wersjami poacute niejszymi Makro tworzygrupowany wykres kolumnowy wraz z legend i tytu em Jest to podstawowa wersjamakra ktoacutera w atwy sposoacuteb mo e by dostosowana do Twoich indywidualnych wymaga Jednym ze sposoboacutew mo e by rejestrowanie makra podczas modyfikowania wykresui nast pnie u ywanie takiego kodu jako wzorca w swoich procedurach

Swoj drog dalej w tym rozdziale omoacutewi konstrukcj With End-With ktoacutera znakomicieu atwia prac z obiektami oszcz dza sporo bdquostukania w klawiatur rdquo i znakomicieprzyczynia si do zwi kszenia przejrzysto ci kodu

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 26: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 231

Je eli musisz napisa makro VBA ktoacuterego zadaniem b dzie przetwarzanie wykresoacutewmusisz zapozna si z kilkoma wa nymi okre leniami Wykres osadzony (embedded chart)na arkuszu to obiekt typu ChartObject Obiekt ChartObject mo esz aktywowa podobniejak aktywujesz arkusz Polecenie przedstawione poni ej aktywuje obiekt ChartObjecto nazwie Wykres 1

ActiveSheetChartObjects(Wykres 1)Activate

Po aktywowaniu danego wykresu mo esz si do niego odwo ywa w kodzie VBA zapomoc obiektu ActiveChart Je eli wykres znajduje si na osobnym arkuszu wykresustaje si wykresem aktywnym w chwili kiedy aktywujesz arkusz wykresu

Obiekt ChartObject jest roacutewnie obiektem typu Shape co mo e by nieco myl ceW rzeczywisto ci kiedy Twoacutej kod VBA tworzy wykres ca a operacja rozpoczyna siod utworzenia nowego obiektu Shape (kszta t) Wykres mo esz roacutewnie aktywowapoprzez zaznaczenie obiektu Shape przechowuj cego wykres

ActiveSheetShapes(Wykres 1)Select

W moich programach wol u ywa obiektu ChartObject dzi ki czemu nie mamadnych w tpliwo ci e pracuj z wykresami

Kiedy klikasz wykres osadzony lewym przyciskiem myszy Excel zaznacza obiekt znajduj cysi wewn trz obiektu ChartObject Je eli chcesz zaznaczy sam obiekt ChartObject powinieneklikaj c wykres trzyma wci ni ty klawisz Ctrl

Modyfikowanie typu wykresuA teraz przeczytasz zdanie ktoacutere mo e Ci nieco zdezorientowa obiekty ChartObjectspe niaj rol konteneroacutew dla obiektoacutew Chart Je li masz jakie w tpliwo ci powinieneto zdanie kilka razy spokojnie przeczyta i wtedy na pewno wszystko stanie si jasne

Aby zmodyfikowa wykres za pomoc VBA nie musisz tego wykresu aktywowa MetodaChart mo e zwraca wykres przechowywany w kontenerze ChartObject Nadal niejasneProcedury przedstawione poni ej daj taki sam efekt mdash zmieniaj typ wykresu o nazwieWykres 1 na wykres powierzchniowy Pierwsza procedura najpierw aktywuje wykresi nast pnie pracuje z aktywnym wykresem Druga procedura nie aktywuje wykresua zamiast tego wykorzystuje w a ciwo Chart ktoacutera zwraca obiekt Chart zawartyw kontenerze ChartObject

Sub ModifyChart1() ActiveSheetChartObjects(Wykres 1)Activate ActiveChartType = xlAreaEnd Sub

Sub ModifyChart2() ActiveSheetChartObjects(Wykres 1)ChartType = xlAreaEnd Sub

Kup książkę Poleć książkę

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 27: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

232 Cz III Podstawy programowania

Przechodzenie w p tliprzez elementy kolekcji ChartObjectsProcedura przedstawiona poni ej wprowadza zmiany do wszystkich wykresoacutewosadzonych na aktywnym arkuszu Procedura wykorzystuje p tl For Each-Nextdo przechodzenia kolejno przez wszystkie obiekty kolekcji ChartObjects i dla ka degoobiektu Chart zmienia jego w a ciwo Type

Sub ChartType() Dim cht As ChartObject For Each cht In ActiveSheetChartObjects chtChartType = xlArea Next chtEnd Sub

Makro przedstawione poni ej wykonuje tak sam operacj ale na wszystkich arkuszachwykresoacutew w aktywnym skoroszycie

Sub ChartType2() Dim cht As Chart For Each cht In ActiveWorkbookCharts chtType = xlArea Next chtEnd Sub

Modyfikowanie w a ciwo ci wykresuProcedura przedstawiona ni ej zmienia czcionk legendy wykresu dla wszystkichwykresoacutew osadzonych na aktywnym arkuszu Makro wykorzystuje p tl For-Nextdo przetwarzania wszystkich obiektoacutew ChartObject

Sub LegendMod() Dim chtObj As ChartObject For Each chtObj In ActiveSheetChartObjects With chtObjChartLegendFont Name = Calibri FontStyle = Bold Size = 12 End With Next chtObjEnd Sub

Zwroacute uwag na fakt e obiekt Font jest zawarty w obiekcie Legend ktoacutery jest zawartyw obiekcie Chart ktoacutery z kolei jest zawarty w kolekcji ChartObjects Czy teraz rozumieszdlaczego to wszystko jest nazywane hierarchi obiektoacutew

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 28: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 233

Zmiana formatowania wykresoacutewTen przyk ad odnosi si do kilku roacute nych typoacutew formatowania aktywnego wykresuUtworzy em to makro rejestruj c moje poczynania podczas formatowania wykresuNast pnie oczy ci em nieco uzyskany kod poprzez usuni cie zb dnych wierszy

Sub ChartMods() ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Przed wykonaniem tego makra musisz aktywowa wykres Wykresy osadzone mo eszaktywowa poprzez ich klikni cie lewym przyciskiem myszy Aby aktywowa wykresna arkuszu wykresu kliknij kart arkusza

Aby upewni si e wykres jest zaznaczony mo esz w kodzie procedury umie cipolecenie ktoacutere b dzie sprawdza o czy wykres jest aktywny Poni ej znajdziesz kodzmodyfikowanej procedury ktoacutera mdash je eli wykres nie jest aktywny mdash wy wietla naekranie odpowiedni komunikat i ko czy dzia anie

Sub ChartMods2() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If ActiveChartType = xlArea ActiveChartChartAreaFontName = Calibri ActiveChartChartAreaFontFontStyle = Regular ActiveChartChartAreaFontSize = 9 ActiveChartPlotAreaInteriorColorIndex = xlNone ActiveChartAxes(xlValue)TickLabelsFontBold = True ActiveChartAxes(xlCategory)TickLabelsFontBold = _ True ActiveChartLegendPosition = xlBottomEnd Sub

Poni ej znajdziesz kolejn wersj procedury ktoacutera wykorzystuje konstrukcj With-EndWith do zaoszcz dzenia bdquoklepaniardquo w klawiatur i (co wa niejsze) zwi kszenia optymalno cii przejrzysto ci kodu I znowu wyskakujemy nieco przed orkiestr ale je eli chcesz mo eszju teraz przeskoczy par stron do przodu i przeczyta opis polecenia With-End With

Sub ChartMods3() If ActiveChart Is Nothing Then MsgBox Aktywuj wykres Exit Sub End If

Kup książkę Poleć książkę

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 29: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

234 Cz III Podstawy programowania

With ActiveChart Type = xlArea ChartAreaFontName = Calibri ChartAreaFontFontStyle = Regular ChartAreaFontSize = 9 PlotAreaInteriorColorIndex = xlNone Axes(xlValue)TickLabelsFontBold = True Axes(xlCategory)TickLabelsFontBold = True LegendPosition = xlBottom End WithEnd Sub

No coacute hellip w zakresie zastosowania VBA do przetwarzania wykresoacutew uda o Ci si w tymrozdziale jedynie nieco bdquolizn rdquo podstawowe elementy tego rozbudowanego zagadnieniaTemat jest niezwykle szeroki ale mam nadziej e to czego dowiedzia e si w tymrozdziale pobudzi o Twoj ciekawo i nakierowa o poszukiwania we w a ciwymkierunku

Jak przyspieszy dzia anie kodu VBAVBA jest szybki ale nie zawsze wystarczaj co szybki (inna sprawa e programykomputerowe nigdy nie s wystarczaj co szybkie przynajmniej w opinii wi kszo ciu ytkownikoacutew) W tym podrozdziale poka kilka trikoacutew i sztuczek ktoacutere b dzieszmoacuteg wykorzysta do przyspieszenia dzia ania swoich makr

Wy czanie aktualizacji ekranuKiedy uruchomisz makro mo esz wygodnie wyci gn si na fotelu i ze spokojemobserwowa na ekranie jego post py Cho takie post powanie mo e by do pewnegoczasu ciekawe to jednak kiedy makro zostanie ju napisane i przetestowane wy wietlaniebie cych wynikoacutew dzia ania mo e by irytuj ce i niepotrzebnie zwalnia dzia aniemakra Na szcz cie Excel pozwala na wy czenie aktualizacji ekranu na czas dzia aniamakra co mo e znacz co przyspieszy jego dzia anie Aby wy czy aktualizacj ekranupowiniene u y polecenia

ApplicationScreenUpdating = False

Je eli chcesz aby u ytkownicy widzieli co si dzieje na ekranie podczas dzia aniamakra powiniene w czy aktualizacj ekranu za pomoc polecenia

ApplicationScreenUpdating = True

Aby zademonstrowa roacute nic w szybko ci dzia ania powiniene uruchomi makroprzedstawione poni ej ktoacuterego zadaniem jest wype nianie liczbami du ego zakresukomoacuterek

Sub FillRange() Dim r as Long c As Long Dim Number as Long

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 30: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 235

Number = 0 For r = 1 To 50 For c = 1 To 50 Number = Number + 1 Cells(r c)Select Cells(r c)Value = Number Next c Next rEnd Sub

Procedura zaznacza ka d komoacuterk zakresu i wpisuje do niej kolejn liczb Teraz napocz tku procedury wstaw polecenie przedstawione poni ej i ponownie uruchomprocedur

ApplicationScreenUpdating = False

Z pewno ci zauwa y e e zakres zosta wype niony znacznie szybciej a rezultaty nieby y widoczne na ekranie a do zako czenia dzia ania procedury i automatycznegoprzywroacutecenia aktualizacji ekranu

Kiedy pracujesz nad testowaniem procedury i wyszukiwaniem b doacutew w kodzie dzia anieprogramu mo e nagle zosta przerwane bez automatycznego przywroacutecenia aktualizacjiekranu (tak te mi si to zdarzahellip) W takiej sytuacji okno Excela pozostaje bdquomartwerdquoi wydaje si e program nie reaguje na Twoje pro by i gro by Rozwi zanie tego problemujest proste mdash przejd do okna edytora VBE i w oknie Immediate wpisz polecenie

ApplicationScreenUpdating = True

Wy czenie automatycznegoprzeliczania skoroszytuZa oacute my e masz skoroszyt zawieraj cy wiele z o onych formu Mo esz znacz coprzyspieszy dzia anie makra je eli na czas jego realizacji prze czysz Excel w trybr cznego przeliczania skoroszytu Kiedy makro zako czy dzia anie powiniene ponownieprze czy Excel w tryb automatycznego przeliczania skoroszytu

Polecenie przedstawione poni ej prze cza Excel w tryb r cznego przeliczania skoroszytu

ApplicationCalculation = xlCalculationManual

Aby przywroacuteci tryb automatycznego przeliczania skoroszytu u yj polecenia

ApplicationCalculation = xlCalculationAutomatic

Je eli kod VBA Twojego makra wykorzystuje wyniki dzia ania formu arkuszowychpami taj e prze czenie Excela w tryb r cznego przeliczania arkusza oznacza i warto cikomoacuterek nie zostan zaktualizowane a do momentu kiedy jawnie nie bdquopoprosiszrdquoExcela aby to zrobi

Kup książkę Poleć książkę

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 31: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

236 Cz III Podstawy programowania

Wy czanie irytuj cych ostrze eJak wiesz makra mog automatycznie wykonywa ca e mnoacutestwo roacute nych operacji W wieluprzypadkach mo esz po prostu uruchomi makro i spokojnie wybra si do kuchnii zaparzy fili ank swojej ulubionej kawy Jednak niektoacutere operacje wykonywane przezExcel mog spowodowa wy wietlenie na ekranie komunikatu ktoacuterego potwierdzeniewymaga interakcji ze strony u ytkownika Je li na przyk ad Twoje makro proacutebuje usunarkusz na ktoacuterym znajduj si niepuste komoacuterki dzia anie makra zostanie automatyczniezatrzymane na ekranie pojawi si komunikat przedstawiony na rysunku 144 i Excelb dzie oczekiwa na Twoj reakcj Obecno tego typu komunikatoacutew oznacza e niemo esz pozostawi Excela bez nadzoru na czas dzia ania makrahellip dopoacuteki nie poznaszpewnego triku

Rysunek 144Mo esz naka-za Excelowizawieszenie

wy wietlaniatakich komuni-katoacutew podczasdzia ania makra

Oto ca a sztuczka aby unikn wy wietlania takich komunikatoacutew z ostrze eniamiw kodzie procedury VBA umie polecenie

ApplicationDisplayAlerts = False

Excel wykonuje domy lne operacje dla tego typu komunikatoacutew Podczas usuwaniaarkusza domy ln operacj jest Delete (co w a nie przed chwil zobaczy e ) Je eli niejeste pewien jaka operacja jest domy lna przeprowad test i przekonaj si sam

Kiedy procedura ko czy dzia anie Excel automatycznie nada w a ciwo ci DisplayAlertswarto True (czyli przywroacuteci jej normalny stan) Je eli chcesz przywroacuteci wy wietlaniekomunikatoacutew przed zako czeniem dzia ania procedury powiniene u y w kodziepolecenia

ApplicationDisplayAlerts = True

Upraszczanie odwo a do obiektoacutewJak ju sam zd y e si zorientowa odwo ania do obiektoacutew mog by bardzorozbudowane Przyk adowo pe ne kwalifikowane odwo anie do obiektu Range mo ewygl da nast puj co

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Kup książkę Poleć książkę

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 32: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

Rozdzia 14 Przyk ady i techniki programowania w j zyku VBA 237

Je eli Twoje makro cz sto korzysta z takiego zakresu powiniene rozwa y utworzeniezmiennej obiektowej za pomoc polecenia Set Przyk adowo polecenie przedstawioneponi ej przypisuje obiekt Range do zmiennej obiektowej o nazwie Rate

Set Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Po zdefiniowaniu zmiennej obiektowej mo esz zamiast d ugiego odwo ania u ywanowo utworzonej zmiennej obiektowej Aby na przyk ad zmieni warto komoacuterkio nazwie StawkaProwizji mo esz u y polecenia

RateValue = 085

Jak wida jest to znacznie atwiejsze do wpisania (i zrozumienia) ni to samo poleceniew pe nej postaci

Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)Value = 085

Oproacutecz upraszczania kodu zastosowanie zmiennych obiektowych powoduje roacutewnieznaczne zwi kszenie szybko ci dzia ania kodu Twojego makra Wiele razy widzia emju makra ktoacutere po utworzeniu zmiennych obiektowych zwi kszy y szybko dzia anianawet dwukrotnie

Deklarowanie typoacutew zmiennychZazwyczaj nie musisz si martwi o typ danych ktoacutery przypisujesz do zmiennej Excelpotrafi si tym doskonale zaj Je eli masz zmienn o nazwie MyVar mo esz do niejprzypisa dowoln liczb a poacute niej w dalszej cz ci procedury mo esz do tej samejzmiennej przypisa na przyk ad ci g tekstu

Je eli chcesz aby Twoje procedury VBA dzia a y tak szybko jak to tylko mo liwe (i abyprzy okazji unikn kilku potencjalnych i naprawd paskudnych problemoacutew) powinienezawsze poinformowa Excel o tym jakie typy danych b d przypisywane do poszczegoacutelnychzmiennych Takie post powanie jest nazywane deklarowaniem typoacutew zmiennych (wi cejszczegoacute owych informacji na ten temat znajdziesz w rozdziale 7) Powiniene jaknajszybciej wyrobi sobie nawyk deklarowania wszystkich zmiennych ktoacuterych u ywaszw swoich programach

Ogoacutelnie rzecz bior c powiniene zawsze u ywa takich typoacutew danych ktoacutere wystarczdo obs ugi Twoich danych przy wykorzystaniu jak najmniejszej liczby bajtoacutew pami ciKiedy VBA przetwarza dane szybko dzia ania programu zale y od liczby bajtoacutew jakieVBA ma do bdquoprzerobieniardquo Innymi s owy im mniej bajtoacutew zajmuj dane tym szybciejVBA mo e je przetwarza Wyj tkiem od tej regu y s dane typu Integer mdash je eliszybko dzia ania programu jest czynnikiem krytycznym powiniene zawsze stosowadane typu Long

Je eli u ywasz zmiennych obiektowych (takich jakie opisywa em w poprzednimpodrozdziale) mo esz zadeklarowa tak zmienn jako zmienn okre lonego typuobiektowego A oto przyk ad takiej deklaracji

Kup książkę Poleć książkę

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 33: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

238 Cz III Podstawy programowania

Dim Rate as RangeSet Rate = Workbooks(MoacutejSkoroszytxlsx)Worksheets(Arkusz1) _ Range(StawkaProwizji)

Zastosowanie struktury With-End WithCzy chcesz ustawi szereg w a ciwo ci wybranego obiektu Twoacutej kod b dzie dzia aznacznie szybciej gdy u yjesz struktury With-End With Dodatkow zalet zastosowaniatej struktury jest znaczne zwi kszenie czytelno ci kodu

Fragment kodu przedstawiony poni ej nie wykorzystuje struktury With-End With

SelectionHorizontalAlignment = xlCenterSelectionVerticalAlignment = xlCenterSelectionWrapText = TrueSelectionOrientation = 0SelectionShrinkToFit = FalseSelectionMergeCells = False

A teraz ten sam fragment kodu ale zapisany z u yciem struktury With-End With

With Selection HorizontalAlignment = xlCenter VerticalAlignment = xlCenter WrapText = True Orientation = 0 ShrinkToFit = False MergeCells = FalseEnd With

Je eli przedstawiona struktura wydaje Ci si znajoma jest tak prawdopodobnie dlategoe rejestrator makr u ywa struktury With-End With w ka dej sytuacji w ktoacuterej jest to mo liwe

a poza tym struktura taka pojawi a si ju wcze niej w kilku przyk adach w tym rozdziale

Kup książkę Poleć książkę

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 34: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

SkorowidzA

Add-In 34aplikacja

bezpiecze stwo 384jako niezale ny program 33oparta na makrach 32

arkusz 34aktywacja 180aktywny 169dodawanie 61nazwa 169okno kodu 180wykresu 72

Auto Data Tips 65Auto Indent 65Auto List Members 64 78 80 144 150Auto Quick Info 65Auto Syntax Check 64automatyzacja 30

Bbiblioteka obiektoacutew Patrz obiekt bibliotekaBie cy obszar 220blok

instrukcji jako komentarz 108tekstu 31

b d 76 146WARTO 352czasu wykonania 116eliminowanie 215graniczny 204ignorowanie 197 199kod 144 146kompilacji 60 110komunikat 146 Patrz komunikat o b dzienumer 200obs uga 192 195 196 197 199

poprawianie Patrz odpluskwianieprogramowania 191 203 204 205

kontekstem operacji 204logiczny 204typ danych 204warunki graniczne 204wersja programu 204

przechwytywanie 195rozpoznawanie 200sk adni 64 136 204Subscript out of range 376wykonania 191 196zakresu 127zamierzony 201

breakpoint Patrz punkt przerwania

CChart 34 70 71 231 232Charts 72ci g znakoacutew 142 147 249collection Patrz kolekcjaComment Block 108Custom UI Editor for Microsoft Office 325czas 147 186

systemowy 156zapis liczbowy 187zegarowy 119

czcionka 134

Ddane

kopiowanie 185poprawno 185tekstowe 118typ 82 107 110 237

b dy 204Boolean 111 134

Kup książkę Poleć książkę

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 35: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

390 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

danetyp

Byte 111Currency 111Date 111 119definiowanie 95domy lny 111Double 111Integer 111Long 111Object 111predefiniowany 111przydzia dynamiczny 110Single 111String 111Variant 111 132 134

wklejanie 185data 119 146 147

cz 146format 120kroacutetka 120obliczenia 146systemowa 146zamiana na liczb seryjn 146

debugger 216debugowanie Patrz odpluskwianieDefault to Full Module View 66deklaracja 58Deweloper 39dodatek 34 48 54 361 362 363

Analysis ToolPak 208 361 363bezpiecze stwo 369modyfikowanie 371obiekt UserForm 362opis 368otwieranie 363 369Power Utility Pak 361Solver 361tworzenie 32 364 365 369udost pnianie 370

Dostosowywanie Wst ki 256Drag-and-Drop Text Editing 66drzewo 53 54

Eedytor VBE Patrz VBEekran

aktualizacja 235 377wy czenie aktualizacji 234

element graficzny 261embedded chart Patrz wykres osadzonyetykieta 125 154Excel

ustawienia 227 228wersja 35 229 387

Ffolder

nazwa 146zaufany 23

formant 259 260 275ActiveX 88CheckBox 261 279ComboBox 261 280 303CommandButton 261 265 281dodawanie 276 277etykieta 278Frame 261 281 292grafika 278Image 261 282jakoo kontener 292klawisz skroacutetu 292kolejno tabulacji 291Label 261 283 287 310ListBox 261 283 284 303MultiPage 261 284 292 294 315 316nawigacja za pomoc klawiatury 291nazwa 264 278obiektu CommandBar 331 332OptionButton 261 267 276 280 285 309pozycja w oknie 278 289 290RefEdit 261 286rozmiar 278 290ScrollBar 261 286SpinButton 261 287 310TabStrip 261 288TextBox 261 288 296 310t o 278ToggleButton 261 289warto 278widoczno 278w a ciwo 261 262 277 278

Accelerator 278 279 285AutoSize 278 288BackColor 278BackStyle 278BeginGroup 332

Kup książkę Poleć książkę

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 36: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

Skorowidz 391

BorderStyle 282BuiltIn 332Cancel 281Caption 278 282 332ControlSource 280 284 285 287 288Default 281Enabled 332FaceID 332GroupName 285Height 278IntegralHeight 284 288LargeChange 287Left 278ListCount 303ListIndex 303 305ListRows 280ListStyle 280 284Max 287MaxLength 288metody 303Min 287MultiLine 288MultiSelect 284 303 306Name 278OnAction 332Picture 278 282PictureSizeMode 282RowSource 280 284ScrollBars 289Selected 303SmallChange 287Style 280 285TextAlign 278 289ToolTipText 333Top 278Value 278 280 284 285 287 303Visible 278 332Width 278WordWrap 289zmiana 277

zaznaczanie 290format

XLA 362XLAM 362xlsm 45 376XLSM 362xlsx 45 376

formularz UserForm Patrz UserForm

formu a 134nazwa 44odpowiednik angielski 44tablicowa 355

funkcja 33 58 59 81 141 344Patrz te metodaAbs 146argument 82argumenty 345 349

opcjonalne 351opis 360

arkuszowa 343 358 375ograniczenia 344

Array 146bezargumentowa 346Choose 146Chr 146CurDir 146Date 142 146DateAdd 146DateDiff 146DatePart 146DateSerial 146DateValue 146Day 146Dir 146D 142dwuargumentowa 348Err 146Error 146Exp 146FileLen 143 146Fix 146Format 146GetOpenFilename 250GetSetting 146Hour 146InputBox 144 146 149 154 195 225 242

247 248 249argumenty 248pobranie liczby 249

InStr 146InStrRev 146Int 146IsArray 146IsDate 146IsEmpty 146IsError 146IsMissing 146

Kup książkę Poleć książkę

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 37: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

392 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

funkcjaIsNull 147IsNumeric 147 193jednoargumentowa 346LARGE 148LBound 147LCase 147 270Left 147Len 142 147MAX 148Mid 147MIN 148Minute 147MOD 122 151Month 147MonthName 143MsgBox 74 142 144 147 149 206 242 247

argumenty 242przyciski 245

nazwa 83 112Now 142 147opakowuj ca 353opis 358pasywna 344PMT 148Proper 270Replace 147RGB 135 147Right 147Rnd 147Second 147Shell 144 147Space 147Split 147Sqr 147StrConv 270String 147Time 142 147Timer 147TimeSerial 147TimeValue 147 187Trim 147tworzenie 31 345TypeName 144 147UBound 147UCase 147 257 270u ytkownika 141 151Val 147VLOOKUP 149

wbudowanaj zyka VBA 141 142 144podpowiedzi 144programu Excel 141 145 150 151

Weekday 147w asna Patrz funkcja u ytkownikawykrywanie b doacutew 352WYSZUKAJPIONOWO 149wy wietlanie informacji 65wywo anie z procedury Sub 352wywo ywanie 82 89 90Year 147ZWIELKIEJLITERY 270

Ggenerator liczb pseudolosowych 353godzina 146

d uga 120format 119

Graphical User Interface Patrz GUIGUI 259

Hhas o 54 362 369 376 384

Iidentyfikator zadania 144instrukcja

ElseIf 157Exit For 163Exit Sub 154GoTo 125 153 154 155If-Then Patrz struktura If-ThenOn Error 195 196 197On Error GoTo 197On Error Resume 197 198On Error Resume Next 189 197 199 215Option Explicit 60 64 112przypisania 120ReDim 124Resume 197 198Resume Next 197Step 163warunkowa 95

IntelliSense 64interfejs u ytkownika graficzny Patrz GUI

Kup książkę Poleć książkę

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 38: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

Skorowidz 393

Jj zyk

makr 30programowania 30XLM 36XML 325

Kkarta

Deweloper 363 Patrz DeweloperDODATKI 329Plik 363zawieraj ca formanty 261

klawisz Esc 219kod

ANSI 146spaghetti 155

kolekcja 34 71Addins 361ChartObject 232CommandBars 330element 71metoda 77przegl danie 168Sheets Patrz Sheetszakresoacutew 226

kolor 135motywu 135RGB 147standardowy 135TintAndShade 135vbBlack 135vbBlue 135vbCyan 135vbGreen 135vbMagenta 135vbRed 135vbWhite 135vbYellow 135wype nienia 135

kolumny ukrywanie 61komentarz 44 107 108 216 385komoacuterka 73

adresu wprowadzanie 261format 185niepusta 223pusta 218

warto ci wprowadzanie 225zaznaczanie 219 221

ca ego wiersza 221ca ej kolumny 221do ko ca kolumny 220 377do ko ca wiersza 220

komunikato b dzie 146 174wymagaj cy potwierdzenia 236

komunikatem 147kontener 34kontrolka formularza 87 88kszta t 34 84 87 88

Lliczba

ca kowita 110cz ca kowita 146e 146formatowanie 132pseudolosowa 353rzeczywista 110warto bezwzgl dna 146

lista 261 303element 304 306rozwijana 261 280sortowanie 356

logarytm naturalny 146lokalizacja zaufana 23 46 47

a cuch znakoacutew 110 118 119 136 142 354o sta ej d ugo ci 119o zmiennej d ugo ci 119poroacutewnywanie 355

Mmakro 30 60 82 Patrz te procedura Sub

programbezpiecze stwo 45 47instrukcje nadmiarowe 44klawisz skroacutetu 100kod 42lista 63lokalizacja 101modyfikacja 44

Kup książkę Poleć książkę

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 39: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

394 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

makronazwa 100rejestrator 58 61 82 93 95 98 375

ograniczenia 95opcje 100wydajno 101 218

rejestrowanie 31 41 55 88 93 95w trybie odwo a bezwzgl dnych 96w trybie odwo a wzgl dnych 97

testowanie 272ustawienia 23 46

menu 331podr czne 329

Cell 335Excel 2003 338Excel 2013 336modyfikacja 334resetowanie 334wy czanie 337wy wietlanie 329

metoda 35 127 Patrz te funkcjaAdd 77AddChart 230AddChart2 229 230Areas 226argument 76Cells 129Clear 138ClearContents 76Copy 138 219Delete 139End 221ExecuteMso 255Export 318FileDialog 242GetOpenFilename 242 251

argumenty 251GetSaveAsFilename 242 253InputBox 242 249Intersect 224OnTime 187 188Paste 138SaveCopyAs 179Select 137SpecialCells 223 224 273

miesi c 143 147 355model obiektowy 34 69 110

modu 54 154Code 263dodawanie 55 94limit znakoacutew 58przewijanie w oknie 66sekcja Declarations 115tworzenie 57 58usuwanie 55

Nnarz dzie Object Browser Patrz Object Browser

Oobiekt 34 69

ActiveChart 231Addin 70Add-In Patrz Add-InApplication 34 70 72biblioteka 79Chart Patrz ChartChartObject 231CommandBar 329 330 338

formanty 331 332CommandBars 255Comment 70eksportowanie 56Err 200FileDialog 254hierarchia 34 69Hyperlink 70importowanie 56kontener Patrz kontenermetoda 74 76 80 Patrz metodaName 70numer indeksu 72odwo anie Patrz odwo anieokno Code 53PageSetup 70PivotTable 70 Patrz PivotTableRange 70 Patrz RangeShape 231Ten_skoroszyt 54UserForm 259VBProject 70Window 70w a ciwo Patrz w a ciwoWorkbook Patrz Workbook

Kup książkę Poleć książkę

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 40: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

Skorowidz 395

Worksheet Patrz WorksheetWorksheetFunction 70 145wskazywanie 71zakresu Patrz Rangezdarzenie Patrz zdarzenie

Object Browser 78 79object-oriented programming Patrz

programowanie zorientowane obiektowoobs uga techniczna 33odpluskwianie 33 54 204 205 208 273

metody 205narz dzia 209

odwo aniebezwzgl dne 94 96 133do obiektu 236do zakresu 129 130jednoznaczne Patrz odwo anie pe nepe ne 73 74upraszczanie 73w pe ni kwalifikowane Patrz odwo anie pe newzgl dne 94 96 97 130

Office Compatibility Pack 37okno

dialogowe 241 253 258dostosowywanie 244pobieranie odpowiedzi 243u ytkownika Patrz UserFormwbudowane 242 254Wstawianie funkcji 358wy wietlanie 243

Immediate 84Properties 261Toolbox 260wprowadzania danych 146

OOP Patrz programowanie zorientowaneobiektowo

operator 121dodawania 121dzielenia 121dzielenia ca kowitego 121konkatenacji ci goacutew znakoacutew 121 122 207kropki 72 73Like 355logiczny

alternatywy 122alternatywy wykluczaj cej 122And 122Eqv 122Imp 122

implikacji 122koniunkcji 122negacji 122Not 122Or 122roacutewnowa no ci 122XoR 122

logiczny 122mno enia 121Mod 121 122 151modulo 121odejmowania 121pot gowania 121priorytet 122znaku roacutewno ci 109

Option Explicit 215 384

Ppasek

post pu zadania Patrz wska nikpost pu zadania

przewijania 261 286 289szybkiego dost pu 272

umieszczanie procedur 299 328p tla 95 162 Patrz te struktura

Do-Until 153 154 168Do-While 153 154 167For Each-Next 168 222 232For-Next 153 154 162 232

czas wykonania 165z instrukcj Exit For 163z instrukcj Step 163zagnie d ona 165

pierwiastek kwadratowy 147PivotTable 34plik

liczba bajtoacutew 146nazwa 146 250PERSONALXLSB 54 101cie ka 146

wielko 143pluskwa Patrz b d programowaniapodprogram 59Poka podzia y stron 227pokr t o 261 287 310pole

etykiety 261 283grupy 261 281

Kup książkę Poleć książkę

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 41: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

396 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

polekarty 261 288kombi 261 280listy 261 280 283 303obrazu 261 282opcji 261 285 296strony 261 284tekstowe 261 288 289 296 310wyboru 261 279zakresu 261 286

polecenieAdd Watch 213DebugPrint 208 384DisplayAlerts 236 378MsgBox 384On Error Resume Next 223Print 212Randomize 353Set 237

proceduraargumenty 82dysfunkcyjna 34Function Patrz funkcjaobs ugi b doacutew

wbudowana 196 197w asna 196

obs ugi zdarzenia 173 268aktywacja arkusza 180aktywacja skoroszytu 181Open 176tworzenie 173 175

obs uguj ce zdarzenie 300separator 66Sub 33 44 58 59 60 81 82 173

Patrz te makroargumenty 85 87nazwa 83 100skroacutet klawiszowy 41 47 86 87 271tworzenie 84uruchamianie 83uruchamianie bezpo rednie 85uruchamianie w oknie dialogowym

Makro 85uruchamianie z poziomu innych

procedur 89uruchamianie za pomoc przyciskoacutew

i kszta toacutew 87 88uruchamianie za pomoc skroacutetoacutew

klawiszowych 86

wywo anie Patrz procedura Subsubstandardowa 33udost pnienie u ytkownikowi 299uruchamianie 60wy wietlaj cea okno dialogowe 298

Procedure Separator 66program Patrz makro

wykonywalny 147wykonywanie krokowe 211 212wymuszanie zatrzymania 207

programowanieprzyk ady 217strukturalne 154zorientowane obiektowo 69

projekt 54przycisk 84 87 331

na pasku narz dzi Szybki dost p 31 84na Wst ce 31opcji 267polecenia 261 281polece 265prze cznika 261 289tworzenie 31wstawianie 87 88

pu apka Patrz punkt przerwaniapunkt przerwania 210 211 352

usuwanie 210wstawianie 209

RRange 34 73 127 129 138 217 226

metoda 137rata po yczki 148rejestr Windows 146rejestrator makr Patrz makro rejestratorRequire Variable Declaration 64Require Variable Definition 112RibbonX 321runtime error Patrz b d czasu wykonania

SSheets 72skoroszyt 34 54

dezaktywacja 183konwersja na plik dodatku 48kopia zapasowa 179

Kup książkę Poleć książkę

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 42: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

Skorowidz 397

makr osobistych 47 54 101otwarty 201przekszta canie na dodatek 364 367testowanie 367tryb obliczania

automatyczny 118prze czanie 228r czny 118 235 377

XLSM 361zapisywanie 45zawieraj cy makro 45

skroacutet klawiszowy 86s owo kluczowe 109 112

Call 89Case 159Const 117Dim 109 113 119 123End 109End Function 82End Sub 82End With 103For 109Function 82Next 109Preserve 125Print 212Private 113Public 113 115 123Static 113Stop 210Sub 82 109With 103 109

sta a 107 117 244predefiniowana 118vbNewLine 207 377vbProperCase 270xlCalculationAutomatic 235xlCalculationManual 118 235xlCalculationSemiautomatic 118xlDown 377xlToLeft 377xlToRight 377xlUp 377zasi g 117

string Patrz a cuch znakoacutewstrona podgl d podzia u 227 228

struktura Patrz te p tlaEnd If 156For Each-Next 168 222 232If-Then 153 155 156 157 158 199If-Then-Else 154 155 156 157Select Case 153 154 159 228

zagnie d ona 160With-End With 233 238 377

suwak 261 286syntezator mowy 354system pomocy 53 78 379

formanty 279funkcje wbudowane 144zakres 129

Ttabela 146 147 220

kopiowanie 220nazwa 220przestawna 34wiersz nag oacutewka 220

tablica 107 123 132deklarowanie 123dynamiczna 124liczba elementoacutew 124wielowymiarowa 124

TintAndShade 135tryb Break 211 212 214

UUserForm 54 241 257 295

lista kontrolna 318niemodalne 315 316poprawno danych 302prowadnice 276testowanie 293 299 318tworzenie 258 259 264 265 318w a ciwo ci 261 262wykres 317wy wietlanie 263wy wietlanie na ekranie 270z wieloma kartami 315zamienniki 241

ustawienia regionalne 132

Kup książkę Poleć książkę

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 43: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

398 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

VVBA 29

fundamenty 33kod 53 56 57

kopiowanie 63lokalizacja 173 174optymalizacja 234 377 384wci cia 58 65 161 215 384

modu Patrz moduProject 43Project Explorer Patrz VBA Projectwady 33zalety 32

VBE 33 42 51 79funkcje 144menu podr czne 52okno 52

Code 53 56dokowanie 68Immediate 53 54 208 211 212Locals 214Project 53 54Watch 212 213

pasekmenu 52narz dzi Edit 66narz dzi Standard 53

rodowiska dostosowanie 63Tools Options 63 66 67 68uruchamianie 51wygl d 66

Visual Basic for Applications Patrz VBA

Wwarto

False 134Null 134True 134

watch expression Patrz wyra enie monitoruj cew ze

Forms 54Modules 54

wiersza ukrywanie 61wirus 22w a ciwo 74 80 127

Accelerator 268Address 131 133

Cells 129Color 135Column 133Columns 133Count 133CurrentRegion 219 221DisplayAlerts 169EntireRow 221Font 134Formula 136FormulaLocal 136HasFormula 134Interior 136IsAddin 361NumberFormat 137Offset 130Path 143Row 133Rows 133Text 132ThemeColor 135UsedRange 224Value 131Visible 169

Workbook 54 70 71 75Worksheet 34 70 71 127 138wrapper function Patrz funkcja opakowuj cawska nik post pu zadania 312Wst ka 84 255 321 333

dostosowywanie 321 324za pomoc kodu XML 324 329

wykres 34 72 229 230aktywowanie 233formatowanie 233na UserForm 317osadzony 231przetwarzanie 231w a ciwo ci modyfikowanie 232

wyra enie 120 147monitoruj ce 212 213

Zzabezpiecze ustawienia 23zakres 34

ca a kolumna 128 218ca y wiersz 128 218komoacuterek 34 137 217 261 307

jako argument funkcji 349

Kup książkę Poleć książkę

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 44: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

Skorowidz 399

kopiowanie 218nazwa 218nieci g y 226przenoszenie 222

nazwa 127nieci g y 128o zmiennej wielko ci kopiowanie 219okre lanie typu 226

zaznaczenie wielokrotne 226zdarzenie 77 84 171 173

Activate 172aktywacyjne 180BeforeClose 172 179BeforeDoubleClick 172 183BeforePrint 172BeforeRightClick 172 184BeforeSave 172 179 180Change 172 184Deactivate 172dotycz ce

arkusza 172 180 181 183skoroszytu 172 176 179 182

NewSheet 172niezwi zane z obiektami 186 188OnKey 189OnTime 186 187 188Open 172 176SelectionChange 172SheetActivate 172SheetBeforeDoubleClick 172SheetBeforeRightClick 172SheetChange 172SheetDeactivate 172SheetSelectionChange 172WindowActivate 172WindowDeactivate 172

zegar analogowy 188

zmienna 35 107 130 157czas ycia 116deklarowanie 111 112 215 237 383globalna 117licznikowa 162lokalna 114 116 214a cuchowa 119

nazwa 72 109niezainicjowana 146o zasi gu

jednego modu u 115 117jednej procedury Patrz zmienna lokalna

o zasi gu globalnym Patrz zmienna globalnaobiektowa 237 377przypisywanie warto ci 95publiczna Patrz zmienna globalnastatyczna 116tekstowa 377typ Patrz dane typusuwanie z pami ci 116zasi g 113 114

znakgt= 156 121 Patrz znak krzy ykaamp 121 331 121 121^ 121+ 121apostrofu 107cudzys owu 108 127 136cudzys owu podwoacutejnego 136dolara 133Esc 219kontynuacji wiersza 59 121 156 378kropki 72 73 119krzy yka 119amania wiersza 246

nawias 122 142przecinka 119roacutewno ci 77 109 121rednika 77 125

zapytania 212

Kup książkę Poleć książkę

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 45: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd

400 Excel 2013 PL Programowanie w VBA dla bystrzakoacutew

Kup książkę Poleć książkę

Page 46: Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd …pdf.ebookpoint.pl/e13pvb/e13pvb.pdf · 2019-05-15 · Tytuł oryginalny: Excel® VBA Programming For Dummies®, 3rd