1 / 23

Programowanie w VBA

Programowanie w VBA. Komunikacja z użytkownikiem. Komunikacja z arkuszem. Iteracje. Funkcje. Komunikacja z użytkownikiem (w procedurach).

blythe
Download Presentation

Programowanie w VBA

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programowaniew VBA Komunikacja z użytkownikiem. Komunikacja z arkuszem. Iteracje. Funkcje.

  2. Komunikacja z użytkownikiem(w procedurach) • MsgBox(<tekst>,<przyciski>, <tytul>) – wyświetla komunikat <tekst> w okienku dialogowym o tytule <tytul>, do wyboru <przyciski> dają możliwość ustalenia przycisków i/lub symbolu pojawiającego się obok <tekstu>; • <przyciski> wpisuje się „sumując” teksty oznaczające klawisze i symbole, domyślnie jest tylko klawisz Ok i brak ikonki. Do wyboru jest, między innymi: vbOkOnly – klawisz Ok; vbOkCancel – klawisze Ok i Cancel; vbYesNo – klawisze Yes i No; vbCritical – ikonka krytyczna; vbQuestion – ikonka pytania; vbExclamation – ikonka wykrzyknika; vbInformation – ikonka informacji; wpisanie np.: vbOkCancel + vbQuestion da dwa przyciski (Ok i Cancel) i ikonke znaku zapytania

  3. MsgBox MsgBox ("Pierwiastek równania x = " & x1) • st = MsgBox("Czy liczymy dalej?", vbYesNoCancel + vbQuestion, "Decyzja") • If st = vbNo Then Exit Sub

  4. Prośba do użytkownika • InputBox – uruchomienie formularza wpisania danych (dowolnych, także zakresu komórek), których można użyć dalej w programie, funkcja zwraca wartość wpisaną przez użytkownika; • InputBox(<tekst>, <ew. tytuł formularza>, <ew. domyślny tekst wpisany w formularz>) Dim dana As Variant dana = InputBox(„Proszę wpisać dane”, „Potrzebne dane”, „Tu wpisz dane”).

  5. Przykład Sub delta Dim a As Double Dim b As Double Dim c As Double Dim delta As Double a = InputBox(”Podaj a”) b = InputBox(”Podaj b”) c = InputBox(”Podaj c”) If a <> 0 Then delta = b^2 – 4*a*c MsgBox (”Delta równania kwadratowego wynosi: ” & delta) Else MsgBox (”Wspolczynnik a musi być rozny od 0!”) End If End Sub

  6. Zadania (do dokończenia w domu, np. na kartce) • Posortowanie 3 danych liczb a, b, c w porządku malejącym; • Zamiana liczby punktów uzyskanych w czasie semestru na oceny; • Rozwiązanie równania kwadratowego z wykorzystaniem procedury rozwiązania równania liniowego w przypadku a = 0; Testujemy na własnych przykładach: wymyślonych odpowiednio do zadania – zarówno takich, żeby działało, jak i żeby nie działało – sprawdzenie, czy zostanie podany komunikat o błędzie.

  7. Komunikacja z arkuszem • ActiveCell – oznacza aktualnie wybraną komórkę, jeśli wybrany jest zakres, to jest to komórka od której zaczęto zaznaczać; • Selection – wybrany zakres komórek; • Cells – bezpośrednie odwołanie do komórek adresując bezwzględnie (czyli niezależnie od zaznaczenia); Adresowanie jak w macierzach: A(1,2) – 1.wiersz, 2. kolumna

  8. Komunikacja z arkuszem - Aktualnie zaznaczona komórka • ActiveCell.Value – zwraca wartość tej komórki lub umożliwia przypisanie jej wartości: Dim dana As Variant dana = ActiveCell.Value ActiveCell.Value = dana * 2 • Można też używać znanych z rejestracji makr metod związanych z formatowaniem: ActiveCell.Font, ActiveCell.FontSize, itd. • ActiveCell.Row – zwraca numer wiersza zaznaczonej komórki; • ActiveCell.Column – zwraca numer (liczbowy) kolumny zaznaczonej komórki;

  9. Komunikacja z arkuszem - Aktualnie zaznaczony zakres • Selection.Rows.Count – zwraca ilość wierszy zaznaczenia; • Selection.Columns.Count – zwraca ilość kolumn zaznaczenia;

  10. Komunikacja z arkuszem – Zmienna - zakres Dim zmienna as Range Set zmienna = Selection • zmienna.Rows.Count – zwraca ilość wierszy zakresu przechowywanego w zmiennej; • zmienna.Columns.Count – zwraca ilość kolumn zakresu przechowywanego w zmiennej; • zmienna.Row – zwraca numer pierwszego wiersza zakresu ze zmiennej; • zmienna.Column – zwraca numer pierwszej kolumny zmiennej; • Ostatni wiersz zakresu: zmienna.Row + zmienna.Rows.Count - 1

  11. Komunikacja z arkuszem –Zakres komórek Range("A1:B2") • Range("A1:B2").Rows.Count • Range("A1:B2").Select • Range("A1:B2").Copy • Range("A1:B2").Interior.Color = 2

  12. Komunikacja z arkuszem- bezwzględne odwołanie • Cells(<wiersz>,<kolumna>) – odwołanie do komórki w arkuszu (domyślnie jest to wartość); • Cells(w,k).Value – zarówno można przypisać wartość, jak i użyć do przypisania(w procedurach); • Inne metody działają tak jak w poprzednich przypadkach (np. formatowanie jakiejś komórki); dana = Cells(1,1).Value Cells(1,2).Value = dana (wynik: przepisanie zawartości komórki A1 do B1, bez znaczenia, jaka komórka jest zaznaczona)

  13. Zadania Napisz program: • Obliczający liczbę komórek w zakresie zaznaczonym aktualnie w arkuszu (mnożenie liczby wierszy przez liczbę kolumn); • Wpisujący podaną przez użytkownika (inputbox) liczbę x w komórkę o koordynatach (x,x);

  14. Iteracje dla n = 3

  15. Iteracje • Jest to powtarzanie tej samej instrukcji (bloku instrukcji) w pętli; • Pętla musi mieć podaną ilość powtórzeń, niebezpośrednio – tworzy się ją przez zakres od liczby do liczby (przy rozpoczęciu sprawdzany jest warunek wykonania); For <licznik> = <pocz> To <koniec> Step <krok> <instrukcje> Next <licznik> • Człon Step jest opcjonalny; • Komenda „For i = 1 To 5” powtórzy następującą po niej (aż do komendy Next) sekwencję instrukcji 5 razy; • Komenda „For i = 0 To 10 Step 5” powtórzy czynności 3 razy (0,5,10), a po zakończeniu pętli i=15 (wartość ta nie spełniła warunku, więc pętla zakończyła działanie;

  16. Iteracje • Wykonywanie pętli można przerwać z wewnątrz instrukcją Exit For – wywoływaną na przykład przez instrukcję warunkową; • <początek>, <koniec> i <krok> mogą być zmiennymi, nawet zmienianymi w trakcie wykonywania pętli; • Stan zmiennych określających rozpoczęcie powtarzania sprawdzane jest na początku każdej pętli; • Komenda Next dodaje liczbę <krok> do zmiennej <licznik> (inkrementacja zmiennej); • <początek> może być większy od <koniec>, ale albo musi być to rozwiązane w trakcie pętli, albo <krok> musi mieć wartość ujemną;

  17. Iteracje • Po co takie kombinacje? Żeby nie trzeba było robić skomplikowanych przekształceń i używać bezpośrednio danych z zadania (na przykład) – ogólnie – w celu ułatwienia sobie życia; • Pętla w pętli z dobrze dobranymi zakresami to idealny sposób na poradzenie sobie z operacjami na dowolnych macierzach, tablicach, itd.

  18. Iteracje • Inna składni iteracji specjalnie dla tablic: For Each <element> In <tablica> <blok instrukcji> Next • <element> i <tablica> muszą być typu Variant; • zmienna <element> może być używana w bloku instrukcji wewnątrz pętli i w każdej iteracji zawiera w sobie zawartość kolejnego elementu wektora/tablicy <tablica>;

  19. Inne iteracje Do Until <wyrażenie logiczne> <instrukcje wykonywane póki wyrażenie = fałsz> Loop (Until <wyrażenie logiczne>) Do While <wyrażenie logiczne> <instrukcje wykonywane póki wyrażenie = prawda> Loop (While <wyrażenie logiczne>) Umiejscowienie warunku decyduje czy warunek jest sprawdzany po każdej pętli czy przed nią – ma to znaczenie zwłaszcza w pierwszej iteracji (gdy pierwsze sprawdzenie warunku jest pod koniec pętli)

  20. Inne iteracje i=5 Do While i<5 MsgBox("bum") Loop Do MsgBox("brzdek") Loop While i<5

  21. Zadania Napisz programy: • Obliczającą sumę liczb naturalnych od 1 do n (n podane przez użytkownika); • Wypisującą dzielniki liczby podanej przez użytkownika;

  22. Zadania i = i +1 – kumulowanie 1 do i (dopisanie 1, bez usunięcia dotychczasowej wartości i); suma = …? - też nie chcemy, żeby znikła dotychczasowa wartość, ale żeby dodawał kolejne wartości do już istniejącej sumy wcześniejszych.

  23. Instrukcja skoku • GoTo <etykieta> • Gdzies w kodzie: <etykieta>: <Instrukcje> • Może służyć jako pętla (skok do wcześniejszego miejsca) lub do ominięcia kodu (do dalszego). Ma sens tylko przy warunkowości wykonania (podobnie jak Exit For/Exit Sub/Exit Do Sub abc() Dim x As Byte petla: x = InputBox("Podaj liczbę:") If x <> 0 Then GoTo petla Else MsgBox ("Koniec programu!") End If End Sub

More Related