Programowanie obiektowe i makra w Excelu, Komputer


Super-Easy Guide to the Microsoft Office Excel 2003 Object Model

Frank C. Rice
Microsoft Corporation

http://msdn.microsoft.com/en-us/library/Aa203714(office.11).aspx#odc_super_lesson1gettingstarted

Super łatwy przewodnik modelowania obiektowego w MS Excel 2003

(tworzenie makropoleceń)

Przekład

Robert Wiśniewski

0x01 graphic

http://chomikuj.pl/bobwis

0x01 graphic

SPIS TREŚCI

1. Wprowadzenie

2. Dlaczego warto wiedzieć jak korzystać z modelowania obiektowego ?

3. Korzystanie z tego przewodnika

4. Co trzeba wiedzieć przed rozpoczęciem nauki

5. Co będziemy wiedzieli po zakończeniu tych lekcji

6. Lekcje

6.1. Lekcja 1 - Rozpoczęcie pracy

6.2. Lekcja 2 - Koncepcja programowania: Sub...End Sub oraz procedury

6.3. Lekcja 3 - Koncepcja programowania: Obiekty, metody i właściwości

6.4. Lekcja 4 - Świat rzeczywisty - Przykład # 1

6.5. Lekcja 5 - Tworzenie własnych okienek dialogowych

6.6. Lekcja 6 - Koncepcja programowania: Kolekcje

6.7. Lekcja 7 - Koncepcja programowania: If This, Then That

6.8. Lekcja 8 - Świat rzeczywisty - Przykład # 2

7. Co dalej ?

8. Dodatek A: Przykładowe makropolecenia

0x01 graphic


1. Wprowadzenie

Wprowadzanie modelowania obiektowego (makropoleceń) do MS Excel ® 2003 jest łatwe. Naprawdę jest łatwe. Nie jest do tego potrzebna zaawansowana wiedza komputerowa. Nie trzeba w tym celu znać takich języków programowania jak C lub C+ ani żadnych innych języków programowania. Nie trzeba również nic wiedzieć o modelowaniu obiektowym.

Aby rozpocząć pracę, przyjrzyjmy się poniższym wierszom kodu:

Sub ColorEverySecondRow()

Const Gray = 15

Range("A2").EntireRow.Select

Do While ActiveCell.Value <> ""

Selection.Interior.ColorIndex = Gray

ActiveCell.Offset(2,0).EntireRow.Select

Loop

End Sub

Czy możecie powiedzieć co ten kod wykonuje w Excelu ?

Za pomocą tych kilku wierszy kodu możemy dodać cieniowanie do co drugiego wiersza w aktywnym arkuszu roboczym. Polecenie ColorEverySecondRow (pokoloruj co drugi wiersz) rozpoczynamy od zadeklarowania stałej o nazwie Gray (szary), która ma wartość 15. Znaczenie tej stałej stanie się wkrótce jasne. Następnie zostaje zaznaczony wiersz 2. Po zaznaczeniu całego wiersza, jego pierwsza komórka z lewej w kolumnie A, automatycznie staje się komórką aktywną. Polecenie Do... Loop (wykonaj pętlę) powtarza tą operację gdy tylko aktywna komórka jest pusta. W pętli tej ustawiany jest kod koloru wnętrza zaznaczonej komórki na 15, co odpowiada barwie szarej Gray. Następny kod zaznacza cały wiersz oraz dwa wiersze w dół od aktywnej komórki. Jest to kontynuowane dopóki aktywna komórka jest pusta, a gdy warunek While (dopóki) niej jest już spełniony, następuje przerwanie pętli.

Tak więc widzimy, że te sześć wierszy kodu pozwala na szybką zmianę koloru komórek naszego arkusza roboczego, aby stał się lepiej czytelny .

2. Dlaczego warto wiedzieć jak korzystać
z modelowania obiektowego ?

Modelowanie obiektowe pozwala na dostosowanie Excela do określonych potrzeb. Korzystanie w tym celu z makropoleceń jest idealne do zwiększania funkcjonalności Excela.

Przykładowo, kierownik wydziału w twoim przedsiębiorstwie ubolewa, że praca z tworzeniem raportów z wydatków jest wąskim gardłem przy tworzeniu sprawozdań z podróży do przedstawicieli handlowych. Wiesz jednak, że można szybko sporządzać raporty z wydatków w Excelu i utworzyć mapę raportów w schemacie XML. Pozwala to na uzupełnianie sprawozdań z podróży służbowych kierując odpowiednie pliki do komputerów podręcznych (laptopów) przedstawicieli handlowych.

3. Korzystanie z tego przewodnika

Przewodnik ten jest podzielony na 8 lekcji. Każda lekcja jest pod ręką i można z nich korzystać posługując się Excelem. Przewodnik ten można czytać „do poduszki”, ale najlepiej z niego korzystać mając przed sobą komputer.

4. Co trzeba wiedzieć przed rozpoczęciem nauki

Wszystko co jest niezbędne do racy, to znajomość systemu operacyjnego MS Windows ® oraz umiejętność posługiwania się MS Excelem.

Gdy mamy już pewne doświadczenie w programowaniu, zapewne wystarczy tylko zerknąć do sekcji „Koncepcja programowania”, ale reszta materiału nadal będzie przydatna.

5. Co będziemy wiedzieli po zakończeniu tych lekcji

Po zakończeniu poznawania tego przewodnika oraz po wykonaniu wszystkich przykładów i ćwiczeń, można samodzielnie tworzyć własne aplikacje przy korzystania modelowania obiektowego w Excelu.

Zapewne będziemy mogli odkryć własny sposób korzystania z dostępnych narzędzi do rozwiązywania niezbędnych problemów.

Na koniec będziemy mogli zapoznawać się z niektórymi koncepcjami programowania i uzyskiwać dalszą wiedze o języku programowania Microsoft Visual Basic®.

Podsumowując, skorzystanie z pomocy tego przewodnika pozwoli na stosowanie modelowania obiektowego w Excelu dla potrzeb własnych i przedsiębiorstwa.

6. Lekcje

Ustawienia

Aby korzystać z tego przewodnika i śledzić przytoczone przykłady, trzeba mieć MS Office Excel 2003 (beta 2 lub nowszy).

Nie trzeba w tym celu korzystać z żadnych innych narzędzi.

6.1. Lekcja 1 - Rozpoczęcie pracy

We wszystkich lekcjach tego przewodnika będziemy korzystali z programu Microsoft Visual Basic for Applications (VBA). Jest to wersji wbudowana w aplikację Microsoft Office, w tym w MS Excel. Rozwiązania tworzone za pomocą programu VBA noszą równie nazwę makropoleceń Macro.

