Zintegrowany kurs języka VBA cz. 2



Podobne dokumenty
Zintegrowany kurs języka VBA cz. 3

Temat: Organizacja skoroszytów i arkuszy

ECDL zaawansowany, moduł EXCEL

COMARCH IT AKADEMIA. Programista VBA w Microsoft Excel (microbootcamp)

ABC 2002/XP PL EXCEL. Autor: Edward C. Willett, Steve Cummings. Rozdział 1. Podstawy pracy z programem (9) Uruchamianie programu (9)

Program szkoleniowy. 24 h dydaktycznych (18 h zegarowych) NAZWA SZCZEGÓŁY CZAS

ARKUSZ KALKULACYJNY komórka

Zakres tematyczny dotyczący podstaw programowania Microsoft Office Excel za pomocą VBA

Makra VBA w Excelu dla początkujących

Microsoft PowerPoint Poziom Zaawansowany PROGRAM SZKOLENIOWY. Plan szkolenia zawiera: Microsoft Excel Poziom Zaawansowany

Wprowadzenie (17) Część I. Makra w Excelu - podstawy (23)

ECDL/ICDL Zaawansowane arkusze kalkulacyjne Moduł A2 Sylabus, wersja 2.0

ECDL Advanced Moduł AM4 Arkusze kalkulacyjne Syllabus, wersja 2.0

Wstęp 7 Rozdział 1. OpenOffice.ux.pl Writer środowisko pracy 9

Praktyczny Excel. Sprytne makra

Excel zadania sprawdzające 263

Korzystanie z edytora zasad grupy do zarządzania zasadami komputera lokalnego w systemie Windows XP

PRZYKŁADOWY TEST EGZAMINACYJNY

Visual Basic w programie Excel

Pracownia Informatyczna Instytut Technologii Mechanicznej Wydział Inżynierii Mechanicznej i Mechatroniki. Podstawy Informatyki i algorytmizacji

BIBLIOTEKA LOKALNE CENTRUM WIEDZY PRAKTYCZNEJ PRZEWODNIK PO NARZĘDZIACH WARSZTAT NR 1: ARKUSZE KALKULACYJNE - MINI SKRYPT

Asix.Evo - Uruchomienie aplikacji WWW

Delphi podstawy programowania. Środowisko Delphi

e- Konwerter Kreator listy odbiorców BZWBK24 Podręcznik użytkownika

Wskazówki: 1. Proszę wypełnić dwie sąsiadujące komórki zgodne z zasadą ciągu, a następnie zaznaczyć komórki w następujący sposób:

WOJEWÓDZTWO PODKARPACKIE

Tworzenie i modyfikowanie wykresów

Visual Basic for Applications. Wstęp

Rys. 1. Aktywne linki będą wstawiane za pomocą rozwijanej listy

Excel formuły i funkcje

Szkolenie dla nauczycieli SP10 w DG Operacje na plikach i folderach, obsługa edytora tekstu ABC. komputera dla nauczyciela. Materiały pomocnicze

Program szkolenia EXCEL OD PODSTAW POPOŁUDNIOWY (WIECZOROWY)

Praktyczne wykorzystanie arkusza kalkulacyjnego w pracy nauczyciela część 1

S P I S T R E Ś C I. Instrukcja obsługi

Włączanie/wyłączanie paska menu

etrader Pekao Podręcznik użytkownika Strumieniowanie Excel

Arkusz kalkulacyjny EXCEL

Program szkolenia EXCEL ZAAWANSOWANY Z WPROWADZENIEM DO VBA.

finiownia loginów. W zależności od ustawionej opcji użytkownik login:

EXCEL POZIOM EXPERT. Konspekt szczegółowy

BACKUP BAZ DANYCH FIREBIRD

dokumentacja Edytor Bazy Zmiennych Edytor Bazy Zmiennych Podręcznik użytkownika

Aplikacje w środowisku VBA. Visual Basic for Aplications

Moduł 2. Wykorzystanie programu Excel do zadań analitycznych

Ustalanie dostępu do plików - Windows XP Home/Professional

Ćwiczenie 1 Obsługa makr

Program Szkolenia. Excel Podstawowy. COGNITY praktyczne, skuteczne szkolenia i konsultacje

Zastanawiałeś się może, dlaczego Twój współpracownik,

Praktyczny Excel. 50 praktycznych formuł na każdą okazję

SZYBKI START. Tworzenie nowego połączenia w celu zaszyfrowania/odszyfrowania danych lub tekstu 2. Szyfrowanie/odszyfrowanie danych 4

PODSTAWY OBSŁUGI ARKUSZA KALKULACYJNEGO

WyŜsza Szkoła Zarządzania Ochroną Pracy MS EXCEL CZ.2

PROGRAM SZKOLENIA. Excel Średniozaawansowany z wprowadzeniem do tabel przestawnych i makr.

Tytuły Wykonawcze. Opis systemu tworzenia dokumentacji TW-1

Dell UltraSharp UP3017 Dell Display Manager Instrukcja użytkownika

Jak sprawnie filtrować i sprawdzać poprawność danych w Excelu? 1

EXCEL ANALIZA DANYCH. Konspekt szczegółowy

Ćwiczenie 1 - Arkusze kalkulacyjne

Ćwiczenia Skopiować do swojego folderu plik cwiczenia-kl.ii.xls, a następnie zmienić jego nazwę na imię i nazwisko ucznia

CZĘŚĆ A PIERWSZE KROKI Z KOMPUTEREM

najlepszych trików Excelu

Co nowego w wersji 3.7 programu Invest for Excel

Instrukcja programowania

bla bla Guard podręcznik użytkownika

Arkusz kalkulacyjny MS EXCEL ĆWICZENIA 4

EXCEL ZAAWANSOWANY. Konspekt szczegółowy

