Jun 17 2008

Wtorki z VBA — kurs dla początkujących cz. 3

Posted by Bartek

Tags: , ,

W poprzedniej części naszego kursu pokazałem podstawowe elementy każdego programu. Bądźmy jednak szczerzy -- VBA służy do pracy na komórkach i wykorzystanie InputBox oraz MsgBox jest raczej wyjątkiem niż regułą. Spróbujmy więc poprawić nasz program obliczający obwód koła tak aby korzystał z danych zawartych w Excelu. Przygotuj arkusz1 zgodnie z obrazkiem

Zanim jednak poprawimy nasz program najpierw trochę teorii:

Odczytywanie i zapis zawartości komórki z i do Excela

Przeanalizujmy poniższy przykład:

Sub przyklad1()
    Dim a As Integer
    a = Cells(1,1).Value
    a = 2*a
   Cells(2,1).Value = a
   End Sub

Procedura czyta zawartość komórki A1, mnoży ją przez dwa, a następnie zapisuje w komórce A2. Tak więc aby odwołać się do komórki wystarczy napisać:

Cells(indeks_wiersza, indeks_kolumny).Value

gdzie indeks_wiersza do kolejny numer wiersza zaczynając od 1, a indeks_kolumny do kolejny numer kolumny, gdzie 1 to "A", 2 to "B", itp. UWAGA! Taki zapis powoduje, że program odwołuje się do komórek w AKTYWNYM arkuszu. Zaawansowani użytkownicy Excela powinni takiego zapisu unikać. My jednak przez najbliższe tygodnie będziemy się nim posługiwali zdając sobie na razie sprawę z zagrożenia ;)

Wróćmy teraz do naszego programu, który obliczy obwód koła i zapisze go w arkuszu -- będzie on wyglądał tak.

Sub Obwodkola()
    'program oblicza obwod kola
    Const pi = 3.14
    Dim r As Integer, obw As Single
    r = Cells(4,3).Value
    obw = 2 * pi * r
   Cells(6,3).Value = obw
 End Sub

Oczywiście nasz program ma jedną wadę -- obliczy nam pole koła nawet jeżeli podamy ujemną wartość. Aby sprawdzić poprawność podanej wartości zastosujemy funkcję If.

Instrukacja warunkowa if

Instrukcje warunkowe pozwalają na wykonywanie określonych czynności w zależności wartości pewnych zmiennych lub funkcji. If-a możemy zapisać na wiele sposobów poniżej wybrałem dwa najpopularniejsze sposoby

Sposób 1

If warunek_logiczny Then
   [Blok_Instrukcji1]
Else
   [Blok_Instrukcji2]
End If

Instrukcja if-else sprawdza, czy warunek_logiczny jest prawdziwy. Jeśli jest - wykonywany jest Blok_Instrukcji1, jeśli nie - wykonywany jest Blok_Instrukcji2.

Sposób 2

If warunek_logiczny Then
[Blok_Instrukcji1]
End If

Instrukcja if wykonuje Blok_Instrukcji1 tylko wtedy, gdy warunek_logiczny jest prawdziwy.
Wróćmy teraz do naszego przykładu, nasz program po poprawie będzie wyglądał tak:

Sub Obwodkola()
    'program oblicza obwod kola
    Const pi = 3.14
    Dim r As Integer, obw As Single
    r = Cells(4,3).Value
    obw = 2 * pi * r
    If r >= 0 Then
        obw = 2 * pi * r
        Cells(6,3).Value = obw
    Else
        MsgBox "Błąd"
    End If
 End Sub

To tyle na dzisiaj -- za tydzień zajmiemy się działaniami na wielu komórkach w obrębie jednego arkusza, czyli na pętli for.

Zadania do samodzielnego wykonania

Od dzis na końcu każdej zęści będą pojawiały się zadania do samodzielnego wykonania. Rozwiązania zadań będą pojawiały się w każdą sobotę na dole tego wpisu. Jeżeli masz jakieś pytania nie bój się pisać maila.

Zadanie 1: Napisać program, który wczytuje dwie liczby (długości boków pewnego prostokąta). Program powinien obliczyć pole prostokąta i sprawdzić, czy prostokąt może być kwadratem.
Zadanie 2: Napisać program, który sprawdza, czy wczytana liczba całkowita jest parzysta. Do sprawdzania parzystości wykorzystaj operator mod (opisany w poprzednim zadaniu), który zwraca resztę z dzielenia dwóch liczb.
Zadanie 3: Napisać program wczytujący 3 liczby i znajdujący największą z nich.

Powiązane artykuły:

Filed under : Kurs VBA, Wszystkie | 1 Comment »

One Response to “Wtorki z VBA — kurs dla początkujących cz. 3”

  1. zeta says:

    Taka powinna być poprawna składnia
    Sub Obwodkola()
    ‘program oblicza obwod kola
    Const pi = 3.14
    Dim r As Integer, obw As Single
    r = Cells(4,3).Value
    obw = 2 * pi * r
    If r >= 0 Then
    obw = 2 * pi * r
    Cells(6,3).Value = obw
    Else
    MsgBox “Błąd”
    End If
    End Sub

Leave a Reply