Pętla Do While

 

Przykłady opisane w tej lekcji dostępne są w arkuszu Excela VBA.xls, tylko ich samodzielne przerobienie daje gwarancję zapamiętania tej lekcji.

Przykłady dla wszystkich lekcji szkolenia Excel 2003: ExcelSzkolenie.pl Cwiczenia Excel 2003.zip

 

Często nie wiemy pisząc makro ile razy pewna czynność powinna być powtórzona, w takich wypadkach bardzo pomocna jest pętla Do While, która wykonuje zadaną czynność tak długo aż warunek podany po ‘While’ jest spełniony. Należy przy tym uważać aby nie napisać makra, które samo nigdy nie zakończy swojego działania.

 

Składnia:

 

Do While [warunek]

[instrukcje]

Loop

 

Słowo Loop jest końcem pętli, po dojściu do niego następuje przejście do linii zawierającej Do While i ponowne sprawdzenie, czy warunek jest spełniony jeśli tak instrukcje zostaną wykonane po raz kolejny, jeśli nie nastąpi przejście do pierwszej linijki kodu makra za wyrazem ‘Loop’.

 

Przykład 1.

(Arkusz: ‘Do While’, Moduł: ‘Do_While’)

 

Pewien inwestor giełdowy ma brzydki zwyczaj zaznaczania spółek, którymi jest zainteresowany zmieniając kolor tła komórek na czerwony.

 

 

Jego doradca inwestycyjny nie mogąc użyć filtra, który nie rozpoznaje kolorów, napisał poniższe makro, które dla komórek z czerwonym tłem wpisuje w kolumnę obok wyraz ‘wybrany’.

Przed uruchomieniem makra należy ustawić jako aktywną komórkę pierwszą komórkę z kolumny, która ma zostać sprawdzona.

 

 

Sub Petla_Do_While()

 

Do While ActiveCell.Value <> ""                               'warunek pętli rób tak długo aż napotkasz pustą komórkę

 

If Selection.Interior.ColorIndex = 3 Then                   'istrukcja warunkowa If: jeżeli komórka ma kolor czerwony, wtedy

 

ActiveCell.Offset(0, 1).Range("A1").Select                          'przejdź o jedną komórkę w prawo

ActiveCell.Value = "wybrany"                                    'wpisz w aktywnej komórce tekst "wybrany"

ActiveCell.Offset(0, -1).Range("A1").Select                         'wróć jedną komórkę w lewo

 

End If                                                                                     'koniec instrukcji warunkowej If

 

ActiveCell.Offset(1, 0).Range("A1").Select                          'przejdź o jedną komórkę w dół, niezależnie od koloru więc po End If

 

Loop                                                                                      'koniec pętli: wróć do linijki z Do While

 

End Sub

 

 

Ponieważ lista może być różnej długości użyta została pętla Do While, która będzie działać tak długo aż nie znajdzie pustej komórki, którą oznaczamy jako dwa cudzysłowy ””.

 

Istrukcja ActiveCell.Offset(x, y).Range("A1").Select  pozwala makru na przechodzenie pomiędzy komórkami, x to przejście pomiędzy wierszami, jeśli x jest dodatki w dół, jeśli ujemny w górę, y to przejście pomiędzy kolumnami, w prawo dla dodatnich wartości y.

 

 

 

Szkolenie Excel 2003                            Szkolenie Excel 2007