Licencja SEE Electrical Free

Poradnik użytkownika pomoc techniczna

Obliczenia inżynierskie arkusz kalkulacyjny. Technologie informacyjne

TP1 - TABELE PRZESTAWNE od A do Z

Projekt ZSWS. Instrukcja uŝytkowania narzędzia SAP Business Explorer Analyzer. 1 Uruchamianie programu i raportu. Tytuł: Strona: 1 z 31

IIIIIIIIIIIIIIIMMIMMIII

4.Arkusz kalkulacyjny Calc

UONET+ - moduł Sekretariat. Jak wykorzystać wydruki list w formacie XLS do analizy danych uczniów?

INSTRUKCJA UŻYTKOWANIA

Tworzenie pliku źródłowego w aplikacji POLTAX2B.

Program dla praktyki lekarskiej

Instrukcja importu dokumentów z programu Fakt do programu Płatnik

LibreOffice Calc VBA

Modelowanie obiektowe - Ćw. 1.

Ulotka. Zmiany w wersji

Pobierz plik z przykładem

Memeo Instant Backup Podręcznik Szybkiego Startu

PROGRAM SZKOLENIA. Excel w Analizach danych.

Dodawanie stron do zakładek

Instrukcja szybkiej obsługi

Uruchomienie aplikacji Plan lekcji w przeglądarce Internet Explorer

Matematyka grupa Uruchom arkusz kalkulacyjny. 2. Wprowadź do arkusza kalkulacyjnego wartości znajdujące się w kolumnach A i B.

Program szkolenia EXCEL ŚREDNIOZAAWANSOWANY.

Instrukcja obsługi certyfikatów w programie pocztowym MS Outlook Express 5.x/6.x

Instrukcja korzystania z Systemu Telnom - Nominacje

Transkrypt:

Dariusz Pietrzyk Zintegrowany kurs języka VBA cz. 2 MS Excel arkusze, zeszyty, pliki

ISBN 978-83-912106-7-3 Copyright by Dariusz Pietrzyk & Wydawnictwo Studio em (www.sem.net.pl) Żadna część tego podręcznika nie może być bez pisemnej zgody Wydawcy lub Autora powielana bądź też rozpowszechniana w jakiejkolwiek formie czy też jakimikolwiek technikami elektronicznymi bądź mechanicznymi. Dotyczy to wykonania kopii dowolną metodą poligraficzną, kserograficzną czy fotograficzną oraz utrwalania na filmowym, magnetycznym, optycznym (m.in. CD-ROM i DVD-ROM) lub jakimkolwiek innym nośniku. Autor oraz Wydawnictwo Studio em dołożyli wszelkich starań, by opracowanie niniejsze było rzetelne i kompletne, ale nie biorą żadnej odpowiedzialności za wykorzystanie zawartych w nim informacji czy też za związane z tym ewentualne naruszenie praw patentowych bądź autorskich. Autor oraz Wydawnictwo nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w tym podręczniku. Wymienione w podręczniku nazwy produktów oraz marek są znakami handlowymi bądź towarowymi, przynależnymi ich prawowitym właścicielom.

Spis treści Wprowadzenie... 11 Do kogo kurs jest adresowany?... 13 Czego się nauczysz z tego podręcznika?... 14 Jak możesz używać tego podręcznika?... 15 Porządek omawianego materiału... 17 O autorze... 18 Funkcje definiowane przez użytkownika... 21 Działanie funkcji... 23 Używanie funkcji w formułach MS Excel... 24 Używanie funkcji w kodzie VBA... 26 Tworzenie własnych funkcji... 29 Aby przygotować kod funkcji... 31 Aby użyć własnej funkcji w podprocedurze... 33 Aby użyć własnej funkcji w arkuszu kalkulacyjnym... 34 Tworzenie funkcji z argumentami opcjonalnymi... 37 Aby utworzyć funkcję z argumentami opcjonalnymi... 37 Tworzenie dodatków bibliotek funkcji... 39 Aby utworzyć dodatek z własnymi funkcjami (XP/2003)... 39 Aby uaktywnić (włączyć) dodatek użytkownika (XP/2003)... 40 Aby utworzyć dodatek z własnymi funkcjami (2007)... 40 Aby uaktywnić (włączyć) dodatek użytkownika (2007)... 42 Aby utworzyć dodatek z własnymi funkcjami (2010)... 43 Aby uaktywnić (włączyć) dodatek użytkownika (2010)... 45 Aby odinstalować dodatek użytkownika (do wer. 2003)... 48 Aby odinstalować dodatek użytkownika (wer. 2007)... 49 Aby odinstalować dodatek użytkownika (2010)... 50 Formuły struktura obliczeń w arkuszu... 53 Adresowanie względne w formułach... 54 3

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 2 Wpisywanie formuł do komórek arkusza... 57 Aby zapisać w komórce formułę z użyciem adresowania względnego... 57 Aby zapisać w komórce formułę z użyciem funkcji arkuszowej... 59 Zestawienie właściwości dotyczących formuł wpisywanych do komórki... 60 Arkusze... 63 Odwołania do arkuszy... 63 Aby sprawdzić ilość arkuszy w zeszycie... 66 Aby odwołać się do arkusza przez numer... 69 Aby sprawdzić numer aktywnego arkusza... 71 Aby sprawdzić nazwę aktywnego arkusza... 71 Aby odwołać się do arkusza przez nazwę... 72 Aby zmienić nazwę arkusza... 73 Zabezpieczanie arkuszy... 75 Aby sprawdzić, czy arkusz jest ukryty... 76 Aby ukryć arkusz... 78 Aby odkryć arkusz... 79 Aby włączyć ochronę arkusza (z hasłem)... 79 Aby wyłączyć ochronę arkusza (z hasłem)... 81 Odwołania do arkuszy oraz zabezpieczanie arkuszy podsumowanie... 82 Tworzenie i usuwanie arkuszy... 84 Aby wstawić (utworzyć nowy) arkusz... 85 Aby wstawić arkusz określonego typu... 87 Aby wstawić nowy arkusz przed wskazanym arkuszem... 88 Aby wstawić arkusz na początku zeszytu... 90 Aby wstawić arkusz na końcu zeszytu... 91 Aby wstawić arkusz o podanej nazwie (możliwość 1.)... 92 Aby wstawić arkusz o podanej nazwie (możliwość 2.)... 93 Aby wstawić arkusz o podanej nazwie (możliwość 3.)... 95 4 Copyright Dariusz Pietrzyk

