Visual Basic for Application (VBA)

Slides:



Advertisements
Podobne prezentacje
Tablice 1. Deklaracja tablicy
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
Język C/C++ Funkcje.
Programowanie obiektowe
Wzorce.
Programowanie w języku Visual Basic
Podstawy programowania w VBA
typy całkowite (całkowitoliczbowe)
PROGRAMOWANIE STRUKTURALNE
Jan Aleksander Wierzbicki
Wspólne skoroszytów Wspólne użytkowanie skoroszytów Arkusze i skoroszyty Tworzenie nowego skoroszytu Obliczenia w skoroszytach Przeglądanie wzorów w skoroszytach.
20/09/ Języki programowania 1 Piotr Górczyński Kreator form.
Struktury.
Tablice.
C++ wykład 2 ( ) Klasy i obiekty.
Zasady zaliczenia Warunki uzyskania zaliczenia:
INFORMATYKA Wykładowca: mgr Tadeusz Ziębakowski
Pakiety i ATD 1 Definicja. Pakietem albo jednostką programową nazywamy grupę logicznie powiązanych elementów, które mogą być typami, podtypami, obiektami.
Komunikacja z arkuszem. Iteracje. Funkcje.
Programowanie obiektowe. Obiekty. Metody. Właściwości.
Wykład 2 struktura programu elementy języka typy zmienne
Wstęp do programowania obiektowego
Modele baz danych - spojrzenie na poziom fizyczny
Podstawy programowania
Programowanie strukturalne i obiektowe
Pliki tekstowe. Operacje na plikach. mgr inż. Agata Pacek.
A ctive S erver P ages Technologia dostępu do danych.
Poznaj bliżej program Microsoft Office Word 2007
Źródła: podręcznikopracował: A. Jędryczkowski.
ANNA BANIEWSKA SYLWIA FILUŚ
Jakub Wołczko W obiektowym świecie… Jakub Wołczko
Prezentacja i szkolenie
INTERNETOWE USŁUGI INFORMACYJNE
Programowanie obiektowe – zastosowanie języka Java SE
Wybrane zagadnienia relacyjnych baz danych
Programowanie obiektowe 2013/2014
MICROSOFT Access TWORZENIE MAKR
Visual Basic for Applications Poziom podstawowy Zajęcia 2
Zajęcia I Organizacja zajęć Rejestracja i uruchamianie makr
PL/SQL – dalsza wędrówka
Projektowanie stron WWW
VBA w MS Word Źródła: Steven Roman, Word.Makrodefinicje, Helion 2000
Programowanie strukturalne i obiektowe C++
System plików.
Visual Basic w Excelu - podstawy
Wykładowca: mgr Tadeusz Ziębakowski p. 126 I piętro (naprzeciw dziekanatu)
Technologie internetowe Wykład 5 Wprowadzenie do skrytpów serwerowych.
Formatowanie dokumentów
Wykład 4 Dr Aneta Polewko-Klim Dr Aneta Polewko-Klim
Projektowanie postaci formularza:
Podsumowanie wiedzy MPDI2 sem.3 INFORMATYKA. tworzenie nowego pliku i katalogu, nawigacja po katalogach, listowanie zawartości katalogu, zmiana nazw,
Wykład 2 Programowanie obiektowe. Programowanie obiektowe wymaga dobrego zrozumienia działania funkcji definiowanych przez użytkownika, w ten sposób będziemy.
Pętle – instrukcje powtórzeń
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
Visual Basic Patryk Rosiak. Visual Basic for Applications Jest uproszczoną wersją języka Visual Basic służącym do obsługi dokumentów w pakiecie Microsoft.
Visual Basic przygotował Michał Miłek Visual Basic – język programowania wysokiego poziomu i narzędzie programistyczne firmy Microsoft. Składnia jest oparta.
Dominik Benduski Michał Mandecki Podstawy Visual Basic w Excelu.
Do czego służy arkusz kalkulacyjny, jego budowa
 Formuła to wyrażenie algebraiczne (wzór) określające jakie operacje ma wykonać program na danych. Może ona zawierać liczby, łańcuchy znaków, funkcje,
Temat: Tworzenie bazy danych
Zmienne typy danych w VBA. MS Excel – typy danych w języku programowania VBA.
VBA w Excel.
Programowanie Obiektowe – Wykład 2
Visual Basic for Applications
Visual Basic w programie Microsoft Excel
Programowanie obiektowe – zastosowanie języka Java SE
Modele baz danych - spojrzenie na poziom fizyczny
Excel Informacje różne.
Zapis prezentacji:

Visual Basic for Application (VBA) Zbigniew Kulesza

Środowisko programistyczne MS Office I Środowisko programistyczne Microsoft Office opiera się na języku programowania BASIC. (obecnie Visual Basic). Rodzina języków obejmuje kilka dialektów: Visual Basic (Visual Studio, pełna wersja) Visual Basic for Application (VBA) Visual Basic Scripting Edition (VBS). Wszystkie składają się z tego samego podstawowego słownictwa, jednak różni je zakres funkcji i środowisko pracy.

BASIC BASIC - Beginner’s All-purpose Symbolic Instruction Code zaprojektowany w 1964 roku przez J.G. Kemeny’ego i T.F. Kurtza z Uniwersytetu w Darthmouth (USA). najpopularniejsze wersje to aktualnie: Visual Basic oraz Visual Basic dla Aplikacji (VBA) BASIC powstał głównie dla prostego zapisu programów obliczeń arytmetycznych.

Środowisko programistyczne MS Office II Środowisko programistyczne MS Office zawiera Visual Basic for Application (VBA). WERSJE OFFICE WERSJE VBA 95 Word Basic, Excel VBA, Access Basic 97 5 2000 6 XP 6.3 Microsoft udostępnił licencję VBA, dlatego inni producenci mogą włączać VBA do swoich produktów.

Języki skryptowe Windows języki skryptowe w środowisku Windows: VBScript (VisualBasicScript), JScript (odmiana JavaScript). wtyczki skryptowe (plug-ins) np. PerlScript. środowisko skryptowe Microsoft Windows Windows Scripting Host (WSH). Plik programu nazywa się wscript.exe (uruchamia skrypt jako program Windows) lub cscript.exe (wykonuje skrypty w oknie wiersza poleceń). Oba pliki są standardowo dostępne w systemie, domyślnie uruchamiany jest wscript.exe.

Skrypty Windows Windows rozpoznaje rodzaj skryptu (języka użytego do jego napisania) na podstawie rozszerzenia pliku tekstowego zawierającego skrypt, np. VBS będzie wykonany przez wscript.exe przy użyciu mechanizmów VBScript. Języki VBScript oraz JScript zostały pierwotnie zaprojektowane do wspomagania tworzenia dynamicznych stron WWW, dlatego spora część skryptów napisanych w tych językach może być wykonywana przez przeglądarkę internetową MS Internet Explorer (IE).

Windows Scripting Host (WSH) Ze względów bezpieczeństwa WSH może działać tylko lokalnie, a nie można uruchamiać skryptów na maszynie zdalnej (chyba, że wykorzystuje się inne narzędzia pracy zdalnej np.: remote.exe). Środowiskiem pozwalającym na zdalne uruchamianie skryptów po stronie serwera jest ASP (Active Server Pages). ASP jest częścią serwera stron internetowych IIS (Internet Information Services). Dzięki ASP programiści serwisów internetowych mogą umieszczać skrypty w kodzie HTML. Dzięki ASP można wykonywać swoje skrypty zdalnie na komputerze posiadającym zainstalowany serwer IIS. Klientem takiego rozwiązania jest dowolna przeglądarka internetowa.

Pakiet Windows Scripting instalacja (np. dla wersji 5.6) pakiet WSH zawiera: język Visual Basic Script Edition (VBScript) (w wersji 5.6), język JScript (w wersji 5.6), składniki skryptów Windows, hosta skryptów Windows ( wersja 5.6) bibliotekę wykonawczą skryptów Windows (w wersji 5.6)

VBCCE Visual Basic Control Creation Edition Skrypty uruchamiane w środowisku WSH można tworzyć przy pomocy zwykłego edytora tekstu Bezpłatne środowisko programowania skryptowego: Visual Basic Control Creation Edition (VBCCE).

VBS Visual Basic Script (Scripting Edition) interpretowany język wzorowany na Visual Basic, opracowany przez MS ale nie visually oriented VBScript jest stosowany m.in. do programowania 'po stronie serwera' (server side). Wspierany bez ograniczeń przez przeglądarkę Internet Explorer i traktowany jako alternatywa dla opracowanego przez Netscape  języka JavaScript. JavaScript aktualnie wspierana przez nowe wersje zarówno przeglądarek Netscape, Mozilla jak IE.

VBS W języku VBScript występuje tylko jeden typ danycho nazwie variant. Rodzaj przechowywanych danych (np. liczbowych lub znakowych) zależy w tej sytuacji od kontekstu użycia. Nie jest zatem konieczne deklarowanie zmiennych, choć jest to zalecane.

VBS kod VBS jest osadzany w dokumencie html pomiędzy znacznikami <SCRIPT> i </SCRIPT> (podobnie jak w przypadku JavaScript) z atrybutem LANGUAGE i wartością "VBScript (domyślny dla atrybutu LANGUAGE jest dla większości przeglądarek "JavaScript"). Kod zawarty pomiędzy znacznikami jest interpretowany jednokrotnie, podczas uruchomienia strony. Użycie znaczników komentarzy: <!--    oraz --> zapobiega próbom interpretowania wyróżnionego fragmentu przez  starsze przeglądarki.

Podstawowe założenia VBA VBA jest językiem interpretowanym, który można wykonywać tylko w aplikacjach Office. VBA opiera się o COM (Component Object Model), kontynuację technologii OLE (Object Linuking and Embedding).

VBA a Office Office umie nie tylko korzystać z obiektów COM, lecz sam także oferuje obiekty COM. Office 97 dostarcza ponad 550 własnych obiektów COM, Office 2000 ponad 600. Poprzez COM, w pakiecie Office można używać także zewnętrzne funkcjonalności. Za pomocą VBA możliwe jest korzystanie z zewnętrznych programów (np. systemu operacyjnego) w formie DLLs (Dynamic Link Libraries) W Visual Basic Script (VBS) takie połączenie nie jest możliwe.

