Zintegrowany kurs języka VBA cz. 3



Podobne dokumenty
TABLICA (ang. array) pojedyncza zmienna z wieloma komórkami, w których można zapamiętać wiele wartości tego samego typu danych.

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

Tablice. Jones Stygar na tropie zmiennych

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

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

Wykład 4. Tablice. Pliki

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

ECDL zaawansowany, moduł EXCEL

2017/2018 WGGiOS AGH. LibreOffice Base

Program szkolenia VBA (VISUAL BASIC FOR APPLICATIONS) W EXCELU PRZEKROJOWY.

ECDL/ICDL Użytkowanie baz danych Moduł S1 Sylabus - wersja 6.0

MS Excel od podstaw do analiz biznesowych

Kolumna Zeszyt Komórka Wiersz Tabela arkusza Zakładki arkuszy

MS Excel cz.1 funkcje zaawansowane

Ćwiczenie: JavaScript Cookies (3x45 minut)

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 1. Programowanie komputerowe

EXCEL POZIOM EXPERT. Konspekt szczegółowy

Pliki. Operacje na plikach w Pascalu

Egzamin zawodowy: Technik Informatyk 312[01] Oprogramowanie biurowe pytania i odpowiedzi

MS Excel od podstaw do analiz biznesowych

Deklaracja struktury w C++

Tablice, DataGridView

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

Moduł 2. Wykorzystanie programu Excel do zadań analitycznych

BAZY DANYCH. Co to jest baza danych. Przykłady baz danych. Z czego składa się baza danych. Rodzaje baz danych

asix4 Podręcznik użytkownika BAZA - drajwer dostępu do baz danych Podręcznik użytkownika

Przykłady zastosowań funkcji tekstowych w arkuszu kalkulacyjnym

Wymagania edukacyjne z informatyki dla klasy szóstej szkoły podstawowej.

Program szkolenia PODSTAWY VBA (VISUAL BASIC FOR APPLICATIONS) I FORMULARZE.

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

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

Oracle PL/SQL. Paweł Rajba.

ARKUSZ KALKULACYJNY komórka

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

Narzędzie informatyczne wspomagające dokonywanie ocen pracowniczych w służbie cywilnej

ECDL/ICDL Użytkowanie baz danych Moduł S1 Sylabus - wersja 5.0

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Łączenie liczb i tekstu.

asix4 Podręcznik użytkownika Drajwer OPC Podręcznik użytkownika

Centrum Szkoleo w Sochaczewie. Grzegorz Domaoski. grzegorz.domanski@wszim-sochaczew.edu.pl. MS Access 2010

Podstawowym zadaniem, które realizuje

Materiały do laboratorium MS ACCESS BASIC

Makra VBA w Excelu dla początkujących

Moduł mapowania danych

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

Program szkolenia VBA (VISUAL BASIC FOR APPLICATIONS) W EXCELU PODSTAWOWY.

Zaokrąglanie liczb Adresowanie względne i bezwzględne Automatyczne podejmowanie decyzji Porządkowanie tabeli danych

Excel dla administracji publicznej

Pytania SO Oprogramowanie Biurowe. Pytania: Egzamin Zawodowy

Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

Programowanie obiektowe

[WYSYŁANIE MAILI Z PROGRAMU EXCEL]

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

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

Zmiany funkcjonalne wprowadzone w Comarch e-sprawozdania w wersji

Wykład 2: Arkusz danych w programie STATISTICA

Programowanie obiektowe

Arkusz kalkulacyjny MS Excel 2010 PL.

Moduł mapowania danych

Profesjonalne szkolenia z MICROSOFT EXCEL DLA FIRM. w Warszawie i w całej Polsce

instrukcja użytkownika terminala ARGOX PA-20 SYSTEMY AUTOMATYCZNEJ IDENTYFIKACJI

Temat 1. Więcej o opracowywaniu tekstu

Sposób tworzenia tabeli przestawnej pokażę na przykładzie listy krajów z podstawowymi informacjami o nich.

Operacje na Wielu Arkuszach

Programowanie w języku Python. Grażyna Koba