Makropolecenie jest zestawem instrukcji Visual Basic, które są bardzo przydatne. Przy pisaniu makr do wykonywania różnych zadań w Excelu, wpisujemy instrukcje VBA, które korzystają z modelowania obiektowego w Excelu. W programie Excel można tworzyć makropolecenia przez ich wpisywanie lub przez ich rejestrowanie w trakcie wykonywania różnych operacji.

Aby rozpocząć wpisywanie makropolecenia

  1. Uruchomić MS Excel 2003

  2. W men Narzędzia wybrać polecenie Makro oraz wybrać opcję Makra

  3. Nazwać tworzone makro (nazwa nie może zawierać spacji, a więc wpisujemy np. MojeMakro)

  4. Kliknąć przycisk Utwórz.

Excel automatycznie uruchomi editor Visual Basic Editor , którego okno jest pokazane na poniższym rysunku:

0x01 graphic

Rys. 1. Domyślny widok edytora Visual Basic Editor

Domyślnie, edytor Visual Basis wyświetla trzy okna:

Teraz skorzystamy z każdego z tych trzech okien.

Obejrzeć okno kodów z naszym modułem, który nazwaliśmy MójPierwszyModuł. Aby go otworzyć, należy podwójnie kliknąć jego nazwę w oknie eksploratora projektu.

W celu skompletowania makra

  1. Teraz wprowadzić pewien kod w procedurze Sub o nazwie Moje Makro

  2. W oknie kodów wpisać poniższe polecenia:

Sub MojeMakro()

Dim wrkSheet As Worksheet

Set wrkSheet = ActiveWorkbook.Worksheets.Add

Range("B1").Value = "MójNowyArkusz"

End Sub

Nie musimy wiedzieć jak lub dlaczego ten kod działa. Dowiemy się o tym w następnej lekcji. Teraz zajmiemy się jego czynnością.

  1. Najpierw zamknąć edytor Visual Basic. W tym celu wybrać polecenie menu File, po czym kliknąć opcję Close and Return to Microsoft Excel.

  2. W Excelu, wybrać menu Narzędzia, wybrać polecenie Makro oraz opcję Makra.

  3. W otworzonym okienku dialogowym zaznaczona jest pozycja MojeMakro.
    Kliknąć przycisk Uruchom.

Czy widzicie, że w komórce B1 został wstawiony napis: MójNowyArkusz ?

Gratulujemy ! Jesteście teraz nowym, oficjalnym programistą modelowania obiektowego w Excelu.

Uwaga: Gdy pojawi się komunikat o błędzie, nie przejmuj się. Kliknij przycisk potwierdzenia i upewnij się czy wprowadzone kody są takie same jak pokazano wyżej i powtórz kroki 2-4.

Niezależnie od ręcznego wprowadzania makropoleceń przez wpisywanie kodów w edytorze Visual Basic, można również tworzyć makra korzystając z rejestratora makropoleceń Macro Recorder. Za pomocą tego rejestratora, Excel tworzy makra przez rejestrowanie poleceń memu, skrótów klawiszowych, i innych operacji niezbędnych do wykonania danego zadania.

Proces rejestrowania makr składa się z trzech kroków. Pierwszym jest uruchomienie rejestratora makropoleceń, drugim jest wykonanie operacji, jaką chcemy zarejestrować a ostatnim krokiem jest zatrzymanie rejestratora.

Aby rozpocząć rejestrację makro

W celu pokazania tego procesu, utwórzmy proste makro, które wstawia nazwę firmy oraz jej adres w arkuszu Worksheets. Zapisać i zamknąć wszystkie skoroszyty robocze Workbooks, po czym otworzyć nowy skoroszyt roboczy (plik).

  1. W menu Narzędzia wybrać polecenie Makro i kliknąć opcję Zarejestruj nowe makro. Excel wyświetli niej pokazane okienko dialogowe:

0x01 graphic


Rys. 2. Widok okienka dialogowego rejestrowania makropolecenia

  1. W polu Nazwa Makra wpisać nazwę makropolecenia, np. AdresFirmy.

  2. W polu Klawisz Skrótu wpisać kombinację klawiszy uruchamiających makro. Przykładowo, wpisać A.

  3. W polu Przechowuj makro w wybrać opcję Ten skoroszyt

  4. W polu Opis wprowadzić opis makra. Przykładowo, wpisać: Wpisywanie adresu firmy.

  5. Aby zacząć rejestrację, kliknąć przycisk OK. Excel wyświetl w pasku stanu napis Rejestruj oraz wyświetli pasek zatrzymania rejestracji.

0x08 graphic

Rys. 3. Pasek zatrzymania rejestracji


  1. Kliknąć komórkę A1 i wpisać: Northwind Traders. W komórce A2 wpisać: 1234 West Anywhere Place. W komórce A3 wpisać: Redmond, WA 98052.

  2. Kliknąć przycisk Stop zatrzymania rejestracji.

  3. W celu przetestowania nowego makropolecenia, oczyścić arkusz, po czym wpisać skrót klawiszowy CTRL + SHIFT + A. Excel uruchomi wprowadzone makro wykonując kroki jakie zostały zarejestrowane.

Informacje o bezpieczeństwie

MS Excel sprawdza czy lub nie mamy makr przy uruchamianiu programu. Właśnie dlatego przy uruchamianiu Excela możemy zobaczyć poniższy komunikat:

0x01 graphic

Rys. 4. Okienko dialogowe bezpieczeństwa

Gdy zobaczymy takie okienko dialogowe, kliknąć przycisk Włącz makra. Dzięki temu zezwolimy Excelowi na uruchamianie utworzonych makropoleceń. Chociaż nie zalecamy tego w podręczniku szkoleniowym, można również usunąć wyświetlanie tego okienka dialogowego przez zmniejszenie poziomu zabezpieczeń naszych makr. W tym celu wybrać Narzędzia, wybrać polecenie Makro, po czym kliknąć opcję Zabezpieczenia. W otworzonym okienku dialogowym wybrać średni (lub niski) poziom zabezpieczeń i kliknąć przycisk OK.

Ważne: Przez obniżenie poziomu zabezpieczeń nie będziemy chronieni przed niebezpiecznymi makrami. Z ustawienia tego korzystajmy tylko wtedy gdy mamy zainstalowany program antywirusowy, lub gdy mamy sprawdzone wszystkie otwierane dokumenty.

6.2. Lekcja 2 - Koncepcja programowania: Sub...End Sub oraz procedury

Di tej chwili zajmowaliśmy się wpisywaniem kodu, ale nadszedł czas na to, aby dowiedzieć się nieco więcej o istocie programowania. Spójrzmy ma ostatnio wpisany kod:

Sub MojeMakro()