Elementy VBA Poszczególne elementy VBA dzielą się na: moduły (moduls), w nich znajduje się ,,normalny`` kod programu moduły klas (class moduls) – w nich można tworzyć własne obiekty, jak też ich właściwości i metody. Elementy te umożliwiają rozszerzanie funkcjonalności dostarczanych przez MS Office, automatyzację kolejności wywołań funkcji oraz implementowanie dodatkowych funkcjonalności. formularze (forms).

Makra i skrypty VBA makra albo skrypty to rozszerzenia, uzupełnienia i kod automatyzujący. Aby zintegrować makra z MS Office można modyfikować paski menu i przyciski na paskach zadań, dzięki czemu użytkownik jest w stanie łatwiej je uruchamiać. specjalne nazwy procedur (np. AutoOpen. AutoNew) oznaczają kod programu, który jest wykonywany automatycznie podczas otwierania plików Office (uwaga na „makrowirusy”!)

Formy integracji makr i skryptów VBA Makra i skrypty mogą być wywoływane w Office bądź integrowane z nim w następujących formach: Add - In COM Add - Ins aplikacyjne Add - Ins. wewnątrz szablonów (Templates) asystenci (Wizards).

Add-Ins COM Add - Ins to skompilowanye plikami DLL albo EXE, które można tworzyć za pomocą Visual Basic (pełna wersja). Add - Ins można stosować poza granicami aplikacji. Aplikacyjne Add - Ins tworzy się za pomocą zintegrowanego środowiska programistycznego Office i można ich używać tylko wewnątrz Office. Z Add - Ins należy korzystać z reguły tam, gdzie kod programu ma być stale dostępny w aplikacji, tak aby użytkownik nie musiał uruchamiać szablonów.

Środowisko programowania Za pomocą VBA w wersji 5 z aplikacjami Office zintegrowane zostało jednolite środowisko programowania - IDE (Integrated Development Enviroment) IDE jest uruchamiane w oddzielnym oknie, ale działa w tym samym obszarze pamięci co aplikacja Office. Oprócz edytora IDE, do tworzenia prostego kodu programu można także, wewnątrz aplikacji, używać Makro - Rekordera.

IDE - elementy edytor ze sprawdzaniem i kolorowaniem składni Project Explorer dodatkowe okno właściwości narzędzia debuggera Object Browser warunkową kompilację mechanizmy chroniące przed zmienianiem albo kopiowaniem napisanego kodu IntelliSense (uzupełnianie, wybór metodą Drop - Down, informacja o składni)

Zdalne sterowanie Ponieważ sam Office składa się z wielu obiektów COM, możliwe jest zdalne sterowanie Office, czyli wprowadzenie automatyzacji COM. Do zdalnego sterowania można wykorzystywać, np. Windows Scripting Host (WSH) albo PerlScript

Środowisko programowania OOoO OOo O posiada, tak samo jak MS Office, własne http:api.openoffice.org/ - zatem mogą wykonywać takie same zadania. Specyfikacja interfejsu jest na stronie http:udk.openoffice.org/ Zarówno Java, jak i C++ umożliwiają ponadto rozwijanie składników, które jako Plug - In mogą spełniać najróżniejsze zadania wewnątrz OOo O. nowe typy Chart nowe funkcje Calc Wizards dodatkowe funkcje dla użytkownika rozszerzenia StarBasic

StarBasic StarBasic jest zintegrowanym z OOo O, modularnym językiem programowania i działa według takich samych zasad, jak VBA. Struktura i składnie obydwu języków są w bardzo podobne (programista VBA nie ma większych trudności przy przenoszeniu makr VBA). Oprócz API, OOo O udostępnia (jak MS Office), własne środowisko programowania (Integrated Development Environment (IDE)), którego interfejs użytkownika jest bardzo zbliżony do środowiska programisty w MS Office wskazówki odnośnie postępowania w środowisku programistycznym i środowisku programowania znaleźć można w ,,StarOffice 6.0 Migration Guide``, strony 79 - 90.

Kompatybilność OOoO z MS Office Nie istnieje 100% - owa kompatybilność z MS Office. Wymianę dokumentów pomiędzy użytkownikami OOo O a użytkownikami MS Office: Należy uwzględnić cel, w jakim są wymieniane dokumenty. Należy również uwzględnić stopień skomplikowania dokumentów, które mają być wymieniane.

VBA w innych aplikacjach Visual Basic for Applications jest dołączany do wielu aplikacji i zachowuje identyczny interface języka (wyjątek Access), identyczna jest składnia, słowa kluczowe i instrukcje. W chwili obecnej wspierają go: Cały pakiet MS Office (tzn. Word, Excel, Access, PowerPoint, Outlook, Project, Binder), AutoCAD (od wersji 14.01), CorelDraw oraz Corel PhotoPaint, Intellicad Visio

VBA w aplikacjach Różnica między VBA w różnych aplikacjach polega tylko na różnych obiektach i ich metodach oraz właściwościach związanych z aplikacją macierzystą. zasadniczą zaletą Visual Basic dla aplikacji jest możliwość tworzenia w banalny wręcz sposób własnego interfejsu użytkownika (tzn. formularze wraz z polami tekstowymi, przyciskami, listami, polami wyboru itp.) oczywiście elementy tego interfejsu także są obiektami i są pogrupowane w kolekcje.

VBX OCX Active-X Technologii VBX wciąż się używa, jednak jej następcami są technologie OCX (kontrolki 32-bitowe) oraz Active-X. Wykorzystywane do realizacji zdefiniowanych przez autora programu sposobów komunikowania się użytkownika z programem i programu z użytkownikiem.

VBX VBX Visual Basic Extension Moduł rozszerzający możliwości oprogramowania napisanego w języku Visual Basic w postaci pliku (z rozszerzeniem .vbx), z którego korzystać może, odwołując do niego wiele różnych aplikacji. Choć technologii VBX wciąż się używa, jej następcami są technologie OCX oraz Active-X. Ang. Visual Basic Custom Control - specjalna kontrolka języka Visual Basic.

OCX OCX OLE Control Extension Niezależny moduł programowy, z którego może korzystać wiele aplikacji Windows. Dzięki OCX programista może np. dołączyć do swojej aplikacji gotowy element interfejsu Windows, taki jak np. rozwijane menu. Kontrolki OCX reprezentują drugą generację kontrolek (por. VBX). Obydwa rodzaje są zastępowane obecnie przez Active-X.

Active-X Active-X Active Exchange - aktywna wymiana Opracowana przez Microsoft technologia pisania programów przeznaczona głównie do tworzenia interaktywnej zawartości stron WWW. Używając różnych języków programowania, tworzy się kontrolki Active-X (niewielkie programy), które mogą być uruchamiane na platformie Windows i Macintosh (planowana jest także obsługa dla UNIX-a).

Programowanie obiektowe (ang. object-oriented programming) Programowanie obiektowe to metodologia tworzenia programów komputerowych, która definiuje programy za pomocą "obiektów" - elementów łączących stan (czyli dane) i zachowanie (czyli procedury, tu: metody). Obiektowy program komputerowy wyrażony jest jako zbiór takich obiektów, komunikujących się pomiędzy sobą w celu wykonywania zadań. Podejście to różni się od tradycyjnego programowania proceduralnego, gdzie dane i procedury nie są ze sobą bezpośrednio związane. Programowanie obiektowe ma ułatwić pisanie, konserwację i wielokrotne użycie programów lub ich fragmentów.

Programowanie proceduralne Programowanie proceduralne to paradygmat programowania zalecający dzielenie kodu na procedury, czyli fragmenty wykonujące ściśle określone operacje. Procedury nie powinny korzystać ze zmiennych globalnych (w miarę możliwości), lecz pobierać i przekazywać wszystkie dane (czy też wskaźniki do nich) jako parametry wywołania. Instrukcje goto mogą być wprawdzie używane w procedurach, ale w żadnym wypadku celem wskoczenia w środek innej procedury.

Programowanie strukturalne I Programowanie strukturalne to paradygmat programowania zalecający hierarchiczne dzielenie kodu na moduły, które komunikują się jedynie poprzez dobrze określone interfejsy. Jest to rozszerzenie koncepcji programowania proceduralnego. Poddyscyplina lub podzbiór programowania proceduralnego zalecająca stosowanie konstrukcji języka takich jak pętle i instrukcje warunkowe, oraz unikanie instrukcji goto i wielokrotnych punktów wejścia i wyjścia z kodu danego podbloku programu.

Programowanie strukturalne II Programowanie strukturalne tworzy model składający się z zespołu procedur - czynności, które posługują się pewnymi typami danych - obiektami. Jest to model trudniejszy do zrozumienia niż w przypadku podejścia obiektowego - tu mamy pewną grupę obiektów (podobnie, jak w rzeczywistości), które wchodzą ze sobą w interakcje.

Podstawowe założenia paradygmatu obiektowego Cechy, metody języka programowania czyniące go "orientowanym obiektowo", najważniejsze są następujące cechy: Abstrakcja Enkapsulacja Polimorfizm Dziedziczenie

Abstrakcja Każdy obiekt w systemie służy jako model abstrakcyjnego "wykonawcy", który może wykonywać pracę, opisywać i zmieniać swój stan, oraz komunikować się z innymi obiektami w systemie, bez ujawniania, w jaki sposób zaimplementowano dane cechy. Procesy, funkcje lub metody mogą być również abstrahowane, a kiedy tak się dzieje, konieczne są rozmaite techniki rozszerzania abstrakcji.

Enkapsulacja Czyli ukrywanie implementacji, hermetyzacja. Zapewnia, że obiekt nie może zmieniać stanu wewnętrznego innych obiektów w nieoczekiwany sposób. Tylko wewnętrzne metody obiektu są uprawnione do zmiany jego stanu. Każdy typ obiektu prezentuje innym obiektom swój "interfejs", który określa dopuszczalne metody współpracy. Pewne języki osłabiają to założenie, dopuszczając pewien poziom bezpośredniego (kontrolowanego) dostępu do "wnętrzności" obiektu. Ograniczają w ten sposób poziom abstrakcji.

Polimorfizm Referencje i kolekcje obiektów mogą dotyczyć obiektów różnego typu, a wywołanie metody dla referencji spowoduje zachowanie odpowiednie dla pełnego typu obiektu wywoływanego. Jeśli dzieje się to w czasie działania programu, to nazywa się to późnym wiązaniem lub wiązaniem dynamicznym. Niektóre języki udostępniają bardziej statyczne (w trakcie kompilacji) rozwiązania polimorfizmu - na przykład szablony i przeciążanie operatorów w C++.

