Programowanie w VBA - PowerPoint PPT Presentation

About This Presentation
Title:

Programowanie w VBA

Description:

Title: Programowanie w VBA Author: Leszek Niedzicki Last modified by: Leszek Niedzicki Created Date: 10/9/2006 6:54:56 PM Document presentation format – PowerPoint PPT presentation

Number of Views:227
Avg rating:3.0/5.0
Slides: 24
Provided by: LeszekNi
Category:

less

Transcript and Presenter's Notes

Title: Programowanie w VBA


1
Programowaniew VBA
  • Komunikacja z uzytkownikiem. Komunikacja z
    arkuszem. Iteracje. Funkcje.

2
Komunikacja z uzytkownikiem(w procedurach)
  • MsgBox(lttekstgt,ltprzyciskigt, lttytulgt) wyswietla
    komunikat lttekstgt w okienku dialogowym o tytule
    lttytulgt, do wyboru ltprzyciskigt daja mozliwosc
    ustalenia przycisków i/lub symbolu pojawiajacego
    sie obok lttekstugt
  • ltprzyciskigt wpisuje sie sumujac teksty
    oznaczajace klawisze i symbole, domyslnie jest
    tylko klawisz Ok i brak ikonki. Do wyboru jest,
    miedzy 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
Prosba do uzytkownika
  • InputBox uruchomienie formularza wpisania
    danych (dowolnych, takze zakresu komórek),
    których mozna uzyc dalej w programie, funkcja
    zwraca wartosc wpisana przez uzytkownika
  • InputBox(lttekstgt, ltew. tytul formularzagt,
  • ltew. domyslny tekst wpisany w formularzgt)
  • Dim dana As Variant
  • dana InputBox(Prosze wpisac dane, Potrzebne
    dane, Tu wpisz dane).

5
Przyklad
  • 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 ltgt 0 Then
  • delta b2 4ac
  • MsgBox (Delta równania kwadratowego wynosi
    delta)
  • Else
  • MsgBox (Wspolczynnik a musi byc rozny od 0!)
  • End If
  • End Sub

6
Zadania
  • Posortowanie 3 danych liczb a, b, c w porzadku
    malejacym
  • Zamiana liczby punktów uzyskanych w czasie
    semestru na oceny
  • Rozwiazanie równania kwadratowego z
    wykorzystaniem procedury rozwiazania równania
    liniowego w przypadku a 0
  • Testujemy na wlasnych przykladach wymyslonych
    odpowiednio do zadania zarówno takich, zeby
    dzialalo, jak i zeby nie dzialalo sprawdzenie,
    czy zostanie podany komunikat o bledzie.

7
Komunikacja z arkuszem
  • ActiveCell oznacza aktualnie wybrana komórke,
    jesli wybrany jest zakres, to jest to komórka od
    której zaczeto zaznaczac
  • Selection wybrany zakres komórek
  • Cells bezposrednie odwolanie do komórek
    adresujac bezwzglednie (czyli niezaleznie od
    zaznaczenia)
  • Adresowanie jak w macierzach
  • A(1,2) 1.wiersz, 2. kolumna

8
Komunikacja z arkuszem - Aktualnie zaznaczona
komórka
  • ActiveCell.Value zwraca wartosc tej komórki lub
    umozliwia przypisanie jej wartosci
  • Dim dana As Variant
  • dana ActiveCell.Value
  • ActiveCell.Value dana 2
  • Mozna tez uzywac znanych z rejestracji makr metod
    zwiazanych 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 ilosc wierszy
    zaznaczenia
  • Selection.Columns.Count zwraca ilosc kolumn
    zaznaczenia

10
Komunikacja z arkuszem Zmienna - zakres
  • Dim zmienna as Range
  • Set zmienna Selection
  • zmienna.Rows.Count zwraca ilosc wierszy zakresu
    przechowywanego w zmiennej
  • zmienna.Columns.Count zwraca ilosc 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("A1B2")
  • Range("A1B2").Rows.Count
  • Range("A1B2").Select
  • Range("A1B2").Copy
  • Range("A1B2").Interior.Color 2

12
Komunikacja z arkuszem- bezwzgledne odwolanie
  • Cells(ltwierszgt,ltkolumnagt) odwolanie do komórki
    w arkuszu (domyslnie jest to wartosc)
  • Cells(w,k).Value zarówno mozna przypisac
    wartosc, jak i uzyc do przypisania(w
    procedurach)
  • Inne metody dzialaja tak jak w poprzednich
    przypadkach (np. formatowanie jakiejs komórki)
  • dana Cells(1,1).Value
  • Cells(1,2).Value dana
  • (wynik przepisanie zawartosci komórki A1 do B1,
    bez znaczenia, jaka komórka jest zaznaczona)