Dim wrkSheet As Worksheet

Set wrkSheet = ActiveWorkbook.Worksheets.Add

Range("B1").Value = "MójNowyArkusz"

End Sub

Słowa kluczowe Sub...End Sub są umieszczane na początku i na końcu makra wg poniższego schematu:

Sub TutajDowolnaNazwa()

Tu wprowadzamy jakiś kod modelowania obiektowego

End Sub

TutajDowolnaNazwa() - Jest to dowolna nazwa makropolecenia lub procedury. Procedura jest małym zestawem kodów tworzonych poleceń, które coś wykonują. Przykładem wcześniej utworzonej procedury jest MojeMakro. Jednak procedura nie musi być makropoleceniem. Można utworzyć procedurę, po czym wywołać tą samą procedurę z poziomu innej procedury. Przykładowo, w naszym przykładzie arkusza Excela możemy utworzyć drugie makro o nazwie MojeInneMakro i dodać do niego poprzednie makro:

Sub MojeInneMakro()

MojeMakro

End Sub

Gdy uruchomimy MojeInneMakro, wówczas zostanie uruchomiona procedura MojeMakro i utworzy dodatkowy arkusz roboczy.

Sub MojeMakro()

Dim wrkSheet As Worksheet

Set wrkSheet = ActiveWorkbook.Worksheets.Add

Range("B1").Value = "My New Sheet"

End Sub

Po co to robimy ? Tworzenie osobnych procedur pozwala na organizowanie naszych kodów w jasny sposób i pozwala na łatwe wykonywania typowych procedur. Przykładowo, wyobraźmy sobie, że chcemy utworzyć i wyświetlać trzy różne arkusza robocze. Można to wykonać przez zmianę kodu w makropoleceniu MojeInneMakro w poniższy sposób:

Sub MojeInneMakro()

MojeMakro

MojeMakro

MojeMakro

End Sub

6.3. Lekcja 3 - Koncepcja programowania: Obiekty, metody i właściwości

Mogliśmy czasem usłyszeć co nieco o programowaniu obiektowym. Zagadnienie programowania obiektowego jest pojęciem kluczowym związanym z takimi językami jak C++ oraz C# Zapewne nie wiedziałeś o tym, jednak po zakończeniu naszych dwóch pierwszych lekcji, możemy nazwać siebie obiektowo zorientowanym programistą !

To jest prawda. Moduły obiektowe Excela korzystają z programowania zorientowanego obiektowo. Na szczęście, w celu korzystania i rozumienia modelowania obiektowego w Excelu, nie trzeba sięgać do istoty zagadnienia. Aby poznać pracę z modelowaniem obiektowym w Excelu, wystarczy znać oraz rozumieć trzy podstawowe koncepcje:

Koncepcja

Opis

Przykład

Obiekt

„Element"

Arkusz roboczy

Metoda

To co można zrobić z „elementem”

Dodanie „elementu”

Właściwość

Charakterystyka „elementu"

Nazwa elementu

Można podzielić wszystkie elementy naszego życia codziennego na obiekty, metody i właściwości. Przykładowo rozpatrzmy auto, które może być obiektem.

Obiekt Auto zawiera w sobie metody lub różne elementy jakie może wykonywać, takie jak jazda, start, skręt w lewo lub skręt w prawo.

Obiekt Auto ma również właściwości, które go opisują, takie jak kolor (np. czerwony) i liczba głównych reflektorów (dwa).

0x01 graphic

Rys. 5. Obiekt Auto

Przyjrzyjmy się bliżej kodowi który już wpisaliśmy i zidentyfikujmy w nim obiekty, metody i właściwości.

Set wrkSheet = ActiveWorkbook.Worksheets.Add

Range("B1").Value = "Mój nowy arkusz"

Istnieją w tym kodzie trzy obiekty. Pierwszym jest wrkSheet, który reprezentuje obiekt arkusza roboczego Worksheet. Drugim jest ActiveWorkbook reprezentujący aktywny skoroszyt roboczy. Natomiast trzecim jest obiekt Range reprezentujący zakres komórek tego arkusza. Jest to łatwe do wizualizacji jako elementy Things. Niekiedy model obiektu w Excelu jest prostą listą obiektów, z których można korzystać do programowania w Excelu.

Gdy pierwszy raz korzystamy z obiektu, zaczynamy od słowa kluczowego Set. Obiekty zajmują pamięć w komputerze. Słowo kluczowe Set allokuje (rezerwuje) pamięć przeznaczoną dla tego obiektu.

Można odwoływać się do obiektów wirtualnie wg dowolnej nazwy. W powyższym przykładzie odpiłujemy się do obiektu arkusza roboczego Worksheet za pomocą nazwy wrkSheet, ale można zmienić tą nazwę wg uznania. Excel tworzy dla nas obiekt arkusza roboczego. Można obejrzeć listę tych obiektów w oknie projektu w sekcji Microsoft Excel Objects.

Makropolecenie MojeMakro zawiera jedną metodę: Add (dodaj). Metoda jest zawsze związana z obiektem. W tym przypadku metoda Add związana jest z obiektem wrkSheet. Aby skorzystać z tej metody, wystarczy wstawić kropkę między obiektem a metodą. Przykładowo: Worksheets.Add. Jak wyżej opisano, metoda jest „tym, co można zrobić z elementem”. W naszym przykładzie napisaliśmy aby nowy arkusz został dodany do obiektu aktywnego skoroszytu.

Kod MojePierwszeMakro zawiera jedną właściwość: Value (wartość). Podobnie jak metoda, właściwość jest zawsze związana z obiektem. W tym przypadku właściwość Value jest związana z obiektem Range (zakres). Aby skorzystać z właściwości, wystarczy wstawić kropkę między obiektem a właściwością. Przykładowo: Range.RowHeight (Zakres.WysokośćWiersza)

Przypominamy ponownie: należy myśleć o właściwości jako o „charakterystyce elementu”. Przykładowo: ColumnWidth (SzerokośćKolumny) jest charakterystyką elementu Range. Inn przykład: nazwa Name jest również charakterystyką obiektu zakresu Range.

Na koniec, należy pamiętać że: Kady obiekt jest specyficznym typem obiektu. Każdy typ obiektu ma własny zestaw metod i właściwości. W poprzednim przykładzie wrkSheet jest obiektem arkusza roboczego Worksheet. Arkusz roboczy Worksheet ma takie metody jak np. Visible (widoczny) oraz takie właściwości jak np. Count (oblicz), których inne typy mogą nie mieć. Ponadto, inne typy obiektów mogą mieć metody lub właściwości, których nie ma obiekt Worksheet.

Przykładowo, poniższa instrukcja:

Worksheet.Value = "Hello"

nie będzie działała, ponieważ obiekt Worksheet nie ma właściwości takiej jak Value.

6.4. Lekcja 4 - Świat rzeczywisty - Przykład # 1

Wyobraźmy sobie, że nasz szef zamierza rozprowadzać codziennie arkusze czasowe TimeSheet dla każdego zespołu pracowników. W tym celu poprosił nas o program tworzący proste szablony w Excelu, które będzie mógł elektronicznie wysyłać pracownikom. Korzystając z posiadanej już wiedzy spróbujmy napisać takie makro.

W celu utworzenia makropolecenia dla arkuszy czasowych:

  1. Utworzyć moduł o nazwie TimeSheet. W tym celu wybrać we Excelu polecenie menu Narzędzia | Makro | Makra. Wpisać TimeSheets i kliknąć przycisk Utwórz. Otworzy się edytor Visual Basic z nowym makro TimeSheets gotowym do wypełniania.

  2. W oknie właściwości Properties, podwójnie kliknąć w polu Name i wpisać TimeSheets.

  3. Oknie kodu Code wpisać poniższy kod:

Sub TimeSheet()

Dim wrkSheet As Worksheet

Set wrkSheet = ActiveWorkbook.Worksheets.Add

Range("A1").Value = "Department"

Range("B2").Value = "Employees Name"

Range("D2").Value = "Day of the Week

Range("B4").Value = "Regular Hours

Range("B5").Value = "Sick Time

Range("B6").Value = "Vacation Hours

Range("B7").Value = "Overtime Hours

Range("B9").Value = "Totals

End Sub

  1. Kliknąć ikonę Save Zeszyt 1 w pasku narzędzi, wpisać nazwę przykładowego pliku Sample2 i kliknąć przycisk Zapisz.

  2. Uruchomić utworzone makro aby sprawdzić jego działanie. Makro to tworzy szablon arkusza czasowego, który można wysłać do każdego pracownika za pomocą poczty e-mail.

  3. I to wszystko co było do zrobienia. Nie wprowadzaliśmy żadnych dodatkowych obiektów ani poleceń. Rozwinęliśmy koncepcję wcześniej omówioną w poprzednich przykładach.

Poniżej pokazano fragmenty uzyskanych arkuszy w wersji oryginalnej i polskiej.

0x01 graphic
0x01 graphic

Korzystanie z wydarzeń

Mamy już utworzone makro szablonów arkuszy czasowych, które można wykorzystać jako podstawa do drukowania czasów pracy każdego pracownika. Jednak nadal mamy to makro gotowe do pracy. Pierwszą czynnością o jakiej musimy pamiętać każdego rana będzie uruchomienia Excela, oraz uruchomienie makro, a ostatnią będzie wyjście z Excela po zakończeniu pracy Znacznie wygodniejsze byłoby automatyczne uruchamianie makro przy każdym otwieraniu Excela. Wówczas będziemy mieli każdego rana na widoku nasz szablon arkuszy czasowych.

Możemy to zrobić korzystając z obiektu wydarzenie Event. Wydarzenie pojawia się, gdy coś się dzieje z obiektem. Przykładowo, gdy klikniemy przycisk na formatce, wówczas wydarzenie kliknięcia Click pojawia się na obiekcie przycisku. Gdy uruchamiamy Excela, pojawia się wydarzenie automatycznego otwierania Auto Open.

W celu dalszej ilustracji, wróćmy do analogii auta. Możemy zechcieć aby obiekt auta Car wykonał coś gdy wciśniemy klawisz zapłonu. W takim przypadku skorzystamy z wydarzenia auta, które możemy nazwać DriverPutKeyInIgnition. Gdy tak nazwane wydarzenie zostanie wywołane, możemy zmusić auto do startu. Oczywiście, może mieć miejsce szereg wydarzeń na jakie samochód może reagować. Mogą do nich należeć wciśnięcie pedału gazu, lub pedału hamulca. Auto reaguje różnie na rożne wydarzenia.

Aby uruchomić makro przy każdym otwieraniu Ecela:

  1. Uruchomić w Excelu edytor Visual Basic (jeśli nie jest jeszcze otwarty).
    Wskazówka: Jednym ze sposobów jest wciśnięcie klawiszy ALT + F11.

  2. Kliknąć znak Plus (+) obok Microsoft Excel Object w oknie eksploratora projektu. Wśród różnych obiektów znajdziemy tam element o nazwie ThisWorkbook.

  3. Podwójnie kliknąć na elemencie ThisWorkbook. Pojawi się okno kodów z tytułem ThisWorkbook.

  4. W oknie kodów zobaczymy dwie rozwijalne listu. Pierwsza lista o nazwie Object List zawiera obiekty związane z aktualnym zeszytem ThisWorkbook. Kliknąć na tej liście Workbook.
    Zwrócić uwagę, że Visual Basic utworzy automatycznie procedurę Sub Workbook...Open.

  1. Aby wywołać makro, wpisać nazwą makro w dla tej procedury, np.

Private Sub Workbook_Open()

TimeSheet

End Sub

I to wszystko co zostało do zrobienia !

W celu zobaczenia jak to działa, zapisać nasza makro, zamknąć Visual Basic, ponownie uruchomić Excela, co uruchomi nasz przykładowym plik.

6.5. Lekcja 5 - Tworzenie własnych okienek dialogowych

Teraz zajmiemy się najciekawszą częścią VBA - formatkami. Formatka jest obiektem podobnym do okienka dialogowego, który tworzymy i projektujemy w VBA. Możemy w formatce dodawać pola zaznaczania, teksty obrazy i wszystkie inne elementy bez wpisywania ani jednego wiersza kodu.

Do czego służą formatki ? Czasem nasze makro wymaga komunikowania się z informacjami użytkownika i odwrotnie. Przykładowo, możemy okazać się potrzeba pokazania okienka dialogowego po uruchomieniu naszego makro, gdzie użytkownik może wyspecyfikować opcje tego makra.

W celu pokazania jak to działa, wróćmy do makro TimeSheet utworzone w lekcji 4. Makro to tworzy szablon arkusza czasowego przy każdym otwieraniu pliku. Co jednak stanie gdy uruchamiamy Excel kilka razy w ciągu dnia ? Ponadto zwykle nie chcemy tworzyć szablonu arkusza czasowego w dni wolne od pracy ani w weekendy. Rozwiązaniem jest przedstawienie opcji tworzenia takiego szablonu przy każdym uruchamianiu Excela.

