Yinelemeli Görevler, Döngüler



Yinelemeli Görevler


Sık sık aynı görevi bir öğe grubu için yapmak gerekir. Bu öğeler, bir aralık içindeki hücreler, bir çalışma kitabındaki çalışma sayfaları ya da Uygulama içindeki çalışma kitapları olabilir.

 Makro kaydedici, döngüleri kaydedemesine karşın, yinelenecek ana görevi kaydetmek için kullanılabilir. Böylece, kaydedilen kodda yapılacak küçük bazı değişikliklerle, tek başına bir proje için gereksinim duyulanlara bağlı olarak çeşitli tiplerde döngü yaratılabilir.

Aşağıdaki örneklerde; A sütununda içinde sayılar bulunan bir hücre aralığı olduğu ve programcının hücre değerine bağlı olarak, B sütununda buna karşılık gelen hücrenin rengini değiştirmek istediği kabul edilmiştir.

Önce, tek adımlık hücre artalanı renginin değiştirilmesi işlemi kaydedilir:

(Kaydetmek için; Araçlar menüsünden önce Makro'yu sonra Yeni Makro Kaydet'i tıklatın)

Kaydetme sırasında, Biçim menüsünden Hücreler'i tıklatın. Daha sonra, Desenler sekmesini tıklatın ve bir renk seçin. Bu örnekte Sarı kullanılmıştır (.ColorIndex=6). Kaydı Durdur Araç Çubuğu üstündeki Kaydı Durdur düğmesini kullanarak kaydediciyi durdurun.
Şu anda seçili hücrenin rengi değişecek ve aşağıdaki makro kaydedilmiş olacaktır:

Sub Recorded_Macro()

'

' Macro recorded 30.06.97

'

With Selection.Interior

.ColorIndex = 6

.Pattern = xlSolid

End With

End Sub

Not: Kayıt sırasında bir hücre seçerseniz, makronuzda Range("A3").Select ifadesine benzer bir ifade bulunabilir. Bu satır, makro her çalıştırıldığında Range nesnesi içinde belirtilen hücreyi seçeceğinden, satırı silmek isteyebilirsiniz. İlgili hücrenin ilk olarak seçilmesini istiyorsanız, sözkonusu satırı makro içinde bırakın.

Artık, kodu değiştirmeye başlayabilir ve kaydedilen koda çeşitli döngü yapılarından birini ekleyebiliriz.

For Each...Next Döngüsü


Kaydedilen eylemin uygulanacağı hücre aralıkları biliniyorsa, bir For Each…Next döngüsü kullanılabilir.

Bu örnekte, B sütunundaki hücrenin yalnızca A içindeki hücre 20'den büyükse etkilenmesi istenmektedir. Bunu yapmak için, kaydedilen With ifadesini kapsayacak şekilde bir If ifadesi eklenir. Bu, yalnızca If ifadesindeki koşul doğru olduğunda, rengin değiştirilmesini sağlayacaktır.

Son olarak, karşılık gelen hücre A sütununun bir sağındaki sütuna (sütun B) değiştirilmek istendiği için, kayıtlı kod içindeki Seçim özelliği, hücre nesnesini döngüye almanın (cell_in_loop) Yerleştirme yöntemiyle değiştirilir.

Sonuçta ortaya aşağıdakine benzer bir kod çıkar:

 Sub For_Each_Next_Sample()

'

' Macro recorded 30.06.97

'

For Each cell_in_loop In Range("A1:A5")

If cell_in_loop.Value > 20 Then

With cell_in_loop.Offset(0, 1).Interior

.ColorIndex = 6

.Pattern = xlSolid

End With

End If

Next

End Sub

For…Next Döngüsü


Kodun kaç kez döngüye alınacağı biliniyorsa, bir For..Next döngüsü kullanılabilir. Örnek ele alınırsa, seçili hücreden başlayarak aşağıya doğru yalnızca 10 hücreyi denetlemek isterseniz, değiştirilen kaydedilmiş kod şu şekilde görünür:

 Sub For_Next_Sample()

For Counter = 0 To 9
If Selection.Offset(Counter, 0).Value > 20 Then
With Selection.Offset(Counter, 1).Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
End If
Next
End Sub


Kodun verilen herhangi bir aralığa özel olmaması ve her zaman etkin hücrenin altındaki on (sayaç olarak 0-9 arasındaki sayılar) hücre içinde döngüde olması için, burada Seçim nesnesi kullanılmıştır. Sayaç bağımsız değişkeni, döngü içinde her defasında bir artar ve döngü yapısı içinde kullanılabilir. Burada, Seçim'den (geçerli hücreden) itibaren kaç satır yerleştirileceğini gösteren bir Yerleştirme bağımsız değişkeni olarak kullanılmaktadır. Sonuçta, bu makro başlatılır ve etkin hücre A1 olursa, Sayaç bağımsız değişkeninin döngüdeki ilk değeri 0 olacaktır, bu nedenle Selection.Offset(Counter, 0).Value ifadesinde gösterildiği gibi A1'den itibaren 0 satır yerleştirilecektir.

Do…Loop Döngüsü

Özel bir koşul kullanılan döngüyü durdurup durdurmamaya karar vermek için, bir Do…Loop kullanımı uygun olabilir. Bu döngü yapısı, döngü yürütülmeden önce özellikleri ve bağımsız değişken koşullarını denetlemenize izin verir. Aşağıdaki örnekte, başvurulan hücrenin satır numarası, Selection.Offset(Counter, 0).Row, 100 değerini aşana kadar döngü yürütülmeye devam ediyor. Bu, döngü görevi 100.satırın altında daha önce hiç yapılmamışsa faydalı olabilir.
 Sub Do_Loop_Sample() Counter = 0
Do Until Selection.Offset(Counter, 0).Row > 100
If Selection.Offset(Counter, 0).Value > 20 Then
With Selection.Offset(Counter, 1).Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
End If
Counter = Counter + 1
Loop
  Not: Üç tane daha kullanılan Do…Loop döngüsü vardır. Çeşitli formlar, değişik durumlarda daha fazla esneklik sağlar.

Bunlar hakkında daha fazla bilgi ve diğer döngü yapıları hakkında daha fazla ayrıntı edinmek için, lütfen Visual Basic Ortamı içindeki Yardım'a giderek, döngüye alma anahtar sözcüğünü kullanarak arama yapın.

Tek tek sayfaların isimlerini mesaj kutusunda gösterir


Sub sayfaismigoster()
‘/, Tek tek sayfaların isimlerini mesaj kutusunda gösterir
Dim isayfasayisi As Integer
Dim isayfa As Integer
isayfasayisi = ActiveWorkbook.Worksheets.Count
For isayfa = 1 To isayfasayisi
Worksheets(isayfa).Activate
MsgBox Worksheets(isayfa).Name
Next isayfa
End Sub