Języki programowania zasady ich tworzenia

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

Wykład 9 Kolekcje, pliki tekstowe, Przykład: Notatnik

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

NIEZAWODNE ROZWIĄZANIA SYSTEMÓW AUTOMATYKI. asix. Aktualizacja pakietu asix 4 do wersji 5 lub 6. Pomoc techniczna

Program szkolenia EXCEL ŚREDNIOZAAWANSOWANY.

Przedmiot: Informatyka w inżynierii produkcji Forma: Laboratorium Temat: Zadanie 4. Instrukcja warunkowa.

Przykład 1. (Arkusz: Sortowanie 1 )

Informatyka I. Wykład 4. Tablice. Dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Excel 2010 PL. Formuły.

Zaawansowany Excel w Dziale Personalnym

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Elektroenergetyki Technologie informatyczne

TEMAT: SPOSOBY ADRESOWANIA W

Excel w obliczeniach naukowych i inżynierskich. Wydanie II.

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

Deduplikacja danych. Zarządzanie jakością danych podstawowych

Microsoft Excel 2003 profesjonalna analiza i raportowanie oraz prezentacja danych

WYPOŻYCZALNIA BY CTI INSTRUKCJA

FORMUŁY WARUNKOWE, DZIĘKI KTÓRYM TWÓJ EXCEL ZACZNIE MYŚLEĆ

Program szkolenia EXCEL OD PODSTAW POPOŁUDNIOWY (WIECZOROWY)

Excel formuły i funkcje

Comarch BI Point Standalone ulotka. Wersja: 6.2

Lista zgłoszeń zrealizowanych w uaktualnieniach Hot Fix w wersji

Comarch BI Point Standalone ulotka. Wersja: 6.2

Baza danych. Program: Access 2007

Żurek INFOBroker. Szkolenia warsztaty konsultacje MS Excel. tel

Podstawowe zagadnienia z zakresu baz danych

7. Podstawy zarządzania szablonami

Transkrypt:

Dariusz Pietrzyk Zintegrowany kurs języka VBA cz. 3 MS Excel bazy danych w arkuszach kalkulacyjnych

ISBN 978-83-912106-6-6 Copyright by Dariusz Pietrzyk & Wydawnictwo Studio em (www.sem.net.pl) Żadna część tego podręcznika nie może być bez pisemnej zgody Wydawcy powielana lub 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... 7 Do kogo kurs jest adresowany?... 9 Czego się nauczysz z tego podręcznika?... 10 Jak możesz używać tego podręcznika?... 11 Porządek omawianego materiału... 13 O autorze... 15 Bazy danych tworzone w arkuszach kalkulacyjnych... 17 Zastosowanie baz danych... 17 Podstawowe informacje o bazach danych... 18 Automatyzacja prac z bazami danych... 19 Ograniczenia w korzystaniu z bezpośredniego połączenia do bazy zewnętrznej... 22 Przenoszenie danych między bazami obsługa plików CSV... 25 Format plików CSV... 25 Ogólny algorytm przetwarzania plików CSV... 27 Inne możliwości wykorzystania mechanizmu obsługi plików CSV... 29 Tryb Input wczytywanie danych z pliku... 29 Aby wczytać plik... 29 Tryb Output zapisywanie danych do pliku... 32 Aby nadpisać plik... 32 Tryb Append dopisywanie danych na końcu pliku... 36 Aby dopisać do pliku kolejne wiersze... 36 Obsługa plików CSV podsumowanie... 38 Nazwy komórek i obszarów... 41 Zastosowanie i korzyści płynące z używania nazw... 41 Zasady tworzenia i używania nazw... 43 Operacje na nazwach... 44 Aby policzyć nazwy w zeszycie... 44 3

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 3 Aby przypisać nazwę do komórki (z adresem bezwzględnym lub w notacji RC)... 46 Aby przypisać nazwę do obszaru (z adresem bezwzględnym lub w notacji RC)... 49 Aby sprawdzić lokalizację nazwy... 50 Aby sprawdzić indeks nazwy w kolekcji... 52 Aby usunąć nazwę... 53 Pułapki języka VBA w zakresie używania nazw komórek/obszarów... 54 Właściwość Name dla obiektu klasy Cell... 54 Metoda ListNames dla obiektu klasy Cell... 55 Właściwość Value dla obiektu klasy Name... 55 Właściwość Visible dla obiektu klasy Name... 56 Używanie nazw lokalnych na poziomie arkusza... 57 Operacje na nazwach podsumowanie... 59 Zmienne tablicowe (tablice)... 63 Korzyści płynące z używania tablic... 63 Rodzaje zmiennych tablicowych... 65 Zasady budowy i korzystania ze zmiennych tablicowych... 66 Deklarowanie i przetwarzanie tablic... 67 Aby elementy tablic były numerowane od 1... 67 Aby zadeklarować zmienną tablicową... 68 Aby przypisać wartość do wybranego elementu tablicy... 69 Aby usunąć wartość wybranego elementu tablicy... 69 Aby wypełnić tablicę danymi... 69 Aby przepisać zawartość tablicy do arkusza... 71 Tablice dwuwymiarowe... 73 Aby użyć tablicy dwuwymiarowej... 74 Aby użyć funkcji LBound i UBound w tablicy dwuwymiarowej... 77 Tablice dynamiczne... 80 Aby użyć dynamicznej zmiennej tablicowej... 81 Zmienne tablicowe podsumowanie... 84 4 Copyright Dariusz Pietrzyk

