Bu siteye giriş yaparak Çerez kullanımını kabul etmiş oluyorsunuz. İşbu sitede; çerez olarak, sadece son giriş tarihiniz ve eğer üye olursanız oturum statünüz tutulacaktır. Bunlar dışında başka hiçbir bilgi tutulmamaktadır. Çerezler için detaylı bilgi için buraya tıklayınız.
ANLADIM

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.

Baş
Udemy
Konular
Son
Konular
Terminoloji
Temeller
VBAMAkro
VBAMakro Temeller1

Terminoloji

Giriş

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

Prosedür ve Modüller

Prosedür

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ürler:Çalışır ve birşeyler yapar, ama bir değer döndürmezler. (Türkçede yordam olarak geçer)
	Sub prosedüradı()
	'Kodlar buraya yazılır
	End Sub	
  • Function Prosedürler:Çalışması sonucunda (genelde) değer döndüren prosedürlerdir. 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 devam 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 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.

Modül

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.

Yorum Satırları

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

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

TEST SORULARI

Son Sorumuz şuymuş:Bir metindeki tüm noktaları yoketmek istiyorsunuz. Hangi fonksiyonu kullanırdınız?
Soru:

A şıkkı:

B şıkkı:

C şıkkı:

D şıkkı:

Doğru Cevap Etiketler

İlişkili konuyu seç

173558

Label
* Sorulara verilen yanlış cevaplardaki esprili yorumlarım için hoşgörünüze sığınıyorum.
* Test ve Ödevlerdeki bazı detaylar burada anlatılmamış olabilir. Bunları kendiniz araştırıp bulmalısınız.
* Birden çok konuya ait içeriği olan ödevler var. Algoritmik açıdan bakıldığında o an en uygun konuya adreslenmiştir.
Dikkat! Bir soruya cevap verdikten sonra geri dönemezsiniz.
1
0
0
0

Soru No:7. Aşağıdaki ifadelerden hangisi doğrudur?







ÖDEVLER

0
0
ÖdevNo:... Şu an için bu konu için ödev bulunmamaktadır. İletişim menüsünden örnek ödev sorularını bana iletebilirsin.
Çözüme bakın(Başka türlü de çözülebilir tabi, bu benim çözümüm.)




=YORUMLAR ve SORULAR=


DEVİR UYARISI

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.