Dziedziczenie Porządkuje i wspomaga polimorfizm i enkapsulację dzięki umożliwieniu definiowania i tworzenia specjalizowanych obiektów na podstawie bardziej ogólnych. Dla obiektów specjalizowanych nie trzeba redefiniować całej funkcjonalności, lecz tylko tę, której nie ma obiekt ogólniejszy. W typowym przypadku powstają grupy obiektów zwane klasami, oraz grupy klas zwane drzewami. Odzwierciedlają one wspólne cechy obiektów.

Elementarna charakterystyka cech popularnych języków p.o. I O ile systemy programowania strukturalnego czy funkcyjnego są do siebie stosunkowo podobne, o tyle systemy obiektowe różnią się tak bardzo, że nie jest jednoznaczne co tak naprawdę znaczy nazwa obiektowe. Przykłady: Dziedziczenie wielokrotne: jest: C++, Python, Incr Tcl tylko interfejsy: Object Pascal, Java, C# tylko metody: Ruby Klasa jest obiektem: tak: Ruby, Python nie: C++, C#, Ocaml

Elementarna charakterystyka cech popularnych języków p.o. II Wszystkie obiekty wywodzą się z jednego korzenia i muszą mieć nadklasę: tak: Java, C#, Ruby, Object Pascal, Incr Tcl nie: C++, Ocaml, Python Obiekt można pytać do której podklasy należy: tak: Ruby, C#, C++ (z RTTI), Java (RTTI lub mechanizm refleksji), Python, Object Pascal, Incr Tcl nie: Ocaml

Elementarna charakterystyka cech popularnych języków p.o. III Mechanizm szablonów do automatycznego generowania klas (np. szablon Drzewo_Binarne<> z klasy X tworzy Drzewo_Binarne<X>): tak: Ruby, C++, Ocaml nie: Java Przeładowywanie (przeciążanie) operatorów: tak: Ruby, C++, Python nie: Java (choć przeciążonych jest kilka operatorów wbudowanych, np. + w klasie String), Ocaml, Object Pascal

Co to jest obiekt w VBA? Obiekt to dowolny element składowy aplikacji (np. linie, okręgi, bloki w rysunku AutoCADa, zakres komórek w Excelu), także sam otwarty i plik w aplikacji (np. ActiveWorkbook w Excelu, ThisDrawing w AutoCADzie), oraz inne elementy (np. Worksheet czyli Arkusz w Excelu, ModelSpace czy PaperSpace w AutoCADzie). Obiektem są takie elementy jak paski narzędzi, a także - co chyba najważniejsze dla elastyczności programowania w VBA - sama aplikacja macierzysta, a także inne aplikacje, wspierające VBA i zainstalowane w systemie.

Co to jest właściwość w VBA? Właściwość to prostu cecha obiektu. Może ona określać np. jego wielkość kolor, położenie na ekranie, jego stan, tzn. czy jest on dostępny czy widoczny dla użytkownika.

Co to jest metoda w VBA? Metoda to funkcja zmieniająca właściwości obiektu. Podsumowując: obiekty wraz ze swymi metodami i właściwościami to bardzo wygodne i efektywne w użyciu elementy, umożliwiające we względnie prosty sposób projektowanie aplikacji. Innymi słowy program to zbiór obiektów - elementów łączących stan (czyli dane) i zachowanie (czyli procedury, tu: metody).

Co to jest kolekcja w VBA? Obiekty są pogrupowane w tak zwane kolekcje czyli zbiory. Przykładem może być kolekcja Workbooks w Excelu, reprezentującą wszystkie otwarte skoroszyty, albo Blocks w AutoCADzie, reprezentującą definicje bloków. W ujęciu programistycznym kolekcje także są obiektami, maja swoje metody (np. Add (Remove) - dodawanie nowego (usuwanie istniejącego) elementu, Item(i) - zwracającą element tej kolekcji, posiadający numer i) oraz właściwości (np. Count - liczbę elementów w kolekcji).

Jakie rozróżniamy moduły w VBA? I Standardowo wszystkie aplikacje mają możliwość wstawania następujących rodzajów modułów: moduł kodu źródłowego - moduł, w którym można umieścić tylko kod. moduł formularza - czyli projekt formularza wraz z kodem obsługującym operacje który użytkownik może dokonać z formularzem i jego elementami składowymi. (np. wciśnięcie przycisku, zmiana zawartości pola tekstowego, zamkniecie formularza.) Procedury uruchamiane w wyniku takiej akcji użytkownika nazywamy procedurami zdarzeniowymi.

Jakie rozróżniamy moduły w VBA? II moduły klas - to takie moduły w których użytkownik może definiować własne obiekty z ich właściwościami, metodami i zdarzeniami. inne moduły - widoczne w zależności od aplikacji macierzystej. W przypadku Excela widoczny są ThisWorkbook, reprezentujący otwarty skoroszyt Excela i Arkusze (może ich być kilka) - reprezentujące arkusze w otwartym skoroszycie. W przypadku AutoCADa jest tylko jeden moduł - ThisDrawing, reprezentujący otwarty rysunek.

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA) Wyrażenia arytmetyczne, logiczne i łańcuchowe

Wyrażenia arytmetyczne, logiczne i łańcuchowe

Elementy instrukcji VBA Słowa kluczowe Nazwy zmiennych i stałych Wartości Operatory

Słowa kluczowe As, Binary, ByRef, ByVal, Date, Else, Empty, End, Error, False, For, Friend, Get, Input, Is, Len, Lock, Me, Mid, New, Next, Nothing, Null, On, Option, Optional, ParamArray, Print, Private, Property, Public, Resume, Seek, Set, Static, Step, String, Sub, Then, Time, To, True, With Events

Zmienne Dane liczbowe lub tekstowe Mogą pochodzić z różnych źródeł: edytor tekstowy, baza danych, arkusz kalkulacyjny Deklaracja zmiennej: Dim Nazwisko Ograniczenia: Nazwa zmiennej musi zaczynać się od litery Wewnątrz mogą być cyfry i znaki podkreślenia Nie może być spacji, kropki, przecinka, wykrzyknika, nawiasów, symboli - @ # \ € % < > itd. Długość ograniczona do 255 znaków Nie można używać słów kluczowych, nazw funkcji i instrukcji, nazw procedur (ale można deklarować zmienne lokalne o tych samych nazwach w różnych procedurach)

Miejsce deklaracji i zasięg zmiennej I Zmienne można tworzyć w sekcji deklaracji lub wewnątrz procedury Moduł kodu zawiera domyślnie sekcję Declarations (wspólną) dla wszystkich procedur (zmienne lokalne, prywatne z punktu widzenia tego modułu) Wskazana deklaracja ze słowem kluczowym Private Np. Private Nazwisko Gdy wewnątrz procedury to używamy instrukcji Dim (zmienna lokalna, prywatna dla procedury) Deklaracja ze słowem kluczowym Dim (a nie Private) np. Dim Nazwisko

Miejsce deklaracji i zasięg zmiennej II Zmienne dostępne we wszystkich modułach (tym samym procedurach) deklarujemy z pomocą słowy Public Np. Public Nazwisko Oprócz deklaracji jawnych możliwe są też deklaracje niejawne: Np.. rok_urodzenia = 2000 Jest to zdecydowanie niezalecana metoda deklaracji Narzędzie do sprawdzania zasad jawnego deklarowania zmiennych to instrukcja Option Explicit umieszczana w sekcji deklaracji modułu

Przykład deklaracji zmiennej I Sub Dodawanie() Dim A As Integer Dim B As Integer A = 5 B = 10 Wynik = A + B MsgBox („Wynik dodawania: ” & Wynik) End Sub

Przykład deklaracji zmiennej II Public Wynik As Integer Private B As Integer Sub Dodawanie() Dim A As Integer A = 5 B = 10 Wynik = A + B MsgBox ("Wynik dodawania: " & Wynik) End Sub

Typy danych, typy zmiennych I Zmiennym deklarowanym bez określania typu domyślnie nadawany jest typ Variant (16 bajtów jako liczba lub 22 bajty jako liczba znaków łaćcucha do 2 miliardów znaków) Podczas deklaracji należy deklarować typ słowem kluczowym As: Dim Nazwisko As String Public rok_urodzenia As Integer

Typy danych Byte 1 bajt – liczba całkowita Boolean 2 bajty – True, False Integer 2 bajty – liczba całkowita Long 4 bajty – liczba całkowita Single 4 bajty – liczba zmiennoprzecinkowa Double 8 bajtów – liczba zmiennoprzecinkowa Currency 8 bajtów – liczba dużej precyzji Decimal 14 bajtów – liczba dużej precyzji Date 8 bajtów – 1.1.100 do 31.12.9999 Object 4 bajty – odwołanie do obiektu String 10 bajtów + liczba znaków – tekst o zmiennej długości String liczba znaków – tekst o stałej długości Variant 16 bajtów – liczba (jak dla Double) Variant 22 bajty – tekst (jak String 10 bajtów + l.zn.)

Zalecane oznaczanie zmiennych W celu powiązania typu z nazwą (przydatne w trakcie pisania programu) stosuje się np. przedrostki w nazwie: Boolean bool boolWartosc Byte byte byteWartosc Currency cur curWartosc Date dat datWartosc Decimal dec decWartosc Double dbl dblWartosc Integer int intWartosc Object obj objPasekZadan Single sng sngWartosc String str strWartosc Variant var varWartosc

Zmienne statyczne Zmienne statyczne zachowują swoją wartość po wykonaniu procedury, w której występują (pozostałe zmienne prywatne i publiczne po wykonaniu procedur są kasowane) Inaczej – w przypadku ponownego wykonania procedury zmienna statyczna ma wartość początkową, którą uzyskała w wyniku poprzedniego wykonania procedury Deklaracja z wykorzystaniem słowa Static: Static nr_faktury As Integer

Warianty deklaracji zmiennych Deklaracja kilku zmiennych w jednej linii Dim Imie, Nazwisko, Rok_urodzenia Deklaracja z podaniem typu Dim Imie As String, Nazwisko As String Uproszczona deklaracja z podaniem typu Dim Imie, Nazwisko As String

Wartości domyślne zmiennych Wartości domyślne zmiennych nadawane po zadeklarowaniu, a przed przypisaniem im wartości: Typy liczbowe (wszystkie) 0 (zero) String (zmienna długość) pusty łańcuch String (stała długość) łańcuch o zadanej długości wypełniony znakami ASCII 0 Variant Empty (pusty) Object Nothing (nic)