13
Zadania
  • Napisz program
  • Obliczajacy liczbe komórek w zakresie zaznaczonym
    aktualnie w arkuszu (mnozenie liczby wierszy
    przez liczbe kolumn)
  • Wpisujacy podana przez uzytkownika (inputbox)
    liczbe x w komórke o koordynatach (x,x)

14
Iteracje
dla n 3
15
Iteracje
  • Jest to powtarzanie tej samej instrukcji (bloku
    instrukcji) w petli
  • Petla musi miec podana ilosc powtórzen,
    niebezposrednio tworzy sie ja przez zakres od
    liczby do liczby (przy rozpoczeciu sprawdzany
    jest warunek wykonania)
  • For ltlicznikgt ltpoczgt To ltkoniecgt Step ltkrokgt
  • ltinstrukcjegt
  • Next ltlicznikgt
  • Czlon Step jest opcjonalny
  • Komenda For i 1 To 5 powtórzy nastepujaca po
    niej (az do komendy Next) sekwencje instrukcji 5
    razy
  • Komenda For i 0 To 10 Step 5 powtórzy
    czynnosci 3 razy (0,5,10), a po zakonczeniu petli
    i15 (wartosc ta nie spelnila warunku, wiec petla
    zakonczyla dzialanie

16
Iteracje
  • Wykonywanie petli mozna przerwac z wewnatrz
    instrukcja Exit For wywolywana na przyklad
    przez instrukcje warunkowa
  • ltpoczatekgt, ltkoniecgt i ltkrokgt moga byc zmiennymi,
    nawet zmienianymi w trakcie wykonywania petli
  • Stan zmiennych okreslajacych rozpoczecie
    powtarzania sprawdzane jest na poczatku kazdej
    petli
  • Komenda Next dodaje liczbe ltkrokgt do zmiennej
    ltlicznikgt (inkrementacja zmiennej)
  • ltpoczatekgt moze byc wiekszy od ltkoniecgt, ale albo
    musi byc to rozwiazane w trakcie petli, albo
    ltkrokgt musi miec wartosc ujemna

17
Iteracje
  • Po co takie kombinacje? Zeby nie trzeba bylo
    robic skomplikowanych przeksztalcen i uzywac
    bezposrednio danych z zadania (na przyklad)
    ogólnie w celu ulatwienia sobie zycia
  • Petla w petli z dobrze dobranymi zakresami to
    idealny sposób na poradzenie sobie z operacjami
    na dowolnych macierzach, tablicach, itd.

18
Iteracje
  • Inna skladni iteracji specjalnie dla tablic
  • For Each ltelementgt In lttablicagt
  • ltblok instrukcjigt
  • Next
  • ltelementgt i lttablicagt musza byc typu Variant
  • zmienna ltelementgt moze byc uzywana w bloku
    instrukcji wewnatrz petli i w kazdej iteracji
    zawiera w sobie zawartosc kolejnego elementu
    wektora/tablicy lttablicagt

19
Inne iteracje
  • Do Until ltwyrazenie logicznegt
  • ltinstrukcje wykonywane póki wyrazenie falszgt
  • Loop (Until ltwyrazenie logicznegt)
  • Do While ltwyrazenie logicznegt
  • ltinstrukcje wykonywane póki wyrazenie prawdagt
  • Loop (While ltwyrazenie logicznegt)
  • Umiejscowienie warunku decyduje czy warunek jest
    sprawdzany po kazdej petli czy przed nia ma to
    znaczenie zwlaszcza w pierwszej iteracji (gdy
    pierwsze sprawdzenie warunku jest pod koniec
    petli)

20
Inne iteracje
  • i5
  • Do While ilt5
  • MsgBox("bum")
  • Loop
  • Do
  • MsgBox("brzdek")
  • Loop While ilt5

21
Zadania
  • Napisz programy
  • Obliczajaca sume liczb naturalnych od 1 do n (n
    podane przez uzytkownika)
  • Wypisujaca dzielniki liczby podanej przez
    uzytkownika

22
Zadania
  • i i 1 kumulowanie 1 do i (dopisanie 1, bez
    usuniecia dotychczasowej wartosci i)
  • suma ? - tez nie chcemy, zeby znikla
    dotychczasowa wartosc, ale zeby dodawal kolejne
    wartosci do juz istniejacej sumy wczesniejszych.

23
Instrukcja skoku
  • GoTo ltetykietagt
  • Gdzies w kodzie ltetykietagt ltInstrukcjegt
  • Moze sluzyc jako petla (skok do wczesniejszego
    miejsca) lub do ominiecia kodu (do dalszego). Ma
    sens tylko przy warunkowosci wykonania (podobnie
    jak Exit For/Exit Sub/Exit Do
  • Sub abc()
  • Dim x As Byte
  • petla x InputBox("Podaj liczbe")
  • If x ltgt 0 Then
  • GoTo petla
  • Else
  • MsgBox ("Koniec programu!")
  • End If
  • End Sub
Write a Comment
User Comments (0)
About PowerShow.com