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