Stałe Deklaracja stałych z wykorzystaniem słowa Const Const VAT As Single = 1,22 Zasięg - deklaracje stałych obowiązują te same zasady co zmiennych: Public Const VAT As Single = 1,22 Private Const VAT As Single = 1,22 Ograniczenia - w wyrażeniu przypisania nie mogą występować: zmienne, funkcje VBA, funkcje użytkownika (zatem można przypisywać tylko konkretną wartość lub łańcuch znaków, wyrażenie złożone z wartości lub innych stałych)

Operatory Arytmetyczne: + - * / \(dzielenie całkowite) ^ (potęgowanie) Porównania: = <> (nierówność) < > <= >= Logiczne: Not And Or Xor Eqv (równoważność) Imp (implikacja) Inne: Mod (modulo, reszta z dzielenia) Like (porównywanie łańcuchów znaków) Is (porównywanie odwałań do obiektów) & (konkatencja – łąaczenie łańcuchów znaków)

Wyrażenia Wyrażenia mogą zawierać: Kolejność wykonywania wyrażeń: Zmienne i/lub stałe Funkcje Operatory Kolejność wykonywania wyrażeń: Arytmetyczne (kolejność wg zasad ogólnych) Konkatenacja Porównania Logiczne

Przypisania Przypisanie wartości liczbowej Przypisanie łańcucha znaków Pole = Szerokosc * Wysokosc Przypisanie łańcucha znaków Imie = „Bogdan” Operacja konkatenacji Dane = „Bogdan ” & „Kowalski” Dwa operatory konkatenacji dla łańcuchów zapisanych w zmiennych Dane = Imie & „ ” & Nazwisko Wartości typu Date muszą być obustronnie zamknięte znakami # Data = #9 marca 2004#

Przykładowe funkcje wbudowane Funkcje wbudowane: InputBox() MsgBox() Sub Osoba() Dim TwojeNazwisko As String TwojeNazwisko = InputBox("Podaj swoje nazwisko") MsgBox ("Twoje nazwisko brzmi: " & TwojeNazwisko) End Sub Pomoc co do funkcji wbudowanych można uzyskiwać kontekstowo lub w obszernej „Pomocy” (Helpie)

Funkcje daty i czasu Zmiana daty systemowej – funkcja Date Date = data Zmiana czasu systemowego – funkcja Time Time = czas Przykład: Sub UstawienieDaty() Dim ZmianaDaty, ZmianaCzasu ZmianaDaty = #3/8/2004# ZmianaCzasu = #12:00:00 PM# Date = ZmianaDaty Time = ZmianaCzasu End Sub

Odczytywanie daty i czasu systemowego Date – zwraca datę systemową Day() – zwraca numer dnia w miesiącu Month() – zwraca numer miesiąca w roku MontName() – zwraca nazwę miesiąca Now – zwraca bieżącą datę i czas systemowy Time – zwraca aktualny czas systemowy Weekday() – zwraca numer dnia w tygodniu WeekdayName() – zwraca nazwę dnia w miesiącu Year() – zwraca rok

Posługiwanie się funkcjami daty i czasu systemowego I Wyznaczanie dnia tygodnia Dim Dzisiaj, NumerDnia Dzisiaj = Date NumerDnia = Weekday(Dzisiaj) Składnia dla funkcji Weekday(): Weekday(Data, PierwszyDzienTygodnia) - Przykład: Weekday(Dzisiaj, 2), gdzie 2 – poniedziałek Składnia dla funkcji WeekdayName(): WeekdayName(NumerDnia, Skrót, PierwszyDzienTygodnia) gdzie Skrót to pełna nazwa dnia tygodnia Fale lub jej skrót True - Przykład: NumerDnia = Weekday(Dzisiaj, 2) NazwaDnia = WeekdayName(NumerDnia, , 2)

Posługiwanie się funkcjami daty i czasu systemowego II Wartości logicznej False odpowiada 0 (zero), natomiast True – każda inna wartość liczbowa Stad wynika inny sposób zapisu: NazwaDnia = WeekdayName(NumerDnia, 1, 2) Przykład wykorzystania funkcji Now Sub Data_Czas() Dim Teraz Teraz = Now() MsgBox(„Teraz jest: ” & Teraz) End Sub

Operacje plikowe Zmiana nazwy pliku lub folderu z wykorzystaniem instrukcji Name Name StaraNazwa As NowaNazwa Dla bieżącego folderu: Dim StaraNazwa, NowaNazwa StaraNazwa = „test.txt” NowaNazwa = „nowy.txt” Dla innego folderu: StaraNazwa = „c:\info\test.txt” NowaNazwa = „d:\zadania\nowy.txt”

Zmiana bieżącego folderu Zmiana bieżącego folderu – polecenie ChDir Sciezka w równoważnych wersjach: ChDir „Dane\Arkusze” lub Dim SciezkaDane SciezkaDane = „Dane\Arkusze” ChDir SciezkaDane

Zmiana bieżącego dysku Zmiana bieżącego dysku – polecenie ChDrive LiteraDysku: ChDrive „Dane\Arkusze” lub Dim Dysk As String Dysk = „D” ChDrive Dysk

Utworzenie folderu Instrukcja MkDir: MkDir Sciezka MkDir „D:\Archiwum” Uwaga – poleceniem można tworzyć tylko pojedynczy folder a nie drzewo, dlatego trzeba wtedy użyć instrukcji wielokrotnie: MkDir „D:\Archiwum\Obrazy”

Usunięcie folderu i plików Usunięcie folderu (o ile nie ma w nim plików): RmDir ”D:\Nowe” Usunięcie pliku/plików Kill „test.txt” Kill „D:\temp\*.tm?”

Odczytywanie ściezki bieżącej Instrukcja CurDir([litera dysku]) Sub BiezacaSciezka() Dim Sciezka Sciezka = CurDir() lub CurDir(„D”) MsgBox (Sciezka) End Sub

Odczytywanie zawartości folderu I Instrukcja zwraca łańcuch tekstowy ścieżki dostępu jednego pliku (przypadkowa kolejność) Dir[(SciezkaDostepu[,Atrybuty])] Sub OdczytNazwy() Dim Nazwa Nazwa = Dir(„C:\Win\*.exe”) MsgBox(Nazwa) End Sub Gdy podamy pełną nazwę jest to test, czy plik istnieje – jeśli tak to zwraca tę nazwę, jeśli nie to pusty ciąg znaków: Nazwa = Dir(„C:\Win\win.ini”)

Odczytywanie zawartości folderu II Odczytywanie nazwy następnego pliku: Sub OdczytNazwy() Dim Nazwa Nazwa = Dir(„C:\Win\*.exe”) MsgBox(Nazwa) Nazwa = Dir() End Sub Dla dużej liczby plików ten sposób jest skomplikowany

Atrybuty plików Kodowane stałymi: vbNormal 0 normalny vbReadOnly 1 tylko do odczytu vbHidden 2 ukryty vbSystem 4 systemowy vbVolume 8 nazwa wolumenu, powoduje ignorowanie pozostałych parametrów vbDirectory 16 katalog vbArchiwe 32 plik zmieniony od czasu ostatniej kopii zapasowej

Pliki sekwencyjne Zbudowane są z ciągu danych oddzielonych znakami separującymi (przecinek, średnik) Nie trzeba deklarować długości porcji danych, one są wyznaczane przez znaki separujące Wada – plik trzeba czytać w całości, a nowe dane można dopisywać tylko na końcu Podstawowy blok danych (rekord) może mieć stałą, określoną długość – co pomaga w określeniu położenia danych w pliku, łatwiejszy ich odczyt lub modyfikację (zapis)

Otwieranie sekwencyjnego pliku danych Open NazwaPliku For NazwaTrybu As NumerPliku Open „Test.txt” For Output As 1 NazwaPliku – nazwa pliku ze ścieżką dostępu NazwaTrybu Output – tryb zapisywania danych (jeśli pliku o danej nazwie nie ma, to zostaje utworzony nowy) Input – tryb odczytywania danych Append – tryb dopisywania danych NumerPliku – wartość liczbowa od 1 do 511 UWAGA – jeśli w programie nie wiadomo, jaki jest kolejny wolny numer pliku, należy się posłużyć funkcją FreeFile()

Zapisywanie danych w pliku Write # NumerPliku [, ListaWartości] ListaWartości – zapisywane elementy (dane różnych typów: tekst (w cudzysłowie), liczby, wartości logiczne, kody błędów) oddzielone znakami separującymi (przecinek, średnik), jeśli pusta to zostaje dopisany pusty wiersz W trybie Output wskaźnik zapisu jest na początku pliku (kasuje dotychczasową zawartość) W trybie Append wskaźnik jest na końcu i dane są dopisywane na końcu pliku

Zamykanie pliku Close # NumerPliku Instrukcja Close bez argumentu zamyka wszystkie pliki

Odczytywanie pliku I Input #NumerPliku, ListaZmiennych NumerPliku – numer pliku otwartego w trybie odczytu ListaZmiennych – lista zmiennych oddzielona przecinkami UWAGA – należy dostosować typ zmiennych do typu danych występujących w pliku (dlatego istotna jest ich kolejność)

Odczytywanie pliku II Sub ZapiszPlik() End Sub Sub DopiszDoPliku() Open „Adresy.txt” For Output As 1 Write #1, „Miasto”, „Ulica”, „Numer” Write #1, „Lodz”, „Krotka”, „15” Close #1 End Sub Sub DopiszDoPliku() Open „Adresy.txt” For Append As 1 Write #1, „Lask”, „Zielona”, „36” Sub OdczytajPlik() Dim Miasto, Ulica, Numer Open „Adresy.txt” For Input As 1 Input #1, Miasto, Ulica, Numer MsgBox(Miasto & „ ” & Ulica & „ ” & Numer)

Odczytywanie pliku III Aby odczytać kolejne wiersze, należy powtórzyć instrukcję Input (nie należy wielokrotnie wywoływać samej procedury, bo będzie czytany tylko ten sam, początkowy blok danych) Sub OdczytajPlik() Dim Miasto, Ulica, Numer Dim Miasto1, Ulica1, Numer1 Open „Adresy.txt” For Input As 1 Input #1, Miasto, Ulica, Numer Input #1, Miasto1, Ulica1, Numer1 MsgBox(Miasto & „ ” & Ulica & „ ” & Numer) MsgBox(Miasto1 & „ ” & Ulica1 & „ ” & Numer1) Close #1 End Sub