Aby usunąć wybrany arkusz... 96 Tworzenie i usuwanie arkuszy podsumowanie... 97 Zeszyty... 101 Operacje na aktywnym zeszycie... 102 Aby pobrać nazwę aktywnego zeszytu... 102 Aby pobrać ścieżkę do zeszytu... 103 Aby pobrać ścieżkę i nazwę zeszytu (zapisanego wcześniej)... 103 Aby utworzyć nowy zeszyt... 104 Aby zapisać zeszyt pod podaną nazwą... 105 Aby sprawdzić bieżący (domyślny) katalog... 106 Aby zmienić bieżący katalog... 107 Aby utworzyć katalog... 107 Aby zapisać zeszyt w podanym katalogu... 108 Aby zapisać zeszyt (w jego domyślnej lokalizacji)... 109 Aby zamknąć zeszyt... 110 Operacje na aktywnym zeszycie podsumowanie... 110 Operacje na wybranym zeszycie... 112 Aby otworzyć zeszyt o podanej nazwie... 112 Aby zamknąć wybrany zeszyt... 113 Aby zamknąć zeszyt z zapisaniem zmian... 114 Aby uaktywnić wybrany zeszyt... 115 Aby wyświetlić zawartość wybranego katalogu... 115 Operacje na wybranym zeszycie podsumowanie... 117 Inne przydatne operacje na zeszytach... 118 Aby włączyć ochronę zeszytu... 119 Aby wyłączyć ochronę zeszytu... 120 Aby ustawić hasło zabezpieczające zeszyt przed otwarciem... 121 Aby usunąć hasło zabezpieczające zeszyt... 122 Aby wysłać zeszyt jako załącznik... 122 Aby zapisać zeszyt jako szablon... 126 Copyright Dariusz Pietrzyk 5

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 2 Aby utworzyć nowy zeszyt na bazie wybranego szablonu... 127 Inne przydatne operacje na zeszytach podsumowanie... 127 Zdarzenia dla arkusza i zeszytu... 129 Miejsce przechowywania procedur obsługi zdarzeń arkuszy i zeszytów... 129 Składnia instrukcji sterującej procedurą obsługi zdarzenia... 130 Zdarzenia dla arkusza... 133 Aby oprogramować zdarzenie dla arkusza... 134 Activate uaktywnienie arkusza... 137 BeforeDoubleClick dwuklik na komórce arkusza... 137 BeforeRightClick kliknięcie na komórce prawym przyciskiem... 138 Calculate przeliczenie arkusza... 140 Change zmiana wpisu w komórce... 141 Deactivate wyjście z arkusza... 141 FollowHyperlink kliknięcie na hiperłączu... 142 SelectionChange zaznaczenie komórki... 143 Inne zdarzenia dla arkusza... 144 Zdarzenia dla zeszytu... 144 Aby oprogramować zdarzenie dla zeszytu... 145 Activate uaktywnienie zeszytu... 148 AddinInstall instalacja zeszytu jako dodatku... 148 AddinUninstall odinstalowanie dodatku... 149 AfterSave po zapisaniu zeszytu... 149 BeforeClose przed zamknięciem zeszytu... 150 BeforePrint przed wydrukiem... 150 BeforeSave przed zapisem zeszytu... 151 Deactivate przejście do innego zeszytu... 152 NewChart tworzenie wykresu... 152 NewSheet dodanie arkusza... 153 Open otwarcie zeszytu... 153 6 Copyright Dariusz Pietrzyk

SheetActivate uaktywnienie dowolnego arkusza... 154 SheetBeforeDoubleClick dwuklik na dowolnej komórce w zeszycie... 154 SheetBeforeRightClick kliknięcie prawym przyciskiem myszy na dowolnej komórce w zeszycie... 155 SheetCalculate przeliczenie dowolnej formuły w zeszycie... 157 SheetChange zmiana wpisu w dowolnej komórce zeszytu... 158 SheetDeactivate wyjście z dowolnego arkusza... 159 SheetFollowHyperlink kliknięcie na dowolnym hiperłączu w zeszycie... 159 SheetSelectionChange zaznaczenie dowolnej komórki w zeszycie... 161 Zdarzenia związane z importem i eksportem danych do XML... 162 Zdarzenia związane z tabelami przestawnymi... 162 Pozostałe zdarzenia dla zeszytu... 164 Wykrywanie i usuwanie błędów... 165 Najczęściej występujące rodzaje błędów i sposoby ich eliminacji... 168 Przechwytywanie i obsługa błędów run-time... 170 Aby obsłużyć lokalny błąd run-time... 175 Aby obsłużyć błąd run-time (w całym programie)... 177 Przydatne mechanizmy i konstrukcje... 181 Optymalizacja działania procedur za pomocą właściwości ScreenUpdating... 181 Aby tymczasowo wyłączyć odświeżanie zawartości ekranu... 181 Pomiar czasu wykonywania operacji (funkcja Timer)... 183 Aby dokonać pomiaru czasu wykonywania operacji... 184 Zabezpieczanie kodu... 186 Copyright Dariusz Pietrzyk 7

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 2 Aby zabezpieczyć projekt przed przeglądaniem i modyfikacją... 187 Aby procedury i funkcje modułu nie były dostępne w innych otwartych zeszytach... 188 Użycie wskaźników dla pojedynczych obiektów (instrukcja Set)... 189 Aby szybko odwoływać się do wybranego obiektu (np. zeszytu)... 190 Uruchamianie okien dialogowych aplikacji... 191 Aby uruchomić wbudowane okno dialogowe (np. Otwórz)... 192 Uruchomienie innej aplikacji... 193 Aby uruchomić aplikację zewnętrzną (instrukcja Shell)... 193 Dodatki... 195 Przydatne okna aplikacji (wybór)... 195 Przydatne właściwości aplikacji informacje o aplikacji i jej działanie... 202 ActivePrinter... 203 AskToUpdateLinks... 203 DisplayAlerts... 203 Name... 204 OperatingSystem... 204 ScreenUpdating... 204 TransitionMenuKey... 205 UserName... 205 Version... 206 Przydatne właściwości aplikacji okna... 206 DisplayFormulaBar... 206 DisplayFullScreen... 207 DisplayScrollBars... 207 DisplayStatusBar... 208 FormulaBarHeight... 208 8 Copyright Dariusz Pietrzyk

