Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Programowanie w Visual Basic
Opracowanie: Joanna Sekulska-Nalewajko Łukasz Sturgulewski Literatura: John Walkenbach „Programowanie Excel 2000 Visual Basic”, Wydawnictwo RM, Warszawa 2000 Programowanie w Visual Basic
2
Programowanie w Visual Basic
Visual Basic to prosty i przejrzysty język służący do tworzenia aplikacji, które działają w systemie Windows 9x i Windows NT. Dziś po kilku latach gwałtownego rozwoju, VB należy do najpopularniejszych pakietów programowania wizualnego. Początkujący użytkownicy mogą tworzyć proste aplikacje np. działające pod Excelem, natomiast zaawansowanym VB oferuje narzędzie budowania złożonych aplikacji komercyjnych. Programowanie w Visual Basic
3
Programowanie w Visual Basic
Visual Basic jest językiem programowania wyższego rzędu, co oznacza, że wykonanie pojedynczego polecenia Visual Basic powoduje wykonanie wielu podpoleceń. Słowo visual oznacza, że tworzenia aplikacji w dużej mierze polega na rysowaniu obiektów. Gdy wizualna część projektu jest gotowa rozpoczyna się pisanie kodu. Elementy projektu można w każdym momencie edytować i modyfikować. VB6 to nie tylko język. Visual Basic to bogate środowisko tworzenia aplikacji. Programowanie w Visual Basic
4
Microsoft Visual Basic
Firma Microsoft oferuje osobny pakiet programistyczny (Visual Basic) lub wchodzący w skład pakietu Microsoft Visual Studio wraz z np. Visual C++. Programowanie w Visual Basic
5
Microsoft Visual Basic
Microsoft Visual Basic jest pełnym środowiskiem programistycznym, które umożliwia szybkie i łatwe tworzenie aplikacji systemu Windows. Zawiera wszystkie elementy niezbędne do tworzenia, rozwijania, modyfikowania, testowania, kontrolowania, poprawiania i kompilowania tworzonych aplikacji. Programowanie w Visual Basic
6
Microsoft Visual Basic
W skład środowiska wchodzą m.in.: edytor pozwalający na tworzenie kodu programu, elementy sterujące służące do tworzenia interfejsu użytkownika, system wyszukiwania błędów, system kontroli stanu wykonywanej aplikacji, zestaw kreatorów ułatwiających tworzenie aplikacji, zestaw dodatkowych narzędzi pomocnych przy programowaniu, kompilator, tworzący pełnoprawne aplikacje Windows, Setup Wizard, ułatwiający tworzenie wersji instalacyjnej stworzonej aplikacji, i wiele innych... Programowanie w Visual Basic
7
Historia Visual Basic i VBA
Historia BASICA: Begginer’s All-purpose Symbolic Instruction Code. Język Basic został stworzony przez Johna G. Kemeny'ego i Thomasa E. Kurtza w 1963 roku w Darmouth College. Stał się on szybko popularny jako język nauczania w uniwersytetach i szkołach. W latach 70-tych, został przystosowany do użycia na komputerach osobistych przez założyciela i prezesa firmy Microsoft - Billa Gates'a. Rozwinięcie: Visual Basic for Windows (1991 rok). Excel 5: Pierwsza aplikacja wyposażona w VBA. Obecnie: Wiele aplikacji różnych producentów jest wyposażonych w VBA – wspólny język skryptowy dla aplikacji (Word, Excel, Corel, Visio). VBA – oparty na BASIC’u ale obecnie nie mający z nim wiele wspólnego. Programowanie w Visual Basic
8
Programowanie w Visual Basic
BASIC kiedyś Język Basic przeszedł wiele zmian i udoskonaleń od pierwszych wersji do teraźniejszego wyglądu i sposobu programowania. W czasach, kiedy typowymi domowymi komputerami były komputery 8-io bitowe, takie jak: Atari 800XL, Commodore C64 czy ZX Spectrum, język Basic był podstawowym językiem programowania. Wersje stosowane w różnych komputerach nieco się różniły. Był to jednak typowy język strukturalny z dość ograniczoną liczbą rozkazów. Każdy rozkaz występował w osobnej linii programu, a każda linia zaczynała się od numeru linii. Był to język wystarczający do pisania prostych aplikacji jak i dość zaawansowanych programów i gier. Najprostszy program napisany w języku Basic wygląda tak: 10 PRINT „WITAJ” 20 GOTO 10 Programowanie w Visual Basic
9
Programowanie w Visual Basic
Visual Basic - dziś Przełomem stało się wprowadzenie języka Visual Basic. Programy tworzone w języku Visual Basic są programami zdarzeniowymi, co oznacza, że zdarzenia (np. działania użytkownika, kliknięcie myszką, przesunięcie wskaźnika, minięcie określonego czasu i inne) decydują, kiedy i która procedura zostanie wywołana. Działanie programu zależy od tego, co robi użytkownik i kiedy. Programowanie w Visual Basic
10
Prosty program - Kolory RGB
VBA - Język wizualny – spora część programowania polega na graficznym ułożeniu elementów aplikacji. Zamiast pisać bardzo rozbudowane aplikacje, w których znaczna część kodu wykorzystywana była do utworzenia interface (wyglądu) aplikacji, język Visual Basic udostępnia już środowisko graficzne. Należy wybrać odpowiedni element wyglądu i narysować go, określając jego położenie i rozmiar. Skraca to znacznie czas tworzenia aplikacji, ponieważ zamiast pisać rozbudowany kod wystarczy "poskładać" program z dostępnych elementów. Programowanie w Visual Basic
11
Programowanie w Visual Basic
Formanty graficzne Label Przybornik Image ScrollBar UserForm Programowanie w Visual Basic
12
Edytor Visual Basic for Application
W Excelu 5 i Excelu 95 (Excel 7) moduł Visual Basic pojawiał się jako oddzielny arkusz skoroszytu. Począwszy od Excela 97 moduły Visual Basic nie tworzą już oddzielnych arkuszy. Zamiast tego są wyświetlane i edytowane za pomocą Edytora Visual Basica (VBE). Moduły Visual Basic są nadal przechowywane w plikach skoroszytów. Nie są jedynie widoczne, dopóki nie zostanie uruchomiony edytor VB. Wersja ta oferuje już nowy sposób projektowania własnych okien dialogowych (UserForms). Edytor Visual Basic jest oddzielną aplikacją ściśle współpracującą z Excelem. Polega to na tym, że Excel sam troszczy się o wszystkie szczegóły dotyczące otwierania edytora w razie potrzeby. Nie można jednak uruchomić Edytora Visual Basic w trybie niezależnym - aby działał musi być uruchomiony Excel. Programowanie w Visual Basic
13
Po co Visual Basic for Applications?
MS Excel rozbudowany o VBE staje się wszechstronną aplikacją, wykraczającą znacznie poza to, co większość ludzi kojarzy się ze światem arkuszy kalkulacyjnych. Jedynie 5% użytkowników Excela zdaje sobie sprawę z możliwości tego produktu. Spora część własnych aplikacji obliczeniowych może być wykonana w VBA, dzięki czemu Excel staje się produktem programowalnym. Programowanie w Visual Basic
14
Excel dla programistów
Język VBA pozwala tworzyć programy strukturalne bezpośrednio w Excelu w otwartym skoroszycie. Struktura plików: układ wieloarkuszowy pozwala wygodnie organizować poszczególne elementy aplikacji i zapisywać je w jednym pliku. Można np. trzymać razem wiele arkuszy roboczych i arkuszy wykresów. Moduły UserForm i VBA są przechowywane w pliku skoroszytu, ale są niewidoczne dla użytkownika. Programowanie w Visual Basic
15
Excel dla programistów
Łatwy dostęp do formantów UserForm: Excel pozwala dodawać do arkusza różne formanty, takie jak: Przyciski poleceń, Pola list, Przyciski opcji. Implementacja tych formantów nie wymaga z reguły programowania żadnego makra. Własne okna dialogowe (UserForm). Dostosowywane menu: Excel pozwala zmieniać zawartość poszczególnych menu, jak i dodawać całkiem nowe. Dostosowywane menu podręczne: Excel daje możliwość definiowania własnego menu podręcznego, uruchamianego przez kliknięcie prawym przyciskiem myszy. Programowanie w Visual Basic
16
Excel dla programistów
Dostosowywanie pasków narzędzi, jako nowych elementów interfejsu użytkownika. Kwerendy: ze środowiska skoroszytu można dostawać się bezpośrednio do innych ważnych źródeł danych. Mogą to być pliki w formatach standardowych baz danych, pliki tekstowe, strony www. Data Access Object i ActiveX Data Objects: elementy te umożliwiają łatwą współpracę z zewnętrznymi bazami danych z poziomu VBA. Programowanie w Visual Basic
17
Excel dla programistów
Rozbudowana możliwość zabezpieczania: utworzona aplikacja może zostać utajniona i zabezpieczona przed zmianami. Własne funkcje arkusza: upraszczanie stosowania formuł i obliczeń Programowanie w Visual Basic
18
Visual Basic for Application w pigułce
Umiejętność programowania makr dla jednej aplikacji można przenieść potem także na inne programy. Wykonywanie działań VBA odbywa się za pomocą kodu. Private Sub hsbRGB1_Change() Dim Czerwony As Integer Dim Zielony As Integer Dim Nibieski As Integer Czerwony = hsbRGB1.Value Zielony = hsbRGB2.Value Niebieski = hsbRGB3.Value picRGB.BackColor = RGB(Czerwony, Zielony, Niebieski) lblRGB1.Caption = Czerwony lblRGB2.Caption = Zielony lblRGB3.Caption = Niebieski End Sub Programowanie w Visual Basic
19
Visual Basic for Application w pigułce
Kod VBA przechowywany jest w module VBA. Moduły są przechowywane wraz ze skoroszytem Excela, ale do ich oglądania i edycji służy Edytor Visual Basica. Programowanie w Visual Basic
20
Visual Basic for Application w pigułce
Moduł VBA składa się z procedur. Procedura to kod komputerowy wykonujący pewne działanie na obiektach bądź z ich udziałem. Procedury mogą być wywoływane w innych procedurach. Oto przykład najprostszej procedury: Sub Test() Suma = 1 + 1 MsgBox „Wynikiem jest „ & Suma End Sub Wyświetlenie wyniku procedury: Programowanie w Visual Basic
21
Visual Basic for Application w pigułce
Moduł VBA może zawierać również procedury typu Function (funkcja). Procedura Function zwraca pojedynczą wartość. Funkcja może być wywoływana przez inną procedurę VBA lub może być używana w formule arkusza. Oto przykład funkcji o nazwie DodajDwaArg: Function DodajDwaArg(arg1, arg2) DodajDwaArg = arg1 + arg2 EndFunction Programowanie w Visual Basic
22
Visual Basic for Application w pigułce
VBA operuje obiektami zawartymi w jego rodzimej aplikacji (czyli np. w Excelu). Klasy obiektów tworzą strukturę hierarchiczną. Jedne obiekty mogą tworzyć kontenery dla innych obiektów. Excel dysponuje ponad 100 klasami obiektów. Skoroszyty, arkusze, zakresy komórek, wykresy... Sam Excel jest obiektem typu Application i jest kontenerem dla wszystkich pozostałych obiektów. Workbook – skoroszyt CommandBar – pasek narzędzi Worksheet – arkusz Chart – wykres Programowanie w Visual Basic
23
Model obiektowy Excela
Aby posługiwać się VBA należy zgłębić model obiektowy aplikacji, gdyż VBA operuje po prostu obiektami. Na przykład model obiektowy Excela eksponuje kilka potężnych obiektów do analizy danych, takich jak arkusze, wykresy, tabele przestawne, funkcje matematyczne i finansowe. Programowanie w Visual Basic
24
Programowanie w Visual Basic
Kolekcje Identyczne obiekty tworzą kolekcje, np. kolekcja Worksheets zawiera wszystkie arkusze z konkretnego skoroszytu, a kolekcja CommandBars zawiera wszystkie obiekty typu CommandBar. Kolekcje również są obiektami. Odwołując się do jakiegoś obiektu zawartego w innym, trzeba podać jego lokalizację w hierarchii, używając kropki jako separatora między kontenerem a jego składnikiem. Na przykład odwołanie do skoroszytu o nazwie Zeszyt1.xls może mieć następującą postać: Application.Workbooks(„Zeszyt1.xls”) Programowanie w Visual Basic
25
Programowanie w Visual Basic
Odwołania do obiektów Odwołanie do arkusza: Application.Workbooks(„Zeszyt1.xls”). Worksheets(„Arkusz1”) Odwołanie do komórki w arkuszu: Application.Workbooks(„Zeszyt1.xls”). Worksheets(„Arkusz1”).Range(„A1”) Jeśli wiadomo, że Arkusz1 jest aktywnym arkuszem, można uprościć odwołanie stosując zapis: Range(„A1”) Programowanie w Visual Basic
26
Programowanie w Visual Basic
Właściwości obiektów Obiekty mają właściwości. Na przykład obiekt Range ma właściwość Value i Name (wartość i nazwa), a obiekt Chart ma właściwość HasTitle (tytuł) i Type (typ). Używając VBA można ustalić właściwości obiektu, a także zmienić je. W zapisie należy podać odwołanie do obiektu i jego właściwości oddzielając dane kropką, np. Worksheets(„Arkusz1”).Range(„A1”).Value Zmiennym VBA można przypisywać wartości. Zapis poniżej podaje jak przypisać wartości komórki A1 do zmiennej Stopa. Stopa = Worksheets(„Arkusz1”).Range(„A1”).Value Worksheets(„Arkusz1”).Range(„A1”).Value = Stopa Programowanie w Visual Basic
27
Programowanie w Visual Basic
Metody obiektów Obiekty mają metody. Metoda to działanie wykonywane przez obiekt. Na przykład jedną z metod obiektu Range jest ClearContents (usuwanie zawartość komórek zakresu). Oto przykład zapisu: Range(„A1”).ClearContents Programowanie w Visual Basic
28
Programowanie w Visual Basic
Instrukcje VBA dysponuje również konstrukcjami typowymi dla nowoczesnych języków programowania, takimi jak: tablice, pętle, For Do While Do Until instrukcje warunkowe, If Select Case Instrukcje sterowania, GoTo Obsługa błędów. Error Programowanie w Visual Basic
29
Uruchamianie Edytora Visual Basic
Okno Edytora Visual Basic można otworzyć na trzy różne sposoby: Wybrać z menu polecenie Narzędzia > Makra > Edytor Visual Basic. Nacisnąć kombinację klawiszy [Alt+F11]. Kliknąć przycisk Edytor Visual Basic, znajdujący się na pasku narzędzi Visual Basic. Okno Edytora Visual Basic pokazane jest na następnym slajdzie. Uwaga: Twoje okno może wyglądać nieco inaczej (!) ze względu na szerokie możliwości dostosowywania. Między innymi można ukrywać poszczególne okna wewnętrzne, zmieniać ich rozmiar, „dokować", przemieszczać itp. Programowanie w Visual Basic
30
Okno Edytora Visual Basic
Menu i paski narzędzi Okno projektu Okno kodu programu Okno właściwości Okno Immediate Programowanie w Visual Basic
31
Elementy okna: Pasek menu
Pasek menu zwiera polecenia używane do wykonywania operacji w edytorze. Wiele poleceń z menu ma przypisane skróty klawiszowe np. polecenie View -> Project Explorer ma przypisany klawisz skrótu [Ctrl+R]. Programowanie w Visual Basic
32
Elementy okna: Paski narzędziowe
Paski narzędzi są zwykle wyświetlane tuż poniżej paska menu. Standardowy pasek narzędzi, jest jednym z kilku pasków dostępnych w edytorze. Można je dostosowywać do własnych potrzeb tzn. przemieszczać, ukrywać, wyświetlać, zmieniać zawartość itp. Aby zmienić pasek narzędzi, należy kliknąć na dowolnym z nich prawy przycisk myszy i wybrać z menu pozycję Dostosuj. Programowanie w Visual Basic
33
Elementy okna: Eksplorator projektu
W oknie Eksploratora projektu (Project) wyświetlane są diagramy zawierające wszystkie skoroszyty otwarte aktualnie w Excelu (łącznie ze skoroszytami ukrytymi). Każdy skoroszyt nazywany jest projektem. Jeśli okno Eksplorator projektu nie jest widoczne należy wybrać z menu pozycję View -> Project Explorer lub nacisnąć kombinację klawiszy [Ctrl+R]. Aby ukryć to okno, należy kliknąć w jego prawym górnym rogu przycisk: X Programowanie w Visual Basic
34
Elementy okna: Eksplorator projektu
Aby „rozszerzyć” projekt, wystarczy kliknąć znak ‘+’ na lewo od jego nazwy w oknie Eksploratora projektu. W celu „zwinięcia” projektu trzeba z kolei kliknąć znak ‘-‘. W przypadku próby rozwinięcia zabezpieczonego projektu, na ekranie pojawi się pytanie o hasło. Programowanie w Visual Basic
35
Elementy okna: Eksplorator projektu
Każdy rozwinięty projekt zawiera „węzeł” o nazwie Microsoft Excel Objects. Przechowuje on elementy odpowiadające wszystkim arkuszom i wykresom zawartym w skoroszycie oraz obiekt o nazwie ThisWorkbook reprezentujący aktywny skoroszyt. Jeśli projekt zawiera jakiekolwiek moduły, na liście występuje ponadto węzeł Modules. Po jego rozwinięciu pojawia się wykaz wszystkich istniejących modułów. Projekt może także zawierać węzeł o nazwie Forms reprezentujący formularze użytkownika. Programowanie w Visual Basic
36
Elementy okna: Eksplorator projektu
Dodawanie nowego modułu Visual Basic: Aby dodać do projektu nowy moduł należy zaznaczyć nazwę projektu w oknie Eksploratora projektu i wybrać z menu polecenie Insert > Module. Można też kliknąć nazwę projektu prawym przyciskiem myszy i wybrać to samo polecenie z menu podręcznego. Usuwanie modułu Visual Basic: Aby usunąć moduł z projektu, należy zaznaczyć nazwę tego modułu w oknie Eksploratora projektu i wybrać z menu polecenie File > Remove „nazwa modułu”. Można też kliknąć nazwę modułu prawym przyciskiem myszy i wybrać to samo polecenie z menu podręcznego. Przed usunięciem modułu pojawi się pytanie, o eksport do pliku. Programowanie w Visual Basic
37
Elementy okna: Właściwości obiektu
W oknie Właściwości projektu (Properties) wyświetlane są właściwości wybranego obiektu (arkusza, formularza, przycisku itp.). Zakładka Alphabetic pozwala wyświetlić listę właściwości obiektu w porządku alfabetycznym. Zakładka Categorized wyświetla właściwości obiektu według kategorii. Jeśli okno właściwości nie jest widoczne należy wybrać z menu pozycję View -> Properties Window lub nacisnąć klawisz [F4]. Programowanie w Visual Basic
38
Elementy okna: Instrukcje bezpośrednie
Okno Instrukcji bezpośrednich (Immediate) służy do bezpośredniego wprowadzania i wykonywania instrukcji VB (testowanie, śledzenie kodu). Aby wywołać to okno należy wybrać z menu pozycję View -> Immediate Window lub nacisnąć kombinację klawiszy [Ctrl+G]. Aby ukryć to okno, należy kliknąć w jego prawym górnym rogu przycisk: X Programowanie w Visual Basic
39
Instrukcje bezpośrednie
Instrukcje bezpośrednie funkcji wpisuje się w okno Immediate poprzedzając je znakiem zapytania, a w celu wyświetlenia wyniku należy wcisnąć ENTER. Wynik wyświetlony zostanie w oknie Immediate poniżej. Programowanie w Visual Basic
40
Instrukcje bezpośrednie
Aby wykonać procedurę w oknie Immediate należy wpisać jej nazwę w tym oknie i nacisnąć klawisz ENTER. Można też wstawiać do procedur polecenia wyświetlające wyniki bezpośrednio w oknie Immediate. Służy do tego celu polecenie Debug.Print Programowanie w Visual Basic
41
Elementy okna: Kod programu
Każdy element projektu ma związane ze sobą okno kodu np.: Sam skoroszyt (ThisWorkbook); Arkusz; Moduł; Formularz użytkownika; Formanty Aby wyświetlić okno kodu dla danego obiektu, wystarczy kliknąć dwukrotnie jego nazwę w oknie Eksploratora projektu. Programowanie w Visual Basic
42
Dostosowywanie środowiska Edytora Visual Basic
Aby wywołać okno dialogowe umożliwiające ustawienie parametrów pracy Edytora Visual Basic należy wybrać z menu polecenie Tools > Options. Powyższe okno posiada cztery zakładki: Editor (edytor) Editor Format (format edytora) General (ogólne) Docking (dokowanie) Programowanie w Visual Basic
43
Dostosowywanie środowiska Edytora Visual Basic
Auto Syntax Check (Automatyczne sprawdzanie składni) Edytor VB wyświetla okna dialogowe po odkryciu błędu syntaktycznego podczas wprowadzania kodu. Require Variable Declaration (Wymagane deklaracje zmiennych) Edytor VB wstawia na początku każdego dodawanego przez użytkownika modułu następującą instrukcję: Option Explicit Obecność tej instrukcji w module zmusza do jawnego definiowania każdej używanej zmiennej. Auto List Members (Automatyczne wyświetlanie składowych) Edytor VB oferuje dodatkową pomoc podczas wprowadzania kodu, poprzez wyświetlanie listy elementów obiektu. Auto Quick Info (Automatyczne szybkie informacje) Jeśli pole jest zaznaczone, podczas wpisywania funkcji zostanie wyświetlona informacja o niej i o jej argumentach. Auto Data Tips (Automatyczne wskazywanie danych) W trybie śledzenia kodu Edytor VB wyświetla wartość zmiennej, nad którą umieszczony jest wskaźnik myszy. Wyświetlanie kodu i funkcje pomocy Auto Indent (Automatyczne wcięcia) Ustawienie opcji Automatyczne wcięcia decyduje o tym, czy Edytor VB automatycznie zrobi wcięcie każdej linii kodu o tę samą wielkość, co linii poprzedniej. Programowanie w Visual Basic
44
Widok modułu z aktywną opcją Automatyczne szybkie informacje
Auto Quick Info Programowanie w Visual Basic
45
Dostosowywanie środowiska Edytora Visual Basic
Drag-and-Drop Text Editing (Edycja tekstu metodą “Przeciągnij i upuść”) Jeśli pole wyboru Edycja tekstu metodą “Przeciągnij i upuść” jest zaznaczone, można kopiować i przenosić tekst stosując przeciąganie i upuszczanie. Default to Full Module View (Domyślnie pełny widok modułu) Ustawienie opcji Domyślnie pełny widok modułu decyduje o standardowym stanie nowych modułów (nie ma wpływu na już istniejące). Jeśli opcja ta jest włączona wszystkie procedury w oknie kodu są wyświetlane w jednym przewijanym oknie. Gdy opcja jest wyłączona, w danej chwili można oglądać tylko jedną procedurę. Ustawienia okna kodu Procedure Separator (Separator procedur) Jeśli pole wyboru Separator procedur jest zaznaczone, na końcu każdej procedury w oknie kodu wyświetlany jest oddzielający pasek. Programowanie w Visual Basic
46
Pełny widok modułu i separatorów procedur
Separator procedur Programowanie w Visual Basic
47
Dostosowywanie środowiska Edytora Visual Basic
Code Colors (Kolory kodu programu) Opcja Kolory kodu programu pozwala wybrać kolor tekstu, tła oraz kolor wyróżniający elementy kodu. Font (Czcionka) Opcja Czcionka pozwala wybrać czcionkę używaną w modułach VBA. Najlepiej jest stosować czcionkę o stałej szerokości, taką jak Courier New. W czcionce o stałej szerokości wszystkie znaki zajmują tyle samo miejsca w linii. Dzięki temu kod jest bardziej czytelny. Size (Rozmiar) Ustawienie opcji Rozmiar decyduje o rozmiarze czcionki. Przy wyborze należy uwzględnić między innymi rozdzielczość obrazu. Margin Indicator Bar (Wskaźniki marginesowe) Opcja ta decyduje o wyświetlaniu w modułach pionowego paska marginesu. Dzięki temu na marginesie pojawiają się użyteczne wskaźniki graficzne (podczas śledzenia wykonania kodu). Programowanie w Visual Basic
48
Wskaźniki marginesowe
Wskaźnik marginesowy Kolor komentarzy Programowanie w Visual Basic
49
Dostosowywanie środowiska Edytora Visual Basic
Ogólne ustawienia Edytora Visual Basic. Generalnie można przyjąć, że standardowa konfiguracja jest optymalna. Programowanie w Visual Basic
50
Dostosowywanie środowiska Edytora Visual Basic
Ustalenia sposobu wyświetlania elementów okna Edytora VB. Jeżeli element jest dokowany, oznacza to, że będzie wyświetlany zawsze w tym samym miejscu, wzdłuż jednej z krawędzi okna Edytora VB. Ułatwia to jego lokalizowanie i identyfikację. Programowanie w Visual Basic
51
Programowanie w Visual Basic
Makrodefinicje Rejestrator makrodefinicji Rejestracja Zarządzanie makrami Dostosowanie menu i paska narzędzi Ważne pytania Programowanie w Visual Basic
52
Programowanie w Visual Basic
Makrodefinicje Prostym i szybkim sposobem utworzenia kodu VB jest czynność rejestrowania makra. Makrodefinicja jest serią poleceń wykonywanych automatycznie w momencie jej uruchomienia. Microsoft Excel posiada wbudowany Rejestrator Makrodefinicji, który zamienia akcje wykonywane za pomocą myszki oraz klawiatury na kod Visual Basic. Rejestrowanie własnych makrodefinicji pozwala na dopasowanie Excela do własnych potrzeb i uczynienie pracy bardziej efektywną. Zapisaną makrodefinicję można powiązać z elementem menu lub przyciskiem. Programowanie w Visual Basic
53
Rejestrator makrodefinicji (makr)
Rejestrator makr może być stosowany jedynie do rejestracji prostych makr. Automatycznie generowany kod przez rejestrator zawiera dużo zbędnych poleceń. Rejestrator nie ma możliwości pełnego wykorzystania wszystkich funkcji Visual Basic (np. brak pętli). Uruchamianie: Narzędzia -> Makro -> Zarejestruj nowe makro Programowanie w Visual Basic
54
Rejestrator makrodefinicji
Nazwa makra: Nazwa może zawierać litery, cyfry i znaki podkreślenia, musi zaczynać się od litery i nie może zawierać spacji ani znaków przystankowych. Klawisz skrótu: Kombinacja przycisków, za pomocą której można będzie wywołać stworzone makro. Przechowuj makro w: Miejsce zapisania makra: W aktywnym skoroszycie (Ten skoroszyt); W nowym skoroszycie (Nowy skoroszyt); W osobistym skoroszycie makr (Skoroszyt makr osobistych). Osobisty skoroszyt makr Personal .xlm jest ukrytym skoroszytem, który zawsze pozostaje otwarty. Wszystkie zapisane w nim makrodefinicje są zawsze dostępne. Opis: Dowolny tekst opisujący makro. Zostanie on umieszczony jako komentarz na początku kodu makra. Makro jest przypisane do komputera, na którym zostało utworzone. ! Programowanie w Visual Basic
55
Rejestrator makrodefinicji
Rozpoczęcie rejestracji makra: przycisk OK w oknie Rejestruj makro. Na ekranie pokaże się nowy pasek narzędzi z dwoma przyciskami: pierwszy od lewej: Zakończenie rejestracji makra; Drugi: przełącznik: Adresy względne / Adresy bezwzględne. Wszystkie wykonywane od tego momentu operacje w arkuszu Excel będą zapisywane przez rejestrator w postaci kodu Visual Basic. Inny sposób zakończenia rejestracji makra: Narzędzia > Makro > Zatrzymaj rejestrowanie Programowanie w Visual Basic
56
Adresy bezwzględne i względne
Jedną z opcji, którą można zmieniać podczas rejestracji makrodefinicji jest rodzaj adresów komórek stosowanych podczas rejestracji. W przypadku adresów bezwzględnych Microsoft Excel zapisuje dokładną pozycję każdej wybranej komórki. W przypadku adresów względnych pozycja każdej nowo wybranej komórki jest liczona względem komórki poprzednio wybranej. Programowanie w Visual Basic
57
Programowanie w Visual Basic
Zarządzanie makrami Uruchamianie: Narzędzia -> Makro -> Makra Nazwa makra: Jeśli operacje mają dotyczyć już istniejącego makra należy wybrać jego nazwę z listy. Przycisk Uruchom: Uruchomienie wybranego z listy makra. Przycisk Anuluj: Zamknij okno (bez żadnej reakcji). Przycisk Wkrocz: Wykonuj makro polecenie po poleceniu. Przycisk Edycja: Edytuj kod makra. Przycisk Utwórz: Tworzenie nowego makra o podanej nazwie. Przycisk Usuń: Usunięcie wybranego makra. Przycisk Opcje: Ustawianie opcji dotyczących makra: Klawisz skrótu: Kombinacja przycisków za pomocą, której można wywołać stworzone makro. Opis: Dowolny tekst opisujący makro umieszczany w jego komentarzu. Programowanie w Visual Basic
58
Menu oraz pasek narzędziowy
Wybrać z menu: Narzędzia -> Dostosuj W otrzymanym oknie dialogowym można (wybierając zakładkę Polecenia a następnie z listy Kategorie pozycję Makra) stworzyć nową pozycję w menu lub dodać przycisk do dowolnego paska narzędzi. Lewym przyciskiem myszy nacisnąć na elemencie z listy Polecenia i przesunąć go na menu lub pasek narzędzi. Następnie zaznaczyć stworzony przycisk (jedno kliknięcie lewym przyciskiem na tym elemencie) i nacisnąć przycisk Modyfikuj znaczenie. W otrzymanym menu można zarządzać opcjami wybranego przycisku np.: Usuń Nazwa Przypisz makro Po zakończeniu wszystkich operacji należy zamknąć okno przyciskiem Zamknij. Programowanie w Visual Basic
59
Programowanie w Visual Basic
Ważne pytania Jak podejrzeć kod wygenerowany przez rejestrator makr? Wybrać z menu: Narzędzia > Makro > Makra W oknie zarządcy makr wybrać z listy nazwę makra. Nacisnąć przycisk Edycja. Automatycznie zostanie uruchomiony Edytor Visual Basic i zostanie wyświetlony kod makra. Programowanie w Visual Basic
60
Programowanie w Visual Basic
Ważne pytania Czy można wprowadzać zmiany w kodzie makra? Oczywiście TAK. Należy jednak znać składnie, funkcje oraz metody języka Visual Basic. Pisząc samodzielnie program (to też makro) można osiągnąć znacznie więcej niż poprzez rejestrację makrodefinicji. Programy tworzone samodzielnie przez użytkownika mogą sprawdzać różne warunki i w zależności od nich wykonywać odpowiednie działania, mogą także pytać użytkownika o dane i informować go o postępie w realizacji zadań. Czy kod utworzony przez rejestrator jest optymalny? Niestety NIE! Rejestrator makrodefinicji tworzy kod, który odpowiada większości przeprowadzanych przez użytkownika czynności. Często jednak w module Visual Basic zostaje zapisanych więcej instrukcji niż potrzeba aby operacja przebiegła prawidłowo. Należy usunąć nadmiarowy kod, aby makrodefinicja w optymalny sposób robiła dokładnie to, czego zażyczył sobie użytkownik. Programowanie w Visual Basic
61
Programowanie w Visual Basic część 1
Zmienne Typy danych Stałe Tablice Komentarze Programowanie w Visual Basic
62
Programowanie w Visual Basic
Zmienne VBA wykonuje operacje na danych. Dane są przechowywane w obiektach np. w komórkach arkusza lub specjalnie utworzonych zmiennych. Zmienna to obiekt służący do reprezentacji różnych wartości np.: Wartości logicznych (Prawda lub Fałsz) Liczb całkowitych Liczb zmiennoprzecinkowych Łańcuchów znakowych (słowo) Dat Fizyczna reprezentacja zmiennej to określony obszar w pamięci komputera. Programowanie w Visual Basic
63
Programowanie w Visual Basic
Nazwy zmiennych (1) Nadawanie nazw zmiennym: Można używać wszystkich liter i cyfr ale pierwszym znakiem musi być litera. Wielkość liter nie ma znaczenia, ale w celu zwiększenia czytelności kodu lepiej jest różnicować rozmiar np.: NumerWiersza = numerwiersza = NUMERWIERSZA Nie można używać kropek, spacji czy innych znaków specjalnych: #, $, %, &, ! Nazwa może mieć maksymalnie 254 znaki. Nazwa nie może być taka jak słowa zastrzeżone np.: Next, For, If Programowanie w Visual Basic
64
Programowanie w Visual Basic
Nazwy zmiennych (2) Konwencją jest nadawanie nazw zmiennym tak, aby po nazwie można było się zorientować jaki typ danych reprezentują. Podanie typu danych w nazwie zmiennej polega na dodaniu standardowego prefiksu pisanego małymi literami – zgodnie z poniższym zestawieniem: Boolean b Integer i Long l Single s Double d Currency c Data/Time dt String str Object obj Variant v Def. Uzytkownika u dtDataUrodzenia iSuma dPodatek cZarobki Programowanie w Visual Basic
65
Programowanie w Visual Basic
Typy danych (1) Poprzez typ danych definiujemy jaki rodzaj danych ma przechowywać zmienna oraz jaki obszar pamięci zostanie jej przydzielony. VBA potrafi ustalić automatycznie typ danych. Wady takiego rozwiązania: Wolniejsze wykonywanie programu. Nieefektywne wykorzystanie pamięci. Programowanie w Visual Basic
66
Programowanie w Visual Basic
Typy danych (2) Programowanie w Visual Basic
67
Deklarowanie typu zmiennej
Jeśli brak jest w programie deklaracji zmiennej używany jest typ domyślny Variant. Dane przechowywane jako dane typu Variant zmieniają swój typ w zależności od wykonywanych na nich operacjach. Poniższa procedura demonstruje przyjmowanie różnych typów danych przez taką zmienną: Sub VariantDemo() MojaZmienna = „123” MojaZmienna = MojaZmienna / 2 MojaZmienna = „Odpowiedź: ” & MojaZmienna MsgBox MojaZmienna End Sub Programowanie w Visual Basic
68
Programowanie w Visual Basic
Ustalanie typu danych Aby ustalić typ danych zmiennej można skorzystać z funkcji o nazwie TypeName Oto modyfikacja poprzedniej procedury. Po każdym kroku wyświetlany będzie typ danych zmiennej MojaZmienna: Sub VariantDemo() MojaZmienna = „123” MsgBox TypeName (MojaZmienna) MojaZmienna = MojaZmienna / 2 MojaZmienna = „Odpowiedź: ” & MojaZmienna MsgBox MojaZmienna End Sub String Double String Programowanie w Visual Basic
69
Wymuszanie deklarowania wszystkich zmiennych
Aby wymusić deklarowanie wszystkich używanych zmiennych wystarczy umieścić na początku modułu VBA następującą instrukcję: Option Explicit powoduje to zatrzymanie wykonania programu po każdym natrafieniu na nazwę zmiennej, która nie została wcześniej zadeklarowana. Programowanie w Visual Basic
70
Deklarowanie typu zmiennej
Najbardziej popularny sposób deklarowania zmiennej lokalnej to użycie instrukcji Dim (skrót od Dimension) np.: Dim NumerWiersza As Integer Dim x As Long Dim DataAktualna As Date Dim Oprocentowanie As Single Dim ZawartoscKomorki As String Dim Imie As String * 20 Dim Temp Dim i, j, x As Integer Dim i As Integer, j As Integer, x As Integer Dim i As Integer, j As Double Programowanie w Visual Basic
71
Programowanie w Visual Basic
Zasięg zmiennych (1) Zmienne o zasięgu całego modułu: Instrukcja Dim przed pierwszą procedurą w module: Dim WartoscCalkowita As Integer Sub Proc1() … End Sub Sub Proc2() Programowanie w Visual Basic
72
Programowanie w Visual Basic
Zasięg zmiennych (2) Zmienne widoczne we wszystkich modułach: Instrukcja Public przed pierwszą procedurą w module: (tylko w modułach standardowych VBA, nie można używać zmiennych typu Public w modułach arkusza czy formularza) Public WartoscCalkowita As Integer Sub Proc1() … End Sub Sub Proc2() Programowanie w Visual Basic
73
Programowanie w Visual Basic
Zasieg zmiennych (3) Zmienne lokalne: Instrukcje Dim, Static, Private wewnątrz procedury: Sub NowaProc() Dim x As Integer Static Licznik As Integer Private NumerWiersza As Integer End Sub Zmienne lokalne zadeklarowane ze pomocą instrukcji Dim oraz Private są usuwane z pamięci po zakończeniu procedury. Zmienne lokalne zadeklarowane ze pomocą instrukcji Static zachowują swoją wartość nawet po zakończeniu procedury np.: Sub Proc() Licznik = Licznik + 1 MsgBox(”Procedura została wykonana już: ” _ & Licznik & ”razy”) Programowanie w Visual Basic
74
Programowanie w Visual Basic
Wartości zmiennych Przypisanie wartości do zmiennej następuje poprzez użycie operatora równości np.: x = 1 NumerWiersza = 100 Oprocentowanie = 0.05 BrakDanych = False Uzytkownik = ”Zenek” DataKonferencji = #10/31/2001# x = x + 1 Programowanie w Visual Basic
75
Programowanie w Visual Basic
Stosowanie zmiennych Zmienne boolowskie: Dim x As Boolean x = True Zmienne całkowite: Dim x As Integer x = 3 Zmiennoprzecinkowe: Dim x As Double x = 3.14 Łańcuchowe: Dim x As String x = ”Ala ma kota” Data i czas: Dim d As Date d = #1/1/2000# d = #12:00:00# Programowanie w Visual Basic
76
Programowanie w Visual Basic
Zmienne obiektowe (1) Zmienne obiektowe: Reprezentują całe obiekty takie jak zakres czy arkusz. Pozwalają uprościć kod programu. Umożliwiają szybsze wykonywanie programu. Deklaracja: Dim o As Object Public o As Object Zmiennej obiektowej przypisujemy wartość przy pomocy słowa kluczowego Set: Set o = Worksheets(”Ark1”).Range(”A1”) Przykłady: Dim zakres As Range Set zakres = Worksheets(”Ark1”).Range(”A1”) Dim arkusz As Worksheet Set arkusz = Worksheets(”Ark1”) Programowanie w Visual Basic
77
Programowanie w Visual Basic
Zmienne obiektowe (2) Upraszczanie kodu. Drugi wariant prezentuje procedurę z zadeklarowaną zmienną obiektową: Sub BezZmObiekt() Worksheets(„Arkusz1”).Range(„A1”).Value = 124 Worksheets(„Arkusz1”).Range(„A1”).Font.Bold = True Worksheets(„Arkusz1”).Range(„A1”).Font.Italic = True End Sub Sub ZmObiekt() Dim MojaKomórka As Range Set MojaKomórka = Worksheets(„Arkusz1”).Range(„A1”) MojaKomórka.Value = 124 MojaKomórka.Font.Bold = True MojaKomórka.Font.Italic = True End Sub Programowanie w Visual Basic
78
Deklarowanie zmiennych - powtórzenie
Zmienne lokalne: Instrukcje Dim, Static, Private wewnątrz procedury; Zmienne o zasięgu całego modułu: Instrukcja Dim przed pierwszą procedurą w module; Zmienne widoczne we wszystkich modułach: Instrukcja Public przed pierwszą procedurą w module. Programowanie w Visual Basic
79
Programowanie w Visual Basic
Deklarowanie stałych Wartość stałej nie zmienia się podczas wykonywania programu. Deklaracje stałej np.: Const PI As Single = 3.14 Const Oprocentowanie As Single = 0.075 Const Stopa = 0.44, Okres = 12 Public Const LiczbaPunktow As Integer = 5 Uwaga: Stałe podobnie jak zmienne mają swój zasięg. Zwykle podaje się w deklaracji typ danych, gdyż stała nigdy nie zmienia swej wartości. Programowanie w Visual Basic
80
Programowanie w Visual Basic
Tablice (1) Tablica: grupa elementów tego samego typu występujących pod wspólną nazwą. Odwołanie do elementu tablicy następuje poprzez podanie jej nazwy oraz indeksu. Deklarowanie tablic wygląda podobnie jak deklaracje zmiennych przy czym należy dodatkowo podać wartość [początkową indeksu oraz] wartość końcową indeksu. Przykłady: Dim Tablica1(1 To 100) As String * 2 Dim Tablica2(0 To 100) As String * 2 Public Tablica3(100) As String * 20 VBA przyjmuje domyślnie dolną wartość indeksu 0 Programowanie w Visual Basic
81
Programowanie w Visual Basic
Tablice (2) Aby pominąć dolną wartość indeksu i spowodować, że w każdej tablicy tą wartością jest domyślnie np. 1 należy umieścić przed dowolną procedurą w module instrukcję: Option Base 1 Deklarowanie tablic wielowymiarowych Tablice w VBA mogą mieć do 60 wymiarów. Dim Tablica4(1 To 10, 1 To 10) As Integer Dim Tablica5(0 To 10, 0 To 20, 0 To 100) _ As Long Programowanie w Visual Basic
82
Programowanie w Visual Basic
Tablice (3) Odwoływanie się do elementów tablicy: Jednowymiarowej: Tablica1(4) = ”Ala ma kota” Dwuwymiarowej: Tablica4(4,5) = 25 Trójwymiarowej: Tablica5(1,2,10) = 15 Programowanie w Visual Basic
83
Typy danych definiowane przez użytkownika
VBA pozwala utworzyć własne typy danych. Definiowanie typu danych musi przebiegać poza procedurami, na początku modułu. Typy takie są zawsze publiczne. Type KlientInfo Firma As String * 20 Kontakty As String * 15 Kierunkowy As Integer DziałSprzedaży As Long End Type W module należy zadeklarować zmienną tego typu – zwykle jest to deklaracja tablicy: Dim Klienci(1 To 100) As KlientInfo Programowanie w Visual Basic
84
Odwołanie do składników tej zmiennej
Odwołanie do poszczególnych składników tablicy: Klienci(1).Firma = „InterFlora” Klienci(1).Kontakt = „Anna Madej” Klienci(1).Kierunkowy = 3 Klienci(1).DziałSprzedaży = Wykonywanie operacji na całych elementach takiej tablicy: Klienci(2) = Klienci(1) Zamiast Klienci(2).Firma = Klienci(1).Firma Klienci(2).Kontakt = Klienci(1).Kontakt itd. Programowanie w Visual Basic
85
Programowanie w Visual Basic
Komentarze Aby wstawić komentarz w VBA należy: Poprzedzić tekst mający być komentarzem znakiem apostrofu: ‘ Dim Tab1(1 To 100) As Long ‘dane wejściowe Poprzedzić cały wiersz słowem: rem rem dane wejściowe Dim Tab1(1 To 100) As Long Programowanie w Visual Basic
86
Programowanie w Visual Basic część 2
Przypisywanie wyrażeń Operatory matematyczne Operatory logiczne Operatory porównania Sterowanie wykonaniem Konwersje typów danych Programowanie w Visual Basic
87
Przypisywanie wyrażeń
Wyrażenie to kombinacja słów kluczowych, operatorów, zmiennych i stałych, której wartością jest łańcuch, liczba lub obiekt. Wyrażenie może wykonywać obliczenia, przetwarzać tekst lub testować dane. Operator przypisania wartości wyrażenia do zmiennej to w VBA znak równości: = Przykłady: x = 1 x = x + 1 y = x*x + 2*x –10 ActiveWindow.DisplayGridlines = True ustalenie właściwości: Cells(2,3).Value = 102 Programowanie w Visual Basic
88
Operatory matematyczne
dodawanie odejmowanie * mnożenie / dzielenie ^ podnoszenie do potęgi & łączenie łańcuchów \ dzielenie całkowite Mod dzielenie modulo (z resztą) Programowanie w Visual Basic
89
Programowanie w Visual Basic
Operatory logiczne Not negacja logiczna wyrażenia And iloczyn logiczny dwóch wyrażeń Or suma logiczna dwóch wyrażeń XoR suma rozłączna dwóch wyrażeń Eqv spr. równoważności logicznej dwóch wyrażeń Imp implikacja dwóch wyrażeń Programowanie w Visual Basic
90
Programowanie w Visual Basic
Operatory porównania = równe > większe niż < mniejsze niż >= większe lub równe <= mniejsze lub równe <> różne od Programowanie w Visual Basic
91
Programowanie w Visual Basic
Wykonywanie operacji Kolejność wykonywania operacji jest taka sama jak w Excelu; najwyższy priorytet mają nawiasy. ActiveWindow.DisplayGridlines = True ActiveWindow.DisplayGridlines = Not _ ActiveWindow.DisplayGridlines Przypisanie wartości True powoduje ustalenie określonej właściwości. Zastosowanie operatora Not powoduje zmianę tej właściwości. MsgBox ActiveSheet.Name = „Arkusz1” And ActiveCell.Row = 1 Użycie operatora logicznego And powoduje wyświetlenie wartości True, gdy aktywnym arkuszem jest Arkusz 1 i aktywna komórka znajduje się w wierszu 1. MsgBox ActiveSheet.Name = „Arkusz1” Or ActiveSheet.Name = _ „Arkusz2” Użycie operatora logicznego Or powoduje wyświetlenie wartości True, gdy aktywnym arkuszem jest Arkusz 1 lub Arkusz 2. Programowanie w Visual Basic
92
Sterowanie wykonaniem
Niektóre procedury VBA z chwilą uruchomienia są wykonywane linia po linii – od początku do samego końca (np. wszystkie zarejestrowane makra). Często jednak użytkownik (program) może sam zadecydować, które linie programu zostaną wykonane i ile razy. Sterowanie wykonaniem polega na pomijaniu lub wielokrotnym wykonywaniu pewnych fragmentów kodu oraz sprawdzaniu warunków w celu ustalenia dalszego przebiegu wykonania procedury. Najważniejsze sposoby sterowania wykonaniem: Konstrukcja If – Then Konstrukcja Select Case Pętla For – Next Pętla Do While Pętla Do Until Instrukcja GoTo Programowanie w Visual Basic
93
If – Then (1) Warunkowe wykonywane jednej lub wielu instrukcji. 1
If warunek Then instrukcja If warunek Then instrukcja prawda End If If warunek Then instrukcja prawda Else instrukcja fałsz 4 Zagnieżdżenie instrukcji 2 If warunek Then instrukcja prawda Else If warunek2 Then instrukcja prawda2 Else instrukcja fałsz2 End If 3 Programowanie w Visual Basic
94
Programowanie w Visual Basic
If – Then (2) 5 If warunek Then instrukcje prawda ElseIf warunek2 Then instrukcje prawda2 ElseIf warunek3 Then instrukcje prawda3 Else instrukcje domyślne End If If Ilość >= 0 And Ilość < 25 Then Rabat = 0.03 ElseIf Ilość >= 25 And Ilość < 50 Then Rabat = 0.05 ElseIf Ilość >= 50 And Ilość < 75 Then Rabat = 0.08 ElseIf Ilość >= 75 Rabat = 0.11 Testowanie wielu warunków 6 Programowanie w Visual Basic
95
Select Case (1) Warunkowe wykonywane jednej lub wielu instrukcji.
Alternatywa dla If – Then - Else Select Case wyrażenieTestujące Case listaWyrażeń1 instrukcje1 Case listaWyrażeń2 instrukcje2 Case Else instrukcje domyślne End Select Select Case Ilość Case 0 To 24 Rabat = 0.03 Case 25 To 49 Rabat = 0.05 Case 50 To 74 Rabat = 0.08 Case Is >= 75 Rabat = 0.11 End Select Wyjście z konstrukcji Select case następuje po znalezieniu i wykonaniu pierwszego pasującego przypadku – aby uzyskać maksymalnie efektywny kod, można sprawdzać najczęściej zachodzący przypadek na samym początku. Programowanie w Visual Basic
96
Programowanie w Visual Basic
Select Case (2) Zagnieżdżanie instrukcji Select Case Application.WindowState Case xlMaximized: MsgBox „Aplikacja maksymalna” Case xlMinimized: MsgBox „Aplikacja minimalna” Case xlNormal: MsgBox „Aplikacja normalna” Select Case ActiveWindow.WindowState Case xlMaximized: MsgBox „Zeszyt maksymalny” Case xlMinimized: MsgBox „Zeszyt minimalny” Case xlNormal: MsgBox „Zeszyt normalny” End Select Programowanie w Visual Basic
97
For - Next Pętla umożliwia wykonywanie tego samego bloku wielokrotnie.
Liczba wykonań pętli jest znana, z góry ustalona. For licznik = start To koniec [Step przyrost] [Instrukcje] [Exit For] Next [licznik] For licz = 1 To 10 suma = suma + licz Next licz For licz = 1 To 10 Step 2 Licznik – zmienna sterująca For x = 0 To 10 For y = 0 To 100 suma = suma + tabela(x, y) Next y Next x Zagnieżdżenie instrukcji Programowanie w Visual Basic
98
For Each - Next Pętla umożliwia wykonywanie operacji dla wszystkich elementów kolekcji For Each element In grupa [Instrukcje] [Exit For] Next [element] Dim tablica(5) As Integer For i = 0 To 5 Tablica(i) = Rnd Next i For Each n In tablica Debug.Print n Next n Programowanie w Visual Basic
99
Do While Do While [warunek] [Instrukcje] [Exit Do] Loop Do
Pętla wykonuje się dopóki podany warunek jest spełniony. 1 Do While [warunek] [Instrukcje] [Exit Do] Loop Do Loop While [warunek] Dim licz As Integer licz = 10 Do While licz >= 1 suma = suma + licz licz = licz - 1 Loop Do ActiveCell.Value = 0 ActiveCell.Offset(1, 0).Select Loop While Not IsEmpty(ActiveCell) 2 Programowanie w Visual Basic
100
Do Until Do [Until warunek] [Instrukcje] [Exit Do] Loop Do
Pętla wykonuje się do momentu aż warunek zostanie spełniony. 1 Do [Until warunek] [Instrukcje] [Exit Do] Loop Do Loop [Until warunek] Dim licz As Integer licz = 10 Do Until licz < 1 suma = suma + licz licz = licz - 1 Loop 2 Programowanie w Visual Basic
101
Programowanie w Visual Basic część 3
Procedury (Sub) Przekazywanie parametrów do procedur Wywoływanie procedur Funkcje (Function) Przekazywanie parametrów do funkcji Wywoływanie funkcji Obsługa błędów Funkcje standardowe: MsgBox InputBox inne funkcje wbudowane Programowanie w Visual Basic
102
Programowanie w Visual Basic
Procedury - Sub Procedura to grupa instrukcji umieszczonych w module, wykonujących określone zadanie. [Private | Public] [Static] Sub nazwa (lista_arg) [instrukcje] [Exit Sub] End Sub Private – procedura jest dostępna tylko dla pozostałych procedur z tego samego modułu. Public – procedura jest dostępna dla wszystkich procedur z wszystkich modułów Standardowo wszystkie procedury są publiczne. Static – zmienne procedury są zachowywane po jej zakończeniu. Programowanie w Visual Basic
103
Przekazywanie argumentów do procedur (1)
Argumenty dostarczają procedurze dane wejściowe, które mogą być wykorzystywane podczas jej wykonywania. Do procedury można przekazać między innymi: Zmienne Stałe Literały (nie zmienne) Tablice Obiekty Składnia argumentów: [Optional] [ByVal | ByRef] [ParamArray] nazwa[( )] [As typ] [= wartość_domyślna] Programowanie w Visual Basic
104
Przekazywanie argumentów (2)
Procedura bez argumentów: Sub proc1() Procedura ze stałą liczbą argumentów: Sub proc2(wiersz As Integer, kol As Long) Procedura może mieć część argumentów wymaganych a część opcjonalnych: Sub proc3(wiersz As Integer, Optional kol) Procedura może mieć wszystkie argumenty opcjonalne: Sub proc4(Optional wiersz, Optional kol=5) Procedura o nieokreślonej liczbie parametrów: Sub proc5(ParamArray tab()) Programowanie w Visual Basic
105
Przekazywanie argumentów (3)
Argument może być przekazywany do procedury na dwa sposoby: ByRef – przez referencję (standardowo) – polega na przekazaniu adresu pamięci zmiennej; ByVal – przez wartość – polega na przekazaniu „kopii” oryginalnej zmiennej. W konsekwencji zmiana argumentu w procedurze nie ma wpływu na oryginalną zmienną. Programowanie w Visual Basic
106
Programowanie w Visual Basic
Wywoływanie procedur Polecenie Run>Run Sub/User Form w Edytorze VB. Polecenie Narzędzia>Makro>Makra w Excelu. Skrót klawiszowy . Wybranie pozycji z menu lub paska narzędziowego (element dodany przez użytkownika) . Za pomocą kliknięcia obiektu. Z wnętrza innej procedury. W momencie wystąpienia zdarzenia. Programowanie w Visual Basic
107
Wywoływanie procedur za pomocą kliknięcia obiektu.
W Excelu istnieje wiele różnych obiektów, które można umieszczać na arkuszu roboczym lub na arkuszu wykresu i przypisywać do nich makra. Obiekty te są dostępne za pomocą następujących trzech pasków narzędzi: Rysowanie Formularze Przybornik Formantów Programowanie w Visual Basic
108
Wywoływanie procedur za pomocą kliknięcia obiektu.
Pasek narzędzi Przybornik formantów zawiera formanty ActiveX – te same, które są używane w formularzach użytkownika (UserForm). Pasek narzędzi Formularze zawiera podobne formanty, ale nie są to formanty ActiveX – istnieją dla zachowania zgodności ze starszymi wersjami Excela (Excel 5 i Excel 95). Czasem są wygodniejsze w użyciu. Programowanie w Visual Basic
109
Przypisanie procedury do obiektu.
Należy wybrać np. przycisk z paska narzędzi Formularze. Aby utworzyć przycisk należy go „narysować” na arkuszu. Excel automatycznie otworzy okno dialogowe „Przypisz makro”. Programowanie w Visual Basic
110
Przypisanie procedury do obiektu.
Aby przypisać makro do kształtu należy wybrać odpowiedni kształt z autokształtów lub narysować własny. Z menu podręcznego należy wybrać polecenie Przypisz makro… Programowanie w Visual Basic
111
Programowanie w Visual Basic
Wywoływanie procedur Z wnętrza innej procedury: Aby precyzyjnie wskazać procedurę w innym skoroszycie, trzeba podać nazwę projektu, nazwę modułu i na końcu nazwę procedury: Innym sposobem jest użycie metody Run obiektu Application: NazwaProcedury Call NazwaProcedury TwojaSub Call TwojaSub MójProjekt.MójModuł.MojaSub Call MójProjekt.MójModuł.MojaSub Application.Run „’makra_budżetowe.xls’!Konsoliduj” Wywołanie procedury Konsoliduj znajdującej się w skoroszycie makra_budżetowe.xls Programowanie w Visual Basic
112
Po co wywoływać inne procedury?
Dbanie o przejrzystość kodu. Mniejsze procedury są łatwiejsze do rozszyfrowania i śledzenia. Takie postępowanie jest w dobrym stylu! Im prostszy kod, tym łatwiej go zmodyfikować. Wywoływanie jednej procedury w kilku miejscach eliminuje redundancję. Można utworzyć cały zbiór procedur ogólnego przeznaczenia i importować moduł do bieżącego projektu i korzystać z niego w razie potrzeby. Przykład przejrzystej procedury: Programowanie w Visual Basic
113
Wywołanie procedury w momencie wystąpienia zdarzenia
Zdarzeniem jest np. otwarcie skoroszytu, zaznaczenie komórki, kliknięcie obiektu, zapisanie skoroszytu itd. Procedura taka nazywa się Procedurą obsługi zdarzenia. Procedury takie mają charakterystyczne nazwy składające się z nazwy obiektu, znaku podkreślenia i nazwy zdarzenia. Np. procedura wykonywana w momencie otwierania skoroszytu ma nazwę: Workbook_Open Procedury te są przechowywane w oknie kodu konkretnego obiektu. Przykład: Programowanie w Visual Basic
114
Procedura Workbook_Open
Lista Declarations Programowanie w Visual Basic
115
Przykład procedury obsługującej zdarzenie
Worksheet_SelectionChange Jest wykonywana za każdym razem, gdy użytkownik zmieni zaznaczenie na arkuszu. Usuwa cieniowanie aktywnej komórki. Kolumna i wiersz aktywnej komórki zmieniają kolor na jasnożółty. Programowanie w Visual Basic
116
Procedury obsługujące zdarzenia
Excel ma możliwość monitorowania wielu zdarzeń. Można je podzielić na: Zdarzenia skoroszytu (Workbook) Zdarzenia arkusza (Worksheet) Zdarzenia wykresu (Chart) Zdarzenia aplikacji (Application) Zdarzenia formularza (UserForm) Zdarzenia niezwiązane z obiektami. Często występują po sobie całe sekwencje zdarzeń. Programowanie w Visual Basic
117
Procedury obsługujące zdarzenia
Niektóre procedury zdarzeń przyjmują argumenty. Private Sub_ Workbook_SheetActivate(ByVal Sh As Object) End Sub Procedura przyjmuje tylko jeden argument (Sh), który reprezentuje aktywny arkusz. W tym wypadku zmienna Sh została zadeklarowana jako Object, gdyż argumentem tej funkcji może być zarówno arkusz Worksheet jak i arkusz wykresu Chart. Programowanie w Visual Basic
118
Procedury obsługujące zdarzenia
Wiele procedur obsługujących zdarzenie wykorzystuje argument typu Boolean o nazwie Cancel. Wartość zmiennej Cancel przekazywanej do procedury wynosi True. Jednak procedura może zmienić tę wartość Na False, co spowoduje przerwanie zadania drukowania. Private Sub_ Workbook_BeforePrint(Cancel As Boolean) Ans = MsgBox(„Gotowy do wydruku?”,vbYesNo) If Ans = vbNo Then Cancel = False End Sub Programowanie w Visual Basic
119
Zdarzenia obsługiwane przez Excela
Zdarzenia skoroszytu (Workbook) – muszą być umieszczone w module obiektu ThisWorkbook Activate – skoroszyt jest uaktywniany Open – skoroszyt jest otwierany bądź tworzony BeforeClose – tuż przed zamknięciem skoroszytu BeforeSave – tuż przed zachowaniem skoroszytu BeforePrint – skoroszyt lub jego fragment zostanie wydrukowany Programowanie w Visual Basic
120
Zdarzenia obsługiwane przez Excela
Zdarzenia skoroszytu (Workbook) cd. Deactivate – skoroszyt przestaje być aktywny. NewSheet – dodawany jest nowy arkusz. SheetActivate – uaktywniany jest dowolny arkusz. WindowAcrivate – uaktywniane jest dowolne okno skoroszytu. Programowanie w Visual Basic
121
Zdarzenia obsługiwane przez Excela
Zdarzenia arkusza (Worksheet) Activate – arkusz jest uaktywniany BeforeDoubleClick – arkusz kliknięto dwukrotnie. Change – modyfikacja zawartości komórki SelectionChange – zmiana położenia kursora zaznaczenia Calculate – arkusz jest przeliczany. Deactivate – arkusz przestaje być aktywny. Private Sub Worksheet_Change(ByVal Target As Excel.Range) MsgBox „Zakres „ & Target.Address & „ uległ zmianie.” End Sub Programowanie w Visual Basic
122
Zdarzenia obsługiwane przez Excela
Zdarzenia wykresu (Chart) Select – obiekt wykresu jest zaznaczany SeriesChange – modyfikacja serii danych wykresu. Resize – zmiana rozmiaru wykresu Zdarzenia aplikacji (Application) NewWorkbook – tworzony jest nowy skoroszyt WorkbookBeforeClose – tuż przed zamknięciem dowolnego skoroszytu SheetChange – zmianie ulega dowolna komórka w jednym z otwartych skoroszytów. Programowanie w Visual Basic
123
Zdarzenia obsługiwane przez Excela
Zdarzenia formularza (UserForm) Initialize – przed wyświetleniem formularza na ekranie Click – po kliknięciu przycisku. DblClick – po dwukrotnym kliknięciu przycisku KeyDown – po naciśnięciu klawisza KeyUp – po zwolnieniu klawisza Zoom – formularz jest powiększany Terminate – formularz jest zamykany Programowanie w Visual Basic
124
Programowanie w Visual Basic
Zdarzenia formularza Zdarzenia formularza mogą być dowolnie określone za pomocą listy Declarations. Programowanie w Visual Basic
125
Zdarzenia nie związane z obiektami Excela
Zdarzenia występujące na poziomie aplikacji. Powinny być umieszczane w ogólnych modułach VBA. OnTime – występuje w określonym czasie OnKey – występuje po kliknięciu przycisku. Programowanie w Visual Basic
126
Programowanie w Visual Basic
Funkcje - Function Są to procedury, których zadaniem jest wykonanie określonych operacji (obliczeń) i zwrócenie ich wyniku. Funkcje należy tworzyć i umieszczać w modułach. Jeden moduł może zawierać dowolną liczbę funkcji. [Private | Public] [Static] Function nazwa [(lista_arg)] [As typ] [instrukcje] [Exit Function] End Function Programowanie w Visual Basic
127
Przekazywanie argumentów do funkcji (1)
Argumenty dostarczają funkcji dane wejściowe, które mogą być wykorzystywane podczas jej wykonywania. Do funkcji można przekazać między innymi: Zmienne Stałe Literały Tablice Obiekty Składnia argumentów: [Optional] [ByVal | ByRef] [ParamArray] nazwa[( )] [As typ] [= wartość_domyślna] Programowanie w Visual Basic
128
Przekazywanie argumentów (2)
Funkcja bez argumentów: Function fun1() Funkcja ze stałą liczbą argumentów: Function fun2(wie As Integer, kol As Long) Funkcja może mieć część argumentów wymaganych a część opcjonalnych: Function fun3(wie As Integer, Optional kol) Funkcja może mieć wszystkie argumenty opcjonalne: Function fun4(Optional wie, Optional kol=5) Funkcja o nieokreślonej liczbie parametrów: Function fun5(ParamArray tab()) Programowanie w Visual Basic
129
Programowanie w Visual Basic
Wywoływanie funkcji Z wnętrza procedury: Razem = SumaTab(tab) W formułach arkusza: =SumaTab(A1:A100) =Zeszyt2.xls!SumaTab(A1:A100) Programowanie w Visual Basic
130
Programowanie w Visual Basic
Funkcje wbudowane VBA udostępnia całą gamę funkcji wbudowanych, które pozwalają uprościć obliczenia i operacje (ponad 130 funkcji). Często pozwalają one wykonać działanie, które inaczej byłoby bardzo trudne lub wręcz niemożliwe do zrealizowania. Wiele funkcji VBA przypomina funkcje Excela (wiele jest nawet identycznych). Na przykład funkcja UCase, która zmienia litery łańcucha na wielkie, jest równoważna excelowej funkcji arkusza LITERY.WIELKIE. Programowanie w Visual Basic
131
Programowanie w Visual Basic
Funkcje wbudowane Aby uzyskać listę funkcji podczas pisania kodu, należy wpisać VBA i zaraz potem kropkę (.). Jeśli to nie zadziała, należy się upewnić, czy jest zaznaczone pole wyboru Auto List Members (Tools > Options, karta Editor). Programowanie w Visual Basic
132
Funkcje wbudowane – przegląd (1)
Len – zwraca ilość znaków łańcucha lub liczbę bajtów pamięci, jaka jest potrzebna do przechowywania argumentu. Funkcje numeryczne: Sqr – oblicza pierwiastek kwadratowy, Atn – zwraca wartość arcustangens liczby, Cos – zwraca wartość cosinus liczby, Exp – zwraca podstawę logarytmu naturalnego liczby podniesionej do odpowiedniej potęgi, Sin – zwraca wartość sinus liczby, Tan - zwraca wartość tangens liczby. Log - zwraca wartość logarytmu naturalnego liczby. Programowanie w Visual Basic
133
Funkcje numeryczne - przykład
Procedura, która oblicza pierwiastek kwadratowy z wartości zmiennej za pomocą funkcji VBA Sqr, zapisuje wynik do innej zmiennej, a następnie wyświetla go w oknie MsgBox: Wynik Programowanie w Visual Basic
134
Funkcje wbudowane – przegląd (2)
Funkcje łańcuchowe: Chr(int) – zwraca znak ASCII o kodzie int. Zmienna = Chr(84) wynik: T UCase(str) – zwraca wartość typu Variant(String) zawierającą podany ciąg str zamieniony na litery wielkie. Zmienna = UCase(„Ala ma kota”) wynik: ALA MA KOTA LCase(str) – zamienia wszystkie litery w ciągu str na małe. LTrim(str), RTrim(str), Trim(str) – każda z tych funkcji zwraca wartość typu Variant(string) zawierająca kopię podanego ciągu znaków: bez spacji wiodących (LTrim), bez spacji końcowych (RTrim) lub bez spacji wiodących i końcowych (Trim). MsgBox („B” & LTrim(„ Ala ma kota ”) & „B” wynik: BAla ma kota B Programowanie w Visual Basic
135
Funkcje wbudowane – przegląd (3)
Funkcje łańcuchowe: Left(str, int) – zwraca wartość typu Variant(String) zawierającą podaną liczbę znaków int począwszy od lewej strony ciągu znaków str. Mid(str, intStart [, intLen]) - zwraca wartość typu Variant(String) zawierającą podaną liczbę znaków z ciągu znaków, od podanej pozycji. Right(str, int) – zwraca wartość typu Variant(String) zawierającą podaną liczbę znaków int począwszy od prawej strony ciągu znaków str. Str(liczba) – zwraca znakową reprezentację liczby. Programowanie w Visual Basic
136
Funkcje łańcuchowe - przykład
zmienna = Left("Ala ma kota", 3) wynik: Ala zmienna = Right("Ala ma kota", 4) wynik: kota zmienna = Mid("Ala ma kota", 5, 2) wynik: ma Programowanie w Visual Basic
137
Funkcje wbudowane – przegląd (4)
Funkcje daty i czasu: Date – zwraca bieżącą datę systemową. DateAdd – dodaje przedział czasowy do danej daty. DateDiff – zwraca przedział czasowy między dwoma datami. Day – zwraca dzień miesiąca podanej daty. Month – zwraca miesiąc podanej daty. Minute – zwraca liczbę określającą minutę. Now – zwraca bieżącą datę i czas systemowy. Time – zwraca bieżący czas systemowy. Weekday – zwraca numer oznaczający dzień tygodnia. Programowanie w Visual Basic
138
Funkcje daty i czasu - przykład
zmienna = Now() wynik: :40:00 zmienna = Year(Now) wynik: zmienna = Month(Now) wynik: 10 zmienna = Day(Now) wynik: 29 zmienna = WeekDay(Now) wynik: 7 Programowanie w Visual Basic
139
Funkcje wbudowane – przegląd (5)
Funkcje logiczne: IsArray – zwraca True, jeśli zmienna jest tablicą. IsDate – zwraca True, jeśli zmienna jest datą. IsNull – zwraca True, jeśli wyrażenie nie zawiera danych. IsNumeric – zwraca True, jeśli wyrażenie można potraktować jako wartość numeryczną. varSprawdzajaca = IsNumeric(varSprawdzana) Programowanie w Visual Basic
140
Wywoływanie funkcji Excela
Jeżeli VBA nie ma odpowiednika funkcji używanej w Excelu, można wywołać funkcję arkuszową Excela bezpośrednio z poziomu programu VBA. Wystarczy, że poprzedzi się jej nazwę odwołaniem do obiektu WorksheetFunction. Na przykład VBA nie ma funkcji zamieniającej radiany na stopnie. Ponieważ Excel ma funkcję arkuszową służącą właśnie do tego, można wywołać następującą instrukcję VBA: Deg = Application.WorksheetFunction.Degrees(3.14) Obiekt WorksheetFunction został wprowadzony w Excelu 97. Aby zachować zgodność z poprzednimi wersjami, można pominąć odwołanie do obiektu WorksheetFunction następująco: Deg = Application.Degrees(3.14) Programowanie w Visual Basic
141
Programowanie w Visual Basic
Funkcje Excela Należy pamiętać, że nie można używać funkcji arkusza, które mają swoje odpowiedniki w VBA. Na przykład nie można skorzystać w VBA z excelowej funkcji arkusza PIERWIASTEK, gdyż VBA dysponuje własną wersją tej funkcji o nazwie Sqr. Nie można też „mieszać” zapisu. W efekcie podana niżej instrukcja spowoduje błąd: MsgBox Application.WorksheetFunction.Sqr(123) ‘ błąd Programowanie w Visual Basic
142
Funkcje Excela - przykład
Poniższy przykład demonstruje sposób użycia w procedurze VBA excelowej funkcji arkusza ROMAN. Ta rzadko wykorzystywana funkcja dokonuje konwersji liczby dziesiętnej na rzymską. Programowanie w Visual Basic
143
Programowanie w Visual Basic
Funkcja MsgBox Funkcja MsgBox jest jedną z najbardziej użytecznych funkcji VBA. Funkcja ta zwraca pojedynczą wartość w oknie dialogowym w formie komunikatu, ale także może udostępniać użytkownikowi różne przyciski. Podstawowa składnia wywołania funkcji MsgBox obejmuje pięć argumentów (opcjonalne są umieszczone w nawiasach kwadratowych): MsgBox(prompt[, buttons] [, title] [, helpfile] [, context]) prompt – wyświetlana wiadomość buttons – to przyciski, np. vbYesNo (przyciski Tak i Nie) title – tytuł okna na pasku komunikatu (standardowo jest to Microsoft Excel) helpfile – plik pomocy context – ID tematu pomocy, wskazuje konkretny temat pomocy, który ma być wyświetlany. Programowanie w Visual Basic
144
Programowanie w Visual Basic
Funkcja MsgBox vbOKOnly vbYesNoCancel vbYesNo vbAbortRetryIgnore Programowanie w Visual Basic
145
Programowanie w Visual Basic
Funkcja MsgBox vbOKOnly +vbExclamation vbYesNo +vbQuestion vbOKCancel +vbCritical vbOKCancel +vbInformation Programowanie w Visual Basic
146
Programowanie w Visual Basic
Funkcja MsgBox Wartość zwracaną przez funkcję MsgBox można przypisywać do zmiennej, a można także wywołując tę funkcję samodzielnie, bez użycia instrukcji przypisania. W poniższym przykładzie wynik funkcji zapisywany jest na zmiennej Odp. Odp = MsgBox(„Kontynuować? ”, vbYesNo + vbQuestion, „Odpowiedz”) If Odp = vbNo Then Exit Sub Programowanie w Visual Basic
147
Programowanie w Visual Basic
Funkcja MsgBox Stała vbYesNo powoduje wyświetlenie w polu komunikatu dwóch przycisków: jednego z etykietą Tak, a drugiego z etykietą Nie. Dodanie do wartości argumentu przyciski stałej vbQuestion powoduje ponadto wyświetlenie ikony ze znakiem zapytania. Po wykonaniu pierwszej instrukcji zmienna Odp zawiera jedną z dwóch wartości, reprezentowanych przez stałe vbYes i vbNo. W tym przykładzie kliknięcie przez użytkownika przycisku Nie powoduje zakończenie procedury. Programowanie w Visual Basic
148
Programowanie w Visual Basic
Funkcja MsgBox Wartość zwracana przez funkcję MsgBox jest liczbą całkowitą: 1 - vbOK (Akceptuj). 2 – vbCancel (Anuluj). 3 – vbAbort (Przerwij). 4 – vbRetry (Ponów próbę). 5 – vbIgnore (Ignoruj). 6 – vbYes (Tak). 7 – vbNo (Nie). Programowanie w Visual Basic
149
Programowanie w Visual Basic
Funkcja MsgBox Argument buttons jest opcjonalny. Zamiast nazw można użyć wartości liczbowych z tabel sterujących, które są odpowiednikami argumentu: vbOKOnly - 0 vbOKCancel - 1 vbAbortRetryIgnore - 2 vbYesNoCancel - 3 vbYesNo - 4 vbRetryCancel - 5 vbCritical – 16 vbQuestion – 32 vbExclamation – 48 vbInformation - 64 vbDefaultButton1 – 0 – przyciskiem domyślnym jest przycisk 1 vbDefaultButton2 – 256 – przyciskiem domyślnym jest przycisk 2 vbDefaultButton3 – 512 – przyciskiem domyślnym jest przycisk 3 Programowanie w Visual Basic
150
Programowanie w Visual Basic
Funkcja MsgBox Liczby, które są odpowiednikami poszczególnych opcji argumentu Buttons można sumować: Sub Przykład() zmienna = "Test" MsgBox zmienna, 306, "Przykłady" End Sub 306 = 2 – vbAbortRetryIgnore 48 – vbExclamation 256 – domyślny przycisk 2 Programowanie w Visual Basic
151
Programowanie w Visual Basic
Funkcja InputBox Funkcja InputBox wyświetla zapytanie o jedną informację. Zawsze zwraca łańcuch, więc w przypadku wprowadzania wartości liczbowych konieczne jest dokonanie konwersji jej wyniku. Zapytanie może liczyć około 1024 znaków. Oprócz niego można określić tytuł okna dialogowego, wartość domyślną oraz jego położenie na ekranie. Można też dodać własny temat pomocy. W takim przypadku pole wprowadzania danych zawiera przycisk Pomoc. Programowanie w Visual Basic
152
Składnia funkcji InputBox
InputBox (prompt[, title][, default] [, xpos][, ypos][, helpfile, context]) Znaczenie argumentów: prompt – zapytanie (wymagany) – tekst wyświetlany w polu wprowadzania danych. title – tytuł okna (opcjonalny). default – wartość domyślna (opcjonalna). xpos, ypos – współrzędne ekranowe lewego górnego rogu okna (opcjonalne). helpfile, context – plik pomocy i ID tematu pomocy (opcjonalne). Programowanie w Visual Basic
153
Przykład z funkcją InputBox (1)
Sub PobierzImięNazwisko() Do Until Użytkownik < > „ „ Użytkownik = InputBox(„Podaj imię i nazwisko: „, _ „Identyfikacja użytkownika”) Loop PierwszaSpacja = InStr(Użytkownik, „„) If PierwszaSpacja < > 0 Then Użytkownik = Left(Użytkownik, PirwszaSpacja) End If MsgBox „Witaj „ & Użytkownik End Sub Funkcja zwraca pozycję danego ciągu znaków w innym ciągu znaków – w tym wypadku zwraca pozycję spacji Programowanie w Visual Basic
154
Przykład z funkcją InputBox (2)
Sub ObliczSr() Dim Licz1 As Integer Dim Licz2 As Integer Dim Licz3 As Integer Licz1 = CInt (InputBox („Wpisz pierwszą liczbę:„) Licz2 = CInt (InputBox („Wpisz drugą liczbę:„) Licz3 = CInt (InputBox („Wpisz trzecią liczbę:„) MsgBox („Średnia wynosi: „ & Chr(13) & Sr(Licz1, Licz2, Licz3) End Sub Function Sr(Licz1 As Integer, Licz2 As Integer, Licz3 As Integer) As Single Const ileLiczb As Integer = 3 Sr = (Licz1 + Licz2 + Licz3) / ileLiczb End Function Programowanie w Visual Basic
155
Konwersja typów danych
Zamiana dowolnego typu zmiennej na określony przez zastosowaną funkcję typ. Najważniejsze funkcje konwersji: CBool, CByte, CInt, CLng, CSng, CDbl, CStr, CVar, CDate, CCur. Przykład: Ilosc = CInt(”123”) Wyplata = CCur (Godziny * StawkaGodz) Uwaga: Jeżeli wyrażenie przekazywane do funkcji wykracza poza przedział dopuszczalnych wartości dla typu danych, do którego próbowano dokonać konwersji, wystąpi błąd. Programowanie w Visual Basic
156
Programowanie w Visual Basic
Obsługa błędów Podczas wykonywania programu mogą pojawić się błędy np. dzielenie przez zero lub brak dyskietki w stacji dyskietek. Wyrażenie On Error Go To etykieta sprawia, że w wypadku błędu nastąpi przeniesienie do bloku zaczynającego się od linii etykieta:. Wyrażenie On Error Resume Next sprawia, że w wypadku błędu przechodzimy do wykonania kolejnej linii programu. Samodzielna instrukcja Resume powoduje, że program powraca do miejsca, w którym wystąpił błąd, np. w sytuacji, gdy program próbuje coś odczytać z dysku A, a w stacji dysków brakuje dyskietki może ukazać się stosowny komunikat. Po włożeniu dyskietki naturalny jest powrót do linii, w której wystąpił błąd. Wyłączenie obsługi błędu następuje po On Error Go To 0. Programowanie w Visual Basic
157
Programowanie w Visual Basic
Obsługa błędów Resume linia skacze do linii o numerze linia (lub etykiety) w obrębie tej samej procedury. Linia nie może być zerem. Kod błędu zwraca funkcja Err, zaś komunikat wyjaśniający, co się stało, zwraca funkcja Error(Err). Programowanie w Visual Basic
158
Programowanie w Visual Basic część 4
Obiekty Właściwości Metody Programowanie w Visual Basic
159
Programowanie w Visual Basic
Hierarchia obiektów Na szczycie hierarchii obiektów znajduje się obiekt Application reprezentujący program Excel. Obiekt Application zawiera 47 innych obiektów np. Workbooks Window Obiekt Workbooks zawiera wszystkie otwarte obiekty Workbook, a te z kolei zawierają następne np.: Worksheets Charts Names Programowanie w Visual Basic
160
Programowanie w Visual Basic
Odwołania do obiektów Pełne odwołanie do obiektu następuje poprzez podanie nazw kolejnych obiektów podrzędnych w hierarchii, oddzielonych kropkami np.: Application.Workbooks(„Zeszyt1”).Worksheets(„Arkusz1”) Obiekt Application można pominąć (jego obecność jest zakładana domyślnie. Obiekt Workbooks można pominąć jeśli skoroszyt Zeszyt1 jest aktualnie aktywny. Ostateczne odwołanie do Arkusza1 w skoroszycie aktywnym Zeszyt1 może wyglądać tak: Worksheets(„Arkusz1”) Programowanie w Visual Basic
161
Właściwości obiektu Range
Każdy obiekt posiada właściwości określające jego stan: Obiekt Range posiada właściwość Value (wartość) Application.Workbooks(1).Worksheets(1).Range(„A1”).Value Range(„A1”).Value = 14 właściwość Font (czcionka) Range(„A1”).Font.Bold właściwość Interior (wnętrze) Range(„A1”).Interior.ColorIndex = 15 właściwość Borders (obramowanie) Range(„A1”).Borders.ColorIndex = 2 Wartości można odczytywać lub zapisywać (zmieniać): Zmienna = Worksheets(1).Range(„A1”).Value – odczyt Worksheets(1).Range(„A1”).Value = Zmienna – zapis Programowanie w Visual Basic
162
Właściwości obiektu Application
Właściwości obiekt Application ułatwiają pracę z komórkami i zakresami: ActiveCell – aktywna komórka ActiveCell.Value = 14 ActiveSheet – aktywny arkusz ActiveSheet.Name = „Mój arkusz” ActiveWindow – aktywne okno ActiveWorkbook – aktywny skoroszyt ActiveWorkbook.Name = „Dane personalne” Selection – zaznaczony obiekt Selection.Value = 12 ThisWorkbook – skoroszyt zawierający wykonywaną procedurę Uwaga, w tym wypadku próba przypisania wygeneruje błąd, gdy zaznaczony będzie obiekt inny niż zakres (np. wykres) Programowanie w Visual Basic
163
Właściwości obiektu Worksheet
Właściwość Range: Wstawianie wartości do komórki A1 w arkuszu „Arkusz1” : Worksheets(„Arkusz1”).Range(„A1”).Value = 14 Wstawianie wartości do komórki o nazwie „Blok” : Range(„Blok”).Value = 2 Wstawianie wartości do komórek od A1 do B100 : Range(„A1:B100”).Value = 123 Range(„A1”, „B100”).Value = 123 Wstawianie wartości do komórek od A1, A10, A15 : Range(„A1, A10, A15”).Value = 123 Programowanie w Visual Basic
164
Właściwości obiektu Worksheet
Właściwość Cells: Cells(x, y) x to numer wiersza (1 – 65536) y to numer kolumny (1 – 256) Wstawianie wartości do komórki A3 w arkuszu „Arkusz1” : Worksheets(„Arkusz1”).Cells(3, 1).Value = 14 Worksheets(„Arkusz1”).Cells(513).Value = 14 Wykasowanie zawartości wszystkich komórek: Worksheets(„Arkusz1”).Cells.ClearContents Programowanie w Visual Basic
165
Właściwości obiektu Worksheet
Właściwość Offset: Offset(x, y) x to przesunięcie o x wierszy y to przesunięcie o y kolumn Wstawianie wartości do komórki bezpośrednio pod komórką A3 w arkuszu „Arkusz1” : Worksheets(„Arkusz1”).Cells(3, 1).Offset(1,0).Value = 14 Wstawianie wartości do komórki bezpośrednio nad komórką A3 w arkuszu „Arkusz1” : Worksheets(„Arkusz1”).Cells(3, 1).Offset(-1,0).Value = 14 Programowanie w Visual Basic
166
Programowanie w Visual Basic
Metody obiektu Obiekty posiadają także metody czyli działania, które można wykonać z udziałem obiektu np: Metoda Clear usuwa zawartość wybranej komórki: Worksheets(1).Range(”A1”).Clear Range(”A1”).Copy Range(„B1”) Jeżeli metoda ma argumenty należy je podać po jej nazwie oddzielając kolejne przecinkami: Metoda Protect obiektu Workbook używa trzech argumentów – hasło, struktura i okno (odpowiadają opcjom w oknie dialogowym Chroń skoroszyt) Workbooks(„Dane poufne”). Protect „hasło”, True, True Workbooks(„Dane poufne”). Protect , True, True Workbooks(„Dane poufne”). Protect Structure:=True, Windows:=True - Nazwanie metod w celu ich rozróżnienia Programowanie w Visual Basic
167
Formularze – zasady ogólne
Niestandardowe okna dialogowe dostępne w Excelu. Skoroszyt może zawierać dowolną liczbę formularzy użytkownika. Programowanie w Visual Basic
168
Programowanie w Visual Basic
Formularze Programowanie w Visual Basic
169
Programowanie w Visual Basic
Formularze Programowanie w Visual Basic
170
Programowanie w Visual Basic
Dodawanie formantów Wszystkie dostępne formanty znajdują się w oknie Toolbox. VBA nadaje formantom nazwę domyślną składającą się z typu formantu i liczby będącej numerem kolejnym formantu danego typu w oknie. Np. CommandButton1 CommandButton2 Do zmiany nazwy formantu służy właściwość Name. Programowanie w Visual Basic
171
Programowanie w Visual Basic
Przegląd formantów Label – etykieta Służy do wyświetlania tekstu statycznego w formularzu, opisu pól tekstowych itp. Najczęściej używane właściwości formantu, to Name i Caption. TextBox - Pole tekstowe Służy do wprowadzania tekstu przez użytkownika. Najczęściej używane właściwości formantu, to Name i Text. Programowanie w Visual Basic
172
Programowanie w Visual Basic
Przegląd formantów ComboBox – pole kombi Ma postać listy rozwijanej i w polu wyświetla zawsze tylko jedną pozycję. Użytkownik może wprowadzać do tego pola wartość nie występującą na liście. Najważniejsze właściwości formantu to: RawSource – podanie zakresu komórek będących źródłem listy ListRows – podanie liczby pozycji na liście. Programowanie w Visual Basic
173
Programowanie w Visual Basic
Przegląd formantów ListBox – pole listy Stanowi listę elementów, z których użytkownik może wybrać jeden lub nawet kilka. Formanty tego typu są bardzo elastyczne. Elementy pola listy mogą być zapisane w zakresie arkusza, składającego się nawet z wielu kolumn (adres zakresu przypisany jest do właściwości RawSource), jak i zdefiniowane za pomocą kodu VBA przy użyciu metody AddItem. Można też przypisać właściwości List tablicę wartości ListBox.List() = array („…”) Programowanie w Visual Basic
174
Programowanie w Visual Basic
Przegląd formantów CheckBox - Pole wyboru Formant używany do zaznaczenia danej opcji. Gdy pole wyboru jest zaznaczone, ma wartość True (prawda). W przeciwnym przypadku ma wartość False (fałsz). OptionButton – Przycisk opcji Jest użyteczny, gdy użytkownik ma wybrać jedną z kilku opcji, elementów. Zawsze znajduje się w grupie tego typu przycisków. Jeśli okno dialogowe zawiera wiele grup przycisków, każda z nich musi mieś inną wartość właściwości GroupName. Można też umieszczać przyciski opcji w formancie Pole grupy, który automatycznie tworzy z nich oddzielny zestaw. Gdy przycisk opcji jest zaznaczony, ma wartość True (prawda). Programowanie w Visual Basic
175
Programowanie w Visual Basic
Przegląd formantów Frame - Pole grupy Służy do grupowania innych formantów. Grupowanie może mieć na celu poprawę czytelności formularza lub konieczność logicznego związania kilku formantów, np. przyciski opcji umieszczone w jednym polu grupy wzajemnie się wykluczają. Image – Obraz Używany do wyświetlania grafiki pobranej z pliku lub ze schowka. Obrazy połączone z tym oknem przechowywane są w skoroszycie. Programowanie w Visual Basic
176
Programowanie w Visual Basic
Przegląd formantów MultiPage – Wiele stron Pozwala tworzyć okna dialogowe zawierające karty. Standardowo dostępne są dwie karty, ale można zwiększyć ich liczbę klikając nazwę karty prawym przyciskiem myszy i wybierając z menu podręcznego polecenie New Page. ScrollBar – Pasek przewijania Pozwala zmieniać wartość formantu skokowo. SpinButton – Pokrętło Służy do zmiany wartości. Formant używany jest wraz z formantem Pole tekstowe i Etykieta, które pokazują jego aktualną wartość. Programowanie w Visual Basic
177
Programowanie w Visual Basic
Formant RefEdit Formant umożliwia wybieranie zakresu komórek. Po kliknięciu małego przycisku na prawym końcu tego formantu z ekranu znika dotychczasowe okno dialogowe, a zamiast niego pojawia się mały selektor zakresu. Formant zwraca łańcuch reprezentujący adres zakresu. Można zamienić ten łańcuch w obiekt Range za pomocą instrukcji typu: Set ZakresUżytk = Range(RefEdit.Text) Programowanie w Visual Basic
178
Programowanie w Visual Basic
Formant RefEdit Dobrą zasadą jest inicjalizowanie formantu RefEdit, tak aby wyświetlał aktualnie zaznaczony zakres. Można to zrobić w procedurze: UserForm_Inicjalize RefEdit.Text = _ActiveWindow.RangeSelection.Address Sposoby wskazania adresu w formancie RefEdit: Zaznaczenie w arkuszu Wpisanie ręczne do formantu Modyfikacja istniejącego tekstu w formancie. Wskazany zakres może znajdować się w dowolnym arkuszu Programowanie w Visual Basic
179
Programowanie w Visual Basic
Przegląd formantów CommandButton – przycisk polecenia Po naciśnięciu przycisku wykonywane są określone przez użytkownika instrukcje, np.. zaakceptowanie zmian wprowadzonych w formularzu. Programowanie w Visual Basic
180
Programowanie formantów
Programowanie w Visual Basic
181
Programowanie w Visual Basic
182
Programowanie w Visual Basic
183
Metoda GetOpenFilename
Metoda obiektu Application. Gwarantuje uzyskanie poprawnej nazwy pliku i ścieżki dostępu. Wyświetla standardowe okno dialogowe Otwórz. Nie otwiera pliku, tylko zwraca łańcuch zawierający ścieżkę i nazwę pliku zgodnie ze wskazaniem użytkownika. Programowanie w Visual Basic
184
Metoda GetOpenFilename
Składnia metody (wszystkie argumenty są opcjonalne): obiekt.GetOpenFilename (FileFilter, FilterIndex, Title, ButtonText, Multiselect) FileFilter – decyduje o pozycjach dostępnych w oknie dialogowym w polu listy Pliki typu. Argument ma postać par składających się z łańcucha opisującego filtr oraz definiujących go symboli wieloznacznych. Poszczególne pary muszą być oddzielone przecinkami. Wartość domyślna tego argumentu to: „Wszystkie pliki (*.*),*.*” Programowanie w Visual Basic
185
Metoda GetOpenFilename
Inne wartości np.: „Pliki tekstowe (*.txt),*.txt,” „Pliki ASCII (*.asc),*.asc,” FilterIndex – wskazuje domyślny filtr plików. Title – zawiera tekst wyświetlany na pasku tytułu okna dialogowego. ButtonText – nie jest używany w Excelu. MultiSelect – wielokrotne zaznaczenie – ma wartość True; użytkownik może zaznaczyć w oknie dialogowym wiele plików jednocześnie, ich nazwy zostaną wówczas zwrócone w tablicy. Programowanie w Visual Basic
186
Programowanie w Visual Basic
Metoda Dialogs Wyświetlenie wbudowanego okna dialogowego Excela do samodzielnego dokonania wyboru zakresu komórek. Metoda Dialogs należy do obiektu Application. Wynik = Application.Dialogs(xlDialogFormulaGoTo).Show xlDialogFormulaGoTo jest predefiniowaną stałą. Zmienna wynik nie zawiera zakresu komórek wybranego przez użytkownika. Po kliknięciu przycisku OK. wartością tej zmiennej jest True, a po kliknięciu Anuluj – False. Programowanie w Visual Basic
187
Programowanie w Visual Basic
Wyświetlanie winiety Kod w module obiektu ThisWorkbook: Private Sub Workbook_Open() UserForm1.Show End Sub Kod w module formularza UserForm1: Private Sub UserForm1_Activate() Application.OnTime Now + TimeValue(„00:00:05”), _ „UsuńFormularz” Kod w ogólnym module VBA: Private Sub UsuńFormularz() Unload UserForm1 Programowanie w Visual Basic
188
Programowanie w Visual Basic
Errory Expected: <various> An expected part of the syntax was not found. The error is usually located to the left of the selected item, but isn't always obvious. For example, you can invoke a Sub procedure with or without the Call keyword. However, if you use the Call keyword, you must enclose the argument list in parentheses. This error has the following causes and solutions: Expected: End of Statement. Improper use of parentheses in a procedure invocation: X = Workbook.Add F:= 5 ' Error due to no parentheses. Call MySub 5 ' Error due to no parentheses. Use parentheses in a function call that specifies arguments or with a Sub procedure invocation that uses the Call keyword. Expected: ). Incorrect syntax for a procedure call. For example, a function call can't stand by itself, and Sub procedure calls sometimes require the Call keyword, depending on how you specify their arguments. Workbook.Add (X:=5, Y:=7) ' Function call without expression. YourSub(5, 7) ' Sub invocation without Call. Always use function calls in expressions. If you have multiple arguments enclosed in parentheses in a Sub procedure call, you must use the Call keyword. Expected: Expression. For example, when pasting code from the Object Browser, you may have forgotten to specify a value for a named argument. Workbook.Add (X:= ) ' Error because no value assigned to ' named argument. Either add a value for the argument, or delete the argument if it's optional. Expected: Variable. For example, you may have used restricted keywords for variable names. In the following example, the Input # statement expects a variable as the second argument. Since Type is a restricted keyword, it can't be used as a variable name. Input # 1, Type ' Type keyword invalidly used as ' variable name. Rename the variable so it doesn't conflict with restricted keywords. For additional information, select the item in question and press F1 (in Windows) or HELP (on the Macintosh). Programowanie w Visual Basic
189
Programowanie w Visual Basic
Opis błedó Programowanie w Visual Basic
190
Programowanie w Visual Basic
Dziękuję za uwagę Test – , godzina 9.15 Programowanie w Visual Basic
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.