Aktywacja zakładki Developer. Rejestracja makr. Składnia VBA.
Transkrypt
Aktywacja zakładki Developer. Rejestracja makr. Składnia VBA.
Aktywacja zakładki Developer. Plik->Opcje->Zakladka Główne->Dostosuj Wstążkę Zaznaczamy kwadracik Developer na liscie po prawej stronie. Klikamy OK. Rejestracja makr. Klikamy Zakladke Developer. Klikamy na Ikonke Zarejestruj makro. (Po prawo od ikony Makra w sekcji Kod). Wprowadzamy nazwe. My zostawimy domyslna wartosc. Wprowadzamy klawisz skrotu np. ‘j’. Klikamy OK. Rozpoczął się tryb nagrywania makra. Przyklad 1. Wpisujemy dowolne dane w dowolna komorke. Zaznaczamy cały arkusz klikając strzałkę nad 1 oznaczającą numery wierszy. Naciskamy DELETE i zaznaczamy komórke A1. Po czym klikamy zatrzymaj nagrywanie. Nasze pierwsze makro jest już gotowe. Sub Macro1() 'komentarz ' Macro1 Macro ' Cells.Select Selection.ClearContents Range("A1").Select End Sub Uruchomienie makra. Poprzez przypisany skrót Ctrl+j. Poprzez Makra->Z listy wybieramy nazwe naszego makra->Uruchom. Dodanie makra do elementu formularza (przycisku). Wstaw->Formanty formularza->Przycisk. Wyswietla sie okno w którym możemy przypisać makro do przycisku. Zaznaczamy Makro 1 i klikamy OK. Edytujemy przycisk. Klikamy poza obszarem przycisku. Edycja makra. Poprzez Makra->Z listy wybieramy nazwe naszego makra->Edytuj. Albo Klikamy Visual Basic (sekcja kod). Z listy po lewej stronie wybieramy Modules i 2 x klikamy na Module1. Widzimy kod naszego makra, który możemy edytować. Aby powrócić do Excela klikamy ikonke Excela pod menu Plik. Składnia VBA. Zmienne. Typy: Integer Single Boolean String Date Variant (typ uniwersalny) Deklaracja zmiennej: Dim zmienna1 As typ1, zmienna2 As typ2 ... Jesli nie wybierzemy typu to zmienna jest typu Variant, ale Variant zajmuje w pamięci znacznie wiecej miejsca. WAZNE! Instukcje musza byc w osobnych linijkach. Jesli instrukcja nie miesci nam się w linijce to stosujemy ‘ _’ np. Dim x As Single, y As Single, z As Single _ As Single Instrukcja przypisania: X=5 Instrukcja warunkowa: If warunek Then instrukcja 1 Else insrukcja2 Lub skladnia blokowa: If warunek Then instrukcje 1 Else insrukcje2 End If Pętla for: For licznik = poczatek To koniec Step krok Instrukcje Next licznik Instrukcja pętli Do: Do While warunek Instrukcje Loop Albo Do Instrukcje Loop While warunek Procedury i Funkcje. Blok procedury: Sub nazwa (lista_arg) Instrukcje End Sub Wywolanie: nazwa arg1 arg2 ... -> tylko jezeli w 1 linijce Blok funkcji: Function nazwa (lista_arg) As typ Instrukcje nazwa = wynik cos takiego jak return wynik w Adzie End Function Najważniejsze wbudowane obiekty: ActiveCell lub ActiveCell.Value - wartosc aktywnej komórki ActiveCell.FormulaR1C1 – formula wybranej komórki Selection lub Selection.Value – wpisuje wartości do wybranego zakresu (zaznaczonych komorek) Range(„A1:C5”) lub Range(„A1:C5”).Value – pozwala wpisać wartości do wybranego zakresu Range(„A1:C5”) .Cells(5).Value lub Range(„A1:C5”) (5) – pozwala wpisać wartość do 5 komórki z zakresu czyli B2 Właściwość Cells(wiersz, kolumna) – określa adres komorki Własne makra: Przykład 2. Tabliczka mnożenia Wybieramy Arkusz2.Klikamy ikonke Visual Basic i wybieramy z listy Module 1. Wpisujemy: Sub tabliczka_mnożenia() For wiersz = 1 To 10 For kolumna = 1 To 10 ActiveCell.Offset(wiersz - 1, kolumna - 1).Range("A1") = wiersz * kolumna Next kolumna Next wiersz End Sub Zapisujemy i uruchamiamy makro. Przykład 3. Pobierz dane z tabliczki mnożenia. // Nie przedstawiać, bo działa tylko wtedy gdy tabliczka jest wpisana w A1. Wybieramy Arkusz2.Klikamy ikonke Visual Basic i wybieramy z listy Module 1. Wpisujemy: Sub pobieraj_dane() If ActiveCell.Row <= 10 And ActiveCell.Column <= 10 Then a = ActiveCell.Value mnożn1 = Cells(ActiveCell.Row, 1) mnożn2 = Cells(1, ActiveCell.Column) MsgBox (mnożn1 & " razy " & mnożn2 & " = " & a) End If End Sub Zapisujemy i uruchamiamy makro. Przykład 4. Pobieranie i wypisywanie danych poprzez procedury MsgBox i InputBox Wybieramy Arkusz3. Klikamy ikonke Visual Basic i wybieramy z listy Module 1. Wpisujemy: Sub ObliczPole() Dim bok, pole bok = InputBox("Podaj długość boku kwadratu do obliczenia pola powierzchni") If bok > 0 Then pole = bok * bok MsgBox "Pole kwadratu wynosi " & pole Else MsgBox "Błędna wartość" End If End Sub Przykład 5. Funkcja kwadratowa Makro rozwiązuje równanie kwadratowe ax ^2 + bx +c =0 w liczbach rzeczywistych. Współczynniki a,b,c należy wpisać do komórek A1,B1,C1. Pierwiastki, jeśli są, wypisane będą w komórkach A3 i A4. Makro zawiera jawną deklarację zmiennych instrukcją Dim, bez której makro będzie działać, lecz zmienne a,b,c i delta będą typu Variant. Sprawdzenie: x^2 -4x + 3 pierwiastki: 3 i 1; x^2 – 4 pierwiastki: 2 i -2 Sub rownanie_kwadratowe() Dim a As Single, b As Single, c As Single, delta As Single a = Range("A1") b = Range("B1") c = Range("C1") delta = b ^ 2 - 4 * a * c If a = 0 Then MsgBox "To nie jest równanie kwadratowe" Exit Sub End If If delta < 0 Then MsgBox "Nie ma rozwiązań" Exit Sub End If If delta = 0 Then Range("A3") = -b / (2 * a) Else Range("A3") = (-b + Sqr(delta)) / (2 * a) Range("A4") = (-b - Sqr(delta)) / (2 * a) End If End Sub Zapisujemy i uruchamiamy makro. Zadanie do samodzielnego wykonania. Na podstawie poprzednich przykładów zmodyfikować makro obliczające równanie kwadratowe tak, aby wartości były pobierane i wypisywane w oknach dialogowych. Sub rownanie_kwadratowe2() Dim a As Single, b As Single, c As Single, delta As Single, _ x1 As Single, x2 As Single a = InputBox("Podaj wartosc a: ") b = InputBox("Podaj wartosc b: ") c = InputBox("Podaj wartosc c: ") delta = b ^ 2 - 4 * a * c If a = 0 Then MsgBox "To nie jest równanie kwadratowe" Exit Sub End If If delta < 0 Then MsgBox "Nie ma rozwiązań" Exit Sub End If If delta = 0 Then x1 = -b / (2 * a) MsgBox "Rozwiązaniem równania jest x=" & x1 Else x1 = (-b + Sqr(delta)) / (2 * a) x2 = (-b - Sqr(delta)) / (2 * a) MsgBox "Rozwiązaniem równania jest x1=" & x1 & " x2=" & x2 End If End Sub