Height... 208 RollZoom... 209 ShowWindowsInTaskbar... 209 UsableHeight... 210 UsableWidth... 210 Width... 210 WindowState... 211 Przydatne właściwości aplikacji opcje edycji... 211 DecimalSeparator... 211 DefaultSheetDirection... 212 EditDirectlyInCell... 212 MouseAvailable... 213 MoveAfterReturn... 213 MoveAfterReturnDirection... 214 ThousandsSeparator... 214 UseSystemSeparators... 215 Przydatne właściwości aplikacji opcje obliczania... 215 CalculateBeforeSave... 215 Calculation... 216 Iteration... 217 MaxChange... 217 MaxIterations... 217 ReferenceStyle... 218 Przydatne właściwości aplikacji pliki i katalogi... 219 AlertBeforeOverwriting... 219 DefaultFilePath... 219 DefaultSaveFormat... 220 DisplayRecentFiles... 220 Path... 221 PathSeparator... 221 StartupPath... 221 TemplatesPath... 222 UserLibraryPath... 222 Przydatne kolekcje dostępne na poziomie aplikacji... 223 Copyright Dariusz Pietrzyk 9

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 2 AddIns2... 223 COMAddIns... 223 CommandBars... 223 Dialogs... 224 RecentFiles... 224 Toolbars... 224 Workbooks... 224 Skorowidz... 225 10 Copyright Dariusz Pietrzyk

Wprowadzenie [ ] Porządek omawianego materiału Materiał podawany w kolejnych częściach tego kursu jest ułożony warstwami od podstaw do coraz bardziej zaawansowanych zagadnień, ale zarazem od zagadnień najbardziej przydatnych na co dzień do takich, które przydają się w tworzeniu coraz bardziej wyspecjalizowanych mechanizmów. Stąd w niniejszym podręczniku znajdziesz kolejno rozdziały: 1. Funkcje definiowane przez użytkownika (s. 21) czyli tworzenie i używanie własnych funkcji do obliczeń w arkuszach oraz do optymalizacji kodu VBA. 2. Formuły struktura obliczeń w arkuszu (s. 53) czyli wpisywanie formuł do komórek arkusza z poziomu VBA z zastosowaniem adresowania względnego i funkcji arkuszowych (np. Suma). 3. Arkusze (s. 63) czyli m.in. uzyskiwanie dostępu do arkuszy, ich uaktywnianie, zmiana nazw i zabezpieczanie (ukrywanie i blokowanie hasłem) oraz ich tworzenie i usuwanie. 4. Zeszyty (s. 101) czyli m.in. uzyskiwanie dostępu do zeszytów, ich otwieranie, zamykanie, zapisywanie, wysyłanie w postaci załączników poczty elektronicznej, zabezpieczanie przed modyfikacją i nieuprawnionym dostępem, a także podstawowe operacje na plikach (przegląd zawartości katalogu, tworzenie podkatalogów i uzyskiwanie dostępu do wybranych katalogów na dysku). 11

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 2 5. Zdarzenia dla arkusza i zeszytu (s. 129) automatyzacja obsługi często spotykanych sytuacji typu otwarcie, zamknięcie czy zapisanie zeszytu, uaktywnienie arkusza czy też zaznaczenie komórki lub wywołanie menu podręcznego na komórce arkusza. 6. Wykrywanie i usuwanie błędów (s. 165) czyli m.in. przegląd podstawowych rodzajów błędów popełnianych podczas pisania programów, wraz ze sposobem ich usuwania i zapobiegania ich występowaniu (ze szczególnym uwzględnieniem błędów run-time). 7. Przydatne mechanizmy i konstrukcje (s. 181) w tym m.in. wyłączanie odświeżania ekranu, pomiar czasu działania programów lub ich fragmentów oraz zabezpieczenie kodu przed nieuprawnionym dostępem i modyfikacjami. Dzięki takiemu układowi materiału oraz kompletnym omówieniom poszczególnych zagadnień masz zatem okazję poszerzyć swoje kompetencje, przydatne w Twojej codziennej pracy z wykorzystaniem umiejętności programowania bardzo użytecznej w dzisiejszym świecie wypełnionym przez komputery. 12 Copyright Dariusz Pietrzyk

