Visual Basic for Applications Joanna Porter-Sobieraj
Plan wykładu Pojęcia wstępne Makra Edytor Visual Basic Podstawy języka
Plan wykładu Typy danych, zmienne, stałe Procedury i funkcje Funkcje wbudowane Sterowanie Instrukcje warunkowe Pętle
Plan wykładu Tablice Obiekty Obiekty Visual Basic'a Formularze
Pojęcia wstępne Programowanie Zapisanie w pewnym dokładnie określonym języku poleceń dla komputera, systemu operacyjnego lub programu Wygoda? Konieczność? Sztuka? Rzemiosło?
Pojęcia wstępne Programiści - ludzie, którzy programują Kategorie Projektanci Programiści Testerzy Znajomość i umiejętność tworzenia algorytmów to podstawowa umiejętność programisty
Pojęcia wstępne W codziennym życiu napotykamy algorytmy przepisy kulinarne instrukcja księgowania kosztów instrukcje obsługi np. RTV Nie są to algorytmy komputerowe
Pojęcia wstępne Algorytm formalnie zapisany sposób rozwiązania danego problemu składający się z kolejnych kroków wykonywanych w określonej kolejności każdy algorytm ma tylko jeden punkt startowy, czyli wyróżniony pierwszy krok działania punktów końcowych może być wiele
Pojęcia wstępne Najważniejszy jest pomysł Sposoby opisu algorytmu schemat blokowy język naturalny język programowania
Pojęcia wstępne Najlepszym sposobem nauki pisania algorytmów jest analiza i rozumienie istniejących algorytmów w połączeniu z własnymi próbami rozwiązywania prostych problemów samemu Należy dążyć do algorytmicznego sposobu myślenia o zagadnieniach
Pojęcia wstępne Algorytm Euklidesa Dla dwóch danych liczb naturalnych m i n wyznaczyć największą liczbę naturalną która jest dzielnikiem zarówno m i n Przykład Największym wspólnym dzielnikiem 119 i 544 jest 17
Pojęcia wstępne Język naturalny E1. [wyznaczanie reszty] Podziel liczbę m przez n, resztę z dzielenia oznaczamy jako r (m=a*n + r 0 ≤ r < n) E2. [Reszta zero?] Jeżeli r = 0 algorytm kończy się, wynikiem jest liczba n E3. [Redukcja] Zmień m ← n, n ← r i przejdź do kroku E1 Numer kroku* *Tu się przyda Krótki opis kroku
Pojęcia wstępne Język naturalny Zrozumiały dla człowieka, dobrze opisuje idee algorytmu, skupia się tylko na rzeczach ważnych pomija detale Nie jest rozumiany przez komputer
Pojęcia wstępne Symulacja Lp.Krokmnr 1E E E32114? 4E E E3147? 7E E21470
Pojęcia wstępne Schemat blokowy E1.Wyznaczanie reszty E2.Czy reszta jest 0? E3.Redukcja nie tak
Pojęcia wstępne Schemat blokowy Pokazuje przepływ sterowania, sekwencje Dobrze uzupełnia opis w języku naturalnym Trudno wpisać wszystkie istotne informacje w boksy Nie istnieją dostatecznie dobre programy zamieniające schemat blokowy na program
Pojęcia wstępne Język programowania Wyspecjalizowany i ograniczony język rozumiany przez komputer na pewnym poziomie Grupy w zależności od przeznaczenia języki niskiego poziomu - sterowanie sprzętem lub systemem operacyjnym, np. asembler języki wysokiego poziomu - tworzenie samodzielnych programów, np. BASIC, Pascal, C, C++, Visual Basic języki poziomu aplikacji - manipulowanie aplikacjami, np. Visual Basic for Applications
Pojęcia wstępne Język programowania Jest zrozumiały dla komputera Jest precyzyjny Trudniejszy do studiowania przez człowieka Detale i elementy ważne są tak samo wyeksponowane
Pojęcia wstępne Ułatwieniem w konstrukcji algorytmu może być poznanie 5 jego cech 1. skończoność 2. precyzja definicji 3. wejście 4. wyjście 5. efektywność
Pojęcia wstępne 1.Skończoność Oznacza, że algorytm musi zakończyć swoje działanie w skończonym czasie Dla prostych problemów będzie to „mgnienie oka”, dla bardziej złożonych godziny lub nawet dni Programista musi zatroszczyć się aby algorytm nie pozwalał na nieskończone "kręcenie się" w pętli Algorytm nieskończony (przykład negatywny): A1. Ustal x ← x+1 A2. Jeżeli x > 0 zakończ w p.p. przejdź do kroku A1 A0. x← -5
Pojęcia wstępne 2.Precyzja Definicji Każdy krok algorytmu musi być opisany precyzyjnie, dokładnie Algorytm nie zna niedomówień lub założeń „zwyczajowych” Zapis w postaci kodu C lub C++ utrudnia nieprecyzyjne definiowanie kroków. Negatywny przykład: A1. Wyznacz NWD liczb x i y, wynik przechowaj jako liczbę w A2. Jeżeli w = 1 przejdź dalej Jak? Do którego kroku?
Pojęcia wstępne 3.Wejście Algorytm może posiadać jedno lub więcej wejść (UWAGA: nie mylić z punktem startowym) Przez wejście rozumiemy każdą pojedynczą informację dostarczaną algorytmowi W przypadku algorytmu Euklidesa są dwa wejścia: liczba m i liczba n Technicznie wejściem algorytmu może być: Informacja wskazana myszką podczas pracy z programem Dane podane z klawiatury Dane wczytane z pliku Informacje odczytane z urządzenia zewnętrznego takiego jak np. skaner kodów paskowych
Pojęcia wstępne 4.Wyjście Algorytm musi posiadać jedno lub więcej wyjść (nie mylić z zakończeniem działania) Przez wyjście rozumiemy każdą pojedynczą informację jaka jest efektem działania algorytmu W przypadku algorytmu Euklidesa jest jedno wyjście: liczba będąca NWD Technicznie wyjściem algorytmu może być: Informacja wyświetlana na ekranie Impulsy sterujące pracą urządzenia zewnętrznego np. drukarki Nie ma sensu algorytm bez wyjścia!
Pojęcia wstępne 5.Efektywność Algorytm powinien dany problem rozwiązywać możliwie najszybciej, czyli w jak najmniejszej ilości kroków Algorytm powinien dany problem rozwiązywać używając możliwie jak najmniej zasobów czyli pamięci, łączy sieciowych itp. Te dwa pojęcia kolidują – czasem czas można poprawić kosztem pamięci i odwrotnie W praktyce zajęć studenckich i wielu projektów komercyjnych osłabia się efektywność na rzecz łatwości i szybkości kodowania
Pojęcia wstępne AlgorytmPrzepis kulinarny Skończoność + Tak, orientacyjny czas często podawany, Musi się kiedyś ugotować Precyzja definicji + Nie, „Dodaj szczyptę soli, Gotuj aż zmięknie” Wejście + Tak, wiktuały Wyjście + Tak, potrawa Efektywność + Tak, wyrażona kosztem czyli cena wiktuałów + czas przygotowania potrawy
Pojęcia wstępne Algorytm Kod źródłowyKod maszynowy ProgramInterpreter Kompilator Krok I Ścieżka kompilacji Ścieżka interpretacji
Pojęcia wstępne Od algorytmu do programu (Krok I) Gotowy algorytm zapisać w postaci kodu języka programowania Istnieje wiele różnych języków programowania, każdy z nich posiada przewagę nad każdym innym, wszystko zależy od problemu Dobrze poznając jeden język programowania, łatwo jest później opanować kolejne UWAGA: algorytmy pozostają niezmienione, niezależnie od wybranego języka programowania
Pojęcia wstępne Od algorytmu do programu (Krok I) Wybór języka programowania determinuje jaką ścieżką należy podążać potem Visual Basic (także w wersji dołączonej do pakietu MSOffice) jest językiem interpretowanym C i C++ jest językiem kompilowanym Algorytm spisany zgodnie z kanonem danego języka programowania nazywamy kodem źródłowym Do spisania kodu źródłowego używamy najczęściej tego samego programu komputerowego, który wykorzystujemy do kompilacji lub interpretacji
Pojęcia wstępne Interpretacja Jest to proces przetłumaczenia kodu źródłowego, czyli tekstu na język zrozumiały dla komputera Wynikiem interpretacji jest działający program, procesy korzystania z programu i jego interpretacji zachodzą równocześnie, przypomina to rozmowę z biegłym tłumaczem. Do przeprowadzenia interpretacji kodu potrzebny jest specjalny program zwany interpreterem Ponowne użycie programu będzie wymagało ponownej interpretacji
Pojęcia wstępne Kompilacja Jest to proces zamiany kodu źródłowego, czyli tekstu na kod zrozumiały dla komputera Wynikiem kompilacji jest plik z danymi binarnymi zwany kodem maszynowym Do przeprowadzenia kompilacji kodu potrzebny jest specjalny program zwany kompilatorem Aby skorzystać z tak przygotowanego programu wystarczy uruchomić plik z kodem maszynowym Kompilacja jest konieczna tylko raz, z kodu maszynowego (czyli pliku.exe) można korzystać wielokrotnie
Pojęcia Wstępne Wady i zalety Interpretacja Kompilacja Szybkość działania Przenośność Łatwość kodowania Odporność na błędy Zasoby
Pojęcia wstępne BASIC (Beginners All-Purpose Symbolic Instruction Code) 1963 r. Założenie: umożliwić szybkie tworzenie programów dla osób nie zajmujących się zawodowo komputerami
Pojęcia wstępne VB (Visual Basic) 1991 r. BASIC połączony ze środowiskiem programowania wizualnego Założenie: umożliwić łatwe tworzenie aplikacji dla środowiska Windows
Pojęcia wstępne VBA (Visual Basic for Applications) Visual Basic dołączony do aplikacji Microsoft Office: Access, Excel, PowerPoint, Outlook, Word Założenie: umożliwić samodzielne rozszerzanie aplikacji przez użytkowników
Makra Makro Lista instrukcji, które aplikacja może automatycznie wykonać Dwie metody tworzenia: Wykonać pożądane instrukcje z włączonym trybem ich automatycznego zapisywania Zapisać instrukcje w postaci poleceń języka VBA
Makra – przykłady wykorzystania Sformatowanie w jednakowy sposób wielu komórek w wielu arkuszach Excela Sformatowanie w jednakowy sposób wielu fragmentów tekstu dokumentu Worda Sformatować wiele wykresów w jednakowy sposób w arkuszu Excela
Makra – przykłady wykorzystania Zmodyfikować zawartość wielu komórek według zadanego schematu w wielu arkuszach Excela Zmodyfikować zawartość dokumentu Worda w sposób bardziej skomplikowany niż zwykłe zastępowanie tekstu Skopiować do nowego dokumentu Worda tylko wybrane fragmenty innych dokumentów Wczytać do arkusza Excela dane zapisane w niestandardowym formacie Zapisać dane z arkusza Excela w niestandardowym formacie
Makra Rejestrowanie makra Krok 1 Przemyśleć problem! Zadbać o poprawne warunki początkowe Menu: Narzędzia / Makro / Zarejestruj nowe makro
Makra Rejestrowanie makra Krok 2 Nazwa Złożona z liter, cyfr i znaków podkreślenia Pierwszy znak musi być literą Klawisz skrótu Dozwolone jest użycie klawisza SHIFT Trzeba pamiętać o wykorzystywanych już skrótach Przechowywanie 'Skoroszyt makr osobistych' - wspólny dla wszystkich otwieranych arkuszy 'Nowy skoroszyt' 'Ten skoroszyt'
Makra Rejestrowanie makra Krok 3 Wszystkie czynności wykonane przy pomocy klawiatury lub myszy zostaną zarejestrowane, aż do momentu zatrzymania rejestrowania Odwołanie względne czy bezwzględne? Bezwzględne - odtwarzane makro będzie zawsze wykonywało czynności w tej samej komórce ($A$1) Względne - odtwarzane makro będzie wykonywało czynności w komórce wskazanej przez przesunięcie względem początkowej komórki (A1)
Makra Dialog makro Menu: Narzędzia / Makro / Makra Nazwy makr powinny być znaczące! Opisy makr mogą być pomocne! 'Edycja'- możliwość edycji kodu VBA będącego zapisem zarejestrowanego makra
Makra Uruchamianie makra Klawiatura - klawisz skrótu wybrany przed rozpoczęciem rejestrowania Dialog 'Makro' - przycisk 'Uruchom' Menu - nowa opcja menu specjalnie dla makra Pasek narzędzi - nowy przycisk specjalnie dla makra Przycisk w arkuszu Z edytora VBA
Makra Dodawanie makra do menu Menu: Narzędzia / Dostosuj Dialog 'Dostosuj': Opcja 'Polecenia', kategoria 'Makra' Przenieść 'Niestandardowy element menu' w pożądane miejsce w menu aplikacji Prawy przycisk myszy na nowej pozycji menu – możliwość zmiany nazwy i przypisania makra Zamknięcie dialogu 'Dostosuj' - koniec modyfikacji menu Można tworzyć nowe menu z dowolną zawartością wybierając kategorię 'Nowe menu' z opcji 'Polecenia' na dialogu 'Dostosuj'.
Makra Dodawanie makra do paska narzędzi Menu: Narzędzia / Dostosuj Dialog 'Dostosuj': Opcja 'Polecenia', kategoria 'Makra' Przenieść 'Przycisk niestandardowy' w pożądane miejsce w dowolnym pasku narzędzi aplikacji Prawy przycisk myszy na nowym przycisku – możliwość zmiany nazwy i przypisania makra Zamknięcie dialogu 'Dostosuj' - koniec modyfikacji pasków narzędzi Można tworzyć nowe paski narzędzi z dowolną zawartością wybierając opcję 'Paski narzędzi' na dialogu 'Dostosuj' i naciskając przycisk 'Nowy'.
Makra Kod zarejestrowanego makra Przycisk 'Edycja' na dialogu 'Makro' (menu: Narzędzia / Makro / Makra) Makro Zarejestrowane czynności użytkownika Zapisane w postaci procedury języka VBA Wykorzystujące obiekty udostępniane przez aplikację
Makra
Edytor Visual Basic
Okno eksploratora projektu Zawartość projektu: Obiekty Excela - This Workbook - skoroszyt projektu - Arkusze - Wykresy Formularze - własne okna dialogowe Moduły - moduły kodu (standardowe) Moduły klas - moduły klas wykorzystywane przy tworzeniu własnych obiektów Odwołania do innych projektów
Edytor Visual Basic Okno właściwości Obiekty - poszczególne arkusze, wykresy, moduły, moduły klas oraz This Workbook Zbiory właściwości różnych obiektów są różne Nie wszystkie właściwości zawsze można zmieniać Nie wszystkie właściwości są zawsze widoczne
Edytor Visual Basic Okno kodu Możliwości wyświetlania: Wszystkie procedury z modułu oddzielone poziomymi liniami Tylko jedna aktualnie wybrana procedura Okno podzielone na dwie niezależnie przewijane części Zawartości listy obiektów i listy procedur zależą od obiektu aktualnie wybranego do edycji
Edytor Visual Basic Okno kodu Edycja kodu Po przejściu do nowej linii automatycznie jest sprawdzana poprawność i dokonywane formatowanie (zamiana wielkości liter, stosowanie wcięć i kolorowanie składni) Znak podkreślenia '_' umożliwia kontynuowanie instrukcji w nowej linii, ale nie można dzielić w ten sposób ciągu znaków w cudzysłowach
Edytor Visual Basic Okno kodu Edycja kodu Kolory: - niebieski - słowa kluczowe - zielony - komentarze - czerwony - błąd
Edytor Visual Basic Okno instrukcji bezpośrednich Wykonywanie pojedynczych poleceń VBA. Wypisywanie tekstu instrukcją Debug.Print (lub krócej ' ? '), umożliwiające sprawdzanie wyniku wykonania instrukcji
Edytor Visual Basic Pomoc Domyślnie pomoc na temat Visual Basica nie jest instalowana. Można ją dodać bez potrzeby ponownego instalowania całego MS Office 'Microsoft Visual Basic - tematy Pomocy' - pomoc na temat aplikacji, z której uruchamiany jest Visual Basic. 'Spis treści i indeks' - pomoc na temat Visual Basica
Edytor Visual Basic Pomoc na temat Visual Basica Zawiera informacje na temat Visual Basic for Applications bez szczegółów dotyczących poszczególnych aplikacji: Obsługa środowiska VBA Opis języka VBA Tworzenie formularzy (własnych okien dialogowych) Odnośniki do pomocy na temat wykorzystania VBA w aplikacjach MS Office
Edytor Visual Basic Pomoc na temat Visual Basica dla Excela Zawartość Opis VBA Pełny opis Visual Basica dla Excela - opis wszystkich zdarzeń, funkcji, metod, obiektów i własności Informacje o dostępie do baz danych Opis tworzenia formularzy
Edytor Visual Basic Korzystanie z pomocy Sposoby znajdowania szukanych informacji: Zawartość – przeglądanie rozdziałów i podrozdziałów pomocy Indeks - znajdowanie słów kluczowych Wyszukiwanie - znajdowanie wystąpień wskazanego tekstu we wszystkich tekstach zawartych w pomocy Informacje o słowie występującym w kodzie – klawisz F1 UWAGA: Szukając informacji trzeba pamiętać, żeby szukać w dobrym zbiorze pomocy.
Podstawy języka Moduł Miejsce przechowywania instrukcji VB Złożony z deklaracji procedur Procedura Zbiór instrukcji wykonywanych w całości Złożona z instrukcji Ograniczona frazami: Sub i End Sub Funkcja Procedura zwracająca wartość Ograniczona frazami: Function i End Function Instrukcja Pojedyncza linia procedury lub funkcji
Podstawy języka
Procedury Zalety stosowania procedur: Większa czytelność kodu Prostsze dokonywanie zmian Prostsze testowanie kodu Możliwość wielokrotnego użycia kodu
Podstawy języka Procedury Kolejność szukania procedury w momencie jej wołania: Moduł, w którym znajduje się procedura wywołująca Pozostałe moduły znajdujące się w aktualnym skoroszycie W przypadku wywoływania procedury z innego skoroszytu należy dodać odwołanie do tego skoroszytu (menu: Narzędzia / Odwołania)
Podstawy języka Obiekt Przedmiot kontrolowany przez Visual Basic np. Workbook, Worksheet, Range, Application, Window Kolekcja Zbiór podobnych obiektów np. Workbooks, Worksheets Właściwość Cecha obiektu np. Column, Font, Formula, Name, Row, Style, Value dla obiektu Range Metoda obiektu Czynność, którą dany obiekt potrafi wykonać np. ClearContents, ClearFormats, Clear dla obiektu Range Właściwość obiektu może być obiektem.
Podstawy języka Hierarchia obiektów Excela
Podstawy języka Hierarchia obiektów Worksheets
Podstawy języka Składnia Odwołanie do właściwości obiektu: obiekt.właściwość Range("A1").Value ActiveSheet.Range("A1").Value Zmiana właściwości obiektu: obiekt.właściwość = wartość Range("A1").Value = 25 ActiveSheet.Range("A1").Value = "nowy tekst"
Podstawy języka Składnia Wywołanie metody bezargumentowej: obiekt.metoda Range("A1").Clear ActiveSheet.Range("A1").ClearFormats Wywołanie metody z argumentami: obiekt.metoda(arg1, arg2,..., argN ) ActiveCell.Offset(3,2) ActiveCell.Offset(rowOffset:=3,columnOffset:=2)
Podstawy języka Błędy w kodzie Syntaktyczne Wynikające z zastosowania nieprawidłowej składni instrukcji Większość jest automatycznie wychwytywana przez edytor po zakończeniu edycji linii Część jest wychwytywana przy próbie uruchomienia
Podstawy języka Błędy w kodzie Błędy wykonania Pokazywane podczas działania wywołanych procedur Błędy logiczne Rozbieżności działania procedur z oczekiwaniami Nieprawidłowe wyniki
Podstawy języka Narzędzia ułatwiające pisanie kodu Przyspieszają wpisywanie instrukcji Szczególnie przydatne do obsługi obiektów Excela Dostępne na pasku narzędzi Edycja
Podstawy języka Polecenie: Wyświetl właściwości/metody Lista wszystkich właściwości i metod obiektu Sposoby pokazania: napisać nazwę obiektu i kropkę przycisk na pasku narzędzi Ctrl+J Obsługa listy właściwości i metod obiektu: tabulator - wstawia wybrany element, aktualna linia nie zmienia się enter - wstawia wybrany element, edycja przechodzi do następnej linii ESC - zamknięcie listy bez wstawienia
Podstawy języka Polecenie: Wyświetl stałe Lista stałych akceptowalnych jako wartości własności obiektów Sposoby pokazania: napisać nazwę obiektu, kropkę, nazwę właściwości, znak równości przycisk na pasku narzędzi Shift+Ctrl+J Obsługa jak w przypadku listy właściwości i metod obiektu
Podstawy języka Polecenie: Informacje o parametrze Informacje o parametrach akceptowanych przez metodę obiektu Sposoby pokazania: napisać nazwę obiektu, kropkę, nazwę metody, nawias otwierający przycisk na pasku narzędzi Shift+Ctrl+I
Podstawy języka Polecenie: Dokończ wyraz Automatyczne dokończenie rozpoczętego wyrazu, jeśli zawarty jest on w zbiorze znanych wyrazów Jeśli istnieje więcej niż jedna możliwość dokończenia, umożliwiany jest wybór z listy Sposób wywołania polecenia: przycisk na pasku narzędzi Shift+Spacja
Podstawy języka Przeglądarka obiektów Menu: Widok / Przeglądarka obiektów Klawisz F2
Podstawy języka Wykorzystanie okna instrukcji bezpośrednich Doskonałe narzędzie testowania pojedynczych instrukcji, szczególnie przydatne przy jednoczesnym podglądzie arkusza Cells(2).Select Selection.Offset(2,3).Select Range("A1").Resize(10,5).Select ?Selection.Rows.Count 10 Worksheets("Arkusz2").Select ActiveCell.Formula = "tekst" Selection.Value = 12 Cells(3,2) = 30
Podstawy języka Wykorzystanie okna instrukcji bezpośrednich Doskonałe narzędzie testowania pojedynczych instrukcji, szczególnie przydatne przy jednoczesnym podglądzie arkusza Range("B4").Formula = "=B3*3" ?Range("B4").Formula =B3*3 ?Range("B4").FormulaR1C1 =R[-1]C*3 Range("B4").NumberFormat = "#.##0.00 $" Workbooks.Add Workbooks("Zeszyt2").Close ?ActiveWindow.Caption Zeszyt1 ActiveWindow.Height = 100
Wykład 2 Zadanie 1: Nagraj makro, wstaw je do menu i na pasek. Makro ma zmieniać tło, obramowanie, grubość tekstu i tekst TYLKO w aktywnej komórce Zadanie 2: Wywołaj to makro trzykrotnie dla elementów na diagonali (odwołania względne) poprzez menu->Uruchom makro, z paska i dodanego menu (2 ostatnie nie działają) Zamiana Run -> Call Zadanie 3: Rekurencja, F8
Typy danych Liczby całkowite: Byte - 1 bajt; wartości od 0 do 255 Integer - 2 bajty; od do Long - 4 bajty; od ok. -20 mld do ok. 20 mld Decimal - 14 bajtów; do 28 cyfr z przecinkiem Liczby rzeczywiste: Single - 4 bajty; od ok. -3.4e38 do ok. 1.4e45 Double - 8 bajtów; rzędu +/-1.8e308 Currency - 8 bajtów; +/-9.2e14 (+4 miejsca po przecinku)
Typy danych Wartości logiczne: Boolean - True/False Daty: Date - od 1/1/100 do 31/12/9999 Ciągi znaków: String (ustalonej długości) - od 0 do znaków String (zmiennej długości) - od 0 do ok. 2 mld znaków
Typy danych Obiekty: Object - wskazanie na dowolny obiekt Typ dopasowany do wartości: Variant Definiowany przez użytkownika: Type
Zmienne Zmienna: miejsce w pamięci, które może przechowywać wartość określonego typu. Ta wartość może się zmieniać w trakcie działania programu. Nazwa zmiennej: unikatowa w obrębie swojego zakresu do 255 znaków nie może zawierać znaku deklarującego typ, spacji, przecinka i kropki musi zaczynać się od litery małe i duże litery nie są rozróżniane nie można używać słów kluczowych VB
Zmienne Przykłady: wynik wynik_dod wynik_dodawania wynikDod wynikDodawania
Deklaracje Deklaracja zmiennej Informacja o nazwie zmiennej i jej typie Domyślnym typem jest Variant Nieobowiązkowa, ale zalecana: przyspieszenie wykonania oszczędność pamięci unikanie błędów
Deklaracje Składnia deklaracji: Dim zmienna As typ np.: Dim wynik As Integer Skrócona deklaracja przy użyciu specjalnych znaków typów danych: % Integer & Long ! Single # Currency $ String np.: Dim wynik%
Deklaracje Jawne deklarowanie zmiennych Wymuszenie deklarowania zmiennych w module: Option Explicit w pierwszej linii kodu modułu
Ciągi znaków Znaki zwykłe i sterujące ujęte w cudzysłowach Pusty ciąg: "" Zmienne łańcuchowe stałej długości np. Dim sNazwisko As String * 30 Zmienne łańcuchowe zmiennej długości np. Dim sCiag As String
Ciągi znaków Łączenie ciągów znaków operatorem & np. sCiag = "tekst" & "2" Specjalne znaki sterujące, m.in.: vbNewLine - znak nowego wiersza vbTab - tabulator vbBack - backspace np. "tekst linii pierwszej" & vbNewLine & _ "tekst linii drugiej"
Daty Wartość daty i czasu Dostępny zakres: od do Reprezentacja dat: użycie znaków # ciągi znaków zawierające poprawne daty
Daty Przykłady: Dim d As Date d = #12/24/ :33:00# d = #12/24/1998# d = #13:33:00# d = ”24 grudnia 1998” Uwaga: format zależny od formatu obowiązującego w systemie operacyjnym
Obiekty Excel zawiera dużą liczbę dodatkowych typów danych, należących do ogólnej kategorii danych typu Object Najczęściej wykorzystywane: Chart, Comment, FillFormat, Filter, Font, Outline, PageSetup, Range, Sheets, Window, Workbook, Worksheet, WorksheetFunction Tworzenie zmiennej obiektowej: Zadeklarować zmienną i określić jej typ (może być ogólny Object lub szczegółowy typ obiektów Excela) Przypisać zmienną do obiektu przy pomocy instrukcji Set
Obiekty Przykład:
Tablice Tablica Kolekcja zmiennych posiadających tę samą nazwę, rozróżnianych na podstawie indeksu, czyli numeru w kolekcji. Deklaracja jednowymiarowej tablicy Dim wektor(1 To 10) As Double Deklaracja wielowymiarowej tablicy: Dim macierz(1 To 10, 1 To 10) As Double
Tablice
Tablice dynamiczne Deklaracja: Dim tabDyn() As Integer Określenie rozmiaru: ReDim tabDyn(1 To 10) Zmiana rozmiaru: z wyczyszczeniem: ReDim tabDyn(1 To 100) z zachowaniem: ReDim Preserve tabDyn(1 To 100) Sprawdzenie rozmiaru: UBound(tabDyn)
Tablice dynamiczne
Stałe Stała Nazwa o określonym znaczeniu zastępujące wartości niezmienne w kodzie programu Przykłady deklaracji stałych: Const Tytul = "Wczytywanie danych" As _ String Const As Integer Pot_2_5 = 32 Const Poczatek As Date = #1/1/99#
Stałe Nie można deklarować stałych obiektów Pewne stałe są zadeklarowane w Visual Basicu lub w Excelu, np.: vbNewLine, vbTab, xlLeft, xlSolid (spis dostępny w Przeglądarce obiektów)
Zasięg zmiennych i stałych Zasięg Określa dostępność zmiennych i stałych dla innych procedur i modułów Trzy poziomy zasięgu: Poziom procedury (zmienne, stałe lokalne) Prywatny poziom modułu (prywatne) Publiczny poziom modułu (publiczne)
Zasięg zmiennych i stałych Poziom procedury (zmienne, stałe lokalne) deklaracja wewnątrz procedury niewidoczne poza macierzystą procedurą Prywatny poziom modułu (prywatne) deklaracja w sekcji deklaracji modułu z użyciem słowa kluczowego Private dostępna dla wszystkich procedur zawartych w module Publiczny poziom modułu (publiczne) deklaracja w sekcji deklaracji modułu z użyciem słowa kluczowego Public dostępna dla wszystkich procedur w projekcie
Zasięg zmiennych i stałych
Czas życia zmiennych Czas życia Określenie jak długo (lub kiedy) zmienna jest poprawna. Dotyczy wyłącznie zmiennych lokalnych. Zmienna lokalna jest niszczona automatycznie po wyjściu sterowania poza jej zasięg (wyjściu z procedury) Zmienne lokalne zadeklarowane jako Static nie są niszczone
Czas życia zmiennych
Procedury i funkcje Niepodzielne bloki instrukcji wykonujące określone czynności Procedury Nie zwracają żadnej wartości Funkcje Zwracają wartość
Procedury Nie zwracają żadnej wartości Deklaracja [Public lub Private] _ Sub nazwaProcedury(arg1 As typArg1, _ arg2 As typArg2,...) Koniec: End Sub
Funkcje Zwracają wartość Deklaracja [Public lub Private] _ Function nazwaFunkcji(arg1 As typArg1, _ arg2 As typArg2,...) As typZwracany Koniec: End Function
Uruchamianie W Excelu: Procedury - dostępne w oknie dialogowym 'Makro', skąd można je uruchomić Funkcje - dostępne po wybraniu kategorii 'Wszystkie' lub 'Użytkownika' w oknie dialogowym 'Wklej funkcję'
Uruchamianie W edytorze Visual Basic: Uruchamianie menu Uruchom / Uruchom makro (kursor musi być w obrębie procedury lub funkcji, którą chcemy uruchomić) wpisać nazwę uruchamianej funkcji lub procedury w oknie Instrukcji bezpośrednich i nacisnąć Enter Przerywanie - menu Uruchom / Przerwij Resetowanie - menu Uruchom / Zresetuj
Wywoływanie Procedura Call nazwaProcedury(parametry,...) nazwaProcedury parametry Funkcja nazwaFunkcji(parametry,...)
Wywoływanie
Zwracanie wartości przez funkcje Domyślnym typem zwracanej wartości jest Variant Aby zwrócić wartość z funkcji przypisuje się tę wartość nazwie funkcji Można wielokrotnie przypisywać wartość nazwie funkcji
Zwracanie wartości przez funkcje
Zadanie 1: Funkcja obliczająca sumę (nie nazywać „suma”) Zadanie 2: Funkcja obliczająca sumę szeregu arytmetycznego od 1 do podanej liczby Zadanie 3: Funkcja łącząca login z nazwą serwera Zadanie 4: Funkcja TestZnaku z if’ami
Argumenty Domyślny typ argumentu: Variant Przekazywane przez referencję: ByRef Przekazywane przez wartość: ByVal
Wykład 3 Zadanie 1: Procedura pobierająca 2 liczby i zwracająca je w kolejności mniejsza/większa Zadanie 2: Pobierająca 2 teksty i zwracająca je w kolejności alfabetycznej (Należy użyć zmiennych przekazywanych przez zmienną)
Argumenty opcjonalne Argumenty, których wartości nie muszą być przekazywane do procedury lub funkcji przy jej wywołaniu. Deklaracja argumentu jako opcjonalnego: Optional Sprawdzenie, czy opcjonalny argument został przekazany do procedury lub funkcji: IsMissing(nazwa_arg) Argumenty opcjonalne muszą być umieszczone na końcu listy argumentów
Argumenty opcjonalne
Argumenty nazwane Wywoływanie procedur i funkcji z podaniem nazw argumentów i ich wartości. Zalety Większa czytelność i przejrzystość kodu Nie ma znaczenia kolejność argumentów
Argumenty nazwane Przykład: funkcja, w której wszystkie argumenty są opcjonalne i jej wywołania: SaveAs(Filename, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AddToMru, TextCodePage, TextVisualLayout) ActiveSheet.SaveAs "C:\01.xls",,,,, _ True,,, True ActiveSheet.SaveAs FileName:="C:\01.xls", _ CreateBackup:=True, _ AddToMru:=True
Wyjście z procedury lub funkcji Automatyczne na końcu kodu procedry lub funkcji Przed końcem kodu, używając instrukcji: Exit Sub Exit Function
Procedury i funkcje prywatne Prywatne Mogą być wywoływane tylko z wnętrza modułu, w którym zostały zdefiniowane Oznaczane słowem Private Np. Private Function TekstDoSpacji(tekst _ As String) As String
Procedury i funkcje publiczne Publiczne Mogą być wywoływane z dowolnego modułu w projekcie Oznaczane słowem Public Np. Public Sub Komunikat(tekst As String) Domyślnie wszystkie są publiczne
Procedury i funkcje publiczne Aby kod w jednym projekcie mógł wywoływać procedurę lub funkcję publiczną z innego projektu, projekt wywołujący musi posiadać odwołanie do projektu wywoływanego (menu Narzędzia / Odwołania) Składnia wywołania: NazwaModułu.NazwaProcedury Przykład: FunkcjeTekstowe.TekstDoSpacji("siedem osiem")
MsgBox MsgBox(prompt[, buttons] [, title] [,helpfile, context])
MsgBox MsgBox(prompt[, buttons] [, title] [,helpfile, context]) Przyciski: vbOKOnly, vbOKCancel, vbAbortRetryIgnore, vbYesNoCancel, vbYesNo, vbRetryCancel Ikony: vbCritical, vbQuestion, vbExclamation, vbInformation Zwracane wartości: vbOK, vbCancel, vbAbort, vbRetry, vbIgnore, vbYes, vbNo
InputBox InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context]) default – wartość domyślna w oknie edycji xpos, ypos – (15 twips = 1 piksel)
InputBox
Operacje na ciągach znaków Len(ciag) - długość ciągu np. Len("Tekst") 5 UCase(ciag) - zamiana na wielkie litery np. UCase("Tekst") "TEKST" LCase(ciag) - zamiana na małe litery np. LCase("Tekst") "tekst"
Operacje na ciągach znaków Left(ciag, dlugosc) - początek ciągu np. Left("Tekst",2) "Te" Right(ciag, dlugosc) - koniec ciągu np. Right("Tekst",3) "kst" Mid(ciag, poczatek, dlugosc) - wnętrze ciągu np. Mid("Tekst",2,3) "eks" Instr(poczatek, ciag, podciag) - szukanie podciągu w ciągu np. Instr(1,"Tekst","e") 2
Operacje na ciągach znaków Str(liczba) - konwersja liczby na ciąg np. Str(12) "12" Val(ciag) - konwersja ciągu na liczbę np. Val("12") 12 String(liczba, podciag) - powtarzanie podciągu w ciągu np. String(2, "ma") "mama" Space(liczba) - stworzenie ciągu złożonego ze spacji np. Space(3) " "
Operacje na ciągach znaków Trim(ciag) - usuwanie spacji początkowych i końcowych np. Trim(" Tekst ") "Tekst" LTrim(ciag) - usuwanie spacji początkowych np. LTrim(" Tekst ") "Tekst " RTrim(ciag) - usuwanie spacji końcowych np. RTrim(" Tekst ") " Tekst"
Porównywanie ciągów znaków ciag1 = ciag2 True tylko gdy są identyczne, w przeciwnych przypadkach False ciag Like wzorzec Option Compare Binary porównywanie domyślne polegające na porównywaniu numerów znaków Option Compare Text porównywanie uzależnione od ustawień regionalnych (np. dla sortowania polskich tekstów)
Porównywanie ciągów znaków Znaki specjalne we wzorcu: ? - dowolny pojedynczy znak * - dowolna liczba dowolnych znaków # - dowolna cyfra [lista_znakow] - dowolny znak należący do listy [!lista_znakow] - dowolny znak nie należący do listy
Porównywanie ciągów znaków Przykładowe prawdziwe dopasowania: "tekst12" Like "te?st" "tekst12" Like "t*t12" "tekst12" Like "te???#?" "tekst12" Like "[a-z]ekst[12][0-9]" "tekst12" Like "[!0-9]*[0-9]"
Operacje na dacie i czasie Pobranie Date, Time, Now – pobranie systemowej daty, czasu, daty i czasu Year, Month, Day, Weekday, Hour, Minute, Second – pobranie składowych daty i czasu Timer – pobranie liczby sekund od północy Ustawienie Date, np. Date = # # Time, np. Time = #17:43#
Operacje na dacie i czasie DateAdd(odstep, liczba, data) – dodanie do daty liczby odstępów DateAdd("m", 3, " ") # # DateDiff(odstep, data1, data2) – pobranie liczby odstępów pomiędzy datami DateDiff("d", " ", " ") 59 DatePart(odstep, data) – pobranie składowej daty np. DatePart("h", " :43") 17
Operacje na dacie i czasie DateSerial(rok, miesiac, dzien) – określenie daty, np. DateSerial( , 8-2, 1-1) # # DateValue(wyrazenie) – określenie daty, np. DateValue("12 luty 1969") # # TimeSerial(godzina, minuta, sekunda) – określenie czasu, np. TimeSerial(12 - 6, -15, 0) #05:45:00# TimeValue(wyrazenie) – określenie czasu, np. TimeValue("4:35:17 PM") #16:35:17#
Sprawdzanie danych IsDate(wart) - czy wartość jest poprawną datą IsEmpty(zmienna) - czy zmienna nie została zainicjowana IsEmpty(komorka) - czy komórka jest pusta IsNull(zmienna) - czy zmienna ma wartość Null (nie zawiera żadnych danych) IsNumeric(wartosc) - czy wartość jest liczbą
Konwersje typów CBool(wyrazenie) Boolean CByte(wyrazenie) Byte CCur(wyrazenie) Currency CDate(wyrazenie) Date CDbl(wyrazenie) Double CDec(wyrazenie) Decimal CInt(wyrazenie) Integer CLng(wyrazenie) Long CSng(wyrazenie) Single CVar(wyrazenie) Variant CStr(wyrazenie) String
Funkcja Format Format(wyrażenie [, format [, pierwszy_dzień_tygodnia [, pierwszy_tydzień_roku]]]) format dla dat: d 1-30 dd 1-30 ww 1-51 mmmm nazwa miesiąca y yyyy vbSunday … vbSaturday vbFirstJan1 vbFirstFourDays vbFirstFullWeek
Funkcja Format Format(czas, "h:m:s") "17:4:23" Format(czas, "hh:mm:ss AMPM") "05:04:23 PM" Format(data, "dddd, mmm d yyyy") "Wednesday, Jan " Format(23) "23" Format(5459.4, "##,##0.00") "5,459.40" "5 459,40" Format(334.9, "###0.00") "334.90" Format(5, "0.00%") "500.00%" Format("Tekst", "<") "tekst" Format("Tekst", ">") "TEKST"
Instrukcje warunkowe Pozwalają uzależnić działanie programu od zadanych warunków zapisanych w postaci wyrażeń warunkowych Wyrażenia warunkowe (boolowskie) mogą przyjmować tylko dwie wartości: Prawda ( True ) Fałsz ( False ) Wyrażenia warunkowe tworzone są przy pomocy operatorów porównania i operatorów logicznych
Operatory Operatory porównania = równe, <> różne, > większe, < mniejsze, >= większe lub równe, <= mniejsze lub równe Is identyczność obiektów Like zgodność ze wzorcem Operatory logiczne AND koniunkcja OR alternatywa
If … Then Instrukcja lub instrukcje zostaną wykonane tylko wtedy, gdy warunek jest spełniony If warunek Then instrukcja Najczęściej używane, gdy tylko jedna instrukcja ma zostać wykonana Można podać więcej instrukcji, ale muszą być zapisane w jednej linii i oddzielone dwukropkiem
If … Then If warunek Then [instrukcje] End If Jedna lub więcej instrukcji do wykonania, każda instrukcja zapisana w jednej linii Zasada działania: Obliczany jest warunek Jeśli warunek jest spełniony, wtedy wykonywane są instrukcje
If … Then
If … Then … Else Inne instrukcje zostaną wykonane, gdy warunek jest spełniony, inne, gdy nie jest spełniony If warunek Then instrukcja1 Else instrukcja2 Wykorzystywana, gdy pojedyncze instrukcje są wykonywane w obu przypadkach Zasada działania: Obliczany jest warunek Jeśli warunek jest spełniony, to wykonywana jest instrukcja1 Jeśli warunek nie jest spełniony, to wykonywana jest instrukcja2
If … Then … Else If warunek Then [instrukcje1] Else [instrukcje2] End If Wykorzystywana, gdy więcej niż jedna instrukcja powinna zostać wykonana
If … Then … ElseIf Rozszerzenie Else o możliwość sprawdzenia jednego lub więcej dodatkowych warunków If warunek1 Then [instrukcje1] ElseIf warunek2 Then [instrukcje2] ElseIf warunek3 Then [instrukcje3]... Else [instrukcjeN] End If
If … Then … ElseIf Nie ma ograniczenia na liczbę klauzul ElseIf Klauzula Else jest opcjonalna Zasada działania: Obliczany jest warunek1. Jeśli jest spełniony, wykonywane są instrukcje1 i skok do End If W przeciwnym przypadku obliczany jest warunek2. Jeśli jest spełniony, wykonywane są instrukcje2 i skok End If ... Jeśli żaden warunek nie jest spełniony, wykonywane są instrukcjeN
If … Then … ElseIf
Select Case Wykonanie jednego z kilku bloków instrukcji w zależności od wartości podanego wyrażenia Select Case wyrażenie Case wartość1 [instrukcje1] Case wartość2 [instrukcje2]... Case Else [instrukcjeN] End Select
Select Case Część Case Else jest opcjonalna Dozwolone jest umieszczanie wielu wartości oddzielanych przecinkami, np. Case 1, 2, 3 Dozwolone jest stosowanie Is z operatorami >, =,, =, np. Case Is <= 15 Dozwolone jest sprawdzanie zakresów przy pomocy To, np. Case 1 To 10
Zadanie Wyliczyć rozwiązanie układu dwóch równań liniowych metodą wyznaczników Wersja uproszczona zakłada, że rozwiązanie zawsze istnieje a 1 * x + b 1 * y = c 1 a 2 * x + b 2 * y = c 2 W = a 1 * b 2 – a 2 * b 1 W x = c 1 * b 2 – c 2 * b 1 x = W x / W W y = a 1 * c 2 – a 2 * c 1 y = W y / W
Zadanie Algorytm: A1. [Pobranie danych] Pobierz a1, a2, b1, b2, c1 i c2 A2. [Wyliczenie W] W ← a1* b2 – a2 * b1 A3. [Wyliczenie Wx] Wx ← c1* b2 – c2* b1 A4. [Wyliczenie Wy] Wy ← a1* c2 – a2* c1 A5. [Wyznaczenie x] Wypisz Wx / W A6. [Wyznaczenie y] Wypisz Wy / W Dobór pewnych danych (gdy W = 0) spowoduje błąd
Wykład 4 Zadanie 1: Napisz funkcję LiczbaDniMiesiaca zwracającą liczbę dni miesiąca o numerze podanym jako parametr Zadanie 2: Napisz funkcję DataPlus51Dni zwracającą datę o 51 dni późniejszą niż ta podana jako parametr Zadanie 3: Napisz funkcję DataPlusMiesiącITydzien zwracającą datę późniejszą o miesiąc i tydzień niż ta podana jako parametr
Wykład 4 Zadanie 4: Napisz funkcję Login zwracającą login z adresu Zadanie 5: Napisz funkcję Serwer zwracającą adres serwera z adresu Zadanie 6: Napisz funkcję Strona dodającą (tylko jeśli potrzeba) tekst „ przed adresem
Pętle Struktury programowe pozwalające wykonywać instrukcję lub blok instrukcji wielokrotnie. Warunek sterujący pętlą określa, kiedy wykonywanie instrukcji zostanie zakończone lub jak długo instrukcja ma być wykonywana. W przypadku złego zdefiniowania warunku sterującego, działanie programu może się nigdy nie zakończyć - instrukcje objęte pętlą będą wykonywane w nieskończoność. Nieskończone pętle można przerwać klawiszami Ctrl+Break
Do Do If warunek Then Exit Do [instrukcje] Loop Zakończenie wykonywania pętli nastąpi, gdy w chwili sprawdzania warunku jego wartość będzie True
Do
Wykład 4 Zadanie 7: Napisz funkcję MojaSilnia zwracającą silnię z liczby podanej jako parametr Zadanie 8: Napisz funkcję CiagArytmetyczny zwracającą sumę ciągu arytmetycznego od wartości pierwsza do wartości ostatnia (podanych jako parametry funkcji)
Do Until Do Until warunek [instrukcje] Loop Instrukcje będą wykonywane, aż do chwili, gdy warunek osiągnie wartość True Jeśli na początku pętli warunek będzie miał wartość True, instrukcje nie zostaną wykonane Warunek jest sprawdzany przed każdym wykonaniem instrukcji
Do Until
Do While Do While warunek [instrukcje] Loop Instrukcje będą wykonywane tak długo, jak długo warunek będzie miał wartość True (czyli aż do chwili, gdy warunek osiągnie wartość False ) Jeśli na początku pętli warunek będzie miał wartość False, instrukcje nie zostaną wykonane Warunek jest sprawdzany przed każdym wykonaniem instrukcji
Do While
Do Until ze sprawdzaniem warunku na końcu Do [instrukcje] Loop Until warunek Instrukcje będą wykonywane, aż do chwili, gdy warunek osiągnie wartość True Warunek jest sprawdzany po każdym wykonaniu instrukcji Bez względu na początkową wartość warunku instrukcje zostaną wykonane co najmniej raz
Do Until ze sprawdzaniem warunku na końcu
Do While ze sprawdzaniem warunku na końcu Do [instrukcje] Loop While warunek Instrukcje będą wykonywane tak długo, jak długo warunek będzie miał wartość True (czyli aż do chwili, gdy warunek osiągnie wartość False ) Warunek jest sprawdzany po każdym wykonaniu instrukcji Bez względu na początkową wartość warunku instrukcje zostaną wykonane co najmniej raz
Do While ze sprawdzaniem warunku na końcu
While While warunek [instrukcje] Wend Instrukcje będą wykonywane tak długo, jak długo warunek będzie miał wartość True (czyli aż do chwili, gdy warunek osiągnie wartość False ) Jeśli na początku pętli warunek będzie miał wartość False, instrukcje nie zostaną wykonane Warunek jest sprawdzany przed każdym wykonaniem instrukcji
While
Wykład 5 Zadanie 1: Napisz procedurę PierwszyWyraz wpisującą pierwszy wyraz tekstu z aktywnej komórki do komórki sąsiadującej z prawej strony Zadanie 2: Napisz procedurę LiczbaSpacji wypisującej w okienku MsgBox liczbę spacji w tekście wpisanym do aktywnej komórki Zadanie 3: Napisz procedurę WyrazyAktywnejKomorki wpisującej kolejne wyrazy do komórek na prawo od aktywnej
Wykład 5 Zadanie 4: Napisz procedurę OproczPodciagu pobierającą za pomocą okienka InputBox tekst od użytkownika i wpisującą do komórki sąsiadującej z prawej strony tekst z aktywnej komórki z wyciętym tekstem od użytkownika Zadanie 5: Zamień powyższą procedurę na funkcję – tekst do usunięcia ma być podawany jako parametr tej funkcji
Wykład 5 Zadanie 6: Napisz funkcję OstatniRoboczyDzienMiesiaca( Miesiac, Rok ) pobierającą jako parametry miesiąc i rok, a zwracającą datę reprezentującą ostatni dzień tego miesiąca Zadanie 7: Przekształć poprzednią funkcję tak, aby pobieranym parametrem była dowolna data, a zwracaną wartością – data reprezentująca ostatni dzień miesiąca zawierającego przekazaną datę
For For licznik = start To stop Step krok [instrukcje] Next licznik Na początku pętli zmiennej licznik nadawana jest wartość start Przed każdym wykonaniem instrukcji sprawdzane jest, czy wartość zmiennej licznik przekracza wartość stop, jeśli nie - instrukcje zostaną wykonane, jeśli tak - pętla zostaje przerwana Po każdym wykonaniu instrukcji wartość zmiennej licznik zwiększana jest o wartość krok
For For licznik = start To stop Step krok [instrukcje] Next licznik Fraza Step krok jest opcjonalna, domyślną wartością kroku jest 1 Krok może być ujemny Podawanie nazwy zmiennej we frazie Next jest opcjonalne W dowolnym miejscu wewnątrz pętli można ją przerwać przy pomocy instrukcji Exit For
For
For Each For Each element In kolekcja [instrukcje] Next element Instrukcje zostaną wykonane dla każdego elementu należącego do kolekcji Podawanie nazwy zmiennej we frazie Next jest opcjonalne W dowolnym miejscu wewnątrz pętli można ją przerwać przy pomocy instrukcji Exit For
For Each
Zagnieżdżanie pętli Umieszczanie jednej pętli w obrębie drugiej Wewnętrzna pętla zostanie wykonana w całości (czyli instrukcje w niej zawarte zostaną wykonane wielokrotnie) w każdym cyklu pętli zewnętrznej Można dowolnie zagnieżdżać pętle, bez względu na ich rodzaj
Tablica Zmienna będąca tablicą reprezentuje zbiór wartości mających ten sam typ danych. Możliwe jest tworzenie tablic mających do 60 wymiarów Elementy tablicy są zmiennymi tych samych typów Dostęp do elementów tablicy jest możliwy poprzez ich indeksy, czyli liczby określające położenie w każdym wymiarze Każdemu zestawowi możliwych indeksów odpowiada dokładnie jeden element tablicy Najmniejszą i największą dozwoloną wartość każdego indeksu podaje się w deklaracji tablicy
Deklarowanie tablic Deklaracja tablicy rezerwuje w pamięci miejsce na przechowywanie wartości znajdujących się w tablicy. Dim nazwaTablicy([najmniejszyIndeks1 To] najwiekszyIndeks1, [...]) As typ Jeśli tablica została zadeklarowana bez wskazania najmniejszego dozwolonego indeksu, to będzie on równy ustawieniu Option Base Opcja Option Base może przyjmować wartości 0 (domyślnie) i 1
Deklarowanie tablic Przykłady: Dim Nazwiska(20) As String Dim Imiona$(10) Dim DatyWazne(5) As Date Dim WartosciFunkcji(1000) As Double Dim Macierz(1 To 10, 1 To 20) As Integer
Użycie tablic Dostęp do składowych tablicy jest możliwy poprzez podanie wszystkich indeksów oddzielonych przecinkami, zawartych w nawiasach Podawane indeksy muszą mieścić się w ograniczeniach podanych w deklaracji
Użycie tablic Przykłady: Nazwiska(1) = "Abacki" s = s & Imiona(5) DatyWazne(5) = Now() WartosciFunkcji(i) = _ WartosciFunkcji(i-1) + WartosciFunkcji(i-2) Macierz(3,3) = 1
Użycie tablic
Tablice dynamiczne Tablice, których rozmiar może ulegać zmianie podczas pracy programu Schemat użycia: 1. Zadeklarować bez podania dozwolonych indeksów: Dim tab() As Integer 2. Wyznaczyć początkowy rozmiar tablicy: ReDim tab(3,3) 3. Zmienić rozmiar tablicy z wyczyszczeniem: ReDim tab(2,5) 4. Zmienić rozmiar tablicy z zachowaniem aktualnych wartości: ReDim Preserve tab(5,3)
Funkcje obsługi tablic Array - utworzenie zmiennej typu Variant będącej jednowymiarową tablicą, np. Dim tab As Variant tab = Array("pierwszy", "drugi", "trzeci") IsArray - sprawdzenie, czy dana zmienna jest tablicą, np. IsArray(tab)
Funkcje obsługi tablic Erase - wyczyszczenie tablicy, w przypadku tablicy dynamicznej zwalniana jest przydzielona jej pamięć, np. Erase(tab) LBound - podaje najmniejszy indeks tablicy, np. LBound(tab) UBound - podaje największy indeks tablicy, np. UBound(macierz,2)
Tablica parametrów funkcji Sposób na przekazywanie do procedury lub funkcji zmiennej liczby parametrów Parametr typu ParamArray, np. Function suma(ParamArray liczby() _ As Variant) As Double Function suma(ParamArray liczby()) As Double Parametr musi być dynamiczną tablicą elementów typu Variant
Tablica parametrów funkcji