Wstęp do makr 2 XII 2013
Wstęp do makr środowiska pracy programisty VBA bezpieczeństwo – poziom zabezpieczeń tworzenie makr przy pomocy nagrywania przypiswanie makr do przycisków i paska „szybki dostęp”
Co można uzyskać dzięki językowi VBA? Automatyzacja czynności, które wykonujemy w regularnych odstępach czasu (np. aktualizacja Monitora Konwergencji) albo wielokrotnie (ta sama operacja w wielu wierszach lub arkuszach) Własne funkcje Własne interfejsy służące do wprowadzania danych i prezentacji wyników
Jak wyświetlić kartę Deweloper? Kliknąć (okrągły) przycisk pakietu Office Opcje programu Excel Popularne Pokaż kartę Deweloper na Wstążce Jak utworzyć makro? Poprzez rejestrację Poprzez napisanie kodu źródłowego w module Visual Basic
Bezpieczeństwo makr Przycisk pakietu Office Opcje programu Excel Centrum zaufania Ustawienia centrum zaufania Ustawienia makr Zaufane lokalizacje (dodaj nową lokalizację)
Ćwiczenie: przykładowe makro Wpisz dowolną liczbę w dowolną komórkę Deweloper/Użyj odwołań względnych lub bezwzględnych Deweloper/Zarejestruj makro Nazwij makro (brak odstępów), nadaj skrót, dodaj komentarz Jeśli chcesz używać makra we wszystkich skoroszytach, zapisz je w skoroszycie makr osobistych Po naciśnięciu OK, wciśnij ctrl+c Przejdź do drugiego arkusza i wciśnij ctrl+v Zatrzymaj rejestrowanie makra Zarejestrowałeś/-aś pierwsze makro! Możesz teraz wypróbować, jak działa za pomocą przypisanego uprzednio skrótu
Ćwiczenie – ciąg dalszy Przejrzyj zarejestrowane makro: Alt+F11 lub Deweloper/Visual Basic lub Deweloper/makra/edycja Sub Przeklej() ' ' Przeklej Makro <- KOMENTARZE SĄ IGNOROWANE PRZEZ KOMPILATORA ' Wkleja zawartość komórki do drugiego arkusza ' Klawisz skrótu: Ctrl+i Selection.Copy ' Kopiuj Sheets("Arkusz2").Select ' Wybierz Arkusz2 ActiveSheet.Paste ' Wklej End Sub Zmień powyższy kod procedury tak, aby zawartość komórki źródłowej była wklejana do komórki wynikowej położonej w tym samym miejscu, co komórka źródłowa (choć w innym arkuszu) Skorzystaj z następujących linijek: Dim adres As String ' Deklarowanie zmiennej adres = ActiveCell.Address ' Przypisanie adresu do zmiennej Range(adres).Select ' Wybór komórki o uprzednio zapisanym adresie
Jak przypisać makro do przycisku? Deweloper/Wstaw/Formanty formularza/Przycisk Wybierz makro, które chcesz przypisać i naciśnij OK. Jeśli chcesz zmienić etykietę (napis) na przycisku, naciśnij prawym klawiszem myszy na przycisk, a potem „edytuj tekst”
Jak przypisać makro do paska „Szybki dostęp”? Kliknij na wstążkę prawym klawiszem myszy Dostosuj pasek narzędzi „Szybki dostęp” Wybierz polecenia z: Makra Zaznacz makro, które chcesz dodać, dodaj i naciśnij OK
Podstawy Visual Basic for Applications (cz. I) główne elementy okna edytora VBA (eksplorator projektu, właściwości, kod programu, formularz) zasady tworzenia procedur zmienne – definiowanie i ich cechy definicja pojęć: obiekt, atrybut (właściwość), metoda, argument, kolekcja sterowanie przebiegiem programu: konstrukcje warunkowe i pętle zasięg zmiennych, procedur i funkcji -> przeniesione na inny dzień
Okno Edytor projektu VB Skrót Atl+F11 lub Deweloper/Visual Basic Pasek menu Pasek narzędziowy Okno Eksplorator projektu Okno kodu Okno bezpośrednich instrukcji Okno właściwości
Okno Eksplorator projektu Dojście na skróty: (alt+F11) ctrl+r Zawiera trzy przyciski: Pokaż kod Pokaż obiekt Przełącz foldery Wyświetla hierarchiczną listę aktualnie otwartych projektów oraz zawartych w nich elementów, m.in.: Arkusze Wykresy ThisWorkbook (skoroszyt) Moduły (w tym klasy) Formularze (UserForm) Odwołania do innych projektów
Standardowy pasek narzędzi VB Pokaż Microsoft Excel Tryb projekto-wania Okno właściwości Przybornik Przerwij Eksplorator projektu Przeglądarka obiektów Wiersz i kolumna w oknie kodu Wstaw UserForm Uruchom procedurę Sub Zresetuj
Okno właściwości Dojście na skróty: (alt+F11) F4 Służy do przeglądania i ustawiania właściwości zaznaczonego obiektu, np. formularza, projektu lub modułu Właściwości przeglądamy alfabetycznie lub według kategorii
Okno Formularz Umożliwia tworzenie okien dialogowych Do rysowania formantów służą przyciski (kontrolki) przybornika (toolbox) Do ustawiania właściwości formantów służy okno właściwości
Ćwiczenie: projektujemy formularz Obiekt Name Caption/Text Inne USERFORM usfRegula SRW FRAME frmRamka Stabilizująca reguła wydatkowa LABEL lblKwota_1 Kwota wydatków w roku n-1 lblKwota_wynik BorderStyle 1 TEXTBOX txtKwota_1 600000000 txtKorektaCPI 1 txtPrognozaCPI 1,025 txtSredniPKB 1,03 txtKorekta -0,02 BUTTON cmdOblicz Oblicz cmdZakoncz Zakończ
Okno Kod programu Dojście na skróty: (alt+F11) F7 lub nacisnąć prawym przyciskiem myszy na dany formularz / moduł, a następnie „view code” Służy do wpisywania, przeglądania i edytowania kodu U samej góry okna – dwa rozwijane pola listy (obiekt i procedury), dzięki którym można szybko poruszać się w obrębie programu Prawe ramię gwiazdki wskazuje linię podziału okna W lewym dolnym rogu znajdują się ikonki o nazwie widok i pełny widok modułu
Procedury: Sub i Function Procedura Sub (zwykła) wykonuje określone zadania, nie zwraca jawnie żadnych wartości, zaczyna się Sub, a kończy End Sub Private Sub zabezpiecza przed wykorzystaniem procedur z innych formularzy Procedura Function (funkcja) zwraca pojedynczą wartość, Zaczyna się Function, a kończy End Function
Jak pisać kod procedury w VB? Z klawiatury / edytować zarejestrowane makra / kopiować kod z innego modułu Wcięcia wiersza za pomocą tab (szczególnie przy pętlach i warunkach logicznych) Łamanie wierszy za pomocą podkreślnika _ Generalnie wielkość liter nie ma znaczenia Cofamy operację za pomocą ctrl+z Zapisujemy za pomocą ctrl+s, jeśli skoroszyt posiada makro, to rozszerzenie .xlsm
Ćwiczenie: piszemy program Option Explicit ‘To polecenie wymusza deklarację zmiennych Dim Kwota_wynik As Single ‘Deklarujemy zmienne Dim Kwota_1 As Single Dim KorektaCPI As Single Dim PrognozaCPI As Single Dim SredniPKB As Single Dim Korekta As Single Private Sub cmdOblicz_Click() 'Procedura oblicza kwotę wydatków na rok n Kwota_1 = txtKwota_1.Value KorektaCPI = txtKorektaCPI.Value PrognozaCPI = txtPrognozaCPI.Value SredniPKB = txtSredniPKB.Value Korekta = txtKorekta.Value Kwota_wynik = Kwota_1 * KorektaCPI * PrognozaCPI * (SredniPKB + Korekta) lblKwota_wynik = Kwota_wynik End Sub Private Sub cmdZakoncz_Click() Unload Me
Typy danych w Visual Basic Typ danych Wielkość (w bajtach) Charakterystyka (zakres) Boolean 2 Wartość logiczna PRAWDA / FAŁSZ Byte 1 Mała liczba całkowita od 0 do 255 Integer Liczba całkowita od -32768 do 32767 Long 4 Liczba całkowita długa (miliardy) -2147483648 do 2147483648 Single Liczba rzeczywista od -3,402823E38 do 1,401298E45 Double 8 Liczba rzeczywista dwukrotnie większa od liczby Single (E-324 do E308) Currency Liczba całkowita z 4 miejscami po przecinku Decimal 14 Duże liczby zapisywane w systemie dziesiętnym Date Data w przedziale 1/1/100 do 31/12/9999 String Długość ciągu znaków Łańcuch znaków od 0 do 65535 znaków Object Umożliwa dostęp do któregokolwiek obiektu, rozpoznawanego przez Excel Array Zależy od wielkości tablicy
Definicje Obiekt – element manipulowany przy użyciu VBA, np. zakresy, wykresy, rysunki itp. Atrybut/właściwość/własność – określona cecha obiektu, np. pole tekstowe ma czcionkę, tekst, rodzaj ramki, nazwę itp. Metoda – operacja powiązana z obiektem, np. metoda Show służy do pokazania (usfRegula.Show) Argument – dane konieczne do tego, aby dana procedura mogła działać Kolekcja – zbiór podobnych obiektów, np. kolekcja Sheets (zawiera arkusze i wykresy), kolekcja Workbooks, kolekcja Worksheets
Konstrukcje warunkowe (cz. I): IF, THEN, ELSE If warunek Then instrukcja Np. If (PrognozaCPI > 1.05 And SredniPKB > 1.04) Or PrognozaCPI <= 1 Then MsgBox ("Zła prognoza") If warunek Then [instrukcje] End If If warunek Then Instrukcje1 Else Instrukcje2 If warunek1 Then [instrukcje, gdy warunek1 jest prawdą] ElseIf warunek2 Then [instrukcje2, gdy warunek2 jest prawdą] ElseIf warunek3 Then [instrukcje3, gdy warunek3 jest prawdą] … Else [instrukcje, gdy wszystkie warunki są fałszywe] …
Konstrukcje warunkowe (cz. II): SELECT CASE Select Case wyrażenie Case wartość1 Instrukcje, gdy wartość1 równa się wyrażeniu Case wartość2 Instrukcje, gdy wartość2 równa się wyrażeniu Case wartość3 Instrukcje, gdy wartość3 równa się wyrażeniu … End Select
Pętle UNTIL, WHILE i FOR Do If warunek Then Exit Do [instrukcje] Loop Do Until warunek Do While warunek Do [instrukcje] Loop While warunek For licznik=start To Stop If warunek Then Exit For Next licznik For Each element In Grupa Next element
Pętle – ćwiczenie (cz. I) cel dla wyniku sektora GG (w % PKB) tempo wzrostu nominalnego PKB poziom długu w długim okresie (w % PKB) -1% 6,5% 16% 5,5% 19% 4,5% 23% 3,5% 30% 2,5% 41% -0,5% 8% 10% 12% 15% 21% utrzymywanie wyniku sektora GG na odpowiednim poziomie w stosunku do wzrostu gospodarczego w danym kraju pozwala na stopniowe obniżanie relacji długu do PKB zgodnie z następującym wzorem: gdzie: d* - relacja długu do PKB w długim okresie b – wynik w relacji do PKB g – wzrost nominalnego PKB Np. D(t) = D(t-1) – B(t) D(t)/Y(t) = D(t-1)/Y(t) – B(t)/Y(t) D(t)/Y(t) = D(t-1)/(Y(t-1)*(1+g(t))) – B(t)/Y(t) d(t) = d(t-1)/(1+g(t)) – b(t) d* = d*/(1+g) – b d*(1+g) = d* – b(1+g) d*(1+g) - d* = - b(1+g) d*g = - b(1+g) d* = - b(1+g)/g Przy czym można uprościć, zakładając że 1+g ≈ 1. Wtedy d* = - b*/g, czyli z grubsza relacja długu w długim okresie to iloraz deficytu i nominalnego tempa wzrostu PKB.
Pętle – ćwiczenie (cz. II) Zapisz program, który poda wskaźnik długu GG do PKB w długim okresie w zależności od wyniku sektora GG i średniookresowego wzrostu nominalnego PKB Sub Przycisk1_Kliknięcie() Dim i As Integer Dim j As Integer Dim d As Single Dim b As Single Dim g As Single For j = 1 To 5 g = (j + 1) Cells(1, j + 1) = g For i = 1 To 5 b = -4 + i Cells(i + 1, 1) = b Cells(i + 1, j + 1) = (-b / g) * (1 + g / 100) Next End Sub
Okno Instrukcje bezpośrednie Dojście na skróty (alt+F11) ctrl+g Dzięki temu oknu można przećwiczyć różne funkcje i instrukcje Po wpisaniu instrukcji, Excel poda wynik Wypróbuj: Worksheets("Arkusz2").Activate Range("B2:B5").Select [B2:B5].Value = 13 ?Range("B5") Selection.ClearContents ?2+2 ?Selection.Address ?Selection.Rows.Count ?ActiveWorkbook.Name