Formuły struktura obliczeń w arkuszu W naszej codziennej pracy zachodzi czasem konieczność automatycznego wygenerowania arkusza kalkulacyjnego wraz ze strukturą obliczeń np. arkusz do wprowadzania danych na bieżący dzień lub tydzień z ich wstępnym przeliczeniem czy też bilans na kolejny miesiąc. W takim przypadku zwykle przydaje się automatyczne wprowadzanie formuł do komórek arkusza. Do tego celu służy w języku VBA kilka właściwości o podobnych nazwach, ale o zróżnicowanym, mocno wyspecjalizowanym przeznaczeniu, związanym przede wszystkim ze sposobem (interpretacją) adresowania komórek. Właściwości te są ze sobą powiązane wewnątrz aplikacji MS Excel oraz działających w niej mechanizmów języka VBA (dla potrzeb poprawnego działania formuł w zeszytach MS Excel). W związku z tym może się często wydawać, że użycie niektórych z nich (np. Formula oraz FormulaR1C1) daje bardzo podobne, czy wręcz identyczne na pierwszy rzut oka efekty w działaniu. Jednak jak to bywa w języku VBA w takich sytuacjach niewłaściwe, czyli niezgodne z pierwotnym zastosowaniem użycie danej właściwości prowadzi często do wystąpienia takich błędów w działaniu programu, których na pierwszy rzut oka nie widać. Natomiast wychodzą one na jaw zwykle dopiero podczas działań użytkownika w arkuszu kalkulacyjnym na poziomie aplikacji MS Excel, ponieważ w grę wchodzą konsekwencje działania naszego programu, który wykorzystuje błędnie wybraną właściwość (pozornie poprawnie działającą w danej sytuacji), oraz interpretacja tej właściwości przez mechanizmy wewnętrzne MS Excel obsługujące arkusz. Stąd najlepiej jest trzymać się bardzo precyzyjnie podstawowego zastosowania każdej z właś- 53

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 2 ciwości i nie mieszać ich ze sobą 1. W tym rozdziale omówimy dokładniej najbardziej przydatną spośród nich FormulaR1C1, która zarazem jest najbardziej uniwersalna, gdyż działa tak samo we wszystkich wersjach językowych MS Excel. Adresowanie względne w formułach Jest to najwygodniejszy sposób odwoływania się do komórek arkusza zarówno na poziomie aplikacji MS Excel, jak też na poziomie kodu VBA. Cel używania adresów względnych Na poziomie MS Excel jest to łatwe i szybkie kopiowanie formuł, czyli algorytmów (wzorów) obliczeń, z komórki do komórki (najczęściej do bardzo wielu komórek). Przygotowując bowiem strukturę obliczeń w arkuszu, najpierw projektujemy poprawny dla naszych potrzeb wzór obliczeń (np. do wartości komórki z liczbą X dodaj wartość komórki z liczbą Y ). Potem wpisujemy formułę (np. =A2+B2 do komórki C2) i sprawdzamy poprawność jej działania. A kiedy już jesteśmy 1 Dotyczy to nie tylko właściwości związanych z formułami wpisywanymi czy przechowywanymi w komórkach arkusza (choć tu najłatwiej o błąd, jako że tych właściwości jest kilka), ale też wielu innych właściwości różnych obiektów (np. omawiane w poprzedniej części naszego kursu właściwości komórki Value i Text). Trzeba pamiętać, że język VBA (podobnie jak inne języki programowania) przygotowali ludzie, którzy tworząc każdy element tego języka (np. klasę, obiekt, właściwość czy metodę), projektowali i testowali taki element w ściśle określonym celu i do ściśle określonych zastosowań. Stąd nie jest nawet możliwe, żeby przetestowali wszystkie możliwe niecelowe lub przypadkowe sposoby użycia. I dlatego też tak ważna jest odpowiedzialność osoby piszącej kod za poprawne używanie poszczególnych elementów języka (jakkolwiek nie zwalnia to twórców samego języka VBA z odpowiedzialności za solidność efektów ich pracy). 54 Copyright Dariusz Pietrzyk

Formuły struktura obliczeń w arkuszu pewni, że uzyskany w ten sposób wynik jest poprawny, najczęściej powielamy tę formułę w tych wszystkich komórkach arkusza, w których takie powtarzalne obliczenie ma zostać wykonane (np. od komórki C3 do komórki C5000). Działanie adresów względnych Cała opisana powyżej operacja jest możliwa dlatego, że używamy w formułach adresowania względnego. Przecież jeśli wpisujemy do komórki C2 odwołanie do komórki A2, nie chodzi nam tylko i wyłącznie o tę konkretną komórkę (gdyby tak było, wpisalibyśmy adres bezwzględny w postaci $A$2). Ważniejsze jest dla nas, że liczba, której potrzebujemy w naszym obliczeniu, znajduje się (w tym konkretnym przypadku) w komórce o dwie kolumny w lewo (kolumna A w stosunku do kolumny C) w tym samym wierszu (drugim). I kiedy używamy adresów względnych, wpisując formuły w komórkach arkusza, mówimy niejako aplikacji, żeby podczas kopiowania respektowała ustaloną przez nas strukturę obliczeń w każdym wierszu, gdzie nasza formuła będzie powielona, zawsze ma być wzięta do obliczeń wartość z komórki o dwie kolumny w lewo. To jest cel, do którego dążymy, wpisując zdecydowaną większość formuł w komórkach arkusza kalkulacyjnego. Adresowanie względne na poziomie kodu VBA A jak się ma sprawa z formułami wpisywanymi do komórki arkusza z poziomu kodu VBA? Cel jest właściwie taki sam. Nie będziemy tu, co prawda, kopiować formuł z komórki do komórki, ale również chcemy się odwoływać w formułach do komórek właśnie z użyciem adresowania względnego. Po ustaleniu bowiem struktury naszych obliczeń będziemy chcieli wpisać taką formułę Copyright Dariusz Pietrzyk 55

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 2 automatycznie do wielu komórek tych wszystkich, w których będzie ona poprawna (i użyjemy do tego pętli np. For z licznikiem aż do komórki znajdującej się w wierszu numer 5000, czy też pętli Do aż do komórki o adresie $C$5000). Żeby jednak zrobić to w pełni poprawnie, trzeba użyć: odpowiedniej właściwości komórki w naszym przypadku będzie to FormulaR1C1, która przechowuje dane typu String, a ponieważ mamy do czynienia z formułami, zawsze na początku zapisu pojawi się znak =, poprawnego dla tej właściwości sposobu adresowania względnego notacji R[y]C[x] 1, czyli ustalenia parametrów przesunięcia względem komórki, w której formuła jest wpisana (y o ile wierszy i x o ile kolumn ). W przypadku adresowania w notacji RC trzeba tylko pamiętać, że: używane mogą być tylko liczby całkowite przesunięcie następuje o określoną ilość wierszy i/lub kolumn, liczba 0 (zero) oznacza brak przesunięcia (czyli ten sam wiersz lub tę samą kolumnę, co komórka, w której wpisywana będzie formuła), kierunki do góry i w lewo są oznaczane liczbami ujemnymi (np. =R[0]C[-1] będzie oznaczać komórkę o jedną kolumnę w lewo), 1 Nieprzypadkowo y i x występują tu w takiej kolejności. Dokładnie tak bowiem możemy odnieść się do przesunięcia o określoną ilość kolumn (czyli kierunek poziomy oś X na osi współrzędnych nałożonej na arkusz kalkulacyjny) oraz wierszy (kierunek pionowy, czyli oś Y). 56 Copyright Dariusz Pietrzyk

