DUYURULAR
Yeni eklenen ve/veya güncellenen sayfaları görmek için buraya tıklayınız.
Güncel ödev ve test listesini görmek için buraya tıklayınız.
Sitede yapılan iyileştirmeAer ve hata düzeltmelerine ait tüm bilgilendirmeleri görmek içinburaya tıklayınız.
İlk kodlarımıza geçmeden önce kısa bir terminoloji bilgisi edinmemizde fayda var. Böylece ne yaptığımızı daha iyi anlıyor olabileceğiz.
Visual Basic veya herhangi bir programlama dili kullanmış olanlar bilir, bir program yazarken programımızı belirli anahtar kelimeler üzerine kurarız. Bunlar temel olarak şu şekilde sınıflandırılabilir:
Şimdi ilk etapta bilmemiz gerekenlere bir bakalım.
Gerek kendimizin yazdığı kodlar olsun gerek makro kaydederek oluşturduğumuz kodlar olsun hepsi bir prosedürdür. İki tür prosedürümüz var.
Sub prosedüradı() 'Kodlar buraya yazılır End Sub
Function functionadı() 'Kodlar buraya yazılır End Function
Makro konusunu işlerken ağırlıklı olarak Sub prosedürleri işliyor olacağız, yer yer Functionlara da değineceğiz. Fonksiyonları az önce verdiğim linklerde ayrıca inceliyor olacağız.
Fonksiyona benzeyen bir de metod kavramı var, ki ikisi genelde birbiri yerine kullanılmaktadır, bununla birlikte terminolojide aralarında küçük bir fark bulunur: Fonksiyonlar bağımsız çalışabilir, ancak metodlar mutlaka bir nesneye ihtiyaç duyarlar, bağımsız çalışamazlar.
Ör:Application.InputBox ifadesindeki InputBox, bir metod olup Application nesnesine ihtiyaç duyar. Aşağıdaki tanımladan da görüleceği üzere Application'ın hem ikonundan hem de önündeki Class ifadesinden bir alttaki Inputboxtan farklı olduğu görülmekte.
Normal Inputbox ise bir fonksiyon olup nesneye ihtiyaç duymaz. Bu fonksiyon, Interaction modülü içinde tanımlanmıştır, bir class içinde değil.
Yukarıda, fonksiyonlar "genelde" bir değer döndürür dedik. Bazen, sebebini anlayamadığım bir şekilde, bazı kişilerin(hatta Microsoft'un kendisinin bile) değer döndürmeyen Function prosedürler yazdığını görüyoruz. Bu hem Modül fonksiyonları hem de Class metodları için geçerlidir. Mesela, aşağıda Range classının Activate metodunu görüyoruz. Deklerasyonu Function Activate() şeklinde yapılmış.
AddComment metodu ise sonunuda As Comment ifadesine sahip. İşte bu "As" ile başlayan kısım bize fonksiyonun "dönüş değerini" verir.
Eğer bir metod geriye bir şey döndürüyorsa bu arkaplanda kesinlikle bir Function presedür olarak hazırlanmıştır, ancak değer döndürmüyorsa Sub prosedür olarak hazırlanmış olabileceği gibi sebebini hala anlamadığım bir şekilde Function prosedür olarak da hazırlanmış olabilir.
Prosedürlerimizi yazdığımız yerlere Modül denmektedir. Bunlar Standart modül, Class Modül ve Userform modüller olabilir. Ancak biz eğitimin büyük kısmında standart modüllerde çalışacağız. Class modüllere çok az kod yazacağız. Eventler bölümünde ise Workbook ve Worksheet isimli class modüllere(evet bunlar da class modüldür) kod yazacağız.
VBE içinde Project penceresinde herhangi bir workbookta sağ tıklayıp Insert'e gelince gördüğümüz seçenekler modül seçenekleridir.
Yukarıdaki örneklerde gördüğünüz üzere ' işareti ile yorumlar yazılabilmektedir. Yorumlar yeşil renkte görünürler.
Yorumlar önemlidir, özellikle bazı makroları arada bir çalıştırıyorsak ve makronun nasıl çalıştığını aklımızda tutamıyorsak yorumlarda bunu açıklamak akıllıca olacaktır. Bir diğer gerekçe de, biz gittikten sonra yerimize gelecek kişiye de yol gösterici birşeylerin olması gerektiğidir.
NOT: Bir diğer yorum ekleme yöntemi REM ifadesini kullanmaktır, buna neden gerek duyulmuş hiçbir fikrim yok, ben genelde ' işaretini kullanıyorum.
Sub prosedüradı() REM açıklamalar buraya yazılır End Sub
Hadi şimdi biraz kod yazalım. Boş bir dosya açalım. Önceki konularda gördüğümüz gibi Personal.xlsb dosyamıza gidip Modules'e sağ tıklayalım ve yeni bir modül ekleyelim. Sonra aşğıdaki kodu oraya yapıştıralım. Kodun içinde herhangi bir yerdeyken F5 tuşuna basalım ve kodumuzu çalıştıralım. (Bunun yerine üstteki araç çubuğunda Play işaretine de tıklayarak makronuzu çalıştırabilirsiniz)
Sub ilkörnek() Range("A1").Select Selection.Value = 10 Range("A2").Select Selection.Value = 20 Range("A3").Formula = "=A1+A2" Range("A4").Value = Range("A1").Value + Range("A2").Value End Sub
Bu örnekte önce A1 hücresini seçtim, sonra mevcut olan bu seçime yani A1'e 10 değerini yazdırdım. Sonra A2 hücresini seçip oraya da 20 değerini yazdırdım. A3 hücresine ise A1+A2 toplamını formül olarak yazdırdım, ancak A4 hücresini yine aynı toplamı değer olarak yazdırdım.
Gördüğünüz üzere Value değerini hem değer atamada hem de değer okumada kullanabildim. İşte bazı özelliklerin hem değer yazma hem değer okuma durumu varken, bazısında sadece değer yazma, bazısında ise sadece değer okuma olabilmektedir. MSDN'de Excel Nesne modeli incelemesi yaparken bunlar şu şekilde gösterilir.
Şimdi bir kod daha yazalım. Bu sefer yeni modül eklemek yerine aynı modülde, yukardaki kodun hemen altına şu kodları yapıştıralım.
Sub kucukyap() Set Aktif = Selection For Each s In Aktif buyuk = StrConv(s.Value, vbLowerCase) s.Value = buyuk Next s End Sub
Bu kod da seçtiğimiz hücrelerdeki tüm harfleri küçük harfe dönüştürür. Deneme yapmak için A1 hücresine VOLKAN, B1 hücresine kendi adınızı, C1 hücresine de EXCEL yazın, sonra bu üçünü seçip VBE'ye gelip F5 ile kodu çalıştıralım.
Şimdilik bu kadar yeter, isterseniz devam etmeden önce siz de biraz Makro Kaydedici ile alıştırma yapın.
Herkese merhaba. Hosting maliyetlerinin aşırı artması yüzünden sitemi yakın zamanda(en geç Mayıs 2023) kapatmaya karar vermiştim. Ancak, siteyi yakından takip eden bir arkadaş siteyi devralmak istemiştir. Siteyi, Mayıs ayında kendisine devir etmeye karar verdim. Üyelik bilgilerini bana güvenerek girdiğiniz için, hepsini silmiş bulunuyorum, yani mail adreslerinizi kimseyle paylaşmamış olacağım. Bilginizi rica ederim.