Dostęp do pliku w wykorzystaniem rekordu Wymagana jest deklaracja własnego typu zmiennej (zmiennej rekordowej) Przystosowany do pracy z aplikacjami o charakterze bazodanowym Programy do obsługi baz danych zapisują dane w postaci tabeli – każdy wiersz to rekord (każdy ma tę samą strukturę i ma identyczne pola), a kolumna – to pole Podczas definicji zmiennej rekordowej określamy elementy – ich liczbę, długość, typ danych

Definicja nowego typu I Instrukcja Type oraz End Type Zawsze na poziomie modułu (nie wewnatrz procedury) Domyślnie zatem tego typu zmienne są publiczne [Private][Public] Type NazwaTypu NazwaElem1 [(Wymiary)] As TypDanych NazwaElem2 [(Wymiary)] As TypDanych ....... End Type

Definicja nowego typu II Definiowany typ musi zawierać przynajmniej jeden element Konieczne jest określenie wymiarów elementów (dotyczy to głównie łańcucha tekstowego) Private Type AdresFirmy ID As Integer Nazwa As String * 20 Miasto As String * 20 Ulica As String * 30 Numer As Byte End Type

Zapisywanie rekordów w pliku o dostępie swobodnym I Wymaga zastosowania opcji Random podczas wywoływania instrukcji Open Konieczne jest podanie długości rekordu. Do jej wyznaczania służy instrukcja Len(), w której argumentem jest nazwa typu zmiennej rekordowej Zapis zmiennej rekordowej jest z wykorzystaniem instrukcji Put: Put #1, NumerRekordu, NazwaZmiennejRekordowej

Zapisywanie rekordów w pliku o dostępie swobodnym II Sub ZapiszRek() Dim Rek As AdresFirmy Dim NumerRekordu As Byte Open „Adresy.txt” For Random As #1 Len = Len(Rek) NumerRekordu = 1 Rek.ID = NumerRekordu Rek.Nazwa = „FirmaA” Rek.Miasto = „Lodz” Rek.Ulica = „Krotka” Rek.Numer = 15 Put #1, NumerRekordu, Rek Close #1 End Sub

Zapisywanie rekordów w pliku o dostępie swobodnym III Sub ZapiszRek() Dim Rek As AdresFirmy Dim NumerRekordu As Byte Open „Adresy.txt” For Random As #1 Len = Len(Rek) NumerRekordu = 1 Rek.ID = NumerRekordu Rek.Nazwa = „FirmaA” Rek.Miasto = „Lodz” Rek.Ulica = „Krotka” Rek.Numer = 15 Put #1, NumerRekordu, Rek NumerRekordu = 2 Rek.Nazwa = „FirmaB” Rek.Miasto = „Lask” Rek.Ulica = „Mala” Rek.Numer = 5 Close #1 End Sub

Odczytywanie rekordów w pliku o dostępie swobodnym I Wymaga zastosowania opcji Random podczas wywoływania instrukcji Open Konieczne jest podanie długości rekordu. Do jej wyznaczania służy instrukcja Len(), w której argumentem jest nazwa typu zmiennej rekordowej Odczyt zmiennej rekordowej jest z wykorzystaniem instrukcji Get: Get #1, [NumerRekordu], NazwaZmiennej NumerRekordu można pominąć. Odczytywany jest wtedy rekord następny w kolejności Get #1, , NazwaZmiennej

Odczytywanie rekordów w pliku o dostępie swobodnym II Sub CzytajRek() Dim Rek As AdresFirmy Dim NumerRekordu, Numer As Byte Dim Nazwa, Miasto, Ulica As String Open „Adresy.txt” For Random As #1 Len = Len(Rek) Get #1, 2, Rek NumerRekordu = Rek.ID Nazwa = Rek.Nazwa Miasto = Rek.Miasto Ulica = Rek.Ulica Numer = Rek.Numer MsgBox („Rekord nr: ” & NumerRekordu & „ ” & Firma & Miasto & Ulica & Numer) Close #1 End Sub

Instrukcje sterujące Instrukcja zliczająca – iteracyjna I For licznik = start To koniec [Step krok] Instrukcja 1 Instrukcja 2 ......... Next [licznik] Jeśli licznik = koniec następuje przerwanie wykonywania pętli Domyślnie krok = 1 (można wtedy go pominąć) Krok nie musi być liczbą całkowitą Po zakończeniu licznik = koniec + krok (czyli wartość końcowa powiększona o jeden krok)

Instrukcje sterujące Instrukcja zliczająca – iteracyjna II Pętle For...Next mogą być zagnieżdżane Nazwę zmiennej zliczającej można pominąć za Next, ale w pętlach zagnieżdżonych powinna być stosowana by uniknąć pomyłek Sub ObliczSume() Suma = 0 For i=1 To 100 Step 1 Suma = Suma + 1 Next i MsgBox(Suma) End Sub

Instrukcje sterujące Instrukcja zliczająca – iteracyjna III Sub OdczytNazwPlikow() NazwaPliku = Dir(„C:\*.*”) MsgBox (NazwaPliku) For i = 1 To 5 Step 1 NazwaPliku = Dir() Next i End Sub Uwaga: pierwszy odczyt inicjuje odczytywanie nazw plików we wskazanym folderze

Instrukcje sterujące Instrukcja zliczająca – iteracyjna IV Sub Odliczanie() Dim Grupa, Element, Wynik For Grupa=3 To 1 Step –1 For Element 0 to 9 Wynik = Wynik & Element Next Element Wynik = Wynik & „***” Next Grupa MsgBox(Wynik) End Sub

Instrukcje sterujące Instrukcja warunkowa I IF warunek Then Blok instrukcji End If Warunek to relacja = < > <> Blok instrukcji gdy warunek spełniony Else Blok instrukcji gdy warunek nie jest spełniony

Instrukcje sterujące Instrukcja warunkowa II IF warunek1 Then Blok instrukcji gdy warunek1 spełniony ElseIF warunek2 Then Blok instrukcji gdy warunek2 spełniony ElseIF warunek3 Then Blok instrukcji gdy warunek3 spełniony ......... Else Blok instrukcji n End If

Instrukcje sterujące Instrukcja warunkowa III Sub Warunki() A=InputBox(„Podaj pierwszą liczbę: ”) B=InputBox(„Podaj drugą liczbę: ”) IF A > B Then MsgBox(„A wieksze od B”) ElseIF A < B Then MsgBox(„A mniejsze od B”) Else MsgBox(„A równe B”) End If End Sub

Instrukcje sterujące Instrukcja warunkowa case I Select Case wyrazenie Case wartosc1 Blok instrukcji 1 Case wartosc2 Blok instrukcji 2 ...... Case wartoscN Blok instrukcji N [Case Else Blok instrukcji gdy żadne z powyższych] End Select

Instrukcje sterujące Instrukcja warunkowa case II Sub Wybor() Wyrazenie = InputBox(„Podaj liczbe: ”) Select Case wyrazenie Case 0,1,2,3,4,5,6,7,8,9 MsgBox(„Komunikat 1-9”) Case 100 MsgBox(„Komunikat 100”) Case 101 To 500 MsgBox(„Komunikat 101-500”) Case „A” MsgBox(„Komunikat A”) Case Else MsgBox(„Komunikat inna wartosc”) End Select End Sub

Instrukcje sterujące Instrukcja pętli warunkowej Do...Loop I Do While warunek Blok instrukcji Loop Występuje w kilku wariantach przy czym dwa podstawowe: While – wykonywana, dopóki warunek jest spełniony Until – wykonywana, aż warunek zostanie spełniony

Instrukcje sterujące Instrukcja pętli warunkowej Do...Loop II Sub Zgaduj() Dim liczba As Integer, typuj As Integer, licznik As Integer typuj = 0 licznik = 0 liczba = 5 Do While typuj <> liczba typuj = InputBox("Podaj liczbe 1-10") licznik = licznik + 1 Loop MsgBox ("Zgadles za " & licznik & " razem") End Sub

Instrukcje sterujące Instrukcja pętli warunkowej Do...Loop III Wykonywana w nieskończoność. Zakonczenie przez instrukcję Exit Do, wywoływaną z warunku If...End If Do While...Loop Wykonywana tak długo, jak długo jest spełniony warunek na początku pętli Do... Loop While Wykonywana tak długo, jak długo jest spełniony warunek na końcu pętli Do Until...Loop Wykonywana tak długo, aż zostanie spełniony warunek na początku pętli Do...Until Loop Wykonywana tak długo, aż zostanie spełniony warunek na końcu pętli

Instrukcje sterujące Instrukcja pętli Exit Do I Exit Do powoduje opuszczenie pętli i wykonanie pierwszej instrukcji umieszczonej za pętlą Exit Do zazwyczaj wywołuje się po spełnieniu warunku w instrukcji If...End If lub Select Case... End Select

Instrukcje sterujące Instrukcja pętli Exit Do II Sub Zgaduj() Dim liczba As Integer, typuj As Integer, licznik As Integer typuj = 0 licznik = 0 liczba = 5 Do While typuj <> liczba typuj = InputBox("Podaj liczbe 1-10") licznik = licznik + 1 If licznik > 5 Then Exit Do End If Loop MsgBox ("Zgadles za " & licznik & " razem") End Sub

Instrukcje sterujące Instrukcja skoku bezwarunkowego I Goto etykieta Wymagania Etykieta jako pierwsza w wierszu, bez odstępów i tabulacji Etykieta musi być zakończona dwukropkiem Etykieta musi zaczynać się od litery, w tekście mogą być cyfry Długość etykiety maksymalnie 40 znaków Dopuszczalne jest stosowanie zamiast etykiety numeru wiersza programu (nie trzeba dwukropka) – to pozostałość dla zgodności ze starszymi wersjami języka

Instrukcje sterujące Instrukcja skoku bezwarunkowego II Sub Zgaduj() Dim liczba As Integer, typuj As Integer, licznik As Integer typuj = 0 licznik = 0 liczba = 5 Do While typuj <> liczba typuj = InputBox("Podaj liczbe 1-10") licznik = licznik + 1 If licznik > 5 Then Goto Koniec End If Loop MsgBox ("Zgadles za " & licznik & " razem") Koniec: End Sub

