Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Visual Basic for Application (VBA) Zbigniew Kulesza.

Podobne prezentacje


Prezentacja na temat: "Visual Basic for Application (VBA) Zbigniew Kulesza."— Zapis prezentacji:

1 Visual Basic for Application (VBA) Zbigniew Kulesza

2 Ś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.

3 BASIC BASIC - Beginners All-purpose Symbolic Instruction Code zaprojektowany w 1964 roku przez J.G. Kemenyego 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.

4 Ś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 – – XP 6.3 Microsoft udostępnił licencję VBA, dlatego inni producenci mogą włączać VBA do swoich produktów.

5 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.

6 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).

7 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.

8 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)

9 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).

10 VBS Visual Basic Script (Scripting Edition) interpretowany język wzorowany na Visual Basic, opracowany przez MSVisual Basic 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.Netscape JavaScript JavaScript aktualnie wspierana przez nowe wersje zarówno przeglądarek Netscape, Mozilla jak IE. JavaScript

11 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.

12 VBS kod VBS jest osadzany w dokumencie html pomiędzy znacznikami i (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: zapobiega próbom interpretowania wyróżnionego fragmentu przez starsze przeglądarki.

13 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).

14 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.

15 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).

16 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!)

17 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).

18 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.

19 Ś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.

20 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)

21 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

22 Środowisko programowania OOoO OOo O posiada, tak samo jak MS Office, własne - zatem mogą wykonywać takie same zadania. Specyfikacja interfejsu jest na stronie 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

23 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 w skazówki odnośnie postępowania w środowisku programistycznym i środowisku programowania znaleźć można w,,StarOffice 6.0 Migration Guide``, strony

24 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.

25 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

26 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.

27 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.

28 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.Visual BasicplikurozszerzeniemaplikacjiOCXActive-X

29 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.aplikacjiWindows programistainterfejsumenuVBXActive-X

30 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).MicrosoftplatformieWindows Macintosh

31 Programowanie obiektowe (ang. object-oriented programming) ang. 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). programów komputerowychobiektów 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.

32 Programowanie proceduralne Programowanie proceduralne to paradygmat programowania zalecający dzielenie kodu na procedury, czyli fragmenty wykonujące ściśle określone operacje.paradygmat programowania procedury 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.zmiennych globalnychdanewskaźniki goto

33 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.paradygmat programowaniahierarchicznemodułyinterfejsyprogramowania 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.programowania proceduralnegogoto

34 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.

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

36 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.

37 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.

38 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++.C++

39 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.

40 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:programowania strukturalnego funkcyjnego Dziedziczenie wielokrotne: – jest: C++, Python, Incr TclC++PythonIncr Tcl – tylko interfejsy: Object Pascal, Java, C#Object PascalJavaC# – tylko metody: RubyRuby Klasa jest obiektem: – tak: Ruby, PythonRubyPython – nie: C++, C#, OcamlC++C#Ocaml

41 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 TclJavaC#RubyObject PascalIncr Tcl – nie: C++, Ocaml, PythonC++OcamlPython 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 TclRubyC#C++RTTIJavaRTTIPythonObject PascalIncr Tcl – nie: OcamlOcaml

42 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 ):Drzewo_Binarne – tak: Ruby, C++, OcamlRubyC++Ocaml – nie: JavaJava Przeładowywanie (przeciążanie) operatorów:przeciążanie – tak: Ruby, C++, PythonRubyC++Python – nie: Java (choć przeciążonych jest kilka operatorów wbudowanych, np. + w klasie String), Ocaml, Object PascalJavaOcamlObject Pascal

43 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.

44 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.

45 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).

46 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).

47 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.

48 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.

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

50

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

52 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

53 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)

54 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

55 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

56 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

57 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

58 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

59 Typy danych Byte 1 bajt – liczba całkowita Boolean2 bajty – True, False Integer2 bajty – liczba całkowita Long 4 bajty – liczba całkowita Single4 bajty – liczba zmiennoprzecinkowa Double8 bajtów – liczba zmiennoprzecinkowa Currency8 bajtów – liczba dużej precyzji Decimal14 bajtów – liczba dużej precyzji Date 8 bajtów – do Object4 bajty – odwołanie do obiektu String10 bajtów + liczba znaków – tekst o zmiennej długości Stringliczba znaków – tekst o stałej długości Variant16 bajtów – liczba (jak dla Double) Variant22 bajty – tekst (jak String 10 bajtów + l.zn.)

60 Zalecane oznaczanie zmiennych W celu powiązania typu z nazwą (przydatne w trakcie pisania programu) stosuje się np. przedrostki w nazwie: – Booleanbool boolWartosc – BytebytebyteWartosc – CurrencycurcurWartosc – DatedatdatWartosc – DecimaldecdecWartosc – DoubledbldblWartosc – IntegerintintWartosc – ObjectobjobjPasekZadan – SinglesngsngWartosc – StringstrstrWartosc – VariantvarvarWartosc

61 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

62 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

63 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 – VariantEmpty (pusty) – ObjectNothing (nic)

64 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)

65 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)

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

