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.


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