Strukturalne typy danych... 89 Korzyści z używania strukturalnych typów danych... 89 Tworzenie strukturalnych typów danych... 90 Aby utworzyć strukturalny typ danych... 91 Używanie strukturalnych typów danych... 91 Aby użyć strukturalnego typu danych... 92 Aby użyć strukturalnego typu danych w połączeniu ze zmienną tablicową... 93 Strukturalne typy danych podsumowanie... 95 Skorowidz... 97 Copyright Dariusz Pietrzyk 5

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. Bazy danych tworzone w arkuszach kalkulacyjnych (s. 17) czyli podstawowa wiedza ułatwiająca zrozumienie działania elementarnych mechanizmów bazodanowych (spotykanych m.in. w aplikacji MS Excel, ale też MS Access czy technologiach bardziej zaawansowanych (jak MySQL czy Oracle) oraz zasady efektywnego tworzenia takich mechanizmów na własny użytek (w ramach potrzeb i możliwości arkuszy kalkulacyjnych). 2. Przenoszenie danych między bazami obsługa plików CSV (s. 25) czyli zasady działania prostych i niezawodnych plików CSV (czyli plików tekstowych przetwarzanych wiersz po wierszu) oraz tworzenie mechanizmów pobierania i wysyłania danych do takich plików. 3. Nazwy komórek i obszarów (s. 41) czyli automatyzacja pracy z nazwami, które są bardzo przydatne głównie (choć nie tylko) w bazach danych. 4. Zmienne tablicowe (tablice) (s. 63) czyli tworzenie i używanie zmiennych pozwalających jednocześnie przechowywać 7

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 3 wielkie ilości danych (również dużo większe, niż można zmieścić w największych nawet arkuszach), a zarazem niezwykle szybko je przetwarzać (szczególnie w porównaniu z analogicznymi operacjami wykonywanymi wprost w arkuszu kalkulacyjnym). 5. Strukturalne typy danych (s. 89) czyli tworzenie i używanie własnych typów danych ułatwiających m.in. pracę z rekordami bazodanowymi (zawierającymi zróżnicowane co do typu porcje danych, np. teksty, liczby i daty jednocześnie) oraz zwiększających czytelność i przejrzystość kodu (szczególnie w przypadku używania zmiennych tablicowych). Dzięki takiemu układowi materiału oraz kompletnym omówieniom poszczególnych zagadnień masz zatem okazję poszerzyć swoje kompetencje, przede wszystkim zawodowe, przydatne w Twojej codziennej pracy z wykorzystaniem umiejętności programowania bardzo przydatnej w dzisiejszym świecie wypełnionym przez komputery. [ ] 8 Copyright Dariusz Pietrzyk

Nazwy komórek i obszarów Nazwa to pomocniczy identyfikator komórki lub obszaru, zastępujący zwięzłe, ale zarazem mało czytelne adresy bezwzględne używane w formułach. Na poziomie VBA każda nazwa jest obiektem wchodzącym w skład kolekcji nazw (komórek i obszarów) w konkretnym zeszycie. Zastosowanie i korzyści płynące z używania nazw Używanie nazw: ułatwia orientację w strukturze obliczeń bardziej skomplikowanych zeszytów, zwiększa czytelność formuł, a zatem zmniejsza pracochłonność kontroli poprawności oraz modyfikacji struktur obliczeniowych wyrażonych formułami. Np. łatwiej jest zrozumieć działanie formuły =C10*StawkaVAT- Podst niż =C10*$A$2 lub formuły =Suma(Przychody) niż =Suma($C$2:$C$50000). Nazwy komórek i obszarów są też bardzo przydatne głównie do operacji na: bazach danych w arkuszu nazwany obszar bazodanowy da się łatwiej przetwarzać w wielu funkcjach arkuszowych, m.in. bazodanowych (np. BD.Suma czy Wyszukaj.Pionowo), a zarazem może być łatwo poszerzany lub zmniejszany automatycznie w miarę zmian ilości rekordów w bazie, 41

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 3 obszarów wchodzących do obliczeń jako argumenty niektórych funkcji (np. Min, Max itp.), współczynników i obszarów podawanych przez nazwy do formuł wpisywanych do komórek arkusza z poziomu VBA. Obsługa nazw w kolejnych wersjach (szczególnie 2007 i 2010) jest coraz bardziej pracochłonna (w niektórych przypadkach wymaga dużo większej ilości kliknięć, żeby osiągnąć ten sam efekt, co w wersjach starszych), a zarazem wprowadza niepotrzebne zamieszanie (nazwy lokalne w arkuszach). Automatyzacja działań na nazwach może zatem zdecydowanie ułatwić i przyspieszyć pracę z bardziej złożonymi i zawierającymi większe ilości danych zeszytami. Uwaga W wersjach 2002/2003 wprowadzono możliwość używania jednakowo brzmiących nazw w wielu arkuszach tego samego zeszytu i rozróżnienie nazw obowiązujących na poziomie zeszytu oraz nazw obowiązujących na poziomie pojedynczego arkusza. Jednakże rozwiązanie to (poza błędami, które pojawiły się wówczas w obsłudze nazw przez program i zostały poprawione dopiero w wersji 2007) prowadzi do niepotrzebnych komplikacji. Istotą bowiem mechanizmu używania nazw i największym ułatwieniem była (przyjęta w starszych wersjach MS Excel) zasada unikalności nazwy w obrębie jednego zeszytu, dzięki czemu można: szybko i sprawnie zarówno zarządzać nazwami komórek lub obszarów w zeszytach, 42 Copyright Dariusz Pietrzyk

Nazwy komórek i obszarów łatwiej i szybciej przede wszystkim kontrolować poprawność formuł oraz weryfikować i modyfikować dane znajdujące się w nazwanych komórkach. Z tego powodu na poziomie VBA najlepszym rozwiązaniem jest przestrzeganie tej samej reguły w ramach jednego zeszytu dana nazwa może występować tylko jeden raz. Dzięki temu będzie można: w niezawodny sposób obsługiwać nazwy z tego poziomu, uniknąć niepotrzebnej komplikacji kodu, utrzymać jednolitość kodu w różnych wersjach MS Excel (od 2002 do 2013, a zapewne też i następnych 1 ). Zasady tworzenia i używania nazw 1. Nazwy powinny być unikalne w obrębie wszystkich arkuszy danego zeszytu. 2. Nazwy najlepiej jest tworzyć zgodnie z regułami tworzenia nazw bezpiecznych (jak dla procedur czy zmiennych), czyli używać w nich wyłącznie: liter, cyfr, znaku podkreślenia (zamiast spacji). 3. Nie używać w nich natomiast żadnych innych znaków, w tym: spacji, 1 O ile mechanizm nazw nie zostanie w nich napisany od początku i całkiem inaczej niż dotychczas, ale na to się raczej nie zanosi. Copyright Dariusz Pietrzyk 43

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 3 liter ze znakami diakrytycznymi (czyli używamy np. a zamiast ą ). 4. Trzeba unikać tworzenia nazw nadmiarowych lub zbędnych zbyt duża ilość nazw może spowodować znaczące spowolnienie działania niektórych operacji. 5. Na poziomie VBA najlepiej korzystać z dostępu do poszczególnych nazw poprzez kolekcję nazw w zeszycie (jak dotąd działa tak samo we wszystkich wersjach MS Excel). Operacje na nazwach Najczęściej używane i najbardziej przydatne podstawowe operacje na nazwach to: sprawdzenie ilości nazw, utworzenie nazwy wraz z jej przypisaniem do komórki lub obszaru, sprawdzenie, do jakiej komórki/obszaru jest ona przypisana, sprawdzenie indeksu nazwy (jej numeru kolejnego w kolekcji), usunięcie wybranej nazwy. Aby policzyć nazwy w zeszycie Wpisz np.: Sub policznazwywzeszycie() MsgBox ("Ilość nazw w zeszycie = " _& ActiveWorkbook.Names.Count) End Sub 44 Copyright Dariusz Pietrzyk

Nazwy komórek i obszarów Instrukcja MsgBox Znaczenie Wyświetl ilość nazw dostępnych w bieżącym (aktywnym) zeszycie. Przykładowy efekt działania Wskazówki Ilość nazw w zeszycie jest liczbą całkowitą Byte lub co najwyżej Integer (zwykle po jednej nazwie dla każdego obszaru bazodanowego w zeszycie oraz do kilkudziesięciu nazw współczynników). Właściwość Count może być przydatna np. do ustalenia wielkości zmiennej tablicowej przeznaczonej na nazwy i związane z nimi adresy komórek/obszarów. Uwaga Nie należy przesadzać z ilością używanych nazw, ponieważ może to doprowadzić: Do spowolnienia niektórych operacji np. 300 nazw zwiększyło wielkość tego samego zeszytu o ok. 20 kb (z 48 do 66), natomiast czas zapisu do ok. 15 sekund (czyli znacząco więcej niż tego samego zeszytu, ale bez nazw). Copyright Dariusz Pietrzyk 45

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 3 Czasem nawet do uszkodzenia zeszytu i zawieszenia programu. Aby przypisać nazwę do komórki (z adresem bezwzględnym lub w notacji RC) Wpisz np.: Sub przypisznazwedokomorki() ActiveWorkbook.Names.Add _ Name:="StawkaVATPodst", _ RefersTo:="=Testy!$A$2" End Sub Instrukcja ActiveWorkbook.Names.Add Znaczenie Dodaj kolejną nazwę do kolekcji nazw w zeszycie. Nazwa ma mieć postać StawkaVATPodst i ma być przypisana do komórki A2 w arkuszu Testy. Jeśli zamiast argumentu RefersTo użyty zostanie argument RefersToR1C1, możliwe będzie podanie adresu komórki w notacji RC (np. RefersToR1C1:="=Testy!R2C1", czyli odwołanie do komórki w wierszu 2 i 1 kolumnie arkusza Testy). 46 Copyright Dariusz Pietrzyk

Nazwy komórek i obszarów Efekt działania Uwaga Nazwę istniejącą w zeszycie da się z poziomu VBA przypisać do innej komórki. Wówczas zostanie ona automatycznie usunięta z komórki, do której była przypisana wcześniej. Dotyczy to również nazw obszarów. Trzeba zatem uważać, by przypadkiem nie uszkodzić struktury obliczeń (np. nazywając obszar kolejnej bazy danych w nowo utworzonym arkuszu tak samo, jak inna baza istniejąca w zeszycie już wcześniej). Jeśli istnieje takie zagrożenie, trzeba przed dodaniem nazwy sprawdzać, czy istnieje ona w zeszycie. Da się przypisać z poziomu VBA nazwę do komórki/obszaru w nieistniejącym arkuszu (zarówno w MS Excel 2007, jak Copyright Dariusz Pietrzyk 47

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 3 i starszych). Dlatego przed utworzeniem/przypisaniem nazwy (komórki lub obszaru) trzeba sprawdzić, czy istnieje dany arkusz. Do wersji 2003 możliwe było przypisanie nazwy bezpośrednio do komórki aktywnej, czyli np. ActiveCell.Name = "NazwaTestowa". Jednak próba odczytania nazwy aktywnej komórki z tej właściwości kończyła się tylko uzyskaniem adresu bezwzględnego, natomiast w nowszych (od 2007/2010) właściwość Name dla komórki nie istnieje. Wskazówki Jeśli chcesz poszerzyć nazwany obszar (np. po zwiększeniu ilości rekordów w bazie danych, która jest objęta nazwą), wystarczy w zeszycie ponownie dodać tę samą nazwę, zmieniając jedynie np. adresy komórek wchodzących w skład tego obszaru. Argument Name używany w metodzie Add jest zarazem właściwością samej nazwy można za jego pomocą sprawdzić postać obiektu klasy Name (czyli nazwy) przy odwołaniu do takiego obiektu np. w pętli For Each. Nazwy komórek i obszarów są wygodne w użyciu przede wszystkim w instrukcjach wpisania formuły do komórki arkusza (właściwość komórki FormulaR1C1). Do komórki można przypisać więcej niż jedną nazwę, ale lepiej tego unikać (może spowodować duży i niepotrzebny zamęt w nazwach oraz utrudnić ich obsługę zarówno użytkownikom MS Excel, jak też obsługę automatyczną). 48 Copyright Dariusz Pietrzyk

Nazwy komórek i obszarów Aby przypisać nazwę do obszaru (z adresem bezwzględnym lub w notacji RC) Wpisz np.: Sub przypisznazwedoobszaru() ActiveWorkbook.Names.Add _ Name:="CenyNetto", _ RefersTo:="=Testy!$C$2:$C$10" End Sub Instrukcja ActiveWorkbook.Names.Add Znaczenie Dodaj kolejną nazwę do kolekcji nazw w zeszycie. Nazwa ma mieć postać CenyNetto i ma być przypisana do komórek od C2 do C10 w arkuszu Testy. Jeśli zamiast argumentu RefersTo użyty zostanie argument RefersToR1C1, możliwe będzie podanie adresu komórki w notacji RC (np. RefersToR1C1:="=Testy! R2C3:R10C3", czyli odwołanie do komórek od wiersza 2 w kolumnie 3 do wiersza 10 w kolumnie trzeciej arkusza Testy). Copyright Dariusz Pietrzyk 49

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 3 Efekt działania Aby sprawdzić lokalizację nazwy Wpisz np.: Sub sprawdzlokalizacjenazwy() MsgBox ("Nazwa CenyNetto odnosi się do: " _ & ActiveWorkbook.Names("CenyNetto").RefersTo) End Sub Instrukcja Znaczenie MsgBox Wyświetl odwołanie do obszaru (właściwość RefersTo) nazwy o postaci CenyNetto dostępnej w kolekcji nazw bieżącego zeszytu. 50 Copyright Dariusz Pietrzyk

Nazwy komórek i obszarów Efekt działania Uwaga Właściwość RefersTo technicznie (i zgodnie z dokumentacją VBA) pozwala wprost zmieniać przypisanie nazwy do konkretnego adresu (podobnie jak metoda Add), ale będzie to powodować pewne utrudnienia dla użytkowników. Np. dodana w taki sposób nazwa będzie widoczna w menedżerze nazw, ale nie będzie widoczna w polu nazwy, jeśli nazwana komórka zostanie zaznaczona (taka sytuacja ma miejsce m.in. w MS Excel 2010). Lepiej zatem tej właściwości używać wyłącznie do odczytywania lokalizacji nazw w zeszycie. Możliwe jest też sprawdzenie lokalizacji nazwy za pomocą właściwości RefersToR1C1 (uzyskamy wtedy zapis w notacji wiersz/kolumna, czyli np. Tmp!R1C2). Ta właściwość również pozwala zmienić swą zawartość wprost przez przypisanie nowego adresu do nazwy, ale jeśli zostanie w taki sposób użyta, kłopoty użytkowników mogą być większe niż w przypadku RefersTo nie tylko bowiem w polu nazwy nie będzie się taka nazwa pojawiać, ale też w menedżerze nazw pojawi się niezrozumiały na pierwszy rzut oka dla przeciętnego użytkownika MS Excel zapis w postaci np. Tmp!R1C2. Zatem i tej właściwości Copyright Dariusz Pietrzyk 51

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 3 lepiej używać wyłącznie do odczytywania lokalizacji nazw w zeszycie. Dla nazwy (czyli obiektu należącego do kolekcji nazw w zeszycie) istnieje jeszcze właściwość Value, ale (nieintuicyjnie) zawiera ona nie wartość (np. nazwanej komórki), tylko lokalizację nazwy przenoszoną przez właściwość RefersTo. Aby sprawdzić indeks nazwy w kolekcji Wpisz np.: Sub sprawdznrnazwywkolekcji() MsgBox ("Nr nazwy CenyNetto = " _ & ActiveWorkbook.Names("CenyNetto").Index) End Sub Instrukcja Znaczenie MsgBox Wyświetl numer (indeks) nazwy o postaci CenyNetto dostępnej w kolekcji nazw bieżącego zeszytu. Efekt działania Wskazówki Kolekcja nazw jest w zeszycie numerowana (jak wszystkie kolekcje), zatem do każdej nazwy można się odwołać przez jej indeks, jakkolwiek jest to mało przydatna możliwość. 52 Copyright Dariusz Pietrzyk

Nazwy komórek i obszarów Właściwość Index odzwierciedla głównie numer kolejny sprawdzanej nazwy w oknie menedżera nazw. Aby usunąć nazwę Wpisz np.: Sub usunnazwe() ActiveWorkbook.Names("CenyNetto").Delete End Sub Instrukcja ActiveWorkbook.Names Znaczenie Usuń nazwę o postaci Przychody dostępnej w kolekcji nazw bieżącego zeszytu. Efekt działania Uwaga Jeśli usuwana nazwa była używana w formułach zapisanych w arkuszu, komórki z takimi formułami zgłoszą błąd (np. w po- Copyright Dariusz Pietrzyk 53

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 3 staci #NAZWA?). Przydatny może być zatem mechanizm sprawdzający, czy usuwana nazwa jest używana w formułach, ale mechanizm ten będzie mocno obciążać komputer. W skrajnym przypadku bowiem konieczne jest sprawdzenie każdej komórki z obszaru arkusza/arkuszy, zawierającej wpisy (można się pomocniczo posłużyć właściwością komórki HasFormula, ale jest to rozwiązanie zawodne i zarazem nie przyspieszy działania podstawowego algorytmu sprawdzania komórek). Wskazówki Do wersji 2003 można usunąć bezpośrednio nazwę przypisaną do aktywnej komórki (instrukcją ActiveCell.Name. [ ] Delete). Jednak od wersji 2007 właściwość Name dla obiektu klasy Cell nie istnieje, zatem najbezpieczniej jest nie używać tej właściwości w procedurach. 54 Copyright Dariusz Pietrzyk

Nazwy komórek i obszarów Operacje na nazwach podsumowanie Konstrukcja Znaczenie Zapis Typ danych ActiveWorkbook.Names Kolekcja nazw w aktywnym zeszycie ActiveWorkbook.Names _ Ilość nazw w aktyw- Nie Byte lub.count nym zeszycie Integer ActiveWorkbook.Names _ Dodaj podaną nazwę.add _ do komórki o adresie Name:="Nazwa", _ A2 w arkuszu Testy RefersTo:="=Testy!$A$2" ActiveWorkbook.Names _ Dodaj podaną nazwę.add _ do komórki o poda- Name:="Nazwa2", _ nych współrzędnych RefersToR1C1:= _ (2 wiersz, 1 kolum- "=Testy!R2C1" na) w arkuszu Testy Copyright Dariusz Pietrzyk 55

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 3 Konstrukcja Znaczenie Zapis Typ danych onazwa.refersto 1 Nazwa arkusza i ad- Nie 2 String res komórki (lub obszaru), do której przypisana jest podana nazwa onazwa.referstor1c1 Lokalizacja komórki Nie 3 String lub obszaru objętego podaną nazwą za pomocą współrzędnych ( [arkusz]! R[nrWiersza]- C[nrKolumny] dla komórki i [arkusz]! R[nrWierszaOd]- C[nrKolumny- Od]:R[nrWierszaDo] -C[nrKolumnyDo] dla obszaru) 1 Konstrukcja onazwa oznacza tu każde poprawne odwołanie do konkretnej nazwy np. odwołanie wewnątrz pętli For Each onazwa In Active- Workbook.Names. 2 Technicznie (i zgodnie z dokumentacją VBA) można zawartość tej właściwości zmieniać wprost, ale jak była o tym mowa wcześniej przy okazji dokładniejszego omawiania tej właściwości najlepiej i najbezpieczniej używać jej jako tylko-do-odczytu. 3 Właściwości RefersToR1C1 również lepiej używać jako tylko-do-odczytu. 56 Copyright Dariusz Pietrzyk

Nazwy komórek i obszarów Konstrukcja Znaczenie Zapis Typ danych onazwa.name Nazwa (czyli postać Nie 1 String nazwy widoczna np. w menedżerze nazw w MS Excel). onazwa.index Numer (indeks) naz- Nie Byte lub wy w kolekcji Integer onazwa.delete Usuń podaną nazwę z kolekcji 1 Właściwości Name również lepiej używać jako tylko-do-odczytu. Copyright Dariusz Pietrzyk 57

Skorowidz Numer strony zapisany pogrubionym pismem oznacza obszerniejszy (czasem kilkustronicowy) opis, ważniejsze objaśnienie lub typowy przykład użycia. argument Name 46, 48, 49, 59 RefersTo 46, 49, 59 RefersToR1C1 46, 49, 59 błąd run-time 20, 31, 71, 81, 87 #ARG? 56 #NAZWA? 54 connection string 23 CSV plik 25-29, 38 standard 25 funkcja Asc 31 Chr 35 EOF 30, 38 LBound 70, 71, 72, 77, 78, 80, 82, 83, 85, 86 UBound 70, 71, 72, 77, 78, 80, 82, 83, 86 instrukcja Close 24, 30, 31, 33, 34, 37, 39 Line Input 30, 39 Open 24, 30, 32, 33, 36-38, 39 Option Base 67, 69, 84, 85, 94 Option Explicit 67, 84 Print 33, 35, 37, 39 Private 90 Public 90, 91, 95 ReDim 82-84, 86 Reset 31, 34, 35 Type 91, 95 Write 35, 39 klasa Cell 54, 55 Name 48, 55, 56 kolekcja ActiveWorkbook.Names 44, 46, 49, 50, 52, 53, 55, 59 metoda Add 46, 48, 49, 51, 59 Delete 53, 54, 61 ListNames 55 nazwa (komórki/obszaru) 41 zasady tworzenia 43 zastosowanie 41 strukturalny typ danych 89 tworzenie 90 używanie 91 97

Dariusz Pietrzyk, Zintegrowany kurs języka VBA cz. 3 tryb Append 36, 37, 39 Input 29, 30, 38 Output 32, 33, 39 właściwość Count 44, 45, 59 FormulaR1C1 48 HasFormula 54 Index 52, 53, 61 Name 48, 54, 61 RefersTo 50, 51, 52, 56, 60 RefersToR1C1 51, 60 ValidWorkbookParameter 57, 58 Value 52, 55 Visible 56 zmienna tablicowa 63 deklarowanie 68 dwuwymiarowa 73 dynamiczna 80 98 Copyright Dariusz Pietrzyk