YBS301U-İŞLEM TABLOSU PROGRAMLAMA
Ünite 3: Visual Basic ile Program Akışını Yönetmek
Giriş
VBA (Visual Basic for Applications) ile programlama yaparken algoritmanın akışını etkin bir şekilde yönetmek için geliştiriciler karar yapıları, döngüler, dallanma deyimleri ve yordamlar gibi çok çeşitli kodlama pratiklerinden faydalanır. İstisnasız her programlama dilinde yerleşik olarak sunulan bu pratikler, programın ne zaman ve nasıl davranacağını belirleyerek geliştiricilere karmaşık yazılım problemlerini çözerken işe koşabilecekleri güçlü, esnek ve yönetilebilir bir araç seti sağlar.
Karar Yapıları
Karar yapıları, programın belirli bir durumu veya koşulu değerlendirmesine ve buna bağlı olarak farklı kod bloklarını çalıştırmasına olanak tanır. Karar yapılarının başlıca kullanım nedenleri şunlardır:
Koşullu işlemler: Karar yapıları programların belirli koşulları değerlendirmesini ve bu koşullara bağlı olarak farklı işlemler gerçekleştirmesini sağlar. Örneğin, bir VBA yordamında bir hücredeki değerin belirli bir şartı karşılayıp karşılamadığını kontrol edebilir ve buna bağlı olarak başka bir hücreye değer atayabilirsiniz.
Kontrol akışı: Karar yapıları programların kontrol akışını yönlendirmek için kullanılır. Belirli bir koşulun doğru veya yanlış olduğunu değerlendirerek programın hangi kod bloğunu çalıştıracağını belirleyebilirsiniz. Bu şekilde programı belirli bir yönde yönlendirerek istenen sonuca ulaşabilirsiniz.
Birden çok seçenek: Karar yapıları programın birden çok seçenek arasında seçim yapmasına olanak tanır. If-Then- Else veya Select Case gibi karar yapıları programın bir dizi koşulu değerlendirerek uygun olan işlemi seçmesini sağlar. Böylece programın farklı senaryoları ele alması ve uygun kod bloklarını çalıştırması sağlanabilir.
Hata yönetimi: Karar yapıları hata yönetimi için kullanılabilir. Bir hata durumunda programın belirli bir kod bloğunu çalıştırarak hata işleme kodunu gerçekleştirmesini sağlayabilirsiniz. Hata yönetimi hata durumlarıyla başa çıkmak ve kullanıcıya uygun geri bildirim sağlamak için önemlidir.
Karar yapıları, programlamada çok önemli bir rol oynar ve programların daha esnek, dinamik ve kontrollü olmasını sağlar. VBA’da karar yapılarını kullanarak programlarınızı belirli koşullara bağlı olarak yönlendirebilir ve istenen sonuçları elde edebilirsiniz.
If-Then Yapıları
VBA’da If-Then yapısı, belirli bir koşulun doğru olup olmadığını kontrol etmek ve ardından bir dizi ifadeyi çalıştırmak için kullanılır. If-Then yapısının temel söz dizimi aşağıdaki gibidir:
If kosul Then kosul_dogruysa_islenecek_komutlar [Else kosul_yanlissa_islenecek_komutlar]
If tümcesindeki koşul doğru olduğunda Then tümcesinden sonraki deyimler yürütülür. Eğer koşul yanlışsa hiçbir şey yapılmaz ve alt satıra geçilir. Else yan tümcesi isteğe bağlıdır. Dahil edilirse, Else yan tümcesi test ettiğiniz koşul True olmadığında bir veya daha fazla deyimi yürütmenize olanak tanır. Koşulu temel alan birden çok deyimi çalıştırmak gerekirse If … Else … End If yapısı kullanılabilir. VBA’da, birden fazla koşulu kontrol etmek ve her bir koşula bağlı olarak farklı işlemler gerçekleştirmek için If – ElseIf yapısı kullanılabilir. Bu yapıda aynı zamanda, Else bloğu kullanılarak herhangi bir koşul sağlanmadığında yürütülecek varsayılan bir işlem belirtmek de mümkündür.
Select … Case Yapıları
Select-Case yapısı üç veya daha fazla seçenek arasından seçim yapmak için kullanışlıdır. Çoğunlukla, IfThen-Else yapısına alternatif olarak kullanılabilir.
Select Case Case <Koşul_1> ‘Koşul 1 sağlandığında yapılacak işlemler Case <Koşul_2> ‘Koşul 2 sağlandığında yapılacak işlemler End Select
IIf, Choose ve Switch Karar İşlevleri
VBA’da karar vermek amacıyla kullanılan üç önemli işlev bulunmaktadır: IIf, Choose ve Switch. Bu işlevlerin diğer işlevler gibi bir ifadede eşitliğin sağında yer alacak biçimde ya da bir yordamın parametresi olarak kullanılmaları gerekmektedir. Böylece döndürdükleri değerleri kullanmak mümkün olur. IIf işlevi, VBA’da If-Then yapısına tek satırda yazılabilen bir alternatif sunar. Bu işlev üç bağımsız değişken içerir ve Excel’in EĞER çalışma sayfası işlevine çok benzer şekilde çalışır. Söz dizimi şu şekildedir:
IIf (ifade, dogru_bolum, yanlis_bolum)
İfade değerlendirmek istediğiniz mantıksal ifadeyi dogru_bolum mantıksal ifade True ise döndürülen değer veya ifadeyi, yanlis_bolum mantıksal ifade False ise döndürülen değer veya ifadeyi içermelidir.
Choose işlevi bağımsız değişkenler listesinden bir değer seçmek ve döndürmek için kullanılır. Choose işlevinin söz dizimi şöyledir:
Choose (dizin, secim_1, [secim_2, ... , [ secim_n ]])
Burada dizin ifadesi 1 ile mevcut seçeneklerin sayısı arasında bir değişen bir değerle sonuçlanan sayısal ifade veya değişkendir. Seçim ise olası seçeneklerden birini içeren bir Varyant ifadedir.
Switch işlevi verilen bir ifade listesini değerlendirir ve bir Varyant değeri veya listedeki True olan ilk ifadeyle ilişkili bir ifade döndürür. Switch işlevinin sözdizimi şöyledir: Switch (ifade_1 , deger_1 , [ifade_2 , deger_2 …, [ifade_n, deger_n]])
Döngüler
Programlama dillerinde belirli bir koşul sağlanana dek ya da bir koşul sağlandığı sürece tekrar edilmesi gereken işlemlerle sık karşılaşılır. Örneğin; bir dizideki tüm elemanları taramak, bir dosyadaki tüm kayıtları okumak vs. Bu işlemleri her öge için ayrı kodlarla gerçekleştirmek programların anlamsızca büyümesine yol açar. Bunun yerine döngü yapıları kullanmak programları son derece kısaltacak ve kolaylaştıracaktır.
Döngü yapılarındaki örneklerde kolaylık sağlaması açısından program çıktılarının görüntülenmesinde Debug.Print komutu kullanılacaktır. Debug.Print komutu genellikle program geliştirilirken VBA Editöründe hata ayıklama bilgilerini anlık pencerede görüntülemek için kullanılabilir. Debug.Print komutu ayrıca döngüler veya koşullu ifadeler içinde kullanılarak programın farklı noktalarında değerleri izlemek için de kullanılabilir.
For … Next Döngüsü
Bir döngünün en basit türü For … Next döngüsüdür. For- Next döngüsü, belirli bir sayı aralığındaki veya bir koleksiyondaki elemanları döngü içinde işlemek için kullanılır. Söz dizimi aşağıdaki gibidir:
For <degisken> = <baslangic_değeri> To <bitiş_degeri> (Step<artis/degisim_miktari>) Föngü içinde yapılacak işlemler Next (<degisken>)
Döngüdeki bazı değerleri atlamak için bir Step değeri de kullanabilirsiniz.
VBA’da Array işlevi, birden çok değeri aynı değişkende veya dizi içinde gruplamak için kullanılan bir işlevdir; belirli bir tipte ve boyutta olan elemanlardan oluşan bir dizi oluşturmanızı ve bu diziye değerleri atamanızı sağlar. Array işlevinin kullanımı çok basittir. Aşağıda Array ile tam sayılar isimli bir diziye nasıl değer atandığı gösterilmiştir:
Dim sayilar() As Integer sayilar = Array(1, 2, 3, 4, 5).
For Each … Next Döngüsü
For Each … Next, VBA’da bir koleksiyonun veya dizi elemanlarının üzerinde dolaşarak işlem yapmak için kullanılan bir döngü yapısıdır; döngüde kullanılacak bir değişkeni tanımlar ve koleksiyon veya dizi üzerindeki her bir elemanı bu değişkene atar. Daha sonra, döngü içinde belirtilen işlemler yapılır. İşlem tamamlandıktan sonra döngü bir sonraki elemana geçer ve bu işlem koleksiyonun veya dizinin son elemanına kadar tekrarlanır. For Each - Next yapısının genel sözdizimi aşağıda verilmiştir:
For Each eleman In koleksiyon ' İşlemler Next eleman
Burada eleman, döngü içinde kullanılacak bir değişkendir. Her bir döngü turunda koleksiyonun veya dizinin bir
elemanı bu değişkene atanır. Koleksiyon ise döngüde dolaşılacak olan bir koleksiyon veya diziyi ifade etmektedir.
VBA’da Collection nesnesi, birbirine bağlı veya ilişkili nesneleri veya değerleri gruplamak için kullanılan bir dinamik veri yapısıdır. Collection nesnesi, belirli bir sıra olmadan ögeleri depolamak için kullanılır ve elemanlara erişmek için benzersiz bir anahtar kullanır. Collection nesnesi, VB.Collection sınıfının bir örneğidir ve VBA’da hazır olarak bulunur. Bu nesne, farklı veri türlerini ve nesneleri içerebilir ve ögeleri eklemek, çıkarmak veya kontrol etmek için bir dizi yöntem ve özellik sunar. Herhangi bir sınıftan bir nesne oluşturmak için önce o sınıftan bir nesne değişkeni tanımlanmalı, ardından bu sınıfa ait yeni bir nesne oluşturularak nesne değişkenine yerleştirilmelidir.
Do While … Loop Döngüsü
VBA programlama dilinde Do While...Loop döngü yapısı, belirli bir koşul doğru olduğu sürece bir kod bloğunu tekrar tekrar çalıştırmak için kullanılır. Do While...Loop döngü yapısının söz dizimi şu şekildedir:
Do While koşul ' Kod bloğu ' Koşulun doğru olduğu sürece çalışacak olan kodlar burada yer alır Loop ' Bir sonraki adıma ait kodlar
Yukarıdaki yapıda koşul ifadesi, döngünün her turunda değerlendirilen ve doğruluk veya yanlışlık döndüren bir ifade veya değişken olmalıdır. Döngü, koşul doğru olduğu sürece devam eder. Koşul yanlış olduğunda döngü sonlanır ve kodun akışı bir sonraki adıma geçer. Bu yapıda önce koşul kontrol edilmekte, işlem daha sonra yapılmaktadır.
Do … Loop While Döngüsü
Do...Loop While döngü yapısı, bir kod bloğunu en az bir kez çalıştırmak ve ardından belirli bir koşul doğru olduğu sürece tekrar tekrar çalıştırmak için kullanılır. Bu döngü yapısı, koşul başta doğru olmasa bile en az bir kez döngü bloğunun işlemesini sağlar. Do Loop … While döngü yapısının söz dizimi şu şekildedir:
Do ' Kod bloğu ' En az bir kez çalışacak olan kodlar burada yer alır Loop While kosul ' Bir sonraki adım
Yukarıdaki yapıda koşul ifadesi, döngünün her turunda değerlendirilen ve doğruluk veya yanlışlık döndüren bir ifade veya değişken olmalıdır. Döngü, koşul doğru olduğu sürece devam eder. Koşul yanlış olduğunda döngü sonlanır ve kodun akışı bir sonraki adıma geçer. Bu yapıda önce işlem yapılmakta sonra koşul kontrol edilmektedir.
Do Until ... Loop Döngüsü
Do Until...Loop döngü yapısı, belirli bir koşul yanlış olduğu sürece belirli bir kod bloğunu tekrar tekrar çalıştırmak için kullanılır.
Do Until kosul ' Kod bloğu ' Koşul yanlış olduğu sürece çalışacak olan kodlar burada yer alır Loop
Do … Loop Until Döngüsü
Do...Loop Until döngü yapısı, bir kod bloğunu en az bir kez çalıştırmak ve ardından belirli bir koşul yanlış olduğu sürece kod bloğunu tekrar tekrar çalıştırmak için kullanılır. Bu döngü yapısı, koşul doğru olduğunda döngüyü sonlandırır ve kodun akışını devam ettirir. Do...Loop Until döngü yapısının söz dizimi aşağıdaki gibidir:
Do ' Kod bloğu ' En az bir kez çalışacak olan kodlar burada yer alır Loop Until koşul
Dallanma Deyimleri
VBA’da programlar müdahale edilmediği sürece satır satır işlenir. Bazı durumlarda program akışına müdahale ederek programın izleyen satır yerine başka bir satıra atlaması gerekebilir. Bu gereksinimi karşılamak amacıyla VBA’da çeşitli dallanma deyimleri bulunur.
GoTo Deyimi
GoTo deyimi, programın belirli bir etikete veya satıra atlamasını sağlayan bir deyimdir. Etiket oluşturmak için dallanılacak satıra tanımlayıcı bir etiket adı ve iki nokta üst üste işareti (:) yerleştirmek yeterlidir. VBA yordamları herhangi bir sayıda etiket içerebilir ancak bir GoTo deyimi bir yordamın dışında dallanamaz. GoTo deyimi, program akışını kontrol etmek için kullanılabilmesine rağmen programın okunurluğunu ve bakımını zorlaştırabildiğinden dolayı kötü bir programlama alışkanlığıdır.
Exit For Deyimi
Exit For deyimi, bir döngü içinde kullanılarak döngünün hemen sonlandırılmasını sağlar. Exit For deyimiyle karşılaşıldığında, döngüden çıkılır ve program akışı döngünün hemen sonrasına devam eder.
Exit Do Deyimi
Exit Do ifadesi, bir Do döngüsünden çıkmak veya döngünün hemen sonuna atlamak için kullanılır. Bu ifade, belirli bir koşulun sağlandığı durumlarda döngüyü erken sonlandırmak için kullanışlıdır. Exit Do ifadesi, belirli bir koşulun sağlandığı durumlarda döngüyü erken sonlandırmak için kullanılır; döngü içinde istenmeyen durumları kontrol etmek ve gerektiğinde döngüyü bitirmek için kullanışlı bir araçtır.
Yordamlar
Teknik olarak bir VBA programı bir modül içindeki herhangi bir uzunluktaki tek bir yordam biçiminde oluşturulabilir ancak birçok farklı operasyonu gerçekleştiren aşırı uzun yordamlar oluşturmaktan kaçınmak gerekir. Her biri tek bir amaca sahip birkaç küçük yordam yazmak ve ardından bu yordamları çağıran bir ana yordam tasarlamak, şu pratikler bağlamında programcılara avantajlar sağlar:
• Tekrar kullanılabilirlik • Okunabilirlik
• Modüler bir yaklaşım
• Hata ayıklama
• Daha iyi organizasyon
• Çağırılabilirlik
• İşlevsellik
Altyordamlar
VBA’da sık kullanılan yordam türü altyordamlar olarak adlandırılan Sub yordamlarıdır. Bir altyordamı, kullanıcının veya başka bir yordamın yürütebileceği bir komut olarak düşünebilirsiniz. Altyordam tanımlamak için aşağıdaki yapıyı kullanırız:
Sub AltyordamAdi() ' Kodunuz buraya yazılır End Sub
AltyordamAdi, altyordamı çağırmak veya başlatmak için kullanacağınız bir isimdir. Altyordamlar VBA modülünde veya bir çalışma kitabındaki bir modülde tanımlanabilir. Bir altyordam tanımlanırken Sub teriminden önce isteğe bağlı olarak Private, Public, Static anahtar sözcükleri kullanılabilir.
Bir yordamı yürütmenin en yaygın yollarından biri, onu başka bir VBA yordamından çağırmaktır. Bunu yapmanın üç yolu vardır:
• Yordamın adını ve ardından parametrelerini (varsa) virgülle ayırarak girin. Parametre listesini parantez içine almayın. • “Call” anahtar sözcüğünü, ardından yordamın adını ve ardından parametrelerini (varsa) parantez içine alın ve virgülle ayırın. • Application nesnesinin Run yöntemini kullanın. Run yöntemi, adı bir değişkene atanan bir yordamı çalıştırmanız gerektiğinde kullanışlıdır. Daha sonra değişkeni Run yöntemine parametre olarak iletebilirsiniz.
Farklı Bir Modüldeki Yordamı Çağırma
VBA, çağrılan bir yordamı geçerli modülde bulamazsa aynı çalışma kitabındaki diğer modüllerde Public yordamlar arasında arar. Başka bir yordamdan Private bir yordam çağırmanız gerekirse her iki yordam da aynı modülde bulunmalıdır.
Farklı Bir Çalışma Kitabındaki Bir Yordamı Çağırma Exit Function Deyimi
Bazı durumlarda kendi yordamınızda farklı bir çalışma VBA’da Exit Function deyimi, bir işlevin içinde kitabında tanımlanan başka bir yordamı yürütmeye kullanılarak işlevin hemen sonlandırılmasını sağlar. Exit ihtiyacınız olabilir. Bunu yapmak için en kolay yöntem Function deyimiyle karşılaşıldığında işlevden çıkılır ve çalışma kitabının adını açıkça belirterek Run yöntemini herhangi bir değer döndürülmeden işlev sona erer. kullanmaktır. Bunun için yordamı içeren çalışma kitabının açık olması gerekir.
Yordamlarda Parametre Kullanma
Bir parametreyi bir yordama iki şekilde iletebilirsiniz:
• Referans olarak
• Değere göre
Hata Yakalama Teknikleri
VBA’da hata yakalama teknikleri, programınızın hataları işlerken daha güvenilir ve yönetilebilir olmasını sağlar. VBA’da kullanabileceğiniz temel hata yakalama teknikleri şunlardır:
On Error GoTo: Bu teknik, hata yakalamak ve işlemek için kullanılan en yaygın yöntemdir. Kodunuzun belirli bir noktasında, hata anında çalıştırılacak bir hata işleme rutinine geçmek için On Error GoTo ifadesini kullanabilirsiniz. Bu ifadeye bir etiket ya da satır numarası eklediğinizde bir hata meydana geldiğinde etiketin ya da satır numarasının bulunduğu satıra geçilir.
• On Error Resume Next
• On Error GoTo 0
• Err nesnesi
İşlevler
Bir VBA işlevi, hesaplamalar yapan ve bir değer döndüren bir yordamdır. Bu işlevleri VBA kodunuzda veya Excel çalışma sayfası formüllerinde kullanabilirsiniz. İşlev yordamları, tıpkı Excel çalışma sayfası işlevleri ve yerleşik VBA işlevleri gibi genellikle tek bir değer (veya bir dizi) döndürür. Yerleşik işlevlerde olduğu gibi İşlev yordamları bağımsız değişkenler (parametreler) kullanabilir.
İşlev Yordamlarını Yürütme
Bir işlevin kapsamı, “Function” anahtar sözcüğünden önce yazılan “Public” ve “Private” anahtar sözcükleriyle belirlenir. Bir işlevin kapsamını bildirmezseniz varsayılan kapsamı Public’dir. Public tanımlayıcısı işlev yordamının tüm etkin Excel VBA projelerindeki diğer tüm modüllerdeki diğer tüm yordamlar tarafından erişilebilir olduğunu gösterir. Altyordamlarda olduğu gibi Function teriminden önce “Static” anahtar sözcüğünü kullanarak Function yordamında bildirilen değişkenlerin değerlerinin çağrılar arasında korunmasını sağlayabilirsiniz.
İşlevlerde Parametre Kullanımı
Altyordamlar gibi işlev yordamlarının da parametreleri olması gerekmez. Bir işlevi bir VBA modülüne girdikten sonra bir çalışma sayfası formülünde kullanabilir veya işlevi diğer VBA yordamlarından çağırabilirsiniz.