Instrukcje sterujące Instrukcja zatrzymania w trakcie testowania programu Stop Instrukcja bezargumentowa Przerywa wykonywanie programu i powoduje wejście do pracy w trybie przerwania Licznik = licznik + 1 A = 100

Instrukcje sterujące Instrukcja drukowania zmiennej w trakcie testowania programu Debug.print Do.... While Licznik = licznik + 1 Debug.print Licznik Loop

Instrukcje sterujące Instrukcje obsługi błędów I On Error Goto etykieta Uwaga I – program musi posiadać sekcje obsługi błędów, kończący się jedną z instrukcji: Resume – po wykonaniu instrukcji związanych z obsługą błędu wykonywanie programu jest wznawiane od instrukcji, która spowodowała błąd Resume Next – j.w. ale od instrukcji następnej, po instrukcji, która spowodowała błąd Resume etykieta2 – j.w. ale od miejsca wskazanego przez etykietę2 Uwaga II – ominięcie sekcji obsługi błędu przy normalnym wykonaniu programu jest możliwe dzięki instrukcji Exit Sub

Instrukcje sterujące Instrukcje obsługi błędów II Sub Przykład() On ErrorGoto blad ......... Instrukcje programu Exit Sub Blad: Select Case Err.Number Case 6 MsgBox(„Liczba poza zakresem -255”) Case 13 MsgBox(„Znaki nie będące liczbą”) End Select Resume End Sub

Zmienne tablicowe I Maksymalny rozmiar tablic VBA to 60 wymiarów Numerowanie indeksów domyślnie zaczyna się od 0 Zmiana indeksu początkowego w danym module: Option Base liczba np. Option Base 1 Tablica Variant jest traktowana jak tabela w bazie danych – wiersz to odpowiednik rekordu, a każdy element wiersza – jako pole rekordu (czyli poszczególne elementy tablicy mogą być danymi dowolnych typów). Rzadko stosowane ze względu na pamieciożerność i mała wydajność

Zmienne tablicowe II Deklaracja tablicy [Dim],[Public],[Private],[Static] NazwaTablicy (a,b,c,.....) As typdanych Dim miesiace(12) As String Dim miesiace(1 To 12) As String Dim miesiace(12, 3) As String Dim blok(10, 10, 10) As Long

Zmienne tablicowe III Zapis danych do tablicy Miesiace(1)=„Styczeń” For i=1 To 12 Miesiace(i) = InputBox(„Podaj nazwę” & i) Next i Miesiace(i, 1) = InputBox(„Podaj nazwę” & i)

Zmienne tablicowe IV Zapis i odczyt danych z tablicy Sub TabMnoz() Dim I As Byte, J As Byte Dim TM(1 To 10, 1 To 10) As Byte For I = 1 To 10 For J = 1 To 10 TM(I, J) = I * J Debug.Print TM(I, J) Next J Next I End Sub

Zmienne tablicowe V Tablice dynamiczne I Tablica dynamiczna – pozwala na zmianę wielkości i liczby wymiarów podczas wykonywania programu Dim Nazwy() As String Przed użyciem tak zadeklarowanej tablicy trzeba określić jej wielkość i liczbę wymiarów ReDim Nazwy(22) As String Instrukcja ReDim może być wykonywana wielokrotnie w programie Instrukcją ReDim nie można zmieniać typu danych

Zmienne tablicowe V Tablice dynamiczne II Sub ListujPliki Dim Pliki() As String Dim I As Integer, J As Integer ReDim Pliki(50) Sciezka = InputBox(„Podaj ścieżkę dostępu i rozszerzenie”) Pliki(0) = Dir(Sciezka) J = 0 Do While Dir() <> „” J = J +1 Loop ReDim Pliki(J) As String

Zmienne tablicowe V Tablice dynamiczne III Pliki(0) = Dir(Sciezka) For I = 1 To J Pliki(I) = Dir() Next I MsgBox(„Plik numer ” & I & „ nazwa ” & Pliki(I)) MsgBox(„Pliki wylistowane”) End Sub

Generator pseudolosowy I Randomize – inicjalizuje i resetuje generator pseudolosowy Rnd() – zwraca kolejną pseudolosową wartość z generatora

Generator pseudolosowy II Sub TestujRnd() Const Rozm = 1000000, Przedzialy = 100 Dim Tablica(Przedzialy) As Long Dim Wyniki As String Dim I As Long, J As Integer, A As Integer Randomize For I = 0 To Rozm - 1 A = Int(Rnd() * Przedzialy) Tablica(A) = Tablica(A) + 1 Next I For J = 0 To Przedzialy - 1 Wyniki = Wyniki & "W: " & J & "-" & Tablica(J) & " " Next J MsgBox (Wyniki) End Sub

Funkcje I Funkcja to procedura zwracająca wartość Function NazwaFunkcji (Argument1, Argument2,....) As TypDanych Instrukcja 1 Instrukcja 2 .................. NazwaFunkcji = wynik End Function Konieczne jest przypisanie nazwie funkcji zwracanej wartości, chyba że funkcja jest elementem wyrażenia

Funkcje II Typ funkcji nie musi być taki sam jak typy jej argumentów Funkcje mogą być definiowane przez użytkownika oraz wbudowane Function LaczTekst(T1 As String, T2 As String) As String LaczTekst = T1 & „ ” & T2 End Function

Funkcje III Sub Laczenie() End Sub Dim Imie As String, Nazwisko As String Imie=„Andrzej”: Nazwisko=„Kurek” MsgBox(„Pelne dane ” & LaczTekst(Imie,Nazwisko)) End Sub

Funkcje wbudowane I ABS(liczba) – wartość bezwzględna argumentu lub wyrażenia liczbowego, dla zmiennej niezainicjowanej zwraca 0 Atn(liczba) – argument Double, zwraca odwrotność tangensa w zakresie –pi/2 do pi/2 radianów, zwraca wartość Double Tan(liczba) - argument Double w radianach kąta, zwraca tangens w Double Cos(liczba), Sin(liczba) - argument Double w radianach kąta, zwraca wartość w Double w przedziale +-1

Funkcje wbudowane II Exp(wykładnik) – zwraca wartość liczby e do potęgi wykładnik. Argument Double nie większy niż 709,782712893. Zwracana wartość Double Fix(liczba) – zwraca część całkowitą argumentu. Dla niecałkowitych i dodatnich jest to najbliższa liczba całkowita mniejsza od argumentu Fix(45.2) 45 Fix(45.8) 45 Fix(-45.2) -45 Int(liczba) – jak Fix(), ale dla ujemnych zwraca liczbę całkowitą mniejszą od argumentu Int(-45.2) -46

Funkcje wbudowane III Log(liczba) – argument musi być większy od zera, zwracana wartość Double, konwersja do innych podstaw logarytmów: logn(x)=log(x)/log(n) Function Log10(X) Log10=log(x)/log(10) End Function

Funkcje wbudowane IV Rnd[(liczba)] – jeśli podany, to argument wpływa na sposób generacji liczb: Ujemny: zawsze zwracana ta sama wartość Zero: najczęściej generowana liczba Dodatni: następna liczba w sekwencji Niepodany: następna liczba w sekwencji Generacja w podanym przedziale: Int((WartMax - WartMin + 1) * Rnd + WartMin) J.w. tylko dla wartości minimalnej = 1 Int((WartMax) * Rnd + WartMin)

Funkcje wbudowane V Sgn(liczba) – zwraca wartość Integer oznaczającą znak argumentu Argument większy niż zero 1 Argument równy zero 0 Argument mniejszy niż zero -1 Sqr(liczba) – zwraca pierwiastek kwadratowy argumentu o wartości większej lub równej zero (ujemny powoduje bład)

Funkcje wbudowane VI Funkcje daty i czasu I DateDiff(Jednostka, Data1, Data2 [,PoczątekTygodnia[, PoczątekRoku]]) Jednostka – wyrażenie określające sposób odmierzania czasu między dwiema datami: „yyyy”-rok „q”-kwartał „m”-miesiąc „y”-dzień roku „d”-dzień „w”-dzień tyg. „ww”-tydzień „h”-godzina „n”-minuta „s”-sekunda Data1, Data2 – wyrażenie typu Date (Variant) oznaczające początek i koniec przedziału czasu PoczątekTygodnia – który dzień początek tygodnia, jeśli niepodany - niedziela PoczątekRoku – ktory tydzień poczatek roku, jeśli niepodany - tydzień w którym jest data 1 stycznia

Funkcje wbudowane VI Funkcje daty i czasu II Sub LiczbaDniDoDzis() Dim n As Long Dim Data1 As Data Data1 = InputBox(„Wpisz datę: ”) n = DateDiff(„d”, Data1, Now) MsgBox(„Datę dzieli od dziś ” & n & ” dni”) End Sub

Funkcje wbudowane VI Funkcje tekstowe I Asc(Tekst) – zwraca kod ASCII np. Asc(„k”) zwraca liczbę 107 Chr(KodZnaku) – zwraca znak w postaci łańcucha np.. Chr(107) zwraca literę „k” Len(tekst) – zwraca liczbę znaków w tekście Dlugosc=Len(„Lancuch”) lub Nazwa=„Lancuch” Dlugosc=Len(Nazwa)

Funkcje wbudowane VI Funkcje tekstowe II Str(liczba) – zamienia liczbę lub wyrażenie na łańcuch tekstowy np. Dim A As String A = Str(681) W A znajdzie się łańcuch „681” Val(tekst) – działa odwrotnie do Str(), zamienia liczbę zapisaną jako tekst na wartość numeryczną A = „681” B = Val(A) W B znajdzie się liczba 681

Funkcje wbudowane VI Funkcje tekstowe III String(liczba, znak) – tworzy łańcuch złożony z określonej liczby tych samych znaków, znak może być podany bezpośrednio lub zmienną albo kodem String(n, „*”) String(10, znak) String(n, 140) Trim(tekst) – powoduje obcięcie spacji z obu stron tekstu (czyli przed i za tekstem) Nazwa=„ Slowo ” Nazwa=Trim(Nazwa) LTrim(tekst), RTrim(teskt) – j.w. tylko obcięcie spacji odpowiednio z lewej i prawej strony

Obiekty w VBA I VBA umożliwia operowanie na obiektach wchodzących w skład np. pakietu Office, albo innych programów np. AutoCAD Niezbędne do działania na obiektach jest zapoznanie się z obiektami dostępnymi w poszczególnych programach Informacji tej należy szukać w dokumentacji (pomocy) danego programu Zbiory obiektów danej aplikacji są pogrupowane w kolekcje (i zaznaczane przez dodanie angielskiej końcówki liczby mnogiej np. document – documents, worksheet - worksheets)