Formuły struktura obliczeń w arkuszu kierunki w dół i w prawo są oznaczane liczbami dodatnimi (np. =R[0]C[1] będzie oznaczać komórkę o jedną kolumnę w prawo). Wpisywanie formuł do komórek arkusza Przy tej operacji mamy do czynienia z dwiema najczęściej występującymi sytuacjami: wpisanie formuły z adresowaniem względnym, wpisanie formuły z użyciem funkcji arkuszowej. Aby zapisać w komórce formułę z użyciem adresowania względnego Wpisz np.: ActiveCell.FormulaR1C1 = "=R[-2]C+R[-1]C" Efekt w komórce arkusza po wykonaniu powyższej instrukcji Wskazówki Adresy są podawane jako przesunięcie względem komórki, w której formuła się znajduje. Pojedynczy adres komórki zawsze zawiera dwa składniki RC (czyli Row/Column = ile wierszy / ile kolumn ). Copyright Dariusz Pietrzyk 57

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 2 Przesunięcia są podawane w nawiasach kwadratowych, zaś liczby dotyczące wielkości przesunięcia podaje się zgodnie z regułą dotyczącą korzystania z właściwości Offset. Np. zapis R[-2]C[0] oznacza odwołanie do komórki o dwa wiersze wyżej i w tej samej kolumnie arkusza. Jeśli przesunięcie jest zerowe (odwołanie do komórki w tym samym wierszu lub kolumnie) można wpisać na odpowiedniej pozycji [0], ale bardziej czytelnie jest pozostawić samą tylko literę oznaczającą składnik przesunięcia (np. R[-2]C). Uwaga Bardzo podobna z nazwy (stąd łatwo o pomyłkę) właściwość Formula zawiera dokładnie wpis widoczny w pasku formuły programu MS Excel, dlatego nie należy jej używać do wpisywania formuł do komórki z poziomu VBA, a szczególnie formuł w notacji RC. Zapis =R[-1]C przekazany do tej właściwości zostanie zwykle potraktowany przez program jako zwykły tekst, a dodatkowo może spowodować nieoczekiwane efekty związane z formatowaniem takiej komórki i interpretacją jej zawartości przez program. Odwołanie =RC (bez podanych parametrów przesunięcia) jest odwołaniem do tej samej komórki, w której będzie wpisywana formuła tzw. odwołanie cykliczne. Służy ono do wykonywania obliczeń iteracyjnych w komórce arkusza i wymaga włączenia takich obliczeń dla zeszytu (domyślnie są one wyłączone). Z tego też powodu w kodzie VBA raczej nie będzie się pojawiać 1. 1 Iteracje można przecież wykonywać dużo wygodniej i bardziej przejrzyście za pomocą pętli, zaś do komórki wpisać tylko wynik takiego obliczenia. 58 Copyright Dariusz Pietrzyk

Formuły struktura obliczeń w arkuszu A jeśli się pojawi, warto na wszelki wypadek przeanalizować sytuację w arkuszu, dla którego komórek zapis taki się pojawił (zwykle będzie wynikać raczej z pomyłki programisty, szczególnie jeśli formuła z tym odwołaniem jest wprowadzana do wielu komórek). Aby zapisać w komórce formułę z użyciem funkcji arkuszowej Wpisz np.: ActiveCell.FormulaR1C1 = "=sum(r[-2]c:r[-1]c)" Efekt w komórce arkusza po wykonaniu powyższej instrukcji Wskazówki Powyższy zapis oznacza użycie funkcji Suma, która doda wartości z komórek o dwa wiersze i o jeden wiersz wyżej nad komórką zawierającą formułę. Nazwy funkcji trzeba podawać w języku angielskim. Ich zestawienie można znaleźć w pliku funcs.xls, dostępnym na dysku po instalacji programu MS Excel. Jeśli chcesz użyć w formule adresowania bezwzględnego, skorzystaj z nazw komórek lub obszarów. Dotyczy to przede wszystkim sytuacji, gdy argumentami funkcji mają być adresy Copyright Dariusz Pietrzyk 59

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 2 bezwzględne (pojedynczych komórek lub całych obszarów), czyli np.: ActiveCell.FormulaR1C1 = _ "=sum(sumowanyobszar)" Zestawienie właściwości dotyczących formuł wpisywanych do komórki Właściwość Znaczenie i zastosowanie Typ Przykładowa zawartość Formula Wpis w komórce (np. licz- String "=A2" ba, data, tekst) lub formuła z adresami komórek literowo-cyfrowymi (jak w formułach wpisywanych zwykle z poziomu MS Excel). Jeśli używana ma być w tej właściwości funkcja arkuszowa, nazwę funkcji trzeba podawać w wersji angielskiej (niezależnie od używanej wersji językowej MS Excel). 60 Copyright Dariusz Pietrzyk