W celu utworzenia okienka dialogowego:

  1. W Excelu wybrać polecenie menu Narzędzia | Makro | Makra. Utworzymy nowe makro.

  2. Wpisać nazwę nowego makra, np. TimeSheetPrompt i kliknąć przycisk Utwórz. Zostanie uruchomiony edytor Visual Basic.

  3. W menu Insert (wstaw) wybrać polecenie UserForm.

0x01 graphic

Rys. 8. Puste okienko formatki użytkownika User Form

Nasza formatka pojawi się wraz z ze skrzynką narzędzi Toolbox zawierającą sterowniki Controls.

Z formatki tej można korzystać do projektowania naszego okienka dialogowego, dzięki któremu użytkownik będzie mógł współdziałać z programem.

  1. Kliknąć formatkę aby ją zaznaczyć. Przejść do okna właściwości. Zmienić nazwę makra na PromptDialog i wcisnąć klawisz ENTER.

  2. Zmienić właściwość Caption na Time sheets for co-workers? i wcisnąć klawisz ENTER. Zauważymy, że tytuł naszej formatki ulegnie odpowiedniej zmianie.

  3. Przejść do sterowników w skrzynce narzędzi i czytać napisy przy wskazywanych narzędziach.

Przed kontynuowaniem, zastanówmy się przez chwilę co jest nam potrzebne w naszym makro TimeSheetPrompt. Chcemy aby użytkownik wybrał czy chce czy nie chce tworzyć arkusz czasowy. Prostym sposobem prowadzącym do tego celu jest dodanie pewnego tekstu objaśniającego oraz dwóch przycisków: Create Time Sheet oraz Don't Create Time Sheet.

  1. W skrzynce narzędzi kliknąć narzędzie etykiety Label (element z literą A) i kliknąć w okienku formatki.

  2. W otworzonym okienku dialogowym kliknąć i przeciągnąć myszką aby zaznaczyć wyświetlony tekst.
    Wskazówka: Nie martwić się rozmiarem. Zawsze można go zmienić.

Uwaga: Utworzona etykieta jest obiektem. Ma ona metody i właściwości podobnie jak arkusz lub przycisk.

  1. Zwrócić uwagę na okno właściwości i przyjrzeć się liście właściwości dostępnej dla tej etykiety. Pierwszymi z nich są (Name), Accelerator, oraz AutoSize.

  2. Kliknąć pole Caption wpisać nową właściwość, np. Do you want to create a time sheet?, po czym wcisnąć klawisz ENTER. Okno modułu zmodyfikuje etykietę wyświetlając wpisany wcześniej tekst.
    Teraz musimy utworzyć dwa przyciski.

  3. Kliknąć formatkę jeszcze raz aby wyświetlić skrzynkę narzędzi.

  4. Kliknąć sterownik CommandButton (w kształcie prostokąta).

  5. W oknie kliknąć Time sheets for co-workers? i przeciągnąć myszką aby zaznaczyć obszar w jakim ma pojawiać się tekst objaśnienia.

  6. W celu utworzenia drugiego przycisku, powtórzyć tą operację.

  7. Kliknąć pierwszy przycisk i ustawić jego właściwości: (Name) na YES oraz Caption na Create Time Sheets.

  8. Kliknąć drugi przycisk i ustawić jego właściwości: (Name) na NO oraz Caption na Don't Create Time Sheets.



0x01 graphic

Rys. 9. Wypełnione okienko formatki użytkownika User Form

Tworzenie roboczego okienka dialogowego

Teraz mamy nasze okienko dialogowe. Jednak ono jeszcze nie działa. Aby spełniało swoją funkcje, musimy dodać do niego 4 wiersze kodu. Trik polega na tym, że trzeba dodać te wiersze w trzech różnych miejscach. Poniżej opisane jest jak to wykonać.

Pierwszą rzeczą jaką musimy zrobić, to zmusić aby okienko to pojawiało się po uruchomieniu Excela. W tym celu w oknie projektu w pozycji Microsoft Office Excel Objects podwójnie kliknąć ThisWorkbook.

Przejść do pozycji wydarzenia Workbook_Open i wpisać wiersz PromptDialog.Show.

Kod ten powinien wglądać jak niżej:

Private Sub Workbook_Open()

PromptDialog.Show

End Sub

Uwaga: PromtDialog jest obiektem, natomiast Show jest metodą tego obiektu.

Zamknąć okno tego kodu. Otworzyć formatkę PromptDialog. W tym celu podwójnie kliknąć PromptDialog w pozycji Forms okna eksploratora projektu.

Teraz chcemy utworzyć makro do wykonywania określonych zadań zgodnych z przyciskiem wybranym przez użytkownika. Podwójnie kliknąć przycisk Create Time Sheet.

Otworzy się okno kodów dla makro PromptDialog. VBA utworzy to wydarzenie które zostanie wywołane gdy użytkownik wciśnie przycisk Create Time Sheet. Po wciśnięciu tego przycisku, chcemy aby makro wykonało dwie rzeczy: utworzyło arkusz czasowy i zamknęło to okienko dialogowe. Zakładamy, że już utworzyliśmy makro w lekcji 4. Wymagany kod powinien mieć poniższą postać:

Private Sub Yes_Click()

TimeSheet

PromptDialog.Hide

End Sub

Uwaga: PromtDialog jest nazwą wyspecyfikowaną w oknie właściwości, w polu okienka dialogowego, natomiast Hide (ukryj) jest metodą tego obiektu.

Zamknąć okienko dialogowe kodów. Teraz podwójnie kliknąć przycisk Don't Create Time Sheets. W tej procedurze chcemy tylko ukryć okienko dialogowe makro, np.:

Private Sub No_Click()

PromptDialog.Hide

End Sub

I to jest wszystko co zostało nam do zrobienia. Zapisać naszą pracę, zrestartować Excela, po czym zostanie uruchomione nasze makro i zobaczymy nasze okienko dialogowe w akacji.

6.6. Lekcja 6 - Koncepcja programowania: Kolekcje

Dotąd dowiedzieliśmy się o obiektach, właściwościach, metodach i wydarzeniach. Istnieje jeszcze jedna, ostatnia kategoria „elementów”, które musimy poznać przy korzystaniu z modelowania obiektowego w Excelu. Są to kolekcje.

Kolekcja jest specjalnym typem obiektu, który jest grupą innych obiektów. Tak więc np. gdy Auto jest obiektem, wówczas Auta jest kolekcją aut.

Kolekcja może być również właściwością innego obiektu. Kontynuując przykład z autami, Reflektor może być właściwością obiektu Auto i kolekcją obiektów Reflektory. Dlatego należy rozumieć tą zależność w podany niżej sposób:

Kolekcja Auta jest kolekcją obiektu Auto. Każdy obiekt Auto ma właściwość o nazwie Reflektory. Kolekcja Reflektory jest kolekcją obiektów Reflektor.