Obiekty w VBA II Charakterystyka obiektu: Właściwości: zbiór atrybutów charakteryzujących dany obiekt (w tym jego nazwa - numer), właściwością obiektu może być tez inny obiekt Metody: zadania (akcje), które dany obiek może wykonać lub które mogą być wykonane na danym obiekcie Zdarzenia (events): Zachodzące na skutek działań użytkownika (klikanie myszką lub operacje na klawiaturze) Zachodzące w wyniku akcji podejmowanych przez aplikacje (dokument otworzony przy uruchomieniu)

Obiekty w VBA III Klasa obiektów: Jest to zbiór obiektów charakteryzujących się tym samym zbiorem właściwości, zdarzeń i metod Dla każdego obiektu w klasie konkretne wartości, dane mogą być oczywiście inne Przykład dokument Worda zawierający kilka wykresów Excela – wykresy należą do pewnej klasy choć ich dane, które zawierają są różne

Obiekty w VBA IV Z założenia liczba obiektów w dużych pakietach uniemożliwia wprost korzystanie z nich – należy korzystać z narzędzi autouzupełniania oraz przeglądarki obiektów (Object Browser) Przeglądarka obiektów zawiera listę klas oraz listę elementów danej klasy, takich jak: moduł, formularz użytkownika, enumerator, biblioteka, projekt, wbudowane słowa kluczowe i typy, właściwości, właściwości domyślne, metody, metody domyślne, zdarzenia, stałe

Obiekty w VBA V Operacje na danych wchodzących w skład obiektu wykonuje się korzystając z metod (procedur). Metody mogą odnosić się do samego obiektu jak i związanych w nim danych Identyfikacja właściwości lub metody w odwołaniu: NazwaObiektu.NazwaWlasciwosci(Metody) Przykład: Dokuments(2).Close - Word Workbooks(„Przykład.xls”).Close - Excel

Obiekty w VBA VI Sub ZamknijExcel() End Sub Sub ZamknijWord() Workbooks(2).Close End Sub Sub ZamknijWord() Dokument(2).Close

Obiekty w VBA VII Sub Zamknij() Info: End Sub Dim n As Byte On Error Goto Info n = 2 PowerPoint.Presentations(n).Close Info: MsgBox(„Nie ma otwartego dokumentu o numerze: ” & n) End Sub Uwaga: dla zamknięcia wszystkich dokumentów składnia jest Presentations.Close

Obiekty w VBA VIII Sub Przelicz() End Sub Sub DodajPrezentacje () Dim n As Long n = PowerPoint.Presentations.Count MsgBox ("Liczba otwartych prezentacji: " & n) End Sub Sub DodajPrezentacje () PowerPoint.Presentations.Add

Obiekty w VBA IX Przekazywanie parametrów: A także za pomocą zmiennej: Documents.Add Template:=„Broszura.dot” A także za pomocą zmiennej: Szablon = „Broszura.dot” Documents.Add Template:=Szablon Parametr może decydować o utworzeniu np. nowego szablonu: Documents.Add NewTemplate:=True Documents.Add DocumentType:=wdNewWebPage

Obiekty w VBA X Przykładowe metody I Metody - operacje na dokumentach: Add – otwarcie dokumentu zapisanego w pliku dyskowym Documents.Open FileName:=„C:\info.doc” Istnieje wiele opcji np. otwarcie w trybie tylko do odczytu, z konwersją, zabezpieczenie hasłem, z dodaniem do ostatnio otwieranych plików Documents.Open FileName:=„C:\info.doc”, ReadOnly:=True Documents.Open FileName:=„C:\info.doc”, AddToRecentFiles:=True

Obiekty w VBA X Przykładowe metody II Inne metody: Close Open Save SaveAs Przykłady: Documents.Save (zamyka wszystkie otwarte dokumenty) Documents.Save NpPrompt:=True (zamyka wszystkie otwarte dokumenty bez komunikatu) Documents(2).Save (zamyka dokument 2) ActiveDocument.Save (zamyka aktualny dokument)

Obiekty w VBA X Przykładowe metody III Sub OtworzOstatnie() Dim ost As RecentFile For Each ost In RecentFiles Ost.Open Next ost End Sub Uwaga: pętla For Each...In...Next – wykonuje operacje na wszystkich elementach zbioru bez konieczności posługiwania się zmienną licznikową, czyli np. w sytuacjach, gdy nie można jednoznacznie określić zbioru obiektów

Obiekty w VBA X Przykładowe metody IV Documents(1).SaveAs FileName:=„C:\info.doc”

Obiekty w VBA XI Przykładowe właściwości I Właściwości są różnych typów np. tylko do odczytu (Count – ustalane tylko na skutek działania programu jako całości, a bez możliwości modyfikacji bezpośredniej) Saved – jest True, gdy wersja dokumentu jest już zapisana na dysk

Obiekty w VBA XI Przykładowe właściwości II Sub ZapiszNiezapisane() Dim Zapisany As Boolean Zapisany = PowerPoint.ActivePresentation.Saved If Zapisany = False Then PowerPoint.ActivePresentation.Save MsgBox ("Zapisano") Else MsgBox ("Nie ma nic do zapisu") End If End Sub

Obiekty w VBA XI Przykładowe właściwości II Ustalanie i zmiana właściwości obiektów: na przykładzie autokształtów Office (MsoAutoShapeType): Sub Kolko() PowerPoint.ActivePresentation.SlideMaster.Shapes.AddShape Type:=msoShapeOval, Left:=200, Top:=200, Width:=300, Height:=200 MsgBox ("Elipsa narysowana") End Sub

Obiekty w VBA XI Przykładowe właściwości III Sub Kolka() Dim I As Byte For I = 1 To 12 PowerPoint.ActivePresentation.SlideMaster.Shapes.AddShape Type:=I, _ Left:=10 + 45 * I, Top:=470, Width:=40, Height:=40 Next I MsgBox ("Grafika narysowana") End Sub

Obiekty w VBA XI Przykładowe właściwości IV With NazwaObiektu Instrukcje do wykonania – UWAGA wykonywane są tylko raz End With Przykład Sub OdczytNazwObiektow() Dim i As Byte, n As Byte With PowerPoint.ActivePresentation.SlideMaster.Shapes n = PowerPoint.ActivePresentation.SlideMaster.Shapes.Count For i = 1 To n MsgBox (i & ". " & PowerPoint.ActivePresentation.SlideMaster.Shapes(i).Name) Next i End Sub

Obiekty w VBA XII Obiekty Range I Obiekt typu Range to ciągły obszar dokumentu (obiektów tego rodzaju nie można tworzyć w pustych, niewypełnionych dokumentach) Sub WordZaznaczFragment() Dim frag As Object Set frag = Word.ActiveDocument.Range(Start:=5, End:=15) frag.Italic = True frag.Bold = True End Sub

Obiekty w VBA XII Obiekty Range II Sub ZaznaczFragment1() Dim frag As Range Set frag = Word.ActiveDocument.Range(Start:=5, End:=15) frag.Italic = True frag.Bold = True End Sub

Obiekty w VBA XII Obiekty Range III Sub ZmienCzcionke1() Dim frag As Range Set frag = Word.ActiveDocument.Range(Start:=5, End:=15) With frag .Font.Italic = True .Font.Bold = True .Font.Size = 30 .Font.Name = "Arial" .Paragraphs.Alignment = wdAlignParagraphCenter End With End Sub

Obiekty w VBA XII Obiekty Range IV W Excelu obiekty Range mogą być utworzone z komórki lub prostokątnego bloku komórek Sub WypelnijPion() Dim i As Integer, j As Integer j = 1 For i = 5 To 15 Worksheets("Arkusz1").Range("B" & i).Value = j j = j + 1 Next i End Sub

Obiekty w VBA XII Obiekty Range V Sub WypelnijPion1() Dim i As Integer, j As Integer Dim obszar As Range Set obszar = Worksheets("Arkusz1").Range("B5:B15") For i = 1 To 10 With obszar .Cells(i, 1).Value = i Excel.Application.Wait (Now + TimeValue("0:0:1")) End With Next i End Sub

Obiekty w VBA XII Obiekty Range VI Wypełnianie z uwzględnieniem przesunięcia (offsetu) Sub WypelnijPion2() Dim i As Integer, j As Integer Dim obszar As Range Set obszar = Worksheets("Arkusz1").Range("A1") For i = 1 To 10 With obszar .Offset(4, 1).Cells(i, 1).Value = i End With Next i End Sub

Obiekty w VBA XII Obiekty Range VII Kopiuj

Obiekty w VBA XIII Zdarzenia I Zdarzenia – zmiany zachodzące wewnątrz systemu, wewnątrz aplikacji lub innych obiektów Fakt zaistnienia zdarzenia jest wykrywany automatycznie (jest to cecha charakterystyczna obiektów) Do obsłużenia zdarzenia należy: Zadeklarować zmienną obiektową odpowiednią dla danego zdarzenia Napisać procedurę obsługującą zdarzenie Zainicjować obiekt, w którym występuje zdarzenie

Obiekty w VBA XIII Zdarzenia II Zdarzenie: Private Sub Document_Close()

Struktura programu VBA I Struktura programu w VBA obejmuje moduł, program, podprogram (procedura, funkcja) Wywołanie procedury w tym samym module kodu: NazwaModulu.NazwaProcedury W języku obiektowym VBA występują także programy o charakterze obiektów graficznych tzw. formy (formularze)

Struktura programu VBA II Sub ProcGlowna() Proc1 Proc2 ProcN End Sub Sub Proc1() Instrukcje Sub Proc2() Sub ProcN()

Struktura programu VBA III Procedury z parametrami I W wierszu deklaracji procedury należy wymienić parametry (zmienne) wykorzystywane wewnątrz procedury Sub DoZaplaty(Cena As Long, Ilosc As Long) Dim Wydatek As Long Wydatek = Cena * Ilosc End Sub Sub Zakupy() DoZaplaty 12, 6 UWAGA - Wydatek widoczny tylko w procedurze DoZapłaty()