Formuły struktura obliczeń w arkuszu Właściwość Znaczenie i zastosowanie Typ Przykładowa zawartość FormulaLocal Podobnie, jak Formula, String "=A2" ale daje możliwość używania funkcji arkuszowych z ich nazwami lokalnymi (np. Suma w polskiej wersji językowej). FormulaR1C1 Przechowywanie formuł String "=RC[-1]" z adresowaniem względnym komórek w notacji RC (niezależne od wersji językowej MS Excel). FormulaR1C1Local Przechowywanie formuł z adresowaniem względnym komórek w notacji WierszKolumna (oznaczenia zależne od wersji językowej MS Excel). String "=WK[-1]" HasFormula Właściwość tylko do Boolean True odczytu umożliwia sprawdzenie, czy w komórce znajduje się formuła (a dokładniej: czy MS Excel uznaje zapis z tej komórki za formułę). Copyright Dariusz Pietrzyk 61

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 2 Właściwość Znaczenie i zastosowanie Typ Przykładowa zawartość FormulaHidden Włączenie/wyłączenie Boolean False ukrywania formuł w komórce (włączenie działa tylko w połączeniu z włączoną ochroną arkusza) lub sprawdzenie czy ukrywanie formuły jest włączone. [...] 62 Copyright Dariusz Pietrzyk

Skorowidz Numer strony zapisany pogrubionym pismem oznacza obszerniejszy opis, ważniejsze objaśnienie lub typowy przykład użycia. A argument After 92, 96, 99 Before 90, 95, 96, 98, 99 FileFormat 126, 128 Filename 105, 108, 109, 111, 113, 126, 128 Password 79-81, 83, 119, 120, 127 ReadOnly 113 Recipients 123, 124, 128 ReturnReceipt 123, 124, 128 ReturnReceipt 123 SaveChanges 114, 115, 118 Structure 119, 120, 127 Subject 123, 124, 128 Type 87, 88, 89, 90, 92, 93, 98, 99 Windows 119, 120, 127 B błędy kompilacji 169, 170 logiczne 168, 169 run-time 15, 63, 68, 70, 73, 74, 83, 107, 108, 112, 113, 115, 117, 127, 139, 143, 144, 169, 170, 172-175, 176, 177-179 składni 168, 169 ByRef 133, 169 ByVal 131, 132, 133, 137, 138, 141-143, 149, 151-156, 158-161 E Err.Number 172, 177, 178 F funcs.xls 59 funkcja ChDir 107, 111, 113 CurDir 106, 111 Dir 116, 117 Len 116, 117 MkDir 107, 108, 111 Timer 183-185 I instrukcja For Each 63, 64, 71, 73, 84, 112, 175, 189, 224 225

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 2 K GoTo [etykieta] 173 GoTo 0 173, 175 On Error 173, 175-177 Resume 173, 177, 178 Resume Next 173, 175, 179 Select Case 177-179 Set 85-90, 92-94, 97-99, 118, 189, 190 Shell 193, 194 While 116 klasa Workbook 104 kolekcja AddIns2 223 Charts 101 COMAddIns 223 CommandBars 223 Dialogs 192, 195, 224 Names 101 RecentFiles 224 Sheets 63, 67, 69, 70, 72-74, 76-79, 82-85, 87-90, 92-100 Styles 101 Toolbars 224 Workbooks 104, 110, 112-115, 117, 118, 127, 128, 224 Worksheets 63, 67 M metoda Activate 69, 70, 72, 73, 82, 88, 98, 115, 118 Add 84, 85, 87-90, 92-95, 97, 98, 99, 104, 110, 127, 128 Close 110, 111, 114, 118 Delete 96, 100 Open 112, 113, 117 Protect 79, 80, 81, 83, 119, 127 Save 109, 111 SaveAs 105, 108, 109, 111, 126, 128 SendMail 123, 128 Show 192, 195 Unprotect 81, 83, 120, 127 N Nothing 86, 191 O obiekt Application 101, 112-115, 117, 118, 127, 128, 150, 154 Application 114 ThisWorkbook 67 opcja modułu Explicit 170 Private 186, 188 226 Copyright Dariusz Pietrzyk