Kolekcje w Excelu

Modelowanie obiektowe w Excelu zawiera wiele typów kolekcji. Poniżej podano jeden z przykładów, który był wykorzystany jako pierwszy przykład tego podręcznika.

Set wrkSheet = ActiveWorkbook.Worksheets.Add

Worksheets jest kolekcją obiektów Worksheets. Ponadto Worksheets jest również właściwością obiektu ActiveWorkbook. Łatwo zauważyć, że przydatność kolekcji. Skoroszyt roboczy Workbook może zawierać wiele zeszytów roboczych Worksheets. Kolekcja Worksheets daje nam łatwy sposób dostępu do zarządzania tymi arkuszami.

Inne kolekcje obiektów w Excelu mogą zawierać:

Metody i właściwości kolekcji

Wszystkie kolekcje mają metody i właściwości, które pozwalają na dostęp do indywidualnych obiektów zawartych w kolekcji.

Istnieją trzy główne, niżej omówione metody i właściwości:

Dim numberOfWorksheets

numberOfWorksheets = ActiveWorkbook.Worksheets.Count

W przykładzie tym, numberOfWorksheets jest zmienną. Zmienna jest czasem definiowana do zapisu informacji i późniejszego wykorzystania.
W tym przykładzie, zmienna numberOfWorksheets jest równa liczbie obiektów Worksheets zawartych w obiekcie ActiveWorkbook.

Przed skorzystaniem ze zmiennej trzeba ja zdefiniować przy korzystaniu ze słowa kluczowego Dim. Możemy nazwać naszą zmienną w dowolny sposób, np.

Dim myDogBitMe

myDogBitMe = ActiveWorkbook.Worksheets.Count

Uwaga: Kolekcja może być pusta. Wówczas właściwości Count = 0

Set myWorksheet = ActiveWorkbook.Worksheets.Item(2)

Liczba w nawiasach wskazuje na to, do którego arkusza chcemy mieć dostęp w celu kodowania. W tym przykładzie, przypisana kolekcja drugiego arkusza w skoroszycie roboczym do zmiennej myWorksheet.

Można również korzystać ze zmiennej w nawiasach, np.:

Dim numberOfWorksheets

numberOfWorksheets = ActiveWorkbook.Worksheets.Count

Set theLastWorksheet = ActiveWorkbook.Worksheets.Item(numberOfWorksheets)

Tutaj najpierw ustawiamy zmienną numberOfWorksheets dopasowując liczbę obiektów Worksheet w kolekcji Worksheets. Następnie uzyskujemy dostęp do ostatniego arkusza. Tak więc jeśli w skoroszycie roboczym istnieje 5 arkuszy, możemy wyspecyfikować element ostatni korzystając z cyfry 5. Odpowiedni wiersz będzie wówczas miał postać:

ActiveWorkbook.Worksheets.Item(5)

Set anotherWorksheet = ActiveWorkbook.Worksheets.Add("Sheet6")

Sposób korzystania z metody Add zależy od kolekcji do której dodajemy element. W większości przypadków, podobnie jak w poprzednim przykładzie, musimy najpierw wyspecyfikować nazwę nowego obiektu, np. Sheet6.

Dodatkowa informacja o zmiennych;

Z uwagi na to, że zmienna rejestruje informacje, jej wartość zmienia się tylko wtedy gdy sami ją zmienimy. Analogią zmiennej może być taśma audio. Wyobraźmy sobie, że utworzyliśmy taśmę audio o nazwie MyCurrentAge. Na takiej taśmie możemy zarejestrować nasz aktualny wiek. Teraz przesłuchajmy tą taśmę po 5 latach. Co usłyszymy przy jej odtwarzaniu ? Usłyszymy nie nasz aktualny wiek lecz nasz wiek sprzed 5 lat. Jest to ważna koncepcja i możemy z niej korzystać do uzyskiwania odpowiedzi w makro o nazwie Hands-on Challenge #5 przytoczonym w Aneksie.

6.7. Lekcja 7 - Koncepcja programowania: If This, Then That

Czasem chcemy wyspecyfikować, który kod służy do uruchamiania zgodnie z jakimś stanem rzeczy. Przykładowo, w makro o nazwie TimeSheet istotne jest codzienne tworzenie arkuszy, ale tylko w dni robocze tygodnia od poniedziałku do piątku. Ewentualnie, możemy zechcieć utworzyć makro uruchamiane tylko przez pewne osoby, albo tylko przez pewną liczbę osób.

Możemy utworzyć procedury, które odpowiadają na różne warunki przy korzystaniu z poleceń sterujących If...Then. Takie polecenie jest jednym z wielu narzędzi Visual Basic, które bezpośrednio wpływa na kod.

Poniżej podano format polecenia sterującego If...Then.

If <expression> Then

<code here>

End If

W powyższym kodzie, <expression> reprezentuje coś co może być prawdą True lub fałszem False, <code here> reprezentuje kod, który ma być uruchomiony jeśli <expression> będzie prawdą.

Poniższa tabela zawiera klika przykładów wyrażenia <expression>

Wyrażenie

Opis

Papers.Count = 3

Ustawia prawdę True jeśli istnieją 3 obiekty Paper w kolekcji Papers

numEmployees > 0

Ustawia prawdę True jeśli zmienna numEmployees jest większa od 0

numEmployees <> 5

Ustawia prawdę True jeśli zmienna numEmployees jest różna od 5

Poniższe dwa przykłady pokazują jak korzystać z poleceń sterujących If...Then.

Dim numberOfTimeSheets

numberOfTimeSheets = ActiveWorkbook.Worksheets.Count

If numberOfTimeSheets > 0 Then

Set myWorksheet = ActiveWorkbook.Worksheets.Item(numberOfTimeSheets)

MsgBox "The name of the last employee is " &_

myWorksheet.Name & "."

End If

If numberOfTimeSheets = 0 Then

MsgBox "There are no time sheets in this workbook."

End If

W przykładzie tym wyświetlane jest okienko dialogowe wskazujące użytkownikowi nazwisko ostatniego pracownika korzystającego z arkusza pracy albo informację, że nie ma arkuszy pracy w tym skoroszycie roboczym.

Uwaga: MsgBox jest poleceniem Visual Basic stosowanym do wyświetlania prostych komunikatów. Można wprowadzać w nim proste łańcuchy tekstowe lub dowolne liczby łańcuchów połączone znakiem & w celu ich wyświetlania. W omawianym przykładzie. Gdy nazwisko ostatniego pracownika w arkuszu pracy miało postać Nancy Davolio, wówczas użytkownik zobaczy poniższy komunikat:

0x01 graphic

Rys. 8. Komunikat informacyjny