67 Przypisania Przypisanie wartości liczbowej – 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#

68 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)

69 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

70 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

71 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)

72 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

73 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 Name StaraNazwa As NowaNazwa Dla innego folderu: Dim StaraNazwa, NowaNazwa StaraNazwa = c:\info\test.txt NowaNazwa = d:\zadania\nowy.txt Name StaraNazwa As NowaNazwa

74 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

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

76 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 MkDir D:\Archiwum\Obrazy

77 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?

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

79 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)

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

81 Atrybuty plików Kodowane stałymi: vbNormal0normalny vbReadOnly1tylko do odczytu vbHidden2ukryty vbSystem4systemowy vbVolume8nazwa wolumenu, powoduje ignorowanie pozostałych parametrów vbDirectory16katalog vbArchiwe32plik zmieniony od czasu ostatniej kopii zapasowej

82 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)

83 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()

84 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

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

86 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ść)

87 Odczytywanie pliku II Sub ZapiszPlik() 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 Close #1 End Sub Sub OdczytajPlik() Dim Miasto, Ulica, Numer Open Adresy.txt For Input As 1 Input #1, Miasto, Ulica, Numer MsgBox(Miasto & & Ulica & & Numer) Close #1 End Sub

88 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

89 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

90 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

91 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

92 Zapisywanie rekordów w pliku o dostępie swobodnym I 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

93 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

94 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.ID = NumerRekordu Rek.Nazwa = FirmaB Rek.Miasto = Lask Rek.Ulica = Mala Rek.Numer = 5 Put #1, NumerRekordu, Rek Close #1 End Sub

95 Odczytywanie rekordów w pliku o dostępie swobodnym I 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

96 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

97 Instrukcje sterujące Instrukcja zliczająca – iteracyjna I For licznik = start To koniec [Step krok] Instrukcja 1 Instrukcja 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)

98 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

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

100 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

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

102 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

103 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

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

105 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 ) Case A MsgBox(Komunikat A) Case Else MsgBox(Komunikat inna wartosc) End Select End Sub

106 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

107 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

108 Instrukcje sterujące Instrukcja pętli warunkowej Do...Loop III Do...Loop – 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

109 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

110 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

111 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

112 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

113 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 Stop A = 100

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

115 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

116 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

117 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ść

118 Zmienne tablicowe II Deklaracja tablicy 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

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

120 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

121 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

122 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

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

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

125 Generator pseudolosowy II Sub TestujRnd() Const Rozm = , 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

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

127 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

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

129 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

130 Funkcje wbudowane II Exp(wykładnik) – zwraca wartość liczby e do potęgi wykładnik. Argument Double nie większy niż 709, 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

131 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

132 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)

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

134 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-rokq-kwartałm-miesiąc – y-dzień rokud-dzień – w-dzień tyg.ww-tydzień – h-godzinan-minutas-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

135 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

136 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)

137 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ą Dim A As String A = 681 B = Val(A) W B znajdzie się liczba 681

138 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

139 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)

140 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)

141 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

142 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

143 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

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

145 Obiekty w VBA VII Sub Zamknij() 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

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

147 Obiekty w VBA IX Przekazywanie parametrów: 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

148 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

149 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)

150 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

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

152 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

153 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

154 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.A ddShape Type:=msoShapeOval, Left:=200, Top:=200, Width:=300, Height:=200 MsgBox ("Elipsa narysowana") End Sub

155 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.A ddShape Type:=I, _ Left:= * I, Top:=470, Width:=40, Height:=40 Next I MsgBox ("Grafika narysowana") End Sub

156 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 With End Sub

157 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

158 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

159 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

160 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

161 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

162 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

163 Obiekty w VBA XII Obiekty Range VII Kopiuj

164 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

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

166 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)

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

168 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 End Sub UWAGA - Wydatek widoczny tylko w procedurze DoZapłaty()

169 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 End Sub UWAGA - Wydatek widoczny w module, metoda niezalecana

170 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) End Sub UWAGA - Wydatek widoczny w tylko w procedurach, w których jest to niezbędne

171 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

172 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) End Sub UWAGA – Wartosc1 będzie mieć wartość 2, pomimo, że przypisano jej wartość 12 – efekt przekazania parametru przez adres w pamięci

173 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) End Sub 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)

174 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

175 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)

176 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ń

177 Przykład makra I Sub PodwojneSpacje() ' PodwojneSpacje Makro zapisane 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

178 Przykład makra II Sub WielokrotneSpacje() ' WielokrotneSpacje Makro zapisane 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

179 Przykład makra III Skalowanie rysunków Sub SkalujRysunek() 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

180 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

181 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)

182 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

183 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

184 Okna dialogowe V Application.Dialogs(StalaWskazujacaObiekt).Sho w – 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

185 Okna dialogowe VI Application.Dialogs(StalaWskazujacaObiekt).Dis play – 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

186 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ść)

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

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

189 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

190 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

191 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

192 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

193 Formularze III Operowanie danymi I


Pobierz ppt "Visual Basic for Application (VBA) Zbigniew Kulesza."

Podobne prezentacje


Reklamy Google