VBA (Visual Basic for Applications)
Microsoft Visual Basic’ in Windows uygulamalarını programlamak için kullanılan ve bazı
Microsoft uygulamalarıyla birlikte gelen makro dili sürümüdür. Dili Visual Basic ile birebir aynı
olmasa da komutların kullanımı birebir aynıdır.
VBA (Visual Basic for Applications)
Componentleri ile Çalışma
Excel’ de makro yazabilmek için VB editörü kullanılır. Dolayısıyla makrodaki birçok komut VB
komutlarıyla aynıdır. VB editörünü açmak için Geliştirici sekmesi altından Visual Basic düğmesi
seçilir. Yada Alt+F11 tuş kombinasyonları kullanılır. Ekrana gelen VB editöründe sol tarafta
Project-VBA Project penceresinde açılmış olan bütün sayfaların isimleri mevcuttur. Standart 3
sayfa olduğu için Sayfa1 (Sayfa1), Sayfa2 (Sayfa2), Sayfa3 (Sayfa3) şeklinde yazılıdır. Ayrıca
ThisWorkbook seçeneği o anki çalışma kitabını temsil etmektedir. Yine sayfanın sol tarafında
sayfalara ait Properties’ ler (Özellikler) penceresi yer almaktadır. Bu bölümden projenizdeki
elaman ve nesnelerin özelliklerini değiştirebilirsiniz. Sayfanın üst orta tarafında ise yan yana
iki tane açılır kutu mevcuttur. İlk başta bunların birinde General, diğerinde ise Declerations
yazılıdır. General bölümünden WorkSheet seçildiğinde çalışma sayfasının olayları kısmına
geçiş yapılıyor. Sağ taraftaki açılır kutuda ise çalışma sayfasına ait olaylar listelenmiştir.
Burada yapılan projeyi çalıştırmak için RUN menüsünden Run seçilir veya F5 tuşu ile program
çalıştırılır.
İnsert menüsünü veya Project-VBA Project penceresinde sağ tuşa tıklayarak yeni bir
UserForm ekleyebilirsiniz. UserForm ile kullanıcı ile iletişim kurmanızı veya veri girişi
yapmanızı sağlayacak ekranları tasarlayabileceksiniz. Bu ekranları tasarlarken VBA araçlarını
kullanacaksınız.
Bu nesnelerin tamamı Toolbox penceresi altında toplanmıştır. Bu nesneleri seçip form üzerine
sürükleyerek tasarımlarınızı yapabilirsiniz.
Bir proje içerisine birden fazla UserForm ekleyebilirsiniz. Ve bu formlar arasında geçişlere
ihtiyacınız olabilir. UserFormları göstermek için Show metodunu kullanırsınız. (Form1.Show)
Açılan bir formu kapatmak için ise Unload Me komutunu kullanırsınız. Bir formu gizlemek
isterseniz eğer bu defa Me.Hide komutunu kullanacaksınız. Programınızı sonlandırmak içinse
End komutu kullanılacaktır.
Visual Basic dilinde programlar alt program mantığında yazılırlar. Yani yapılacak işler bir nevi
gruplandırılmıştır. Biz bunlara Olay (Event) diyoruz. Siz yapmak istediğiniz işlemin hangi
zamanda veya nasıl bir tetikleme ile başlayacağına karar vermelisiniz. Yani bir düğmeye
tıkladığınızda mı yoksa düğmenin üzerine geldiğinizde mi ya da tab tuşu gibi belirli bir
düğmeye bastığınızda mı? Yazmış olduğunuz kodların ne zaman çalışmasını istiyorsunuz? İşte
bunların cevabı ilgili Event’ ı seçmekten geçiyor.
Bir nesne üzerine çift tıklayarak kod penceresine geçersiniz. Kod penceresi açıldığında o
nesneye ait varsayılan Olay(Event) açılacaktır. Sağdaki açılan kutudan farklı bir Olay(Event)
seçerek buraya kodlarınızı yazabilirsiniz. Visual basic dilinde gördüğünüz gibi birçok
Olay(Event) mevcuttur.
Project-VBA Project penceresinin en üstünde formlar ve kod penceresi arasında geçiş
yapmanızı sağlayacak düğmeler bulunmaktadır. Bu düğmeleri kullanarak form ve kod
pencereleri arasında hızlı geçiş yapabilirsiniz.
Events (Olaylar)
Activate – Deactivate: Programınız da birkaç form varsa bu formlardan aynı anda yalnız
biri aktiftir. Aktivitenin programdaki formlardan diğerine geçmesi durumunda aktiviteyi
kaybeden formun Deactivate olayı, aktif olan formun da Activate olayı meydana gelir. Bu
olaylar yalnız sizin programınızdaki formlar arası geçişte meydana gelir. Windows altında
çalışan başka bir programın aktiviteyi ele geçirmesi veya kaybetmesi bu olayı meydana
getirmez.
Click: Nesne üzerine tıklandığında meydana gelir.
DbClick: Nesne üzerine çift tıklandığında meydana gelir.
Error: Nesne ile ilgili herhangi bir hata çıktığında bu olay meydana gelir.
Exit: Elemandan çıkıldığı zaman gerçekleşen olaydır. Yani eleman kontrolü kaybedince bu
olay meydana gelir.
Initialize: Formun açılışında meydana gelir. Mesela programın açılışında “Programa hoş
geldiniz” gibi bir mesaj verdirtmek isterseniz bu olayı kullanmanız gerekecektir.
KeyPress – KeyDown - KeyUp: Eğer program içersinde belli bir tuşa göre kod yazmanız
gerekiyorsa bu olaylardan birini tercih edeceksiniz. KeyPress, tuşa bastığınız zaman KeyDown,
tuş basılı olduğu sürece KeyUp, tuş bırakıldığı zaman meydana gelir.
MouseDown – MouseUp – MouseMove: Bu olaylar mouseun kontrolünde kullanılır.
MouseDown, mouseun tuşu basılı iken
MouseUp, mouseun tuşu bırakıldığı zaman
MouseMove ise formun üzerinde mouse gezerken meydana gelir.
ReSize: Formun boyutunun değiştirilmesi halinde bu olay meydana gelir. VBA doğrudan
formun boyutunun değiştirilmesine müsaade etmeyecektir. O yüzden boyutlandırmayı
kodlarla yapmak gerekiyor.
Scroll: Formda bulunan ScrollBarlar kullanıldığında bu olay meydana gelir.
Terminate: Formun kapatılacağı zaman meydan gelir.
Label (Etiket) Kontrolü
Daha çok kullanıcıya form üzerinde bilgi vermek için kullanılır. Bu nesneye kullanıcı tarafından
giriş yapılamaz.
Properties (Özellikler)
o Caption Özelliği : Label üzerinde görüntülecek başlık bu özellikle belirlenir.
o AutoSize Özelliği : True veya False değeri alır. Eğer True değeri verilmişse
nesnenin genişliği Caption özelliği ile belirlenen başlık kadar olacaktır.
o TextAlign Özelliği : Caption özelliği ile belirlenen başlık bilgisinin nesne
üzerinde hizalanması için kullanılır. Şu değerleri alır; 1-frmTextAlignLeft,2-
frmTextAlignCenter ve 3- frmTextAlignRight
TextBox (Metin Kutusu) Kontrolü
Bilgi girişi için kullanılan kontroldür.
Properties
TextAlign Özelliği : Nesne içerisinde metni hizalamam için kullanılır.
Enable Özelliği : True veya Flase değeri alan bir özelliktir. Nesnenin kullanılabilir olup
olmayacağını belirlersiniz. True ise nesne kullanılır, False ise nesne pasif durumda yani
kullanılamaz.
MaxLength Özelliği : Textbox’ a girilebilecek karakter saysı bu özellik ile belirlenir. Varsayılan
değeri sıfır(0)’ dır. Bu durumda bir sınırlama yoktur. Bir rakam belirttiğinizde nesne
içersine en fazla belirtilen rakam kadar karakter girebilirsiniz
Multiline Özelliği : Birden fazla satır girişi yapailmek için kullanılır. True veya False değeri alır.
True değeri verilmişse birden fazla satır bilgi girilirken, False değerinde girilen blgiler tek
satırda görüntülenir.
PasswordChar Özelliği : Şifre girişlerinde kullanılır. Girilen karakter yerine görüntülenmesini
stediğiniz karakterin belirlendiği özelliktir.
Text Özelliği : Textbox’a girilen bilgi bu özellik ile öğrenilir veya değiştirilir. Textbox’ ın en çok
kullanılan özelliğidir.
ControlTipText Özelliği : Mouse ile nesne üzerine geldiğinizde, nesne ile ilgili bir açıklama
balocuğu görüntülemek amacıyla kullanılır.
Font Özellikleri
1. Fontİtalic : True veya False değeri alan bu özellik ile nesne içerisindeki yazının eğik olup
olmayacağı belirlenir.
2. FontBold : True veya False değeri alan bu özellik ile nesne içerisindeki yazının kalın olup
olmayacağı belirlenir.
3. FontUnderline : True veya False değeri alan bu özellik ile nesne içerisindeki yazının altı
çizili olup olmayacağı belirlenir.
4. FontName : Nesne içersindeki metnin yazı tipi adı belirlenir.
5. FontSize : Rakamsal bir değer alır ve yazı boyutunu belirlemek için kullanılır.
Events (Olaylar)
Change Olayı : Metin kutusu içerisindeki değer değiştiği anda meydana gelir.
Enter Olayı :Metin kutusu içerisinde Enter tuşuna basıldığında meyadana gelir.
Exit Olayı : Metin kutusu imleç kontrolünü bıraktığı anda meydana gelir.
Bu örnekte Sayı1 ve Sayı2 metin kutularına girilen bilgilieri toplayan ve Sonuç metin kutusuna
yazan program kodlarını yazacağız. Ayrıca bunu farklı birkaç Event(Olay) ile yapacağız.
İlk olarak Change olayını kullanıyoruz. Siz rakamları girdiğiniz anda Sonuç metin kutusunda
toplam sonuçlarını görmek istiyorsanız bu olayı kullanmalısınız.
Textbox1 ve Textbox2 nesnelerine girilen rakamlar toplanıyor ve Textbox3 nesnesine
aktarılıyor. Toplama işlemi yaparken Val fonksiyonu kullanıyoruz. Çünkü Textbox nesnelerine
girilen tüm bilgiler metinsel türdendir. Yani üzerinde matematiksel işlemler yapılmaz. Girilen
rakamsal bilgi dahi olsa. Girilen bilgiyi sayısal veri türüne çevirmek için “Val” deyimi kullanılır.
Aynı kodları Textbox2 içinde yazınız.
Bu defa toplama işlemini rakam girilir girilmez değil, Textbox’ tan çıkıldığı anda yapalım.
Kodlar hiçbir şekilde değişmiyor. Sadece toplam sonucunu ne zaman hesaplatmak istiyoruz
ona göre olayı değiştiriyoruz. Bu yüzden işin ne zaman yapılacağı, ne zaman yapılmak
istendiği çok önemlidir.
CommandButton (Komut Düğmesi) Kontrolü
Bir olayın kullanıcı tarafından başlatılması için programlarda çok kullanılan kontrollerden
biridir.
Properties
Caption Özelliği : Komut düğmesi üzerinde görüntülenecek başlık yazısı.
Cancel Özelliği : True veya False değeri alan bu özellik form üzerinde sadece bir komut
düğmesi için True yapılabilir. Cancel özelliği True yapılmış olan komut düğmesi altındaki
kodlar, formun herhangi bir yerinde ESC tuşuna basıldığında çalışacaktır.
Default Özelliği : Cancel özelliği ile aynı mantıkta çalışan bir özelliktir. Default özelliği True
yapılmış komut düğmesi altındaki kodlar ENTER tuşu ile de çalıştırılır.
Enabled Özelliği : Nesnenin aktif veya pasif durumunu ayarlar. True ise nesne aktif, False
ise nesne pasif olacaktır.
Picture Özelliği : Komut düğmesi üzerinde görüntülenmek istenen resim bu özellikl ile
belirlenir.
Visible Özelliği : Nesnenin görünür olup olmayacağı bu özellik ile belirlenir. True ise nesne
görüntülenir, False ise nesne görüntülenmeyecektir.
MSGBOX (Mesaj Kutuları)
Genellikle kullanıcıya bilgi veya açıklama vermek, kullanıcının onayını almak amacıyla
kullanılan mesaj kutularıdır.
Eğer kullanıcıya sadece mesaj vermek amacıyla kullanılacaksa aşağıdaki gibi yazılabilir.
Msgbox “Mesaj”
Bu tür kullanımda kullanıcıya sadece bilgi veya açıklama verilir. Kullanıcıdan bir cevap
beklenmez. Bunun yanı sıra kullanıcıya soru sorup, verdiği cevaba göre işlem yapılacaksa
kullanım şekli aşağıdaki gibi olmalıdır.
cevap = MsgBox ( mesaj, [tip], [pencerebasligi], [, helpfile, [context])
Mesaj : Mesaj penceresi içersine yazılmasını istediğimiz mesaj bu özellik ile belirlenir.
Pencere Başlığı : Mesaj pencersinin başlığının belirlendiği parametredir.
Helpfile, Context :Bu iki özellikle bir yardım dosyası ismi ve bir kullanıcının mesaj
kutusunda yardım istediğinde gösterilir.
Tip : Mesaj penceresine konulacak düğmeler, simegeler, pencere önceliği ve varsayılan
düğme seçeneklerinin belirlendiği parametredir. Tip parametresini bir formül olarak yazacak
olursak;
tip = secenek + icon + varsayilan + oncelik
Tip parametresi ile belirlenecek özelliklerin alabileceği değerler ise şu şekildedir.
Seçenek parametresi ile mesaj penceresindeki düğmeler belirleniyor.
Simge parametresi ile mesaj penceresinin simgesi belirleniyor.
Varsayılan parametresi ile mesaj penceresinde görüntülenen düğmelerden hangisinin
seçili olarak geleceği belirleniyor
Öncelik parametresi ile mesaj penceresinde bir seçim yapılmadan diğer programlara
geçiş olup olamayacağı belirleniyor. Bu değer 4096 ise diğer uygulamalara geçiş
yapılamaz.
Mesaj penceresinin bu kullanımında Msgbox fonksiyonu mutlaka bir değişkene
eşitlenmelidir. Çünkü kullanıcının vereceği cevap bu değişkende saklanacaktır. Seçilen
düğmeye ait bilgi bu değişkende saklanacağından, düğme değerlerinin de bilinmesi
gerekir.
INPUTBOX (Bilgi Giriş Kutusu)
Kullanıcının bilgi girişi yapabildiği bir mesaj penceresidir. Bu fonksiyon standart olarak Ok ve
Cancel düğmeleri bulunan bir pencere açar ve değer girişi bu pencereden yapılır.
Cvp=InputBox (mesaj [,baslik][,varsayilan deger][,x][,y][,helpfile, context])
Mesaj : Girilmesi gereken değer için açıklama
Başlık : Açılacak pencerenin başlığı.
Varsayılandeğer : Değer giriş kutusunda bulunması istenen değer.
x, y : Pencerenin, sol üst köşesinin x ve y koordinatlarını belirler.
Fonksiyondan dönen değer kullanıcının yazdığı metindir. Kullanıcı Cancel düğmesini seçmişse
boş değer döner.
InputBox fonksiyonundaki son iki parametre ile yardım dosyasının ismi ve konu numarası
verilirse pencereye ayrıca yardım düğmesi de eklenecektir.
Bu örnekte kullanıcı doğum yeri bilgisini Inputbox penceresinden girecektir. Cvp değişkeni ile
girilen bilgi öğrenilebilir. Çıkan pencerede varsayılan değer olarak “Manisa” bilgisi
tanımlanmıştır.