Drugi przykład polecenia If...Then. Rozpatrzmy poniższe okienko dialogowe:

0x01 graphic

Rys. 9. Okienko dialogowe z opcją zapisu arkusza pracy

Gdy użytkownik kliknie w tym okienku przycisk OK, wówczas nasze makro uruchomi inny kod, zgodny z tym czy zaznaczone jest pole No, just save it in my Drafts folder , czy nie. Jeśli pole to nie jest zaznaczone arkusz pracy będzie drukowany. Jeśli jest zaznaczone, arkusz zostanie tylko zapisany i będzie go można później wydrukować.

Aby zrozumieć jak to działa, najpierw trzeba wiedzieć, że pole zaznaczania Check Box jest obiektem, który może być rysowany w postaci podobnej do przycisku lub etykiety jakie tworzyliśmy w lekcji 5.

Z uwagi na to, że jest to obiekt, ma on również swoje właściwości. Jedna z nim nosi nazwę Value (wartość). Właściwość Value może być prawdą (pole zaznaczone), albo fałszem (bez zaznaczenia).

Kod powinien zostać uruchomiony gdy użytkownik kliknie przycisk OK. Tak więc możemy dodać poniższy kod do wydarzenia kliknięcia Click związanego z przyciskiem OK.

W naszym przykładzie nazwa formatki ma postać PromptDialog, a nazwą przycisku jest OK, natomiast nazwa pola zaznaczania ma postać justSaveDraft.

Private Sub OK_Click()

If PromptDialog.justSaveDraft.Value = True Then

MyItem.Save

End If

If PromptDialog.justSaveDraft.Value = False Then

MyItem.Print

End If

PromptDialog.Hide

End Sub

Gdy użytkownik zaznaczy pole zaznaczania, Excel zapisze arkusz pracy w domyślnej lokalizacji plików użytkownika. natomiast gdy użytkownik nie zaznaczy pola zaznaczania, Excel wydrukuje kopię komunikatu.

Dalsze przykłady - patrz Aneks

6.8. Lekcja 8 - Świat rzeczywisty - Przykład # 2

Wyobraź sobie, że jesteś asystentem wydziału bogactw naturalnych Human Resources Department. Jedną z części twoich zadań jest drukowania arkuszy pracy dla różnych grup twojej firmy. Istnieją w niej aktualnie dwie różne grupy, dla których często trzeba drukować arkusze pracy. Czasem trzeba drukować arkusze pracy dla jednej lub dla drugiej grupy.

Jak najłatwiej wykonywać te zadania ?

Korzystając z modelowania obiektowego w Excelu można utworzyć okienko dialogowe, w którym można specyfikować czy chcemy drukować arkusze pracy.

Krok 1. Tworzenie okienka dialogowego

Najpierw musimy utworzyć okienko dialogowe, z którego będziemy korzystali do wyspecyfikowania dla której grupy drukować arkusze pracy oraz liczbę arkuszy dla każdego wydziału.

  1. W edytorze Visual Basic, wybrać polecenie Insert | User Form.

  2. Dodać jedną etykietę dwa pola zaznaczania oraz jeden przycisk, aby nasza formatka przybrała poniższy widok:

0x01 graphic

Rys. 10. Okienko dialogowe z dwiema opcjami

Pamiętać o tym, aby właściwość Caption zawierała tekst jaki użytkownik powinien widzieć przy polach zaznaczania.

  1. Dla pól zaznaczania, pól tekstowych, przycisku i dla samej formatki, wyspecyfikować opisy w polu właściwości Name w poniższy sposób:

Sterownik

Nazwa

The Form

PrintTimesheets

OK Button

cmdOK

Sales Dept Copy Counter

Sales

Marketing Dept Copy Counter

Mrktng

  1. Element dodatkowy - Dla każdego pola zaznaczania i pola tekstowego można wyspecyfikować właściwość ControlTipText w celu dołączenia opisu sterownika.

Przykładowo, dla pola tekstowego można dopisać: Type the number of copies.

Krok 2 - Pisanie kodu

Aby okienko dialogowe pracowało zgodnie z przeznaczeniem, najpierw trzeba wpisać odpowiedni kod dla wydarzeń jakie wystąpią gdy użytkownik kliknie przycisk OK dodany do tego okienka dialogowego.

W formatce zawartej w edytorze Visual Basic, podwójnie kliknąć przycisk OK. Następnie dodać poniższy kod w procedurze cmdOK_Click :

Private Sub cmdOK_Click()

Set wrkSheet = ActiveWorkbook.Worksheets.Add

If Sales Then

Range("B1").Value = "Sales"

AddFields

End If

If Mrktng Then

Range("B1").Value = "Marketing"

AddFields

End If

PrintTimesheets.Hide

End Sub

Wydarzenie to rozpoczyna procedurę przez dodanie nowego arkusza do istniejącego skoroszytu roboczego (pliku). Następnie testuje czy pole tekstowe SalesCnt w okienku dialogowym zawiera wartość. Jeśli zawiera, wówczas makro wyświetli nazwę wydziału w komórce B1. Potem makro wywoła podprogram o nazwie AddFields, który dalej skrótowo omówimy.

Następnie dodajmy poniższy wiersz nad poleceniem Private Sub cmdOK_Click().

Public wrkSheet As Worksheet

Polecenie to rezerwuje pamięć do przechowywania arkusza, który będzie wykorzystany do procedury wydarzenia cmdOK_Click. Gdy nie zarezerwujemy pamięci dla tego arkusza, nie będziemy mogli korzystać z jego właściwości w naszym kodzie.

Krok 3 - Kończenie kodu

Na koniec, dodajemy poniższy podprogram za poleceniem End Sub w procedurze wydarzenia cmdOK_Click. Procedura ta wypełnia pola, które tworzą arkusz czasu pracy:

Sub AddFields()

Range("A1").Value = "Department:"

Range("B2").Value = "Employees Name:"

Range("D2").Value = "Day of the Week:"

Range("B4").Value = "Regular Hours"

Range("B5").Value = "Sick Time"

Range("B6").Value = "Vacation Hours"

Range("B7").Value = "Overtime Hours"

Range("B9").Value = "Totals"

End Sub

7. Co dalej ?

Teraz, gdy już jesteśmy wprowadzeni do modelowania obiektowego w Excelu, możemy tworzyć własne rozwiązania w Excelu. Oczywiście, przewodnik ten tylko szkicuje obszar wszystkich zagadnień z jakich można korzystać w modelowaniu obiektowym Excela. Zaleca się skorzystanie z pomocy Help programu Visual Basic w celu bliższego zapoznania się z kolekcjami, obiektami, metodami oraz wydarzeniami w naszych procedurach. W celu łatwego skorzystania z tego pomocnika na poziomie edytora VBA, można wybrać polecenie menu View | Object Browser.