Struktura programu VBA III Procedury z parametrami II Parametr globalny Dim Wydatek As Long Sub DoZaplaty(Cena As Long, Ilosc As Long) Wydatek = Cena * Ilosc End Sub Sub Zakupy() DoZaplaty 12, 6 UWAGA - Wydatek widoczny w module, metoda niezalecana

Struktura programu VBA III Procedury z parametrami III Parametr dodatkowy, deklaracja dodatkowej zmiennej Sub DoZaplaty(Cena As Long, Ilosc As Long, Wydatek As Long) Wydatek = Cena * Ilosc End Sub Sub Zakupy() Dim Zaplata As Long DoZaplaty 12, 6, Zaplata MsgBox(Zaplata) UWAGA - Wydatek widoczny w tylko w procedurach, w których jest to niezbędne

Struktura programu VBA III Procedury z parametrami IV Przekazywanie parametrów przez zmienną Sub Zakupy() Dim Zaplata As Long, Wartosc1 As Long, Wartosc2 As Long Wartosc1 = 12 Wartosc2 = 6 DoZaplaty Wartosc1, Wartosc2, Zaplata MsgBox(Zaplata) End Sub UWAGA – W praktyce następuje przekazanie adresu w pamięci, w którym przechowywany jest Zaplata

Struktura programu VBA III Procedury z parametrami V Przekazywanie parametrów przez wartość I Sub DoZaplaty(Cena As Long, Ilosc As Long, Wydatek As Long) Wydatek = Cena * Ilosc Cena = 2 End Sub Sub Zakupy() Dim Zaplata As Long, Wartosc1 As Long, Wartosc2 As Long Wartosc1 = 12: Wartosc2 = 6 DoZaplaty Cena:=Wartosc1, Ilosc:=Wartosc2, Wydatek:=Zaplata MsgBox(Wartosc1) UWAGA – Wartosc1 będzie mieć wartość 2, pomimo, że przypisano jej wartość 12 – efekt przekazania parametru przez adres w pamięci

Struktura programu VBA III Procedury z parametrami VI Przekazywanie parametrów przez wartość II Sub DoZaplaty(ByVal Cena As Long, ByVal Ilosc As Long, Wydatek As Long) Wydatek = Cena * Ilosc Cena = 2 End Sub Sub Zakupy() Dim Zaplata As Long, Wartosc1 As Long, Wartosc2 As Long Wartosc1 = 12: Wartosc2 = 6 DoZaplaty Cena:=Wartosc1, Ilosc:=Wartosc2, Wydatek:=Zaplata MsgBox(Wartosc1) UWAGA – ByVal powoduje przekazanie wartości, a nie adresu, nie można jednak umieszczać go przed parametrem zwracającym wartość (niemożliwe zwrócenie wyniku)

Projekty VBA I Projekty VBA w MS Word Domyślny szablon Normal – programy i procedury dostępne z poziomu wszystkich dokumentów, bez względu na jakim szablonie zostały oparte (są wiec globalne – wyjątek procedura zdarzeniowa Private Sub Document_Close()) Szablon dokumentu – widoczne we wszystkich dokumentach szablonu Dokumentu – widoczne tylko w danym dokumencie Nowe niestandardowe obiekty są dodawane na poziomie modułu klasy

Projekty VBA II Projekty VBA w MS Excel Skoroszyt – domyślny poziom realizacji projektu (a nie szablonu domyślnego) Szablon – musi być otworzony (a nie utworzony nowy skoroszyt – z folderu domyślnego \Microsoft Office\Templates\1045)

Projekty VBA III Projekty VBA w innych aplikacjach Access, Outlook, PowerPoint i inne Ułatwienie, automatyzacja i przyśpieszenie wymiany danych miedzy aplikacjami Dodatkowo pomocna może być rejestracja makropoleceń

Przykład makra I Sub PodwojneSpacje() ' PodwojneSpacje Makro zapisane 03-12-05 przez zk Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = " " .Replacement.Text = " " .Forward = True: .Wrap = wdFindContinue .Format = False: .MatchCase = False .MatchWholeWord = False: .MatchWildcards = False .MatchSoundsLike = False: .MatchAllWordForms = False End With Selection.Find.Execute Replace:=wdReplaceAll End Sub

Przykład makra II Sub WielokrotneSpacje() ' WielokrotneSpacje Makro zapisane 03-12-05 przez zk For i = 1 To 3 Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = " " .Replacement.Text = " " .Forward = True: .Wrap = wdFindContinue .Format = False: .MatchCase = False .MatchWholeWord = False: .MatchWildcards = False .MatchSoundsLike = False: .MatchAllWordForms = False End With Selection.Find.Execute Replace:=wdReplaceAll Next i End Sub

Przykład makra III Skalowanie rysunków Sub SkalujRysunek() End Sub Dim w As Single, s As Single w = Selection.InlineShapes(1).Height s = Selection.InlineShapes(1).Width Selection.InlineShapes(1).Height = w * 0.95 Selection.InlineShapes(1).Width = s * 0.95 End Sub

Okna dialogowe I MsgBox(Komunikat [, Przyciski][, Tytul][, PlikPomocy, KontekstPomocy]) Komunikat wyświetla tekst komunikatu Przyciski: OK, Anuluj (Cancel), Przerwij (Abort), Ponów próbę (Retry), Ignoruj (Ignore), Tak (Yes), Nie (No), Pomoc (Help) Tytul – tekst na pasku tytułu okna PlikPomocy – wyrażenie łańcuchowe określające tekst pomocy dla okna (może być to nazwa pliku) KontekstPomocy – wyrażenie numeryczne, którego wartość jest skojarzona z odpowiednim tematem pliku pomocy

Okna dialogowe II MsgBox(Komunikat [, Przyciski][, Tytul][, PlikPomocy, KontekstPomocy]) Dodatkowe funkcje: Ikony: Wiadomości krytycznej (vbCritical), Zapytania (vbQuestion), Wiadomości ostrzegawczej (vbExclamation), Informacji (vbInformation) Przycisk domyślny – od pierwszego do czwartego (vbDefaultButton1..4) Funkcje sterujące i formatujące – okno na poziomie aplikacji (vbApplicationModal), systemu (vbSystemModal), okno zawsze na wierzchu (vbMsgBoxSetForeground), tekst wyrównany do prawej (vbMsgBoxRight)

Okna dialogowe III InputBox (Prosba [, Tytul] [, DomyslnyTekst] [, XPos] [, YPos][, PlikPomocy, KontekstPomocy]) ) Tytul – informacja w pasku tytulu okna DomyslnyTekst – domyślna odpowiedź, podpowiadana użytkownikowi Xpos, Ypos – odległość od krawędzi okna w twipsach (20 twipsów – 1 punkt, 72 punkty – 1 cal) Wciśnięcie przy odpowiedzi klawisza Esc – powoduje zwrot pustego łańcucha tekstowego „”

Okna dialogowe IV Z poziomu procedury można otwierać okna wbudowane w aplikację, z poziomu której ją uruchomiono. Do otwierania okien służą dwie metody: Show: okno pokazuje się i można wprowadzić zmiany lub wywoływać akcje Display: okno pokazuje się – jednak nie można wprowadzać zmian lub wywoływać akcji

Okna dialogowe V Application.Dialogs(StalaWskazujacaObiekt).Show Application – obiekt, w którym aktywna jest aplikacja Dialogs – kolekcja obiektów, jakimi są okna dialogowe StalaWskazujacaObiekt – konkretny obiekt w kolekcji, przedrostek wskazuje aplikacje np. wd – Word Show – metoda show Application.Dialogs(wdDialogFormatFont).Show Application.Dialogs(xlDialogFormatNumber).Show

Okna dialogowe VI Application.Dialogs(StalaWskazujacaObiekt).Display Application – obiekt, w którym aktywna jest aplikacja Dialogs – kolekcja obiektów, jakimi są okna dialogowe StalaWskazujacaObiekt – konkretny obiekt w kolekcji, przedrostek wskazuje aplikacje np. wd – Word Display – metoda show Application.Dialogs(wdDialogFormatFont).Display Application.Dialogs(xlDialogFormatNumber).Display

Okna dialogowe VII Dla okna dialogowego można wykonać operacje z poziomu VBA (czyli bez potrzeby wyświetlania okna z wykorzystaniem metody show) Istnieje kilka sposobów wykonania takiej operacji Sposób 1 - Bezpośrednie odwołanie do właściwości obiektu i nadanie jej wartości Sposób 2 - Przypisanie do zmiennej obiektowej (w sytuacji, gdy często wywoływana, zmieniana jest dana właściwość)

Okna dialogowe VIII Sposób 1 Sub Centrowanie1() End Sub With Dialogs(wdDialogFormatParagraph) .Application.Documents(1).Paragraphs(1).Aligment = wdAlignParagraphCenter .Execute End With End Sub

Okna dialogowe IX Sposób 1 Sub Centrowanie2() End Sub Dim Akapit As Dialog Set Akapit = Dialogs(wdDialogFormatParagraph) With Akapit .Application.Documents(1).Paragraphs(1).Alignment = wdAlignParagraphCenter .Execute End With End Sub

Okna dialogowe X Identyfikacja sposobu zamknięcia okna Enter, Ok - -1 Anuluj, Esc - 0 Sub FormatAkapitu() Dim Akapit As Dialog Set Akapit = Dialogs(wdDialogFormatParagraph) Zamkniecie = Akapit.Show If zamkniecie = -1 Then MsgBox(„Akapit został sformatowany”) Else MsgBox(„Zrezygnowano ze zmiany formatowania”) End If End Sub

Formularze I Formularze to obiekty graficzne, w których można umieszczać różne elementy okien dialogowych np. listy, pola wyboru, opcje, informacje Elementy formularzy to formanty (czasem zwane kontrolkami) Formularze mogą być włączone w treść zwykłych dokumentów, arkuszy kalkulacyjnych itp. Tworzymy poprzez wstawienie UserForm

Formularze II Właściwości formularza: Ąpperance – wygląd: kolory, tytuł itp.. Behavior – zachowanie (np. kolejność wyboru elementów klawiszem tab) Font - czcionka Misc – właściwości różnych typów Picture – właściwości obrazów osadzonych Position – położenie Scrolling – sposób przewijania

Formularze III Formanty dostępne w formularzu Zaznaczanie Etykieta Pole tekstowe Lista rozwijana Pole listy Pole wyboru Pole opcji Przełącznik Ramka Przycisk Układ wielokrotny Układ wielostronnicowy Suwak Zmiana wartości Obraz

Formularze III Operowanie danymi I