Skorowidz P predefiniowana stała vbnormalfocus 194 xla1 218 xlcalculationautomatic 216 xlcalculationmanual 216 xlcalculationsemiautomatic 216 xlchart 88, 98 xldialogactivate 200 xldialogaddinmanager 196 xldialogalignment 196 xldialogarrangeall 199 xldialogautocorrect 195 xldialogborder 196 xldialogcalculation 198 xldialogcellprotection 196 xldialogclear 196 xldialogcolumnwidth 200 xldialogconditionalformatting 197 xldialogcustomviews 201 xldialogdataseries 199 xldialogdatavalidation 200 xldialogdefinestyle 200 xldialogdisplay 198 xldialogeditdelete 201 xldialogevaluateformula 200 xldialogfiledelete 201 xldialogfindfile 198 xldialogformulafind 202 xldialogformulagoto 199 xldialogformulareplace 202 xldialogfunctionwizard 202 xldialogimporttextfile 196 xldialoginsert 201 xldialognamemanager 197 xldialognew 197 xldialognewname 197 xldialogopen 192, 195, 198 xldialogoptionscalculation 198 xldialogoptionsedit 198 xldialogoptionsgeneral 198 xldialogoptionslistsadd 197 xldialogpagesetup 200 xldialogpivottablewizard 197 xldialogprint 196 xldialogprintersetup 200 xldialogproperties 201 xldialogprotectdocument 195 xldialogrowheight 202 xldialogrun 197 xldialogsaveas 192 xldialogscenarioadd 196 xldialogscenariocells 197 xldialogselectspecial 199 xldialogsetprinttitles 200 xldialogstandardwidth 200 xldialogsummaryinfo 201 Copyright Dariusz Pietrzyk 227

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 2 xldialogtexttocolumns 196 xldialogworkbookadd 199 xldialogworkbookcopy 199 xldialogworkbookinsert 201 xldialogworkbookname 202 xldialogworkbooknew 201 xldialogworkbookprotect 195 xldialogworkbookunhide 198 xldialogzoom 198 xldown 214 xlmaximized 211 xlminimized 211 xlnormal 211 xlr1c1 218 xlsheethidden 77, 78, 79 xlsheetveryhidden 77, 78, 79 xlsheetvisible 77, 79 xltemplate 126, 128 xltoleft 214 xltoright 214 xlup 214 xlworkbookdefault 220 xlworksheet 87, 88, 89, 90, 92, 93, 98, 99 Private 131, 132 R rozszerzenie.bas 33 T.cls 134, 145.exe 193.xla 33, 39, 41, 44, 222.xlam 33, 39, 41, 44, 222.xls 105.xlsx 105.xlt 33.xltm 33, 126, 127.xltx 126, 127 ThisWorkbook 145 typ Chart 153 Hyperlink 142, 143, 160 Range 132, 133, 138, 139, 141, 144, 155, 156, 159, 161 Workbook 101, 102 XlCalculation 216 XlDirection 214 XlFileFormat 220 XlReferenceStyle 218 XlWindowState 211 W właściwość Count 64, 67, 82, 92, 99 obiekt Application ActivePrinter 203 AlertBeforeOverwriting 219 AskToUpdateLinks 203 228 Copyright Dariusz Pietrzyk

Skorowidz CalculateBeforeSave 215 Calculation 216 DecimalSeparator 150, 154, 211 DefaultFilePath 219 DefaultSaveFormat 220 DefaultSheetDirection 212 DisplayAlerts 203 DisplayFormulaBar 206 DisplayFullScreen 207 DisplayRecentFiles 220 DisplayScrollBars 207 DisplayStatusBar 208 EditDirectlyInCell 212 FormulaBarHeight 208 Height 208 Iteration 217 MaxChange 217 MaxIterations 217 MouseAvailable 213 MoveAfterReturn 213 MoveAfterReturnDirection 214 Name 204 OperatingSystem 204 Path 221 PathSeparator 221 ReferenceStyle 218 RollZoom 209 ScreenUpdating 181, 182, 204 ShowWindowsInTaskbar 209 StartupPath 221 TemplatesPath 222 ThousandsSeparator 214 TransitionMenuKey 205 UsableHeight 210 UsableWidth 210 UserLibraryPath 222 UserName 205 UseSystemSeparators 215 Version 206 Width 210 WindowState 211 obiekt Cell Formula 53, 58, 60 FormulaHidden 62 FormulaLocal 61 FormulaR1C1 53, 54, 56, 57, 59-61 FormulaR1C1Local 61 HasFormula 61 obiekt Chart Name 152 obiekt Hyperlink Address 143, 160 Name 143, 160 Range 143, 160 TextToDisplay 143, 161 obiekt Workbook FullName 103, 104, 110 Copyright Dariusz Pietrzyk 229

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 2 Z Name 102, 103, 108, 109, 110, 112 Password 121, 122, 128 Path 103, 106, 110 obiekt Worksheet Index 71, 82 Name 65, 72, 73-75, 82, 93-95, 99 Visible 76-79, 83 zdarzenie Workbook Activate 148 AddinInstall 148 AddinUninstall 149 AfterSave 149 AfterXmlExport 162 AfterXmlImport 162 BeforeClose 150 BeforePrint 150 BeforeSave 151 BeforeXmlExport 162 BeforeXmlImport 162 Deactivate 152 NewChart 152 NewSheet 153 Open 153, 154 PivotTableCloseConnection 163, 164 PivotTableOpenConnection 163, 164 RowsetComplete 163 SheetActivate 154 SheetBeforeDoubleClick 154, 155 SheetBeforeRightClick 155, 156 SheetCalculate 157 SheetChange 158 SheetDeactivate 159 SheetFollowHyperlink 159, 160 SheetPivotTableAfterValueChange 163 SheetPivotTableBeforeAllocateChanges 163 SheetPivotTableBefore- CommitChanges 163 SheetPivotTableBefore- DiscardChanges 163 SheetPivotTableChange- Sync 163 SheetPivotTableUpdate 163 SheetSelectionChange 161 Sync 164 WindowActivate 148, 164 WindowDeactivate 164 WindowResize 164 Worksheet Activate 137 BeforeDoubleClick 137 230 Copyright Dariusz Pietrzyk

Skorowidz BeforeDoubleClick 154 BeforeRightClick 138, 156 Calculate 140, 157 Change 141, 158 Deactivate 141, 142, 159 FollowHyperlink 142, 160 PivotTableBeforeCommitChanges 144 PivotTableAfterValueChange 144 PivotTableBeforeAllocateChanges 144 PivotTableBeforeDiscardChanges 144 PivotTableChangeSync 144 PivotTableUpdate 144 SelectionChange 143, 161 Copyright Dariusz Pietrzyk 231