28.12.2017 tarihinde,VBA konularına Dosya Okuma/Yazma sayfası eklenmiştir.

20.12.2017 tarihinde,sitem mobil uyumlu hale gelmiştir.

02.12.2017 tarihinde,Excel Fonksiyon konularına "Dizi Formülleri ve SUMPRODUCT" sayfası eklenmiştir.

31.10.2017 tarihinde,VBA Dictionary sayfasına Dictionary, Collection ve Collection dizisinden oluşan ilginç bir örnek eklenmiştir.

26.10.2017 tarihinde,Excel Fonksiyon konularına "İsatistiki ve Matematiksel fonksiyonlar" sayfası eklenmiştir.

VBAMakro Temeller1

Terminoloji

İ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:

  • Prosedürler
  • Değişkenler
  • Sabitler
  • Diziler
  • Koşullu yapılar
  • Döngüler
  • Hata ayıklayıcılar
  • Kullanıcıyla iletişim
  • Olaylar
  • Nesneler
  • Metodlar
  • Özellikler
  • Fonksiyonlar

Şimdi ilk etapta bilmemiz gerekenlere bir bakalım.

Modül, Prosedür, Excel nesneleri

Prosedür

VBA'da ister kendimizin yazdığı ister makro kaydederek oluşturduğumuz herşey bir prosedürdür. İki tür prosedürümüz var.

  • Sub prosedürler:Çalışır ve birşeyler yapar, ama bir değer döndürmez. (Türkçede yordam olarak geçer)
	Sub prosedüradı()
	'Kodlar buraya yazılır
	End Sub	
  • Function'lar:Çalışması sonucunda bir değer döndürür. Bunlar da kendi içinde ikiye ayrılır. İlk grubun Excelin yerleşik fonksiyonlarından hiçbir farkı yoktur, bunlara Kullanıcı tanımlı fonksiyonlar(UDF) denir.. Genelde bir parametre/argüman alırlar. İkinci grupta ise VBA içinde kullandığımız ve döndürdüğü değeri yine VBA içinde kullanmaya devame ettiğimiz VBA Functionlar yer alır.

	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 bibiri yerine kullanılmaktadır, bununla birlikte terminolojide aralarında küçük farklar bulunur. Buna göre;

  • Fonksyionlar 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. Normal Inputbox ise bir fonksiyon olup nesneye ihtiyaç duymaz.
  • Fonksiyonlar mutlaka bir değer döndürür, Metodlar ise bir şey döndürür veya döndürmez, dönen şey bir değer olmak zorunda değil, obje de olabilir. Metod eğer birşey döndürüyorsa bu arkaplanda bir Function presedür olarak hazırlanmıştır, ancak değer döndürmüyorsa bu bir Sub prosedür olarak hazırlanmıştır.

Yorumlar

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	

Sabırsızlananlar için küçük bir ara

Hadi şimdi biraz kod yazalı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, 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 modeliincelemesi yaparken bunlar şu şekilde gösterilir.

  • Return or sets : Hem atanır, hem okunur
  • Sets: Sadece atanır
  • Returns: Sadece okunur

Ş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.

YORUMLAR