0x01 graphic

Rys. 11. Przeglądarka obiektów Object Browser

Aby obejrzeć narzędzia specyficzne dla Excela, na rozwijalnej liście biblioteki projektu kliknąć opcję Excel. Zostanie wyświetlona lista obiektów, kolekcji, metod i właściwości stosowanych w Excelu. Przykładowo, możemy wpisać w polu wyszukiwania hasło Worksheets i kliknąć przycisk lornetki Search.

Wyniki szukania zostaną wyświetlone w oknie wyszukiwania wyników Search Results. Po kliknięciu na obiekcie, okno zaktualizuje listę obiektów i metod odnoszących się do tego obiektu. W dolnym panelu okna wyświetlana będzie pomoc kontekstowa dotycząca wybieranych obiektów.

Kliknąć obiekt Worksheets w górnym oknie. Obejrzeć wszystkie elementy wyświetlane w oknie Members of „Application”. Symbol obok każdego elementu wskazuje na jego typ, taki jak metoda lub właściwość.

Znajdują się tu wszystkie niezbędne informacje. Pomoc kontekstowa w dolnym panelu zawiera łącza które można klikać w celu nawigacji miedzy poszczególnymi obiektami. Przykładowo, można korzystać z tych łączy do identyfikacji elementów lub metod określonych obiektów. Wiele z tych plików pomocy kontekstowej tego panelu zawiera również przykłady pomocne przy tworzeniu własnych kodów.

Gratulujemy stania się programistą obiektowym w Excelu ! Teraz możecie rozpocząć pracę przy korzystaniu z programowania modelowania w celu oszczędności czasu i pieniędzy dla swojego przedsiębiorstwa.

8. Dodatek A: Przykładowe makropolecenia

Ze względu na specyfikę tego rozdziału przykładów tych nie tłumaczono (przypis tłumacza).

Hands-on Challenge #1

Change the body of the message to your name.

Sub MyMacro()

Dim wrkSheet As Worksheet

Set wrkSheet = ActiveWorkbook.Worksheets.Add

Range("A2").Value = "<your name here>"

End Sub

Hands-on Challenge #2

Edit the MyMacro using the Visual Basic Editor and change the code to look like the following:

Sub MyMacro()

Dim wrkSheet As Worksheet

Set wrkSheet = ActiveWorkbook.Worksheets.Add

Range("B1").Value = "My New Sheet"

Set wrkSheet = ActiveWorkbook.Worksheets.Add

Range("C1").Value = "This is easy"

End Sub

Hands-on Challenge #3

Look at the following fictitious object model code and determine which parts are objects, methods, and properties. There is three of each:

Set PetStore = ShoppingMall.GetStore(aPetStore)

PetStore.OpeningTime = 9 AM

Set Dog = PetStore.GetPet(aDog)

Dog.Breed = "Cocker Spaniel"

Dog.Color = "Blond"

Dog.WagTail

Objects

Methods

Properties

ShoppingMall

GetStore

OpeningTime

PetStore

GetPet

 

Dog

WagTail

Color
Breed

Hands-on Challenge #4

To create the macro that contains the template for a weekly time sheet, add the code such as the following:

Sub TimeSheet()

   Dim wrkSheet As Worksheet

   Set wrkSheet = ActiveWorkbook.Worksheets.Add

   Range("A1").Value = "Department"

   Range("B2").Value = "Employees Name"

   Range("C3").Value = "Monday"

   Range("D3").Value = "Tuesday"

   Range("E3").Value = "Wednesday"

   Range("F3").Value = "Thursday"

   Range("G3").Value = "Friday"

   Range("B4").Value = "Regular Hours"

   Range("B5").Value = "Sick Time"

   Range("B6").Value = "Vacation Hours"

   Range("B7").Value = "Overtime Hours"

   Range("B9").Value = "Totals"

End Sub

Next, because you want to run this each time that you quit Excel, call the TimeSheet macro during the Worksheet object's Deactivate event. Hint: To edit this event, use the ThisWorkbook Module window:

Private Sub Workbook_Deactivate()

   TimeSheet

End Sub

Hands-on Challenge #5

Look at the following fictitious Visual Basic code and answer the questions that follow. Assume that at the start, the Papers collection is empty; its Count property is equal to zero. Hint: Step through the code line by line and keep track of the numberOfPapers variable and the objects in the Papers collection.

Dim numberOfPapers

Set paper1 = MyDesk.Papers.Add("The Foofle Report")

Set paper2 = MyDesk.Papers.Add("The Mooble Report")

currentNumber = MyDesk.Papers.Count

Set paper3 = MyDesk.Papers.Add("The Garble Report")

Set paper4 = MyDesk.Papers.Item(currentNumber)

Set paper5 = MyDesk.Papers.Item(1)

Set paper6 = MyDesk.Papers.Item(currentNumber + 1)

  1. What is the value of the variable, currentNumber?

Answer: 2

Explanation: When we set the value of currentNumber, there are only two papers, paper1 and paper2, in the MyDesk.Papers collection.

  1. What is the value of paper3?

Answer: The Garble Report

  1. What is the name of paper4?

Answer: The Mooble Report

Explanation: Because currentNumber equals 2, this sets paper4 to the second paper in the collection, The Mooble Report.

  1. What is the name of paper5?

Answer: The Foofle Report

  1. What is the name of paper6?

The Garble Report

Explanation: Because (currentNumber + 1) equals 3, this sets paper6 to the third paper in the collection, The Garble Report.

Hands-on Challenge #6

First, you must add a checkbox with the name "EditSheet" to the PromptDialog form.

0x01 graphic

Figure 12. Completed dialog box

Next, modify the Yes_Click macro that doesn't create and print the time sheet. We need to test whether the EditSheet check box is selected (checked) or not. If it is selected, create the time sheet. If the check box is cleared, create and print the time sheet as follows:

Private Sub Yes_Click()

If EditSheet = True Then

TimeSheet

End If

If EditSheet = False Then

TimeSheet

ActiveWorkbook.Worksheets.Item(ActiveWorkbook.Worksheets.Count).PrintOut

PromptDialog.Hide

End Sub

We added a statement to print the last worksheet which is the time sheet we just created. To ensure that we have the last sheet, specify the last sheet in the Worksheets collection.

Now, when the user clicks Create the time sheet with the check box selected, the time sheet is created but not printed.

Łatwość zrozumienia tego kodu jest znacznie większa dla osób znających j. angielski (przypis tłumacza).

- 23 -0x01 graphic

Odwołanie względne

Zatrzymanie rejestracji



Wyszukiwarka