You are on page 1of 95

Temel Bilgiler Additional Kontroller

Makrolara Giri Denetim Ara ubuu


VBA (Visual Basic for Applications) Formlar Ara ubuu
Programlamaya Gei Form Oluturma
Deiken ve Veri Tipleri Dosyalama lemleri
Program Kontrol Deyimleri Rastgele Eriimli Dosyalar
Dngler ve Kontrol fadeleri Sral Eriimli Dosyalar
Operatrler Dosya Kontrol Fonksiyonlar
Fonksiyonlar ve Alt Programlar Excel de Program Yazma
Bilgi Giri ve Mesaj Pencereleri Hata Yakalama
Disk ve Dosya Ynetim Komutlar Debug
String lemler Personel Program
Tarih ve Zaman Fonksiyonlar o ve daha birok rnek

YAZARLAR

Adem KSEMAN Mehmet ZPINAR


Bilg.Prog. Bilg.Prog.

NN NVERSTES
MALATYA 2004
NDEKLER

1. BLM TEMEL BLGLER


Excel deki baz nemli kavramlar 1
Makro Nedir? 2
2. BLM MAKROLARA GR
Basit Bir Makronun Kayd Nasl Yaplr? 4
Bir Makronun Ksa Yoldan altrlmas 5
3. BLM NEML ARA UBUKLARI ve ELEMANLARI
Formlar Ara ubuu ve zellikleri 6
Denetim Ara Kutusu ve zellikleri 7
Formlar ve Denetim Ara ubuklarnn Karlatrlmas 8
4. BLM VBA (Visual Basic for Applications)
VBA (Visual Basic for Applications) Componentleri ile alma 11
Componentler ve Genel zellikleri 11
Additional Controls 17
En ok Kullanlan Ek Kontroller 18
5. BLM PROGRAMLAMAYA GE
Deikenler ve Veri Tipleri 22
Global ve Local Deiken Tanm 25
Deikenlerin ve Kontrollerin Tipini Belirlemek 26
Program Kontrol Deyimleri
If Yaps 26
Select Case Yaps 27
IFF 27
Choose-Switch 27
Dng Deyimleri
For Dngs 27
While - Wend ve Do While-Loop Dngs 28
Do Until Loop Dngs 28
Do Loop While ve Do Loop Until Dngs 28
Dng Kontrol fadeleri
Exit Do 29
Exit For 29
Exit Sub, Exit Function 29
End 29
With With End 29
Operatrler 30
Fonksiyonlar ve Alt Programlar
Procedur Tanm 32
Procedur ars 33
6. BLM BLG GR ve MESAJ PENCERELER
MsgBox (Mesaj Kutusu) 34
InputBox (Bilgi Giri Kutusu) 36
7. BLM KOMUTLAR
Disk ve Dosya Ynetim Komutlar 37
Tarih ve Zaman Fonksiyonlar 39
Uygulamalarla lgili Komutlar 40
String lemleri 41
Rastgele Say retim Fonksiyonlar 43
Yuvarlatma Fonksiyonlar 44
8. BLM DOSYALAMA LEMLER
Dosya Amak 45
Rastgele Eriimli Dosyaya Yazma ve Okuma 47
Sral Eriimli Dosyaya Yazma ve Okuma 47
Dosyalar Kapatmak 49
Dosya Kontrol Fonksiyonlar 49
9. BLM EXCEL de PROGRAM YAZMA
Personel Program 52
eitli rnekler
rnek 1 Otomatik Toplam 79
rnek 2 - Hesaplama ve Dosyalama 80
rnek 3 Dosyadan Bilgi Alma 83
rnek 4 Banka deme Plan Hesaplamas 84
rnek 5 arpm Tablosu 86
rnek 6 Toplam Deer Bulma 88
Hata Ayklama 90
Programn Adm Adm altrlmas 91
NSZ

Bilinli kullanc olmak, her eyden nce, sz konusu rn veya hizmeti yakndan
tanmak ve onunla ilgili temel kavramlar bilmekten geer. Dolaysyla tketici
konumunda olsak bile, tkettiimiz rn veya hizmetin zelliklerini bilmeye almalyz.
Bu anlamda gnlk hayatta ev ve ofislerde kullandmz Excel ile yaplan nemli ilevleri
sadece iimiz grlsn diye kullanmaktayz. Halbuki Excel ile bir programlama dili gibi
btnleebilirsiniz.

Excelin bnyesinde bulunan Ara ubuklarndan, Formlar ve Denetim Ara ubuu


vastasyla hibir kod yazmadan baz zel ilemleri, hem kolay hem de gzel bir grnt
vererek yapabilirsiniz. Veri sorgulama, bulma, deitirme gibi ilemler de formller
kullanlamayaca iin bu tr ilemler de makrolara ihtiya duyulur. Bunun iin biraz
programlama bilgisi ile Excel de gvenli, ilevsel ve akc bir program yazabilirsiniz. Excel
in bu anlamda sunmu olduu VB (Visual Basic ) editrnden faydalanlr ve burada form
ve form elemanlar ile alabilirsiniz.

Kitabn yazm amac, Excel in farkl ynlerini gstermek ve programclk mantn


anlatmaktr.

Kitabn yazm aamasnda yardm ve desteklerini esirgemeyen sayn hocamz N.Murat


Yamurlu hocamza sonsuz kranlarmz belirtmek istiyoruz.

Mehmet ZPINAR Adem KSEMAN


mozpinar@e-kolay.net kosemanadem@hotmail.com
Blm -1- TEMEL BLGLER

Excel deki Baz nemli Kavramlar

Hcre

Excel Excel 97, 2000, 2002 ve 2003 gibi, yeni bir kitabn yeni bir alma sayfasnda, her
bir hcreye 32,767 karakterlik bilgi kabul eder. Bir sayfada en fazla 65,536 satr olabilir.
Excel bilgileri, hcrelerin iine yazlr; bunun iin hcrenin seili olmas gerekir. Bir
hcreyi iini tklayarak seiiniz zaman hcrenin ad, Ad Sekmesinin iinde gsterilir.
Hcrelerin ad, bulunduklar stunun harfi ve bulunduklar satrn numaras yan yana
getirilerek verilir: A1 gibi. Hcre adna Excel dilinde adres, bavuru adresi veya referans
denir. Bir hcre seildii anda, o hcrenin stun ve satr balklar da koyu harflerle
gsterilir.

Excel bilgisinin temel ta, hcreleri tanmak ve tantmaktr diyebiliriz. Excele hesap
yaptrmak, bir hcre ile bir dier hcreyi veri al-verii ilikisine sokmak demektir. Baka
bir deyile Excel de sadece gzel ve dzenli listeler yapmayacak, sayfalarnza girdiiniz
bilgilerle hesaplar yaptracaksanz, bu, bir hcrenin, bir veya daha fazla sayda dier
hcrede bulunan bilgileri alp, bunlarla matematik, mal, istatistiksel veya bir baka
kategorideki ilemi yapmas demektir. Excelde hcrelerin bavuru adresi, tek hcreler
iin rnein A1, birden fazla hcre iin ise grubun, balang ve biti hcreleri, iki nokta
st ste iaretiyle birletirilerek (A1:A10 gibi) yazlr. Birden fazla stunu kaplayan ok
sayda satr seerseniz, bu grup birinci stunun ilk hcre ile son stunun son hcresinin
adyla adlandrlr (A1:D10 gibi). Excel dilinde hcre gruplarna Aralk (Range) denir.
(Excel 2000de Excel 97deki Erim kelimesinin terkedildii grlyor!)

Excel de bir hcreyi semek iin hcrenin iini tklamanz yeterli. Bir birine komu
olmayan hcreleri semek iin, ilk hcreyi setikten sonra, klavyede Ctrl tuunu tutun ve
bu kez seilecek dier hcreleri tklayn. Ayn ekilde bir birine komu olmayan hcre
gruplarn da seebilirsiniz. Bir hcreyi tkladnz zaman forml ubuunun solunda
adres sekmesinde hcrenin adresinin belirdiine dikkat edin. Birden fazla komu hcreyi
seseniz de adres sekmesinde bu grubun semeye baladnz ilk hcresinin ad yazl
olur.

Hcreler arasnda hareket iin klavyedeki hareket tularn kullanabilirsiniz.

Yukar ok: Bir hcre yukar


Aa ok: Bir hcre aa
Sa ok: Bir hcre saa
Sol ok: Bir hcre sola
Sekme: Bir hcre saa
st-karakter (Shift )-Sekme: Bir hcre sola
Home: Satrn birinci hcresine
Page Up: bir pencere dolusu (ekran znrlnze ve ekrannzn byklne bal
olarak, takriben 30-36 satr kadar) yukar.
Page Down: Bir pencere dolusu satr kadar aa
Ctrl+Home: A1 hcresine
Ctrl+end: iinde bilgi olan son satrn son stunda hcreye
Ctrl+Page Down: Bir sonraki alma sayfasnn seili hcresine (seili hcre yoksa A1e)
Ctrl+Page Up: Bir nceki alma sayfasnn seili hcresine (seili hcre yoksa A1e)

Birden fazla hcre seebilmek iin seeceiniz grubun sol st hcresini tklayn; Mouse
iaretisini grubun sol alt hcresine kadar srkleyin. Mouse iaretisini braktnz anda,
setiiniz hcreler grubunun evresinde kaln bir izgi oluur; sol-st hcrenin zemini
beyaz olmak zere dier yelerinin zemini renklendirilir.

Bir satrdaki veya stundaki btn hcreleri semek iin, satrn veya stunun baln
tklamanz yeterlidir. Birbirine komu satrlarn veya stunlarn tmn semek iin ilk
satr veya stunu tklayn; Mouse iaretisini seilecek satr veya stun balklar boyunca
srkleyin. Birbirine komu olmayan satr ve stunlarn tmn semek iin, ilk satr
veya stunu tkladktan sonra klavyede Ctrl tuunu tutun ve dier satr veya stunlarn
balklarn tklayn.

Hcrelerin eni-boyu stun veya satr balklar arasndaki izgiler saa-sola veya yukar
aa kaydrlarak deitirilebilir.

Forml

Excel belgelerini bir kelime-ilem programyla yaplabilen listelerden farkl klan,


formlleridir. Forml, bir hcreye girdiimiz ve bize bir sonu bildiren denklemdir.
Formlleri, Forml ubuuna, = iaretiyle balayarak yazarz. Formln sonucu, formln
bulunduu hcrede gsterilir. Bir formlde u unsurlar bulunabilir:

1. lem iaretleri: art, eksi, arp, bl. (Excel in yardm metinlerinde bunlara ile
dendiini greceksiniz.)
2. Hcre veya hcre grubu adresleri (bavuru, referans): A1, B2 A1:A15 gibi
3. Saylar ve metinler
4. Excelin kendi kullanlmaya hazr fonksiyonlar (SUM gibi)

Bir hcreye forml, elle girebiliriz. Bunun iin hcreyi seip, forml ubuuna nce
eittir (=) iaretini, ardndan formln dier unsurlarn yazarz. rnein, A3 hcresinde
A1 deki deerin A2 ye blnmesinin sonucu yer alsn istiyorsak, A3 tklayp forml
ubuuna =A1/A3 yazmamz gerekir. Forml giriinin bittiini belirtmek iin klavyeden
Enter tuuna basmak veya baka bir hcreyi tklamak gerekir.

Formlleri, Mouse iaretisiyle, hcrelere, hcre gruplarna iaret ederek de girebiliriz.

Yukardaki rnei iaretleyerek uygulamak iin, A3 tklayp, = iaretini yazdktan


sonra, klavyede yukar ok tuuna iki kere basarak, A1 i seilmi hale getirmek, klavyede
bl (/) tuuna basmak, tekrar yukar oka basarak A2 yi seilmi hale getirdikten sonra
Entera basmak yeter. Bu ilemi yaparken, yukar oklara bastnz srada Excel in A1 ve
A2 hcrelerinin evresine kesik izgili bir ereve koyduuna dikkat edin: bu hcrenin bir
formlde referans olarak kullanlacann iaretidir. Excelde formlleri zel bir blmde
ele alacaz.

Makro Nedir?

Microsoft Excel'de bir ii sk gerekletiriyorsanz, bu ii makro kullanarak


otomatikletirebilirsiniz. Makro, Microsoft Visual Basic modlnde (modl: Bir tek
adlandrlm birim halinde depolanan bir bildiriler, deyimler ve yordamlar btn. ki tr
modl vardr: standart modller ve snf modlleri.) saklanan ve ii her gerekletirmeniz
gerektiinde altrlabilen bir komut ve fonksiyonlar (fonksiyon: Bir deer veya deerleri
alan, bir ilemi gerekletiren ve bir deer veya deerler dndren, nceden yazlm bir
forml. alma sayfasndaki formlleri, zellikle uzun veya karmak hesaplamalar
yapanlar sadeletirmek ve ksaltmak iin fonksiyonlar kullann.) dizisidir.

rnein, hcrelere sk sk uzun metin dizileri giriyorsanz, bu hcreleri ilerindeki


metinleri kaln, eik ve alt izili ekilde biimleyen bir makro oluturabilirsiniz.

Makro kaydetme Bir makro kaydettiimizde Excel, Excel zerinde yaptmz her trl
ii veya olay, siz bir dizi komutu gerekletirmisiniz gibi saklar. Bundan sonra, makroyu
altrarak komutlarn yinelenmesini veya yeniden yrtmesini salarsnz. Makro
kaydederken hata yaparsanz, yapacanz dzeltmelerde kaydedilir. Visual Basic (Visual
Basic: Basic in yksek dzeyli bir programlama srm. Visual Basic Microsoft tarafndan
Windows tabanl uygulamalar oluturmak iin gelitirmitir.) her makroyu bir alma
kitabna ilitirilen yeni bir modlde saklar.

Makronun kolay almasn salama Makrolar, Makro iletiim kutusundaki (Aralar


mensnden Makro/Makrolar) listeden seerek veya bir butona, fonksiyon tuuna(F6),

2
tu kombinasyonuna(Ctrl+H) hatta grafik nesnesine de(Otomatik ekiller veya resim)
atayarak kolayca altrabilirsiniz.

Makrolar ynetme Makro kaydettikten sonra hatalar dzeltmek veya makronun


ileyiini deitirmek iin Visual Basic Dzenleyicisi (Aralar mensnden Makro/Visual
Basic Dzenleyicisi veya ALT+F11)(Microsoft Visual Basic Editor: Kaydettiiniz makrolar
dzenleyebileceiniz ve yeni makrolar ve Visual Basic for Applications programlar
yazabileceiniz bir ortam.) ile makro kodunu grebilirsiniz. rnein, metni biimlendiren
makronun ayn zamanda metni ortalamasn da istiyorsanz, hcrede metni sola
yaslamaya yarayan bir makro kaydedebilir ve sonra bu makrodaki ynergeleri metni
biimlendiren makroya kopyalayabilirsiniz.

Visual Basic Dzenleyicisi, makro kodu yazmay ve dzenlemeyi yeni balayanlar iin
kolaylatrmak amacyla tasarlanm bir programdr. Makrolarnzda basit deiiklikler
yapmak iin programlama renmeniz veya Visual Basic dilini kullanmanz gerekmez.
Visual Basic Dzenleyicisi ile makro dzenleyebilir, makrolar bir modlden dierine
kopyalayabileceiniz gibi, farkl alma kitaplar arasnda da kopyalama yapabilir,
makrolar saklayan modlleri veya makrolar yeniden adlandrabilirsiniz.

Makro gvenlii Excel, makrolarla bulaabilen virslere kar koruma salar.


Hazrladnz makrolarn virs iermediinden emin olduktan sonra bir baka bilgisayarda
altrabilmeniz iin ncelikle makro gvenlik seviyesini drmeniz gerekmektedir.
Bunun iin Aralar mensnden Makro/Gvenlik ve buradan Dk seeneini sememiz
gerekmektedir.

3
Blm -2- MAKROLARA GR

Basit bir makro kayd nasl yaplr?

Bir makro kayd yapmak iin Aralar mensnden Makro ve alt sekmesi olan Yeni Makro
Kaydet i seelim.

Karnza gelen Makro Kaydet iletiim


kutusunda kaydedeceimiz makronun adn,
ksayol tanmlamasn, makronun nereye
kaydedileceini ve makroyla ilgili aklamalar
ayarlayabileceiniz gibi makro kayd bittikten
sonrada yapabilirsiniz. Bu yzden biz hibir
ayar yapmadan Tamam tklayarak makro
kaydn balatyoruz. Kayt baladktan sonra
Excel zerindeki yaptmz her ey
kaydedilmektedir. Excel bizi kameraya alyor
dersek yanl olmaz heralde.

Bu kayd durdurabilmemiz iin ise kk bir Kayt Durdur kutucuu alacaktr.


Bu kutucuun zerinde iki tane dme vardr. Bunlardan biri
Kayd Durdur dieri ise Greli Bavuru dmeleridir. Kayd
Durdur, kayt iimiz bittiinde kayd bitirmemize yarayan
dmedir. Greli Bavuru dmesi ise, makronun, etkin
hcrenin konumuna greli olarak almasn isterseniz,
makroyu, greli hcre bavurular kullanarak kaydedebilirsiniz.
Siz Excel den kncaya veya Greli Bavuru yu yeniden tklatp seimini kaldrncaya
kadar, Excel greli bavurular
kaydetmeye devam eder.

Kaydedilmi bir makronun


altrlmas Daha nce
kaydettiimiz bir makroyu
altrmak iin daha nceki
konular da bahsettiimiz gibi
eitli yollar vardr. imdilik
bunlardan bir tanesini
greceiz. Bunun iin Aralar
mensnden Makro/Makrolar
veya Alt+F8 e basalm.
Karmza gelen bu
pencerese daha nce
kaydettiimiz makrolarn
4
listesini ve bu makrolarla ilgili ayarlar grebilirsiniz. altrmak istediiniz makroyu seip
altr dmesine tkladnzda kaydettiiniz makro alacaktr. Bu penceredeki dier
elemanlara da bakacak olursak; Admla, setiimiz makronun iinde yer alan kodlar tek
tek altrr. Yani kaydederken yaptmz olaylar Admla ile tek tek altrabiliz. Bunun
bize faydas, istediimiz yerde almasn durdurabilir, atlatabilir veya yanl yaptmz
yerleri kolayca yakalamamza yardmc olur. Dzenle, setiimiz makronun kodlarn
dzenleyebilmemiz iin Visual Basic Dzenleyicisini aar. Burada kodlar zerinde her trl
deiiklik yaplabilir. Bu konu ileriki konularda ayrntl bir ekilde anlatlacak. Sil, seili
olan makroyu siler. Seenekler, seili makronun ksayol tanmnn ve aklamasnn
yapld alanlar ierir. Makro yeri ise, makronun nerede alacan belirler.

Bir makronun ksa yoldan altrlmas Makro altrma yntemlerinden basite


olann bir nceki konuda grdk. Ksayol tularyla altrmak iin ksayol tanmnn nasl
yapldnda daha nce grmtk. Bunu altrmak iin tanmladmz ksayol tularna
basmamz yeterli olacaktr. Dier bir yntem ise grafik nesneler veya resimlere makro
atamak ve daha sonra bu nesnelere bir kez tklayarak ilgili makroyu altrmak. Bunun
iin Grnm mensnden Ara ubuklar na oradan da izim i seelim. alma
kitabmzn alt tarafna izim ara ubuu otomatik
olarak yerleti. imdi bu ubuktaki Otomatik ekil
den herhangi bir ekli seelim ve sayfamza bir tane
izelim. Bu ekil zerinde Mouse ile sa tklayn ve
Makro Ata y sein. Alan pencerede daha nce
kaydettiiniz makrolarn listesi yer almaktadr.
Bunlardan atamak istediinizi seip Tamam a tklayn.
Artk o ekil zerine bir kez tkladnzda makronuz
alacaktr. Eer daha nce kaydettiiniz makro yoksa
bu alan pencereden direkt olarak makro
kaydedebilirsiniz ve atama otomatik olarak yaplcaktr.
Ayn ilemleri bir resime veya sayfa zerinde duran herhangi bir nesneyede
uygulayabilirsiniz. Makrolarn butona tklanarak altrlmasna Blm -3- te geni bir
ekilde yer verilecektir.

5
Blm -3- NEML ARA UBUKLARI VE ELEMANLARI

Formlar Ara ubuu

Bu ubuk zerinde bulunan elemanlarn zellikleri makro atanabilmeleri ancak


ilerine makro yazlamamasdr (iine makro yazlmas ileri konularda
anlatlacak). Bizim burada kullanacamz elemanlar unlardr; Dme, Etiket,
Onay Kutusu, Seenek Dmesi, Liste Kutusu, Alan Kutu, Kaydrma ubuu,
Deer Deitirici ve Grup Kutusu.

Dme: Bu eleman kullanmak iin Formlar ara


ubuundan Dme yi semek yeterlidir. Seili iken sayfaya bir
kez tklayn, dme otomatik olarak sayfaya yerleecek ve ardndan Makro Ata
penceresi alacak. Buradan yeni makro kayd, makro atamas veya elle makro
yazabilirsiniz.
Yeni bir makroyu Dme yoluyla oluturmak daha ksa bir srede ve ok daha
kolay bir ekilde yaplabilir. Dolaysyla Blm -2- deki ilemlerin bir ouna
gerek kalmaz. Dmenin adn, zerine bir kez tkladktan sonra
deitirebilirsiniz.

Etiket: Formlar ara ubuunun stndeki dier elemanlar etiketlendirmek


iin kullanlr. Etiket adn, zerine bir kez tkladktan sonra deitirebilirsiniz.

Onay Kutusu Genellikle oklu seimler yapmak iin kullanlr. Bu


elemann seili olup olmad DORU YANLI deerleriyle belirlenir.
Bunun iin ilk nce bir hcre balants yaplmaldr. Balanty yapmak iin elemann
zerine sa tklanp Denetimi Biimlendir seilmelidir. Karnza gelen Kontrol Biimlendir
penceresinden Denetim sekmesini sein. Orada bir takm seenekler vardr. Bunlardan
Hcre Balants ksmna balantnn yaplaca adres yazlr. Adresi otomatik yazdrmak
istiyorsanz bu kutunun sa tarafndaki butona basp alan
pencereyi kapatmadan bir hcre seip Enter tuuna basarak adresi alabilirsiniz. Bylece
hcre balants yaplm olur.
Bu pencerede bulunan dier seenekler ise unlar; aretlenmemi, yani Onay Kutusu
bo ve Hcre Balantsnn oluturulduu hcrede YANLI yazar. aretlenmi, yani Onay
Kutusu iaretli ve balant yaplan hcrede DORU yazar. Dier bir seenek ise Karma,
bu da hi manasna gelmektedir. Yani her ikiside deil ve balant yaplan hcrede #YOK
yazar.
Balantl hcre bosa Excel Onay Kutusunun durumunu YANLI olarak yorumlar.
3-B Glgelendirme, Onay Kutusunu 3 boyutlu glgelendirme efektiyle grntlenmesini
salar.

Seenek Dmesi Tek sonucu olan seenek sunumlarnda kullanlr. Bu


elemann seili olup olmad ka tane Seenek Dmesi varsa ona gre sra numaras
alr. Bunun iin hcre balants yaplr. Hcre balants Onay Kutusu ile ayn ekilde
yaplr.

Liste Kutusu Srekli olarak kullandnz verileri bir listede tutmak ve


istediiniz zaman rahatlkla o veriyi bulup gerekli bilgilere
eriebileceiniz bir form eleman. Listedeki her elemann bir sra
numaras vardr. Ve bu sra numaras hcre balants yapldnda
alaca deerdir. Hcre balants dier form elemanlar gibi Denetim
Biimlendir iletiim kutusundan yaplr. Burada Girdi Aral ksmna
listede yer alacak olan verilerin bulunduu adres yazlr. Hcre Balants
ksmna ise dier form elemanlar gibi bir balant hcresi seilir. Hangi
elemann seili olduu bu adresten bulunur. Seim Tr Birden ok yada
Geni ayarlanrsa Hcre Balants kutusunda belirtilen hcre gz ard edilir. Liste
kutusunun grevi en iyi aadaki rnekle anlalacaktr.
Sayfa 2 nin A stununa 5 tane il ad, B stununa o ilin
trafik kodu ve C stununun C1 hcresini de Liste

6
Kutusunun hcre balant adresi olarak belirtelim. imdi de listeden seilen ilin trafik
kodunu reneceimiz hcre formln yazalm. Sayfa 1 de Liste Kutusunun hemen
yanndaki hcreye gelelim ve unlar yazalm;
=NDS(Sayfa2!B1:B5;Sayfa2!C1;1)
ndis formlnn grevi bir tablo yada aralktan bir deer yada deere yaplan bavuruyu
vermektir. Bu forml trafik kodunun yazdrlaca hcreye girildikten sonra o hcrede
hangi il seilmise ona ait trafik kodu yazacaktr.

Alan Kutu Bu form elemann Liste Kutusundan tek fark Alan


Satrlar kutusudur. Bu da alan listede ka tane elemann
grntleneceini belirtmemize yarar. Bunun dnda her trl
kullanm Liste Kutusuyla ayndr.

Kaydrma ubuu Bu form elaman kaydrma oklarn tklattnz veya kaydrma


kutusunu srklediinizde belirttiiniz deer aral boyunca kaydrma ilemi yapar.
Kaydrma kutusuyla kaydrma oku arasna tklatarak, deerler sayfas boyunca
hareket edebilirsiniz. Deer atamak iin elemann zerinde sa tklayp Denetimi
Biimlendir seenei seilerek denetim tabna geilir. Burada gerekli dzenlemeler
yaplr. Geerli deer, Kaydrma kutusunun kaydrma ubuundaki ilk deeridir. En
kk deer, Kaydrma ubuunun en kk deerinin belirlenmesi. En byk deer,
Kaydrma ubuunun en byk deerinin belirlendii yer. Art deeri, Kaydrma
ubuunun ularndaki ok iareti tklatldnda, kaydrma kutusunun hareket ettii
mesafe miktar. Sayfa deiimi, Kaydrma kutusuyla kaydrma oklarnn birinin arasnda
tklattnzda, kaydrma kutusunun hareket ettii mesafe miktar. Hcre balants,
Kaydrma kutusunun hangi hcreyle ilikilendirileceini belirleyen blmdr. 3 Boyutlu
Glgelendirme, Kaydrma ubuunu 3 boyutlu glgelendirme efektiyle birlikte grntler.

Deer Deitirici Deeri artrr veya azaltr. Deeri artrmak iin yukar okunu,
azaltmak iin aa okunu tklatn. Yine bu eleman bir hcreye balamak iin
elemann zerine sa tklayp Denetimi Biimlendir seilerek Denetim sekmesinde
gerekli ayarlar yaplr. Hcre balants ksmna balamak istediiniz hcrenin
adresini veya o hcreyi gidip semekle o hcrenin adresini yazm olursunuz.

Denetim Ara Kutusu

Denetimler, veri grntlemek veya girmek, bir eylem gerekletirmek veya


formu daha kolay okunabilir hale getirmek iin bir forma yerletirdiiniz grafik
nesneleridir. Bunlar yandaki ekilde grld gibi Metim Kutusu, Komut
Dmesi, Seenek Dmesi vs. nesne elemanlarndan olumaktadr.
Denetimler kullanclara seilecek seenekler veya tklatlacak dmeler sunar;
bunlar makrolar veya web kodlarn altrr.
Microsoft Excel iki tr denetime sahiptir. ActiveX Denetimleri(ActiveX denetimi:
Onay kutusu veya dme gibi kullanclara seenekler sunan veya bir grevi
otomatikletiren makrolar veya komut dosyalarn altran bir denetim.)
birok durum iin uygundur ve hem Microsoft Visual Basic for Application
(VBA: Microsoft Visual Basic'in Windows uygulamalarn programlamak iin
kullanlan ve baz Microsoft uygulamalaryla birlikte gelen makro dili srm.)
makrolar hemde web kodlar ile alr.
imdi ksaca bu denetimler nelerdir ve kullanmlar hakkndaki bilgileri grelim.

Design Mode (Tasarm Modu) Bu dme tasarm moduna gemek veya


tasarm modundan kmak iin kullanlr. Bir tasarm dan veya
programlamadan sonra programmz altrabilmemiz iin tasarm modundan
kmamz gerekir.

7
Properties (zellikler) Bu dme seili denetim elemann zelliklerine eriebilmemize
yarayan pencereyi aar. Burada bulunan ayarlara ilerideki konularda daha geni bir
ekilde yer verilecektir.

View Code (Kod Grntle) Bu dme seili denetimin kodlarn grntlememize


yarar. Denetimlerin zerlerine ift tklandnda yine ayn yer alacaktr.

Check Box (Onay Kutusu) Bu denetim Formlar Ara ubuunda bulunan onay
kutusuyla ayn ie yarar.

Text Box (Metin Kutusu) Bilgi girii iin kullanlan denetimdir.

Command Button (Komut Dmesi) Tklandnda eylen, olay balatan denetimdir.

Option Button (Seenek Dmesi) Seenek grubundan bir seenek belirlenmesine


yarayan denetimdir.

List Box (Liste Kutusu) erisinde srekli kullanlacak olan bilgileri tutar. Gerek
duyulduunda listeden istenilen eleman seilecek bilgiye ulalr.

Combo Box (Karma Kutu) Liste Kutusunun alabilir olandr.

Toggle Button (Deitirme Dmesi) Tklatlnca basl kalan, yeniden tklatlnca da


serbest kalan dme.

Spin Button (Dndrme Dmesi) Hcreye veya metin kutusuna ilitirilebilen


dmedir. Deeri artrmak iin yukar, azaltmak iin aa okunu tklanr.

Scrool Bar (Kaydrma ubuu) Kaydrma oklarn tklattnz veya kaydrma kutusunu
srklediinizde deer aral boyunca kaydrma ilemi yapmaya yarayan denetimdir.

Label (Etiket) alma sayfas veya forma denetim, alma sayfas veya form hakknda
bilgi salamak iin eklenmi metin.

Picture (Resim) Forma resim kattran denetimdir.

Additional Controls (Dier (Ek) Denetimler) Ek ActiveX Denetimlerinin listesinin


grntlenmesine yarar. Alan listeden istediinilen farkl bir denetimi seerek forma
eklenebilir.

Formlar ve Denetim Ara ubuklarnn Karlatrlmas

ActiveX Denetimleri Hakknda

Ne zaman kullanlr : ActiveX Denetimini birok evrimii form iin kullann, zellikle
denetim kullanldnda meydana gelen farkl olaylar denetlemeniz gerektiinde. rnein,
alma sayfasna liste kutusu denetimi ekleyebilir ve sonra da kullancnn listeden
yapt seime bal olarak farkl eylemler gerekletirecek bir makro yazabilirsiniz.

Denetimler ne yapabilir : ActiveX denetimleri, Microsoft Visual Basic gibi programlama


dillerinde bulunan denetimlere benzer ve Visual Basic Dzenleyicisi'ndeki zel formlara
ekleyebileceiniz denetimlerle ayndr. Bir alma sayfasna ActiveX denetimi
eklediinizde, denetim tklatldnda altrlacak bir makro atamann aksine, denetimin
kimlik numarasna referans eden makro kodu yazarsnz. Formun bir kullancs denetimi
kullandnda, kodunuz alr ve meydana gelen tm olaylar iler.

Denetimler ne yapamaz : ActiveX denetimlerini grafik sayfalarnda veya XLM makro


sayfalarnda kullanamazsnz. Bu tip durumlarda, Formlar ara ubuu denetimlerini
kullann. Dorudan denetimden alan bir makro eklemek istiyorsanz, bir Formlar ara
ubuu denetimi kullann.
8
zel zmlerdeki ActiveX denetimleri : ActiveX denetimlerinin, zelletirebileceiniz
zellikleri vardr. rnein, bir kullanc denetimin zerine geldiinde iaretinin alaca
grnm belirleyebilirsiniz. ActiveX denetimleriyle ilikili olaylara yant olan makrolar
yazabilirsiniz. ActiveX denetimlerini hem Excel formlarnda hem de VBA programlarndaki
formlarda ve iletiim kutularnda kullanabilirsiniz.

Web sayfalarndaki ActiveX denetimleri : Web sayfalarna koymay planladnz


Excel formlar ve verileri iin, ActiveX denetimleri dahil edebilir ve denetimler bir Web
taraycsnda kullanldnda alacak Web kodlar (makro kodundan baka) yazabilirsiniz.
Kodlar Microsoft Kod Dzenleyicisi'ni kullanarak Excel'de VBScript (Visual Basic Scripting
Edition) programnda yazabilirsiniz.

Denetimler nerede bulunur : ActiveX denetimleri salayan bir ara ubuudur. Bu


denetimlerin bazlar Formlar ara ubuu denetimlerine benzemektedir ve deitirme
dmeleri ve resim denetimleri gibi dierleri Formlar ara ubuunda kullanlamaz.
Denetim Ara Kutusu ayn zamanda dier programlar tarafndan yklenen zel ActiveX
denetimleri ierir, rnein Microsoft Internet Explorer tarafndan yklenen etkin film
denetimi.

Form Denetimleri Hakknda

Ne zaman kullanlr : Bir forma ilikin tm makrolar kaydetmek istiyorsanz ama hibir
makro kodunu VBA'da yazmak veya deitirmek istemiyorsanz Formlar ara kutusundan
bir denetimi kullann. Ayrca grafik sayfalarndaki Formlar ara kutusu denetimlerini
kullanabilirsiniz.
Denetimler ne yapabilir : Bu denetimler dier kullanclarn Microsoft Excel kullanarak
doldurduu alma sayfas formlarnda kullanmak iin tasarlanmtr. Varolan bir
makroyu bir denetime ilitirebilir ya da yeni bir makro yazabilir veya kaydedebilirsiniz.
Formun bir kullancs denetimi tklattnda, denetim makroyu altrr.
Denetim neler yapamaz : Formlar ara ubuu denetimleri, ActiveX denetimlerinin
kullanlabildii gibi, olaylar denetlemek iin kullanlamaz. Buna ek olarak, Formlar ara
ubuu denetimleri web sayfalarnda web kodlar altrmak iin kullanlamazlar.
Denetimler nerede bulunur : Formlar ara ubuu denetimleri Formlar ara ubuunda
bulunur.

rnekler:

Form denetimi: rneimiz de hcrelere girilmi on saynn toplamn bulacaz.


lk nce alma sayfamza bir tane Dme getirip brakalm ve kan pencereden Kaydet
i sonraki pencerede ise Tamam tklayalm. Daha sonra makro kaydn durdurmak iin
Aralar/Makro/Kayd Durdur u seelim ve kayd durduralm. Tekrar ayn menye girip bu
kez Makrolar seelim. Alan pencereden kaydettiimiz makroyu seip Dzenle ye
tklayalm. Karmza VBA kodlarn yazacamz kod penceresi geldi. Kod penceresinde
yeil ile yazlm olan ksmlar aklama satrlardr bunlar silebilirsiniz. imdi aadaki
kodlar yazalm.

Sub makro1()

For i = 1 To 10 1den 10 a kadar dng alyor.


Top = Top + Cells(i, 1) deikene dng her dndnde deer atanyor
Next i dng kapatlyor
MsgBox Top sonu mesaj olarak kullancya bildiriliyor.

End Sub

9
ActiveX denetimi : Bu rneimizde on satrdan ka tanesinin dolu ka tanesinin bo
olduunu bulup E1 hcresine dolu hcre saysn E2 hcresine ise bo hcre saysn
yazdrtalm. Bunun iin Denetim Ara ubuundan CommandButton u alma sayfamza
getirelim. Ve CommandButton un zerine ift tklayarak kodlar yazacamz pencereye
ulaalm. Buraya aadaki kodlar yazalm.

Private Sub CommandButton1_Click()

For i = 1 To 10
If Cells(i, 1) <> "" Then Eer hcreler dolu ise
dolu = dolu + 1 dolu deikeni bir arttrlyor
End If dng kapatlyor
If Cells(i, 1) = "" Then Eer hcreler bo ise
bos = bos + 1 bos deikenin bir arttrlyor
End If dng kapatlyor
Next i
Cells(1, 5) = dolu dolu deeri E1 hcresine
Cells(2, 5) = bos bos deeri E2 hcresine yazdrlyor.

End Sub

imdi programn alabilmesi iin Design(Tasarm Modu) nun kapatlmas gerekiyor.


Kapatmak iin Denetim Ara ubuundan tasarm modu butonunu sein.

10
BLM -4- VBA (Visual Basic for Applications)

Microsoft Visual Basic in Windows uygulamalarn programlamak iin kullanlan ve baz


Microsoft uygulamalaryla birlikte gelen makro dili srmdr. Dili Visual Basic ile birebir
ayn olmasa da komutlarn kullanm birebir ayndr. Gze arpan en byk fark VBA nn
Form2 Componentlerini kullanmasdr. Mesela Visual Basic te ki metin kutusunun ad
Text iken VBA da TextBox, alr kutu Combo iken VBA da ComboBox dr.

VBA (Visual Basic for Applications) Componentleri ile alma

Excel de makro yazabilmek iin VB editr kullanlr. Dolaysyla makro daki bir ok
komut VB komutlaryla ayndr. VB editrn amak iin Aralar mensnden Makro
seeneinin alt mensnden Visual Basic Dzenleyicisi seilir. Yada Alt+F11 tu
kombinasyonlar kullanlr. Ekrana gelen VB editrnde sol tarafta Project-VBAProject
penceresinde alm olan btn sayfalarn isimleri mevcuttur. Standart 3 sayfa olduu
iin Sayfa1 (Sayfa1), Sayfa2 (Sayfa2), Sayfa3 (Sayfa3) eklinde yazldr. Ayrca
ThisWorkbook seenei o anki alma kitabn temsil etmektedir. Yine sayfann sol
tarafnda sayfalara ait Properties ler (zellikler) penceresi yer almaktadr. Bu blmden
projenizdeki elaman ve nesnelerin zelliklerini deitirebilirsiniz. Sayfann st orta
tarafnda ise yan yana iki tane alr kutu mevcuttur. lk bata bunlarn birinde General,
dierinde ise Declerations yazldr. General blmnden WorkSheet seildiinde alma
sayfasnn olaylar ksmna gei yaplyor. Sa taraftaki alr kutuda ise alma
sayfasna ait olaylar listelenmitir. Burada yaplan projeyi altrmak iin RUN
mensnden Run seilir veya F5 tuu ile program altrlr. VB editrnde birok VB
elemanlarn kullanbilirsiniz.

Component lerin (Bileen) Genel zellikleri

Name : Elemann program ierisinde kullanlaca ismidir. Bu isim bir deiken gibi
kullanlacandan Trke karakter ve ilk karakterde say kullanlmamaya zen
gsterilmelidir.

BackColor : Elemann arka zemin rengidir.

BorderColor : Elemann kenarlk rengini belirler.

BorderStyle : Elemann kenarlk tipi buradan belirlenir.

Caption : Elemanlarn zerinde yazan isimlerdir. Tke karakter alabilir ve istenilen


karakterle balayabilir.

Enabled : Deer True ise eleman aktif, False ise pasif olur ve rengi pasif bir renk olur.

Font : Elemann yaz tipini, boyutunu ve biimini belirlemenize yarar.

ForeColor : Yaz rengini belirler.

Height : Elemann yksekliini belirler.

HelpContextID : Programda Help (Yardm) dosyas kullanlm ise help dosyasndaki


balk numaralarn bu kontrole atamaya yarar.

Left : Elemann Forma gre sol tarafa olan mesafesini belirler.

Locked : Elamann kilitlenmesini salar. Enabled zelliinde olduu gibi rengi pasiflemez
yalnzca kontrol kilitlenir.

11
MousePointer : Mouseun eleman zerine gittiinde alaca cursor (imle) stilidir.

PasswordChar : Bu zellik yalnzca TextBox larda kullanlr. Eer TextBox a ifre girii
yaplacaksa bu zellikte bir karakter belirlenmelidir.

Picture : Seili kontrole resim eklenmesine yarar.

PictureAlignment : Picture zelliinden eklenmi resmin istee gre yerletirilmesini


salar.

PictureSizeMode : Eklenen resmin boyutu buradan belirlenir.

ScrollBars : Kaydrma ubuunun yerini belirler.

ShowModal : Excel 2000 srmnden sonraki versiyonlar da gelen bu zellik, deeri


False ise Form ile alrken Excel ile de alabilirsiniz. Deeri True ise Form ak iken
Excel ile hibir ekilde alamazsnz.

SpecialEffect : Elemana grsel baz efektler katar. Kabartma, basklk vs

StartUpPosition : Bu zellik sadece Form elemannda kullanlr. Form aldnda ekrann


neresine geleceini belirler. Ekrann ortas gibi

TextAlign : zerindeki yaznn saa, sola ve ortala gibi ayarlarnn yapld zelliktir.

Visible : Deeri True ise eleman ekranda grnr, False ise eleman form zerinde
grnmez.

Width : Kontroln geniliini belirler.

Yukardaki zelliklerin dndaki zellikler ilgili kontrol anlatlrken anlatlacaktr.

Form
Projenize form eklemek iin VB editrnde Insert (Ekle) mensnden UserForm seilir ve
yeni bir form eklenir. Eklenen form ile birlikte gelen Component Palet ise bizim form
zerinde kullanacamz elemanlar iermektedir. Eklenen formun zellikleri yan taraftaki
Properties penceresinden deitirilir. Projenize baka formlar eklemek iin tekrar Insert
mensnden UserForm seilir ve ikinci bir form eklenir. Eklenen formlar yan tarafta
Project penceresinde Forms seenei altna srayla listelenecektir. Burada istenildii
zaman istenilen formu zerine ift tklatlarak o forma gei yaplabilir. Bu aamada
program altrdnzda bo formun alr halini greceksiniz. Formu kapatnca program
da kapanacaktr.
Bir formdan dier forma gei yapmak iin Form2.Show, alan formu kapatmak iin
UnLoad Me, aktif formu gizlemek iin Me.Hide, gizlenen formu tekrar gstermek iin
Me.Show ve ana formu kapatmak iin End kullanlr. Me yazlan yerlere istenilen bir
formun adda yazlabilir. rnein, Form3.Hide
Events (Olaylar)
Events, Windows ta bir nesneye tklamak, mouseun bir nesne zerine gelmesi halinde
aklama ifadelerinin grntlenmesi, iconlarn tanmas olay, bir dosyann fare ile
tklatlarak bir yerden baka bir yere alnmas olay, mouseun baz blgelerde gezinmesi
halinde eklinin deimesi, mouseun tular basl tutularak izim yaplmas vb. gibi
yaplan her hareket bir olay temsil eder.
Form ve Form zerinde bulunan her kontrol eleman ift tklatlarak o elemana ait kod
penceresine ve olay prosedrlerine ulalr. rnein form zerine ift tklarsanz aadaki
resimde grld gibi Form elemannn Click olayna gelirsiniz.

12
Dier olaylara ulamak iin ise yukardaki resimde grld gibi sa tarafta bulunan
alr kutu kullanlr. Burada her componente gre deien olaylar vardr. Mesela Activate
olay yalnzca Form elemannda vardr. imdi Form elemanna ait baz olaylara deinelim.

Activate Deactivate : Programnz da birka form varsa bu formlardan ayn anda


yalnz biri aktiftir. Aktivitenin programdaki formlardan dierine gemesi durumunda
aktiviteyi kaybeden formun Deactivate olay, aktif olan formun da Activate olay meydana
gelir. Bu olaylar yalnz sizin programnzdaki formlar aras geite meydana gelir.
Windows altnda alan baka bir programn aktiviteyi ele geirmesi veya kaybetmesi bu
olay meydana getirmez.

AddControl - RemoveControl: Form zerine kodlarla yeni bir kontrol yani component
eklendiinde AddControl olay meydana gelir. Mesela forma yeni bir TextBox eklendiinde
bu olay meydana gelecektir. Form zerinden bir component yine kodlarla kaldrlmaya
alld zaman RemoveControl olay meydana gelir.

Click : Form zerine tklandnda meydana gelir.

DbClick : Form zerine ift tklandnda meydana gelir.

Error : Form ile ilgili herhangi bir hata ktnda bu olay meydana gelir.

Exit : Elemandan kld zaman gerekleen olaydr. Yani eleman kontrol kaybedince
bu olya meydana gelir.

Initialize : Formun alnda meydana gelir. Mesela programn alnda Programa ho


geldiniz gibi bir mesaj verdirtmek isterseniz bu olay kullanmanz gerekecektir.

KeyPress KeyDown - KeyUp : Eer programda kullandnz genel tular varsa


bunlarn kontrolne bu olaylara yazacanz kodla salayabilirsiniz. KeyPress, tua
bastnz zaman KeyDown, tu basl olduu srece KeyUp, tu brakld zaman
meydana gelir.

MouseDown MouseUp MouseMove : Bu olaylarda mouseun kontrolnde kullanlr.


MouseDown, mouseun tuu basl iken MouseUp, mouseun tuu brakld zaman
MouseMove ise formun zerinde mouse gezerken meydana gelir.

QueryClose : Terminate olayyla ayn ii yapar ancak formun kimin tarafndan


kapatlmaya alldn da renebilirsiniz.. Ayrca bu olay Terminate olayndan nce
meydana gelir ve burada Cancel=True ile kapatma iptal edilirse Terminate olay meydana
gelmez. Mesela formun kapatma kontrol dmesinden kapatlmaya alldnda mesaj
vererek kullancnn formu kapatmasn aadaki kodlarla nleyebiliriz.

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)


If vbFormControlMenu = 0 Then Kapat dmesine basld kontrol ediliyor.
MsgBox "Program Kapatmak in Ltfen k Dmesini Kullannz"
Cancel = True Kapatma olay iptal ediliyor
End If
End Sub

13
ReSize : Formun boyutunun deitirilmesi halinde bu olay meydana gelir. VBA dorudan
formun boyutunun deitirilmesine msaade etmeyecektir. O yzden boyutlandrmay
kodlarla yapmak gerekiyor.

Scroll : Formda bulunan ScrollBarlar kullanldnda bu olay meysana gelir.

Terminate : Formun kapatlaca zaman meydan gelir.

Label (Etiket)
Daha ok kullancya form zerinde bilgi vermek iin kullanlr. Bu nesneye kullanc
tarafndan giri yaplamaz. AutoSize zellii True verildii zaman ierisine getirilen
bilginin uzunluna gre otomatik olarak boyutlanr.

ComboBox (Alr Kutu)


Aa doru alabilen liste kontroldr. Genellikle, deerleri daha nceden belli olan
elemanlarn seimi iin kullanlrlar.
Methods (Metotlar)
AddItem Eleman, SraNo : Listeye eleman eklemek iin kullanlan bir metotdur.
ComboBox1.AddItem Excel

RemoveItem Index : Listedeki index nolu eleman listeden karmaya yarayan bir
metottur. lk elemann index numaras 0 olduu iin elemanlarn listedeki yerinin bir
eksii index olarak verilmelidir.
ComboBox1.RemoveItem 1

Clear : Listenin ieriini temizler.


ComboBox1.Clear

Properties (zellikleri)
ListCount : Liste iindeki eleman saysn verir.
MsgBox "Listede" & " " & ComboBox1.ListCount & & "Tane Eleman Var"

ListIndex : Listedeki aktif elemann (seili elemann) liste iindeki numarasn verir veya
listedeki aktif olacak eleman belirler. Bu eleman ilk eleman iin 0 dr. Son eleman iin
ListCount-1 dir.
ComboBox1.ListIndex=5 Listedeki 6. eleman seer.

List(index) : Liste iindeki index numaral elemann derini renmek veya deitirmek
iin kullanlr.
ComboBox1.List(1) = Word 2. eleman Word yapar

Text : Liste iinde seili olan elemann ieriini verir. Sadece okunabilir bir zelliktir.
MsgBox ComboBox1.Text

ColumnCount : Bu zellikle alan liste kutusu birka kolon yaplabilir. Deeri 0 ise tek
stundur, 0 deil ise listenin genilii verilen sayda stuna blnr ve bir stunun
dolmasyla ikinci stuna geilir. Burada her kolonun genilii listenin geniliinin verilen
kolon saysna orandr. rnein; ColumnCount = 5 ve Width = 3000 ise her kolonun
genilii 3000/5 = 600 olacaktr.

TopIndex : O anda ekranda grlen en stteki elemann indexidir. Bu zellik ile listenin
o anda ekranda grlen ksmn renebiliriz.

ListBox (Liste Kutusu)


Bu form eleman ayn ComboBox gibidir. Elemanlar listelemek, sralamak gibi zellikler
sunan genel amal bir kontroldr.

Methods (Metodlar)
Metodlarn tm ComboBox ile ayndr.

14
Properties (zellikler)

MultiSelect (oklu Seim) Bu zellik bir kutu iinde birden fazla eleman seme imkan
verir. deiik modu vardr.
0 : Birden fazla eleman seimi yaplamaz.
1 : Mouse ile tklanan her eleman seilir veya seilmise seilmilii kaldrlr.
2 : Bu modda Shift veya Ctrl tuu basl tutularak birden fazla seim yaplr.

SelCount, Selected (Index) MultiSelect zellii 0 olmayan listelerde birden fazla


eleman seilebilecei iin SelCount zellii ile seili eleman saysn, Selected (Index)
zellii ile de Index numaral elemann seili olup, olmad renilebilir.
Seili olan elemanlar renebilmek iin listeyi batan sona tarayacak bir dng
oluturulur ve Selected zellii ile her elemann seili olup olmad kontrol edilir.

Dim i
For i=0 to ListBox1.ListCount 1
If ListBox1.Selected(i) Then
MsgBox ListBox1.List(i) & eleman seili
End If
Next i

rnek : Amacmz form zerinde bulunan metin kutularndan girilen bilgilerin listelere
eklemek ve her listede bilgi bulunduu iin listeden bir eleman seildiinde dier
listelerdede ona ait bilgilerin seilmesi gerekmektedir. imdi form zerine tane
TextBox, tane ListBox ve bir tanede CommandButton yerletirelim.

Private Sub CommandButton1_Click()


' Listelere bilgiler ekleniyor
ListBox1.AddItem TextBox1.Text
ListBox2.AddItem TextBox2.Text
ListBox3.AddItem TextBox3.Text
MsgBox "Bilgiler Eklendi"
End Sub

Listelere elemanlar ekledik. imdi ListBox1 tklandnda dier listelerdeki seilen


elemana ait olan bilgilerin seilmesini salayalm.
Private Sub ListBox1_Click()
Dim a, b
a = ListBox1.ListIndex a deikenine ListBox1in index numaras atanyor.
b = ListBox1.TopIndex b deikenine ListBox1in topindex numaras atanyor.
ListBox2.ListIndex = a Listbox2 nin index numaras listbox1 ile eitleniyor.
ListBox2.TopIndex = b Listbox2 nin topindex numaras listbox1 ile eitleniyor.
ListBox3.ListIndex = a
ListBox3.TopIndex = b
End Sub

15
CheckBox (Onay Kutusu)
Onaylama ilemlerinde kullanabilen bir kontroldr.
rnein, MultiLine zellii True yaplm bir metin kutusundaki yazlar Kaln, talik, ve Alt
izili metin biimine getiren kk bir program yapalm. Formumuzun grnts
aadaki gibi olsun.

Private Sub CheckBox1_Click()


If CheckBox1.Value = True Then 'CheckBox1 in seili olup olmad kontrol ediliyor.
TextBox1.Font.Bold = True 'Seili ise ierik Kaln
Else ' seili deilse
TextBox1.Font.Bold = False ' normal formatta kalyor.
End If
End Sub

Private Sub CheckBox2_Click()


If CheckBox2.Value = True Then
TextBox1.Font.Italic = True
Else
TextBox1.Font.Italic = False
End If
End Sub

Private Sub CheckBox3_Click()


If CheckBox3.Value = True Then
TextBox1.Font.Underline = True
Else
TextBox1.Font.Underline = False
End If
End Sub

OptionButton (Seenek Dmesi)


CheckBox dan farkl olarak birden fazla seimlerde sadece bir tanesini seebilmemize
olanak sunar. rnein yukardaki rnee gre seeneklerden sadece bir tanesini
seebiliriz.

CommandButton (Komut Dmesi)


Bir olayn kullanc tarafndan balatlmas iin programlarda ok kullanlan kontrollerden
biridir. Default zellii True ise o dmenin bulunduu form zerinde Entera baslmas
durumunda o dme tklanm gibi olur. Cancel zellii de Default gibidir ancak ESC tuu
ile aktif hale gelir. Cancel zellii True olan bir komut dmesinin bulunduu formda ESC
tuuna baslmasyla bu komut dmesi aktif yaplm olur.

16
ToggleButton (Tahta Dme)
Basld zaman basl olarak kalan, tekrar basldnda eski haline dnen buton tipidir.
Basldnda deeri True geri brakldnda ise False deerlerini alr.

Frame (ereve)
Bu kontrol tek bana deil, dier kontrolleri gruplandrmak iin kullanlr. Kontrolleri bu
kontrolle gruplamann bir ok avantaj vardr.

Bu ereveler iine konan elemanlar, ereveye bamldrlar ve konumlar bu ereve


dna taamaz. zellikle birka kontrol birden grnr veya grnmez yapmak iin
herpsinin Visible zelliini tek tek deitirmek yerine erevenin Visible zellii
deitirilerek ereve iindeki tm kontroller ayn anda grnmez yaplabilir. Ayn durum
tama iinde geerlidir her birini tek tek tamak yerine ereve tanr. erevelerin
buna benzer birok faydalar vardr. zellikle OptionButton larn kullanlmasnda ereve
kullanmak zorunlu hale gelebilir.

MultiPage (oklu Sayfa)


Tek formda ok fazla bilgi girilecei yerlerde kontoller form zerine smayacaktr. Bunun
iin MultiPage kullanmak en iyi zmdr. Tek kontol zerinde birden fazla sayfa
ekleyerek yerden ve zamandan tasarruf salanabilir. Kontrol ilk eklendiinde zerinde iki
adet sayfa tab bulunur. Bunlar tablarn sa tarafna sa tklanp New Page seilerek
oaltlabilir.

Daha nce eklenmi bir sayfay kaldrmak


iin yine ayn alan menden Delete Page,
adn deitirmek iin Rename ve yerini
deitirmek iin ise Move seilir.

ToolBox zerinde bulunan mevcut kontroller haricinde birok kullanl kontrollerde


vardr.

Standart olarak gelen ToolBox paletine yeni elemanlar eklemek iin VB kod editrnde
iken Tools mensndeki Additional Controls seenei seilerek Additional penceresine
ulalr.

Additional Controls (Ek veya lave Kontrol) penceresine ksa yoldan da ulalabilir. Kod
editrndeki ToolBox penceresinin herhangi bir blmnde sa Mouse tuu ile alan
pencereden de Additional Controls mensne ulalabilir.

17
Alan Additional Controls penceresinden istediiniz elaman iaretleyerek projenize
ekleyebilirsiniz. Fakat burada bulunan kontroller olduka fazla olduundan bir ounun
kullanm iin VB deki grevlerinin tam olarak bilinmesi gereklidir. Bu blmde en ok
kullanlan ek kontroller adnn banda Microsoft yazan kontrollerdir. Bu kontroller
System32 ierisinde bulunan ocx uzantl ve VB ile de kullanlan komponentlerden
olumaktadr. Bu komponentlerin daha ok kullanlmasnn sebebi sistemin otomatik
olarak bu elemanlar tanmas ve projelerin baka yerde hata vermeden almasn
salamaktr. Ayrca bilgisayarda VB programlama dili de kurulu ise yapm olduunuz
Excel projesi sorunsuz olarak ek kontroller ile birlikte alacaktr.

Additional Controls penceresindeki Show blmnde Selected Items Only seeneini


seerseniz sadece ekli olan komponentler listelenir. areti kaldrrsanz btn
komponentler listelenecektir.

En ok Kullanlan Ek Kontroller (Additional Controls)

En ok kullanlan kontroller banda Microsoft yazl kontroller olduunu daha nce


belirtmitik. imdi bunlardan bazlarn rnekler ile inceleyelim.

Microsoft Animation Control 6.0 (SP4)

Bu komponent bir ilemi yaparken kullancya ilemin yapldna dair grsel bir grnt
oluturmas iin kullanlr.rnein bir arama,kopyalama,silme veya bir kullanc girii
srasnda durumu animasyon eklinde gstermek iin kullanlabilir. Windows da sk sk
karlatmz kontrollerden biridir. Mesela CDROM dan veya Hard Diskten bir yere bir
dosya kopyalama veya tanmas srasnda ekrana gelen diyalog penceresindeki
animasyon ile ayn grevi grmektedir.

Microsoft Common Dialog Control , Versiyon 6.0

Eer projenizi Windows uygulamalar ile btnleik yapmay planlyorsanz bu kontrol ile
Windows un standart Dialog pencerelerine ulaabilirsiniz. Form zerine alnan Common
Dialog kontroln kullanabilmek iin ksa bir kod yazmanz gerekmektedir.

Common Dialog nesnesi Action zelliine atanan saysal deerler ile dialog pencerelerine
ulalr. Bu numaralar aada verilmitir.

A Dialog Penceresi :1
Farkl Kaydet Penceresi :2
Renk Palet Kutusu :3
Font Dialog Kutusu :4
Yazdrma Dialog Kutusu :5

18
rnek : Formunuzun zerine 6 adet CommandButton ve bir adet Common Dialog
nesnesi yerletirin. CommandButon1in Click olayna aadaki kodu yaznz.

Private Sub CommandButton1_Click()


CommonDialog1.Action = 1
End Sub

Formda bulunan dier butonlarn Click olaylarna Action zelliine numaralar srasyla 2,
3, 4, 5, 6 verilerek dier dialog pencerelerine ulalr.

Microsoft Masked Edit Control , Versiyon 6.0

Bu kontrol standart TextBox kontrolne benzer. Ancak TextBox kutusu formatl bilgilerin
girii durumlarda fazla kullanl deildir. rnein kullancnn doum tarihi girilmesi
gereken bir blmde TextBox kullanlrsa kullanc tarihin aralarna . veya / iareti
koymakla uraacaktr. Fakat MaskedEdit kontrolnde ise kullanc sadece saylar
yazacak ve MaskEdit kontrol bunu tarih formatna evirecektir. Bu kontrol hem kullanc
hem de programc asndan byk kolaylklar salamaktadr.

MaskEdit kontroln formunuza aldktan sonra sol taraftaki


properties ksmndaki Mask ve Format zellikleri ile MaskEdit
kontrolnn formatn belirlenir. Yan taraftaki resimde Mask
zellii tarih biimi iin ayarlanm bir rnek grlmektedir.

Microsoft MonthView Control 6.0 (SP4)

Bu kontrol kullanarak projenize takvim ekleyebilirsiniz. Sadece bir ay eklenebilecei gibi


birden fazla ayda grntlenebilir. Kullancdan tarih girmesini istediiniz durumlarda bu
kontrol kullanabilirsiniz.

MonthView kontrolnn Properties zelliklerinde


MaxDate e vereceiniz tarih ile maksimum tarih ve
MinDate e vereceiniz tarih ile de minumum tarihi
belirleyebilirsiniz. Ayrca MonthColumns zelliine
vereceiniz deer, takvime yatay olarak ay eklemenize,
MonthRows zelliine vereceiniz deer ise takvimin
altna ay eklemenizi salar.

19
Microsoft ProgressBar Control 6.0 (SP6)

Bu eleman genellikle uzun bir ilem yaplrken , yaplan ilemin yzdelii hakknda bilgi
vermek iin kullanlr. Veya programnzda bir kopyalama veya kaydetme yaparken
yapacanz ilem uzun srecekse programnz hareketsiz kalabilir. Bu gibi durumlarda
ProgressBar kullanarak kullancy azda olsa oyalayabilir ve ilemin ilerlediini
gsterebilirsiniz.

ProgressBar nesnesinin kullanlabilmesi iin Value deerini Min ve Max deerleri arasnda
arttrmak gerekir. Properties blmnde Min ve Max deerleri belirlenir ve programda bir
dng ile Value deeri artrlr. Eer programnz bir ilem yaparken bunu yapacaksanz o
ilemin deerlerini Progressbar da belirtmelisiniz.

Microsoft StatusBar Control 6.0 (SP6)

ou programda formlarn en altnda o anki durumu gsteren baz bilgiler bulunur. Bu


bilgiler formdaki elaman veya alanlar hakknda bilgiler olabilecei gibi kullanc ile ilgili
bilgiler veya tarih, saat bilgileride olabilir.

StatusBar kontrolne panel eklemek iin Properties blmnde Custom zellii ile alan
pencerenin Panels tabna geilir. Burada Insert Panel ile yeni paneller eklenebilir, Remove
Panel seenei ile de eklenen paneller silinebilir. Eklenen panellerin hizalama, stil ve
bykln bu pencereden ayarlayabilirsiniz. Style blmnde seili panelin ieriini
belirleyebilirsiniz. Burada ki 0-sbrText seili ise metin yazabilirsiniz ve dier seenekler
seilerek CapsLock, NumLock, ScrollLock, Insert gibi tularn durumunu gsterebilir, Tarih
ve Saat grntleyebilirsiniz.

20
Microsoft Tabbed Dialog Control 6.0 (SP5)

Projenizde eer birden fazla sayfaya sahip dialog kutusu oluturmak iin kullanlr. Bu
kontrol sayesinde ok sayda kontroln form zerinde kullanlmas salanr. Windows
altnda bu kontrol kullanan bir ok program grebilirsiniz. rnein, Word programnn
Aralar mensndeki Seenekler blmnde bu kontrol kullanlmtr.

Bu kontrol formunuza aldktan sonra kontrol seili iken Properties ksmndan Custom
zellii ile alan pencerenin General blmnde yeni tablar ekleyebilir ve bu tablarn Tab
Caption (Sekme Etiketi) gibi zelliklerini belirleyebilirsiniz. Yeni tab eklemek iin General
blmndeki TabsPerRow ve TabCount seenei ile yan tarafa yeni tablar ekleyebilir,
uzunluk ve Style ni deitirebilirsiniz.

Microsoft ToolBar Control 6.0 (SP6)

Bir ok programda formun st tarafnda ara ubuklar bulunmaktadr. Bu ara


ubuklarn ToolBar kontrol ile rahatlkla kendi projenizde oluturabilirsiniz. ToolBar
kontrol kullancnn programda girecei yerleri ksa yoldan girmesi iin ve kullanlacak
butonlarn belli bir dzen iinde olmas iin kullanlr.

ToolBar kontroln formunuza aldktan sonra Properties blmnden Custom seenei ile
alan pencerenin Buttons blmnde yeni butonlar ekleyebilir ve bu butonlarn eitli
zelliklerinin deitirebilirsiniz. ToolBar kontrolne eklediiniz butonlar arasnda boluk
brakmak istiyorsanz Buttons sekmesindeki seili butonun Style zelliini 3-tbrSeperator
olarak ayarlarsanz o buton artk seperator olacak ve iki buton arasnda bir boluk
meydana gelecektir.

21
BLM -5- PROGRAMLAMAYA GE

DEKENLER ve VER TPLER

Deikenler

Deikenler genellikle bir bilgiyi hafzada tutmak ve gerektiinde kullanmak iin vardr.
rnein birine ismini soruyorsanz ve bunu gerektiinde kullanabilmek iin bir deikene
almalsnz. Btn programlama dillerin de deikenler bulunur ve deiik ekillerde
tanmlanabilir. VBA da deikenlerin kullanm Visual Basic teki gibidir.

Deikenler iin nemli bir durum, deikenlerin karkla meydan vermemesi iin
tanmlanmas mecburiyetinin olmadr. VBA da deikenleri kullanmadan nce tanmlama
mecburiyeti programcnn seimine braklmtr.

i=5
j=6
aratoplam = 1000
geneltoplam = i * j + aratoplam

rnekte grld gibi aratoplam deikenine 1000 atamas yaplm ve geneltoplam n


hesaplanmasnda kullanlmak istenmitir.

Tanmlama Kurallar : Deikene verilecek ismin anlalr bir isim olmas programn
okunurluunu kolaylatrr. Bir deiken tanmlanrken aadaki kurallara uymak
gerekir.
Deiken ismi bir harf ile balamaldr.
Ad1, Ad2 Doru
1Ad, 2.Ad Yanl
Deiken isminde boluk bulunamaz. Bunun yerine alt izgi karakteri kullanlabilir.
Ad_Soyad, Doum_Yeri Doru
Ad ve Soyad, Doum Yeri Yanl
Deiken isminde sadece harfler, rakamlar ve alt izgi karakteri bulunabilir.
Al_Yeri, Gr_Yeri Doru
Al-Tarihi, Gr.Yeri Yanl
Deikene verilecek isim VB komutlarn olumamaldr.
Not, Dim, Val, Str, Int, For, While vs.
Deiken ismi 255 karakterden fazla olmamaldr.
Ogrencinin_Annesinin_Soyadi Doru

Veri Tipleri

VB de ve VBA da deiken tipleri modern olarak Dim deyimiyle yaplr. Bu deyimin basit
format yledir.

Dim deg_ismi [(diziboyutu)] As tipi

Deg_ismi tanmlanacak deikenin ismidir.

Diziboyutu eer deiken bir dizi olarak tanmlanacaksa dizinin boyutu deiken isminden
sonra parantezler iine yazlr.

Dim a (15) tanmyla 16 elemanl bir dizi tanmlanm olur ve dizinin ilk eleman a(0), son
eleman a(15) tir.
Bir dizinin ilk eleman 0 olmak zorunda deildir. Dim a(5 to 15) tanmyla ilk eleman a(5)
ve son eleman a(15) olan dizi de tanmlanabilir.

22
Ancak Dim kullanlacak bir fonksiyon/altprogram ierisinde dizi tanm yaplamaz. Formun
General-Declarations ksmnda veya bir modl iinde tanmlanabilir. Bir fonksiyon veya
altprogram iinde Redim veya Static deyimleriyle dizi tanm yaplabilir.

Tipi tanmlanacak deiken tipini belirler. VB ve VBA da tip tanm verilmeyebilir. Sadece
Dim x eklinde tanmla bir x deikeni tanmlanabilir. Bu tr deikenlere Variant denir
ve iinde her trden bilgi bulundururlar. Ancak hz asndan Variant deikenler iyi bir
seim deildir.

Tipler

Byte
1 Baytlk iaretsiz tamsay tipidir. 0 ile 255 arasnda deer alabilir.

Integer
2 Baytlk iaretli tamsay tipidir. -32.768 ile 32.767 arasnda deer alabilir.

Long
4 Baytlk iaretli tamsay tipidir. -2.147.483.648 ile 2.147.483.647 arasnda deer
alabilir.
Bu tipe ondalk say atanmas durumunda say en yakn tamsayya yuvarlatlacaktr.

Dim i As Integer
i = 4.3 i = 4 olarak atanr
i = 4.5 i = 5 olarak atanr
i = 4.6 i = 5 olarak atanr

Single
4 Baytlk ondalk say tipidir. 3.402823x1038 ve 1.401298x10-45 arasnda deer
alabilir.

Double
8 Baytlk ondalk say tipidir. 1.79769313486232x10308 ve 4.94065645841247x10-324
arasnda deer alabilir.

Currency
8 Baytlk bir ondalk say tipidir. Ancak saynn ondalk ksm 4 basamaktan daha fazla
olamaz ve saynn btn dijitleri korunur. Bu tip, daha ok para hesaplar ve virglden
sonraki hassasiyeti nemsiz olan ilemler iin dnlmtr. -922337203685477.5808
ile 822337203685477.5807 arasnda deerler alabilir. Ondalk ksmn 4 basamaktan fazla
olmas durumunda say yuvarlatrlr.

Decimal
14 Baytlk bir veri tipidir. Bu tipin en nemli zellii saydaki btn basamaklarn
tutulmasdr. 29 basamakl bir sayy btn dijitleri koruyarak tutabilir. Tam saylar iin,
79228162514264337593543950335 arasnda, ondalk saylar iin,
7.9228162514264337593543950335 arasnda say alabilir.
Bu tip dierlerinde farkl olarak Dim deyimi ile tanmlanmaz. Bu tip bir Variant deikene
CDec fonksiyonu ile atanabilir.
Kullanm,
Dim x, y
x = 79228162514264337593543950335
MsgBox x
y = CDec(79228162514264337593543950335)
MsgBox y

Saysal olarak tanmlanan tiplerde deiken tipinin snrlar dnda bir deer atanmas
durumunda VB ve VBA Owerflow hatas verecektir.

23
Boolean
2 Baytlk bir veri tipi olmasna ramen sadece True ve False deerleri alabilir. Yani daha
ok iki durumlu deikenlerde kullanlr. Bu tipten tanmlanan deikenlere direkt True,
False deerleri atanabilecei gibi saysal deer de atanabilir. Atanan 0 ise False, deilse
True kabul edilir.
Bu tipte tanmlanan deikenler programlarn daha anlalr olmas asndan avantajldr.

String
Karakter snr verilmezse 2 milyar karaktere kadar atama yaplabilen saysal olmayan
veri tipidir. Bu tip karakter says +10 byte yer kaplar.
Karakter saysn snrn belirlemek iin Dim degisken As String * snr eklinde kullanlr.
Bu durumda verilen snr kadar yer kaplar ve en byk snr olarak 65400 verilebilir.

Variant
VB ve VBA da deiken tanmlanrken tip ismi verilmemise bu tip Variant olarak ele
alnr ve deiken tipi atanacak deere gre deiir. Variant tipler yukardaki tiplerden
herhangi biri gibi ileme girebilir ve programn almas esnasnda tipi de deitirilebilir.

Date
8 Bayt kaplayan bu deikene 1/1/100 ile 31/12/9999 arasnda tarih ve 0:00:00 ile
23:59:59 arasnda saat atamalar yaplabilir.
Bu tipteki deikenlere atama bir string gibi veya # # karakterleri arasnda yaplabilir.
Aslnda bu deiken ondalk say tipinden tanmland iin bu tipte tanmlanm tarihler
arasnda ilem yaplabilir. rnein iki tarih arasndaki gn saysn bulmak iin karma
ilemi yaplabilir.

Dim i As Date
i = 17/11/1973
MsgBox i & tarihinden bu gne kadar & Date i & gn geti

Object
4 Baytlk bir veri tipidir ve OLE ilemlerinde kullanlmak zere tasarlanmtr. bu tipteki
deikenlere atama yaparken Set operatre kullanlr.

Kullanc Tarafndan Yeni Tip Tanmlanmas

Yukardaki verilen standart tiplerden kendi tiplerimizide tasarlayabiliriz. Kullanc tanml


tipler yle tanmlanr;

Type tip_ismi
Deg_ismi As Tipi
Deg_ismi As Tipi
.
.
End Type

Tip tanm bir form ierisinde ancak Private olarak tanmlanabilir. Yani tanmlanan tip
sadece o formda kullanlr. Genel yani Public bir tip ise ancak bir modl ierisinde olabilir.
Bir form da tip,

Private Type Ad
..
End Type

24
Global ve Local Deiken Tanm

Deikenler genelde iki snfa ayrlr. Global (Genel) deikenler ve Local (Yerel)
deikenlerdir.

Global deikenler programn btn fonksiyonlar tarafndan kullanlabilirken, Local


deikenler sadece tanmlandklar fonksiyonda kullanlr.

Global deikenlerin btn fonksiyonlarda kullanlmas ilk bakta avantaj gibi


grlmesine ramen, programn gelitirilmesi ve takip edilmesini nemli lde
zorlatrdklarndan dolay ok byk dezavantajlar vardr.

Dim deyimiyle yaplan tanmlar tanmland yere gre Global veya Local dr. Dim ile
tanmlanan deiken,

General-Declarations ksmnda tanmlanmsa tanmland modl/form ierisinde Global


dir buna VB ve VBA da Module Level denir. O modldeki/formdaki btn prosedrler bu
deikeni kullanabilir fakat dier modller/formlar bu deikeni kullanamaz.

Bir fonksiyon yada alt programda tanmlanmsa Local dir. Sadece o prosedr tarafndan
kullanlabilir.

Bir formun General Declarations ksmnda Public deyimi ile tanmlanmsa dier modller
ve formlar da bu deikeni kullanabilir. Ancak deikenin isminden nce modln/formun
ismini vermesi gerekir.

Yukardaki birinci resime ait kod penceresinde x Public, y ise Private olarak
tanmlanmtr. x ve y deikenlerini birinci resimdeki tm prosedrler kullanabilir. kinci
resimdeki prosedrler ise sadece Public olarak tanmlanm x deikenini kullanabilirler
ancak deikenin isminden nce formun isminin de verilmesi gerekir.

Bir deikeni programn her tarafndan kullanacak ekilde, tam olarak global tanmlamak
iin o deikeni bir modln (Insert mensnden Module seilerek eklenebilir) General-

25
Declarations ksmnda Public deyimi kullanlarak tanmlanmaldr. Baka prosedrlerde
kullanmak iin modln ismini yazmaya gerek yoktur.

Local deikenlerin dier nemli ise bellekte fazladan yer igal etmemeleridir (Statik
olarak belirtilmemise). Global deikenler program alt srece bellekte tutulmalarna
ramen Local deikenler, deikenin bulunduu fonksiyona girince deiken bellee
alnr ve fonksiyonun almas bitince bellekten silinir. Bylece hangi fonksiyon
alyorsa sadece o fonksiyonun deikenleri bellekte bulunacaktr.

Deikenlerin ve Kontrollerin Tipini Belirlemek

Variant tipindeki bir deikenin program ierisinde yaptmz atamaya gre tipinin
deitiini belirtmitik. Variant olarak tanmlanm olan bir deikenin hangi tipte
olduunu renmek iin VarType fonksiyonu gelitirilmitir.
VarType (Degisken)

Deiken: Tipi renilecek Variant olarak tanmlanm deiken. Bu deiken herhangi bir
tipten bir deikende olabilir. Ancak bu durumda geri dnen deer deikenin
tanmland tiptir. Fonksiyondan geri dnn deer deikenin tipini ifade eder ve
aadaki deerlerden biridir.

Sembolik Saysal Anlam Sembolik Saysal Anlam


vbEmpty 0 Empty vbObject 9 Object
vbBoolean 1 Boolean vbError 10 Error
vbInteger 2 Integer vbNull 11 Null
vbLong 3 Long vbVariant 12 Variant
vbSingle 4 Single vbDataObject 13 DataObject
vbDouble 5 Double vbDecimal 14 Decimal
vbCurrency 6 Currency vbByte 17 Byte
vbDate 7 Date vbArray 8192 Array
vbString 8 String

PROGRAM KONTROL DEYMLER

If Yaps

If- art yaps btn programlama dillerinde olan, baz artlarn gereklemesi durumunda
ve gereklememesi durumunda ayr-ayr kodlarn altrlmasna imkan veren yapdr.

If art Then
Komutlar
Else
Komutlar
End If

artn gereklemesi halinde Then deyiminden sonraki satr iletilir. Gereklememesi


durumunda Else deyiminden sonraki satrlar iletilir.
artn gereklememesi durumunda alacak Else blou istenirse verilmeyebilir.
Ayrca tek satrda art yaplyorsa End If kullanlmaz.

26
Select Case Yaps

Bir deikenin ald bir ok deere gre ayr komutlarn altrlmas gereken durumlar
iin If yaps yeri Select Case yapsn kullanmak daha avantajldr.

Select Case Deiken


Case Durum1:Komutlar
Case Durum2,Durum3:Komutlar
Case Durum4 to Durum7:Komutlar
Case is < durum8:Komutlar
Case is > durum9:Komutlar
..
Case Durum N:Komutlar
Case Else Komutlar
End Select

IIF

Bir deikenin deeri iki durumdan birine gre deer alyorsa Bir deikenin deeri iki
durumdan birine gre deer alyorsa If yaps yerine IIF kullanlabilir. Bu size daha az
satrla ayn ii yapabilme imkan verir.
IFF (art;doru ise;yanl ise)
Bu fonksiyonda art doru ise birinci ifade, yanlsa ikinci ifade ileme girer.

Choose

Bir deikenin ald deer bir sayya bal ise Choose yapsn kullanmak daha uygundur.
Sonu=Choose(Say,deer1,deer2,deer3,,deerN)
formatnda kullanlr. Buradaki sonu sayya bal olarak deer listesinden bir deerdir.
rnein say 3 ise sonu deer3 olacaktr.

Switch

Switch fonksiyonunda ise birden fazla art ayn satrda kontrol etmek mmkndr.
Sonu=Switch(art1,Deer1,art2,Deer2,..,artN,DeerN)
eklinde kullanlr.

DNG DEYMLER

Belirli bir komut parasnn belli artlar gerekleinceye kadar defalarca almas
gerekebilir. alma saysnn belli olduu durumlarda For dngs dier durumlarda yani
dng saysnn deiken olduu durumlarda ise While-Wend, Do-Loop bloklar kullanlr.

FOR Dngs

For Saya = BalangDeeri to BitirDeeri [Step Artm]


Komutlar
Next

For dngs sayan balang deerinden balayarak biti deerine kadar sayac birer
artrarak Next e kadar olan komutlar altrr. Eer birer artmas deilde sizin
belirleyeceiniz aralklarla artp azalmasn istiyorsanz Step parametresinden sonra artm
miktarn yazmanz gerekir.

27
Sayacn artarak deilde azalarak almas iin Step ten sonra negatif deer vermeniz
gerekir. rnein, A1 stununun 5. satrndan itibaren 10 tane satra satr numaras
verdirelim.

For i = 5 To 15
Cells(i, 1) = i
Next i

While - Wend ve Do While-Loop Dngs

Bir dngnn ka defa alaca daha nceden bilinmiyorsa While dngleri kullanlr. Bir
art gerekletii srece almas gereken program bloklarnda kullanlr.

While art
Komutlar
Wend

Do While art
Komutlar
Loop

Yukardaki her iki dngnn mant ayndr. art gerekletii srece dngde kalnr.

Do Until Loop Dngs

Bu dng yapsda art gerekleene kadar almas gereken program bloklarnda


kullanlr. Dikkat ederseniz yukardaki dngler art gerekletii srece alyordu bu ise
art gerekleene kadar alr. Yani art gereklemedii srece alr.

Do Until art
Komutlar
Loop

Do Loop While ve Do Loop Until Dngs

Do
Komutlar
Loop Until art

Do
Komutlar
Loop While art

Bu dnglerin yukardakilerden tek fark dngye girerken deil karken art kontrol
edilir. Yani dng ierisinde kod en az bir kez alr.
rnein kullancya snav notunu sorduumuzu dnelim. Girecei not 0-100 aral
dnda ise; notu bu aralkta girilinceye kadar tekrar tekrar sorulmas gerekir. Bu ie Do-
Loop Until yaps uygundur. nk dng ierisinde not sorulduktan sonra not 0-100
aral dnda ise tekrar sorulmas gerekir.

Dim nott not deil nk not zel bir deyim


Do
Nott = InputBox (Not Girii, Snav Notunuz, 50)
Loop Until (nott > 0) And (nott < 100)

28
DNG KONTROL FADELER

Exit Do

Exit Do komutu Do-Loop, Whlie Wend dnglerinden birinde baz artlarn gerkelemesi
durumunda dngden kmak iin kullanlr.

Exit For

Bu komutta For Next dngs tamamlanmadan, baz artlar gerekletiinde dngden


kmaya yarar.

Exit Sub, Exit Function

Exit Sub ve Exit Function deyimleri alt program sonuna ulamadan alt programdan
kmaya yarar.

Dim i, j
j = Val(TextBox1)
If j <= 0 Then Exit Sub
For i = 1 to j
ListBox1.AddItem Log ( & i & ) = & Log(i) / Log(10)
Next

Burada 1 den TextBox1 kutusuna girilen sayya kadar olan saylarn logaritmasn listeye
ekliyoruz. Ancak kullanc kutuya 0 veya daha kk bir say girmise alt programdan
kyoruz.

End

Program sona erdirir. Btn ak olan formlar kapatr.

With End With Deyimi

Bir kontrole ait bir zellik deitirilmek istendii veya bir metod arld durumlarda
kontrol adnn da verilmesi gerekir.
Herhangi bir kontrol elemannn birden fazla zelliini deitirmek yada metodlarna
ulamak iin With End Wtih deyimi kolaylk salar. Kullanm biimi yledir,

With KontrolAd
.zellik = Deer
.zellik = Deer

End Wtih

ComboBox1.Clear With ComboBox


ComboBox1.AddItem Excel .Clear
ComboBox1.AddItem Word .AddItem Excel
ComboBox1.AddItem PowerPoint .AddItem Word
ComboBox1.AddItem Access .AddItem PowerPoint
.AddItem Access
End With

Sol tarafta verdiimiz program kodunu With..End With deyimi kullanarak sa taraftaki
gibi daha ksa bir ekilde yazabiliriz.
29
OPERATRLER

Btn programlama dillerinde aritmetik ve lojik ilemler iin gerekli operatrler bulunur.
VB ve VBA da aritmetik ilemlerin bazlar operatrlerle yaplrken bazlar da
fonksiyonlarla yaplr.

VB ve VBA da kullanlan aritmetik ve lojik operatrler unlardr:

= Atama X=5
+ Toplama 20+5 25
- karma 10-5 5
* arpma 3-5 15
/ Blme 9/2 4,5
\ Tam Blme 9\2 4
& String Toplama Bayram & paa & Sonu: Bayrampaa
^ st 4^2 16
Mod Blmede Kalan 5 Mod 2 1
And Ve 5 And 17 Sonu: 1 (00101 And 10001=00001)
Or Veya 7 Or 17 Sonu: 23 (00111 Or 10001=10111)
XOr XOr 7 XOr 17 Sonu: 22 (00111 XOr 10001=10110)
Not Deil Not &H1 Sonu: &HFFFE
(Not 0000 0000 0000 0001=1111 1111 1111 1110)

Mod lemi

Mod ilemi bir saynn bir baka sayya blmnden kalan verir. Bu ilk bakta
programclk asndan fazla nemli deil gibi gzksede aslnda bir saynn katlarn
bulmak iinde kullanlabilineceinden olduka kullanl bir operatrdr. Bir say baka bir
saynn tam kat ise o sayya blmde kalan 0 olacaktr. rnein 1 den 100 e kadar olan
saylar toplanacak bir programda her 10 adm sonucunu mesaj ile ekranda grmek
istersek,

Dim i, top
For i=1 to 100
top=top+i
If (i Mod 10) = 0 Then MsgBox top
Next
MsgBox Sonu: & top

Karlatrma lemleri

VB ve VBA da kullanlan karlatrma operatrleri ise unlardr,

= Eit If x=5 Then MsgBox 5 Else 5 Deil


<> Eit Deil If x<>5 Then MsgBox 5 Deil Else MsgBox 5
< Kk If x<5 Then MsgBox 5 den kk Else MsgBox 5
den byk
> Byk If x>5 Then MsgBox 5 den byk Else MsgBox 5
den kk
<= Kk veya Eit If x<=5 Then MsgBox 5 den kk veya eit Else
MsgBox 5 den byk
>= Byk veya Eit If z>=5 Then MsgBox 5 den byk veya eit Else
MsgBox 5 den kk

30
Bunlarn haricinde VB ve VBA deki Like operatr ile stringler zerinde daha detayl
karlatrma ilemleri yaplabilmektedir. Like operatrnde tpk dosya isimlerinde olduu
gibi joker karakterler vererek karlatrma yapmak mmkndr.
Like operatrnde kullanlabilecek joker karakterler unlardr,

? Herhangi bir karakter


# Herhangi bir rakam
* Bir veya daha fazla karakter
[aralk] Verilen aralkta bir karakter
[!aralk] Verilen aralk dnda bir karakter

If adres Like *stanbul Then

ifadesi ile adres deikeninin sonunda stanbul bulunup bulunmad

If adres Like *stanbul* Then

ifadesi ile adres deikeninin herhangi bir yerinde stanbul bulunup bulunmad

If adres Like stanbul* Then

ifadesi ile adres deikeninin banda stanbul bulunup bulunmad kontrol edilebilir.

If x Like ?abc Then

ifadesi ile x deikeninin ilk harfinin herhangi bir karakter ancak dier karakterin abc
olup olmad

If x Like #abc Then

ifadesi ile x deikeninin ilk harfinin herhangi bir rakam ancak dier karakterin abc
olup olmad

If x Like [a-f]abc Then

ifadesi ile x deikeninin ilk harfinin a ile f arasnda herhangi bir karakter ve dier
karakterin abc olup olmad

If x Like [!a-f]abc Then

ifadesi ile de x deikeninin ilk harfinin a ile f arasnda olmayan herhangi bir karakter ve
dier karakterin abc olup olmad kontrol edileblilr.

lem ncelii

Aritmetik ilemler sz konusu olduunda ilem ncelii sonucu etkileyen nceli bir
etkendir. rnein, 5+7*2-3/9^3*5 ileminin sonucun ka olduu ilemdeki operatrlerin
ncelii ile ilgilidir. Bu tip ilemlerde parantezler kullanmak her zaman ncelii belirleyici
faktrdr. Ancak parantezlerin bulunmad durumlarda aadaki ilem nceliklerine gre
ilemler yaplr.

Aritmetik Karlatrma Lojik


^ = Not
Negatiflik iareti (-) <> And
*,/ < Or
\ > XOr
Mod <= Eqv
+,- >= Imp
& Like
Is
31
FONKSYONLAR ve ALT PROGRAMLAR

Bir fonksiyon yada bir alt program belirli bir ii yapmak iin oluturulan kk program
paralardr. (Fonksiyon ve altprogram, bu ikisini birden belitmek iin prosedr kelimesini
kullanacaz).
Fonksiyon ve alt program tanmlamann bir ok avantaj vardr. Bir ok yerde ayn kodlar
kullanamanz gerektiinde bunlar her sefer yeniden yazmak yerine bu kodlar bir
prosedrde tanmlayp, kullanacanz yerden bunu armanz yeterlidir.

Prosedr Tanm

Bir alt program tanm yle yaplr:

Sub AltProgramAdi ([GirisParametreleri[As Tipi]])


Komutlar
[Exit Sub]
End Sub

Bir fonksiyon tanm ise yle yaplr:

Function FonksiyonAdi ([GirisParametreleri [As Tipi]]) [As Tipi]


Komutlar
[Exit Function]
[FonksiyonAd=GeriDonusDegeri]
End Function

Fonksiyon alt programdan farkl olarak geriye bir deer gnderebilir. Bu deer gnderme
ilemi fonksiyon ismine geri dnecek deerin atanmasyla olur.
Bir fonksiyon veya alt program normalde End Sub veya End Function satryla biter.
Ancak baz artlar gerekletiinde, fonksiyonun almasn bitirmeden kmak Exit
Function (alt program ise Exit Sub) ile yaplabilir.

Programda yeni bir fonksiyon veya alt program tanmlamak iin kod penceresinde bo bir
yere gelerek aadaki kodlar yazmak yeterlidir. Geri kalan tamamlama kodlarn VBA
kendisi yazacaktr zaten. Bu ekilde yazld takdirde VBA giri parametlerinin ve tip
tanmlamalarn yazmayacaktr. Bunlar belirtmek istersek yukardaki anlattmz ekilde
yazmak gerekecektir.

Yerel fonksiyon,

Function FonksiyonAdi

Genel fonksiyon,

Public Function FonksiyonAdi

Yerel alt program,

Sub AltProgramAdi

Genel alt program,

Public Sub AltProgramAdi

32
Prosedr ars

Programn herhangi bir yerinden alt program armak

AltProgramAdi [GirisDegerleri]

Fonksiyonu armak ise

Donendeger=FonksiyonAd([GirisDegerleri])

eklinde yaplr.

rnek: Programlarn hemen hemen tmnde ihtiya duyulan gnn tarihini kendi
formatmzla bir genel fonksiyonda tanmlayp daha sonrada bir TextBox a ift tklanp
iine fonksiyonun geri dnen deerini yazdralm.
lk nce fonksiyonun tanmn yapalm.

Public Function tarih ()


tarih = Format (Date, dd.mm.yyyy)
End Function

Burada ilk nce genel bir fonksiyon alyor. Daha sonra geri dnen deer fonksiyon
deikenine atanyor. Sonrada fonksiyon kapatlyor. Artk fonksiyonumuzu programmzn
her yerinde rahatlkla arp kullanabiliriz.

TextBox n DoubleClick olayna aadaki kodu yazalm.

TextBox1 = tarih

ok basit bir fonksiyon olmasna ramen, gnn tarihinin ok fazla kullanlaca yerlerde
(rnein, sekreter programlarnda) programcy karmak kodlardan kurtaracaktr.

33
BLM -6- BLG GR ve MESAJ PENCERELER

MSGBOX (Mesaj Kutular)

Windows ta en aina olduumuz ey programn ak srasnda bilgi vermek ve


onaylatmak iin karmza kan mesaj kutulardr. rnein bir programdan karken
Kaydedilsin mi? gibi bir soru ve duruma gre Evet, Hayr, ptal vb. seenekleri olan bir
kutu kar. Bu kutu Windows tarafndan salanan standart bir kutudur ve Windows
altnda alan btn programlarda ayndr.
Mesaj kutusu sadece kullancya mesaj vermek amacyla kullanlacaksa aadaki gibi
kullanlr.

MsgBox Programa ho geldiniz

Bu durumda mesajla birlikte Tamam dmesi olan aadaki pencere kar.

Mesaj kutular bir ok durumda sadece bir mesaj vermek iin deil ayn zaman da
kullancdan onay almak iinde kullanlr. Kullancnn mesaj kutularnda verebilecei
cevaplar iin uygun dmeleri belirlemek ve verilen cevab da renebilmek iin MsgBox
fonksiyonu aadaki formatta kullanlr.

cevap = MsgBox ( mesaj, [tip], [pencerebasligi], [, helpfile, [context])

Komut formatnn parametleri unlardr.

Mesaj
Kutu ierisine yazlmasn istediiniz mesaj.

Pencerebasligi
Pencerenin balna yazlacak metin.

Helpfile, Context
Bu iki zellikle bir yardm dosyas ismi ve bir konu numaras belirlenebilir. Bylece
kullancnn mesaj kutusunda yardm istediinde ilgili help dosyas alr ve ilgili konu
gsterilir.

Tip
Pencerenin iine konacak seenekler, iconlar, pencerenin nceliini ve varsaylan
seenekleri belirten bir saydr. Tip parametresini u ekilde formlize edersek,

tip = secenek + icon + varsayilan + oncelik

bu formldeki deerlerin alabilecei liste aadaki gibidir.

Aadaki tabloda en nemli parametre mesaj kutusunun tipini belirleyen seenek


parametresidir. Bu parametre mesaj kutusunda hangi dmelerin bulunacan belirler.

Icon parametresi ise kullancnn dikkatini ekebilmek iin mesaja uygun bir resmin
gsterilmesinde kullanlr.

34
Varsaylan dme parametresi ise kullancnn yanl seim yapmasn nlemek iin alan
pencerede hangi dmenin aktif olacan belirler. rnein nemli bir dosyay silmek iin
kullancdan onay alrken atnz pencerede varsaylan dmeyi Hayr dmesi yaparak
kullancnn dosyay yanllkla silmesi nlenebilir.

ncelik parametresi 4096 olmas durumunda mesaj kutusunda herhangi bir seim
yaplmadan dier uygulamalara gei yaplamaz.

Bu ayr drt seenek birbiriyle toplanarak MsgBox fonksiyonunun ikinci parametresi


olarak kullanlr.

Seenek
0 vbOKOnly
1 vbOkCancel
2 vbAbortRetryIgnore
3 vbYesNoCancel
4 vbYesNo
5 vbRetryCancel
Icon
16 vbCritical
Hata iconu
32 vbQuestion
Soru iconu
48 vbExclamation
nlem iconu
64 vbInformation
Bilgi iconu
Varsaylan
0 vbDefaultButton1 Birinci dme
256 vbDefaultButton2 kinci dme
512 vbDefaultButton3 nc dme
ncelik
4096 vbApplicationModal System modal
0 vbSystemModa Normal

MsgBox fonksiyonundan kullancnn hangi dmeyi setiini belirtir bir tamsay geri
dner. Bu deerler aadaki tabloda verilmitir.

Sembolik Saysal Anlam


vbOk 1 Tamam dmesi seildi
vbCancel 2 ptal dmesi seildi
vbAbort 3 lemi Durdur dmesi seildi
vbRetry 4 Tekrar Dene dmesi seildi
vbIgnore 5 Gz ard et dmesi seildi
vbYes 6 Evet dmesi seildi
vbNo 7 Hayr dmesi seildi

35
rnek: Program kapatlrken kmak isteyip istemediini soracak bir mesaj kutusu
oluturalm ve gerekli kodu yazalm. Form kapatlrken Terminate olay meydana
geleceinden gerekli kodu bu olaya yazacaz.

Dim cevap
cevap = MsgBox (kmak stiyormusunuz,
vbYesNo+vbQuestion, k)
If cevap = vbYes Then
MsgBox yi Gnler
Else
Cancel = True k iptal et
End If

INPUTBOX (Bilgi Giri Kutusu)

Kullancnn gereken deeri girmesi iin Visual Basic te InputBox fonksiyonu


gelitirilmitir. Bu fonksiyon standart olarak Ok ve Cancel dmeleri bulunan bir pencere
aar ve deer girii bu pencereden yaplr.

InputBox (mesaj [,baslik][,varsayilan deger][,x][,y][,helpfile, context])

Mesaj
Girilmesi gereken deer iin aklama veya soru.

Balk
Alacak pencerenin bal.

Varsaylandeer
Deer giri kutusunda bulunmas istenen deer.

x, y
Pencerenin, sol st kesinin x ve y koordinatlarn belirler.

Fonksiyondan dnen deer kullancnn yazd metindir. Kullanc Cancel dmesini


semise bo deer dner.

InputBox fonksiyonundaki son iki parametre ile yardm dosyasnn ismi ve konu numaras
verilirse pencereye ayrca yardm dmesi de eklenecektir.

rnek: InputBox araclyla girilen isimleri, ListBox a ekletelim.

Dim giris
giris = InputBox("sminizi Girermisiniz?", "Bilgi Girii", "sminiz", 0, 0)
ListBox1.AddItem giris
36
BLM -7- KOMUTLAR

DSK ve DOSYA YNETM KOMUTLARI

ChDrive
ChDrive Src Harfi
Aktif srcy deitirir.
Src Harfi: Geilmek istenen srcnn ba harfini ieren string deerdir. Stringin
ierii bir karakterden fazla ise ilk harf dikkate alnr.

On Local Error Goto Hata


ChDrive A A srcsne ge
Exit Sub
Hata:
MsgBox Disket srcye eriilemedi: & Error
Exit Sub

ChDir
ChDir Dizin
Aktif dizini deitirmeye yarar. VB ve VBA daki komutlarn dosya isimlerinde yol
kullanlmazsa, aktif src ve dizinde aranr.

On Local Error Goto Hata


ChDir C:\Windows Aktif dizini Windows dizini yap
Exit Sub
Hata:
MsgBox Dizine eriilemedi: & Error
Exit Sub

MkDir
MkDir DizinAd
Dizin oluturmak iin bu komut kullanlr. DizinAd isimli dizini oluturur.

On Local Error Goto Hata


MkDir C:\Windows\yedek Windows dizini altna yedek dizini a
Exit Sub
Hata:
MsgBox Dizin oluturulamad: & Error
Exit Sub

RmDir
RmDir DizinAd
smi verilen dizini siler. smi verilen dizinin alt dizinlerinin bulunmamas ve bo olmas
gerekir.

On Local Error Goto Hata


RmDir C:\Windows\yedek Windows dizini altna yedek dizinini sil
Exit Sub
Hata:
MsgBox Dizin silinemedi: & Error
Exit Sub

37
Kill
Kill DosyaAd
smi verilen dosyay siler.

On Local Error Goto Hata


Kill C:\Windows\*.tmp Windows dizini altndaki tmp dosyalar sil
Exit Sub
Hata:
MsgBox Dosyalar silinemedi: & Error
Exit Sub

Name
Name Ad As YeniAd
Verilen dosyann adn deitirir.

Name Eski.doc As Yeni.Doc

satr ile Eski.Doc dosyasnn ismi Yeni.Doc olarak deitirilmitir.

CurDir
CurDir[Srcharfi]
Aktif dizini renmenize yarar. Srcharfi kullanlmazsa aktif srcdeki aktif dizini
bildirir. Src harfi verilirse verilen srcdeki aktif dizini bildirir.

CurDir C

FileCopy
FileCopy kaynakdosya, hedefdosya
Bu komut DOS un Copy komutu kadar gelimi olmasada bir dosyay bir yerden, baka
bir yere kopyalamanz salar.

kaynakdosya: Kopyalanacak dosyann yeri ve dosyann ad.


hedefdosya: Kopyalanacak dosyann yeni yeri ve ad.

Dosya ad, src ismi ve yol ierebilir ancak joker karakter dediimiz *,? Gibi
karakterleri ieremez. Bu da, bu komutu kullanarak bir seferde sadece bir dosya
kopyalayabilirsiniz demektir.

FileCopy \windows\win.com, \dos\win.com

Dikkat ederseniz DOS un Copy komutundan farkl olarak, hedef olarak yolu ve dosya
ismini vermeniz gerekir.

FileLen
FileLen (Dosyaadi)
smi verilen dosyann boyutunu byte olarak bildirir. Bu dosya adna src ve yol ismi de
verilebilir.

FileLen (\Windows\win.com)

FileDateTime
FileDateTime (Dosyaadi)
Dosyann tarih ve saatini verir. Geri dnen deer Tarih Saat formatndadr.

38
Dir
Dir [(Dosyaadi[,AttrMaskesi])]
Dosya, dizin listelemeye ve bulmaya yarayan kullanl bir komuttur.

Dosyaadi : Dosyann veya dizinin ismi. Bu isim ierisinde * ve ? karakterleri de


bulunabilir.
AttrMaskesi : Bu parametre verilmezse sadece attributesi normal olan dosyalar
dikkate alnr. Bu maskeye aadaki tablo deerleri verilerek gizli dosyalar, dizinlerin de
dikkate alnmas salanabilir.

Attribute Anlam
0 Normal
1 Read Only
2 Hidden
4 System
8 Volume
16 Dizin

Bu deerler de OR ilemine tabi tutularak dosyalarn birka maskeye ayn anda tabi
tutulmas salanabilir.

TARH ve ZAMAN FONKSYONLARI

Date
Gnn tarihini renmeye ve deitirmeye yarar.

MsgBox Bugn : & Date

Bilgisayarn tarihini deitirmek iin direkt atama yaplabilir.

Date = 19/06/2004

ki tarih arasndaki fark bulmak iin de CVDate (veya CDate) fonksiyonundan


faydalanlabilir.

Dim x
x = Date CVDate(15/06/2004)
MsgBox 15/06/2004 den bugne kadar olan gn says : & x

Time
Saati renmeye ve deitirmeye yarar.

MsgBox Saat : & Time

Bilgisayarn saatini deitirmek iin direkt atama yaplabilir.

Time = 22:41:00

Now
Bu gnn tarihini ve saatini birlikte verir.

MsgBox Now
MsgBox Date & Time

Bu iki satrda ayn ii yaparlar. Date ve Time komutlaryla zaman ayar yaplrken Now
komutu ile bu ayar yaplamaz.

39
UYGULAMALARLA LGL KOMUTLAR

Shell
Shell (Komutsatiri, [penceresekli])
Programdan baka bir program altrmak iin Shell komutu kullanlr.

Komutsatiri : altrlacak programn ad.


Penceresekli : Bu parametreye aadaki saylardan biri verilerek programn alt
pencere ekli belirlenebilir. Bu parametre kullanlmazsa 2 kabul edilir.

Pencere ekli Anlam


1,5,9 Normal ve kontrol alacak programda
2 Simge durumunda ve Kontrol alacak programda
3 Ekran kapla durumunda ve Kontrol alacak programda
4,8 Normal ve Kontrol altran programda
6,7 Simge durumunda ve Kontrol altran programda

AppActivate
Programdan, o anda alan baak bir program aktif hale getirmek iin AppActivate
komutu kullanlr.
AppActivate pencerebasligi

pencerebasligi : aktif hale getirilecek programn pencere bal. Aktif hale


getirilecek programn o anda alyor olmas ve pencere balnn tam olarak verilmesi
gerekir. Bu parametrede byk ve kk harf kullanm ayn deildir. Yani Program
Yneticisi ve program yneticisi farkl iki balktr. Pencere bal yerine o penceresini
task ID deeride verilebilir. Bu deer API ler vastasyla renilebilinecei gibi aktif hale
getirilecek program Shell komutu ile arlmsa Shell komutundan geri dnen deer de
kullanlabilir.

Environ
letim sisteminin evre deikenleri bu komut ile renilebilir. evre deikeni iletim
sisteminde SET deyimi ile tanmlanabililen, bir ksm zel deikenlerdir. rnein, PATH,
PROMPT gibi evre deikenleri iletim sistemi tarafndan direkt olarak tannan evre
deikenleridir, BLASTER, CLIPPER gibi evre deikenleri ise zeldir ve baz programlar
tarafndan tannr.
Environ (no)
no : stenen evre deikeninin numarasdr. Bu numara standart bir deikeni temsil
etmez. Tanmlan srasna gre ilk deiken 1 kabul edilir. lk kullanm formatnda geri
dnen deer o evre deikeninin tam metnidir.

MsgBox Environ (1)

40
DoEvents
Sradaki olaylarn yaplmasna imkan verir. Programnzda almas uzun sren kod
bloklar varsa (dngler gibi) kod blounun almas bitene kadar formunuzun zerinde
hibir ilem yapamazsnz. Bu tip uzun sren bloklarda belirli aralklarla kontrol
Windows a vererek sradaki ilemlerin yaplmasn salamanz gerekir. Windows a
kontrol vermek iin DoEvents fonksiyonu kullanlr. rnein ListBox a yirmibin tane
eleman ekleninceye kadar formunuzun hibir hareketinize karlk vermediini
greceksiniz. imdi de DoEvents komutunu ekleyerek altrn. Artk listeye hem eleman
eklenecek hemde form zerinde alabileceksiniz. Ancak birinci ynteme gre ok daha
yava olduunu greceksiniz. zellikle bu tip uzun sren ilemlerde mutlaka DoEvents
kullanarak sradaki ilemlerin yaplmasn salamalsnz. Aksi takdirde kullanc programn
kilitlendiini zannedip program yok edebilir.

STRING LEMLER

StrComp
Daha nceki kuak Basic lerde bu ilem direkt olarak = operatr ile yaplyordu. VB ve
VBA da da bu karlatrma ilemi = operatr ile yaplabilirken dah gelimi olarak
StrConp fonksiyonu ile de yaplabilir.
StrComp (String1, String2, [art])

String1, String2 : Karlatrlacak iki string.


art : Bu parametreye 0 verilirse byk-kk harf ayrm yaplr, 1
verilirse bu ayrm yaplmaz. Burada Windows tan kaynaklanan bir avantaj da vardr.
Byk-kk harf karlatrmas sadece ngilizce alfabesinde bulunan karakterler iin
geerli deildir, Windows Trke ise Trke byk-kk harf ayrm da yapabilir. Yalnz
(i) harfinde problem vardr. Kk (i) harfi byk (I) harfine evrilir. Geri dnen deer 0
ise iki string eittir. Negatif ise String2 byk, pozitif ise String1 byktr. Bu byklk
karakter says olarak deil alfabetik sradaki nceliidir.

Trim
Kullancdan bir metin girmesini istediinizde, kullanc metnin bana veya sonuna
fazladan boluklar brakm olabilir. zellikle karlatrma ilemlerinde bu boluklar
problem karr. Ayn durum rastgele eriimli dosyalarda da olur. Okunan bilginin sonunda
fazladan bolukla bulunabilir. Bu boluklar atmak iin tane komut vardr.

LTrim (Metin)
Verilen metnin bandaki boluklar kaldrr.

RTrim (Metin)
Verilen metnin sonundaki boluklar kaldrr.

Trim (Metin)
Verilen metnin her iki tarafndaki boluklar kaldrr.

UCase, LCase
Metin ieren ifadeleri byk veya kk harfe evirmek iin iki tane komut bulunur.

UCase (Metin)
Girilen metindeki karakterleri byk harfe evirir.

LCase (Metin)
Girilen metindeki karakterleri kk harfe evirir.

41
StrConv, StrReverse

StrConv (Metin, Mod)


Metni verilen moda gre dntrr. Mod parametresinin alabilecei deerler ve
yaplacak dnmler ise yledir.

vbLowerCase : Metni kk harfe evirir.


vbUpperCase : Metni byk harfe evirir.
vbProperCase : Metindeki her kelimenin ilk harfini byk dierlerini kk yapar.

StrReverse (Metin)
Verilen stringi ters evirir.

Dim s
s = Excel
s = StrReverse (s)
MsgBox s lecxE

Len
Len (Metin)
Metin iindeki karakter saysn verir. Bu sayya boluklarda dahildir.

MsgBox Len(TextBox1)

Right, Left, Mid

Right (Metin, n)
Metin iinde sadan n karakteri verir. Aadaki rnekte sadan harf alnmas
istenmitir.

MsgBox Right("Excel", 3) Sonu cel

Left (Metin, n)
Metin iinde soldan n karakteri verir.

Mid (Metin, Baslangic [,uzunluk])


Metin iinde Balang tan Uzun luk kadar karakter verir. Aadaki rnekte nc
harften itibaren alt harf alnmas istenmitir.

MsgBox Mid("Excel, Word, PowerPoint", 3, 6) Sonu cel, W

InStr, InStrRev

Bulunanyer = InStr ([KacinciHarften,] NeyinIcinde, Neyi, Nasil)


InStr fonksiyonu bir stringin iinde bir baka stringi istediiniz konumdan itibaren byk-
kk harf ayrm yaparak veya yapmadan arayabilir ve bulursa bulduu yerin konumunu
geri gnderir. Burada, KacinciHarften parametresi ile aramaya kanc karakterden
balanacan belirtir. Bu parametre kullanlmazsa batan itibaren aranr.
Nasl parametresinin 0 olmas durumunda byk-kk harf ayrm yapacan, 1
durumunda yapmayacan belirler.
Geri dnen deer 0 ise aranan ifade bulunamamtr. Aksi takdirde geri dnen deer
ifadenin bulunduu yeri bildiren saydr.

InStrRev (NeyinIcinde, Neyi, [KacinciHarften],[Nasil])


InStr fonksiyonu gibidir ama arama ilemini batan deil sonran balayarak yapar.

MsgBox InStrRev (nn niversitesi, i) Sonu 18

Yukardaki satrda i harfi bulunmak istenmitir. Sondan ilk i harfi geri bildirilmitir.
42
Space
Space (sayi)
Verilen sayda boluk oluturur.

MsgBox Excel e & Space(10) & ho geldiniz

ASC, CHR
Bilindii gibi bilgisayarda harfler, rakamlar, iaretler ve dier karakterler birer say ile
temsil edilir. Her karakterin 0-255 aras bir kodu vardr. Bu koda Ascii kodu denir. VB ve
VBA da hem bir karakterin ascii kodunu verecek, hemde ascii kodu bilinen karakteri
retecek fonksiyonlar mevcuttur.

Asc (Harf)
Verilen harfin Ascii kodunu verir.

Chr (AsciiKodu)
Ascii kodu verilen saynn karakter karln retir.

Str, Val
Programlama dillerinde hem say hemde metin iin deikenler tanmlanabilmektedir.
Ancak baz durumlarda metin olarak tanmlanm bir deiken iinde say olabilir. rnein
metin kutusu metin trnde olmasna ramen iine say girilmesini isteyebilirsiniz. Metin
trndeki bir deiken iindeki say zerinde ilem yapabilmek iinde onu Val fonksiyonu
ile sayya evirmek gerekir.

Str (sayi)
Verilen says stringe evirir.

a = Str(123) sonuta a = 123

Val (String)
Verilen stringi sayya evirir. Bu ilemi yaparken evirme ilemi geersiz bir karaktere
rastlanncaya kadar devam eder.

RASTGELE SAYI RETM FONKSYONLARI

Rnd
Fonksiyon 0 ile 1 arasnda say retir.

MsgBox Rnd 0 ile 1 arasnda bir say retir


MsgBox Rnd * 100 0 ile 100 arasnda bir say retir
MsgBox Int(Rnd * 100) 0 ile 100 arasnda bir tamsay retir

Fonksiyonun 0 ile bir say arasnda deil de iki say arasnda deer retmesini salamak
iin zerinde deiik ilemler yaplabilir.

MsgBox Rnd * 30 + 20 20 ile 50 arasnda bir say

Genel olarak bir forml oluturacak olursak a ile b arasnda bir say retmek iin

Rnd * (b-a) + a

43
YUVARLATMA FONKSYONLARI

Eer iki tam sayy blp sonucu yine tam say olarak gstermek isterseniz, yani
virglden sonraki ksmn atlmasn isterseniz \ operatrn kullanabilirsiniz.

Int (Say)
Int fonksiyonu ise virglden sonraki sayy atarak kendinden dk en yakn tamsayya
yuvarlatr. Eer say pozitifse saynn tam ksm alnm olur, negatifse kendinden bir
nceki sayya yuvarlatlm olur.

Fix (Say)
Int fonksiyonu negatif saylarda saynn tam ksmn vermek yerine kendinden nceki
sayy veriyordu. Fix fonksiyonu ise negatif ve pozitif saylarda ayn ekilde davranr ve
saynn virglden sonraki ksmn atar.

Round (sayi,basamaksayisi)
Int ve Fix fonksiyonlar virglden sonraki btn basamaklar atyor ve yuvarlatma
ilemeni (yani 5 den bykleri bir ste, kkleri bir alta) yapmyordu. Bu fonksiyonla
saynn istediiniz kadar basaman yuvarlatabilirsiniz. basamaksayisi parametresine 0
verirseniz, virglden sonraki btn rakamlar yuvarlatlr. rnein, bu parametreye 2
verdiinizde virglden sonraki iki basamak listelenecektir.

Msgbox Round (60.215, 0) Sonu: 60


MsgBox Round (60.215, 1) Sonu: 60.2
MsgBox Round (60.215, 2) Sonu: 60.22
MsgBox Round (60.715, 0) Sonu: 61

44
BLM -8- DOSYALAMA LEMLER

Programdaki baz bilgilerin kalc olarak saklanmas ihtiyac her zaman vardr.
Bir dosyadan kayt okuyabilmek veya kayt yapabilmek iin nce dosya alr zerinde
ilem yapldktan sonra da kapatlr. Eer ak olan bir dosya tekrar almaya allrsa
VBA hata verecektir.

Dosyalar yaplan ie gre temelde iki trde alr: Rastgele eriimli ve Sral eriimli
olarak. Rastgele eriimli modda istenen kayda numaras verilerek ulalabilmesine
ramen sral eriimli modda btn kaytlar ilendikten sonra istenen kayda ulalabilir.

DOSYA AMAK

ster sral eriimli olsun, ister rastgele eriimli olsun bir dosyay amak veya oluturmak
iin Open komutu kullanlr.

Open Dosya Ad [For AmaModu] [Access EriimModu] [lock] As [#]dosyano [Len =


kayituzunlugu]

Dosya Ad : Alacak veya oluturulacak dosyann ad.

AmaModu : Dosyann ama modunu belirler. Dosya u 5 moddan birinde alabilir.

Random, dosyadaki her kayituzunlugu ile belirlenen uzunluktaki alanlara yazlr.


Dosyaya yazlan kayitlar kayituzunlugu ile belirlenen saydan kk de olsa kayituzunlugu
kadar yer kaplar. Bylece dosyadaki her kaydn uzunluu ayn olacandan dosyada
istenen kayda numaras verilerek eriilebilir.
Her kaydn uzunluu 6 karakter ve dosyaya yazlan kaytlar unlar olsun. ali, veli,
excel. Bu kaytlar dosyaya yazmak iin u program yazalm.

Dim x as String * 6, dosyaadi


dosyaadi = \d.dd
Open dosyaadi For Random As #1 Len = 6
x = ali
Put #1, 1, x 1 nolu kayda yaz
x = veli
Put #1, 2, x 2 nolu kayda yaz
x = excel
Put #1, 3, x 3 nolu kayda yaz
Close #1

Program altrdktan sonra DOS ta Type d.dd komutu ile dosyann ieriine bakarsak
bu kaytlar dosyada u ekilde olacaktr.

a l i v e l i e x c e l

Grld gibi dosyadaki her kaydn uzunluu sabit olduundan dosyadaki her hangi bir
kayda o kaydn numarasn vererek erimek mmkndr.

- Binary, dosya binary modda alrsa dosya ierisindeki her karaktere, karakterin
numaras verilerek ulalabilir. Dikkaet edilise Random modda dosya ierisindeki kaytlara
bir btn olarak ulaabiliyorduk, bu modda ise kayt iindeki istenen karakterede
ulalabilmektedir.

- Input, dosya okunmak iin alr. Input, Output ve Append modda alan dosyalara
sral eriimli dosyalar denir. Ve bu tip dosyalarda her kayt eit uzunlukta olmak zorunda
deildir. Kaytlardan biri ok bykken dieri ok kk olabilir. Dolays ile dosyadaki
45
hangi kaydn nerede olduu o kaydn numaras verilerek bulunamaz. Bu tip dosyalarda
bir kayda ulaabilmek iin o kayttan nceki btn kaytlar okumak gerekir.

- Output, dosya yazmak iin sral eriimli olarak alr.

- Append, Output modu gibidir ancak dosya gstericisi dosyann sonunda duracaktr ve
yazlan kaytlar dosya sonuna eklenecektir.

Amak istenen dosya mevcut deilse Append, Binary, Output veya Random modlarnda
oluturulur. Yani bir dosyay Input modunda aabilmek iin o dosyann var olmas gerekir.
Aksi takdirde hata oluacaktr. Dosyay Input modunda amadan nce Dir(dosyaadi)
komutuyla dosyann varln kontrol etmek gerekir. Yoksa dosyay oluturmak
gerekebilir.

erisimmodu : Dosya alrken dosyann ne iin ald belirtilebilir. Bu parametre u


kelimeden biriyl kullanlr.

- Read: Dosya sadece okumak iin alr. Dosyadaki kaytlarn deitirilmesine ve yeni
kaytlar eklenmesine izin verilmez.
- Write: Dosya sadece yazmak iin alr.
- ReadWrite: Dosya hem okumak hemde yazmak iin alr.

Dosya Read ile yalnz okunmak iin almsa, dosyaya yazan komutlarda (Put gibi) veya
Write ile yalnz yazmak iin almsa dosyadan okuyan komutlarda (Get gibi) VBA
Path/File Access Error hatas verir.

Lock : Dosya alrken istenirse dier programlarn bu dosyaya eriimi engellenebilir.


u drt kelime ile birlikte kullanlr.
- Shared, alan dosyaya dier uygulamalar tarafndan okuma ve yazma yaplabilir.
- Read, okumaya kar kilitler. Dosya ak olduu srece dier programlar bu
dosyadan okuma yapamazlar. Ancak dosyaya yazabilirler.
- Write, dosyay yazmaya kar kilitler. Close komutu verilinceye kadar dier
programlar bu dosyaya yazamazlar.
- Read Write, dosyay hem yazmaya he de okumaya kar kilitler.

dosyano : Dosya alrken o dosyaya 1 ile 255 arasnda bir numara verilir ve dosyada
yaplan ilemlerde bu numara kullanlr. (Get #1 gibi). Ayn anda birka dosya alyorsa
numaralarda farkl olmaldr.
Dosya Binary, Input ve Random modlarndan biri ile almsa ayn dosya kapatlmaya
gerek kalmadan farkl bir dosya numaras verilerek tekrar alabilir. Ancak Append ve
Output modlarnda ayn dosyay kapatmadan tekrar amak mmkn deildir.

kayituzunlugu : Dosyann am moduna gre bu parametrenin iki farkl anlam vardr


ve 32767 den byk olamaz. Ayrca Binary modda alan dosyalarda bu parametrenin
anlam yoktur.
Dosya Random modu ile almsa bu say her kaydn uzunluunu belirler. Dosyaya
yazlan kayt bu deerden bykse hata oluur. Bu deer verilmezse her kaydn uzunluu
128 karakter olarak kabul edilir.
Dosya Random modundan farkl bir modla almsa bu say karakter buffer inin
boyutunu belirler. Verilmezse 512 karakter olarak kabul edilir.
Buffer bir seferde okunacak ve yazlacak karakter saysn belirler. Yani dosyadan bir kayt
okunaca zaman buffer boyutu kadar okuma yaplr ve bir sonraki okuma isteinde
okunmak istenen kayt bufferde ise tekrar dosyadan okunmaz. Yazarken de buffer
doluncaya kadar dosyaya yazlmaz. Buffern byk deerleri okuma ve yazma
ilemlerinin hzlanmasna sebep olur fakat bellekte fazla yer kaplar. Ancak SMARTDRV
gibi bir Cache program kullanyorsanz veya kullandnz iletim sistemi Cache destei
veriyorsa bu buffer byk vermenizin hibir avantaj olmaz nk Cache program zaten
yapacaktr.

46
RASTGELE ERML DOSYAYA YAZMA ve OKUMA

Random veya Binary modu ile alan dosyalara kaytlar Put komutu ile yazlr ve Get
komutu ile okunur.

Put [#] dosyano, [kayitno], degisken


Get [#] dosyano, [kayitno], degisken

degisken : erii yazlacak deikeni kaydn alnaca deiken.

dosyano : Yazlacak veya okunacak dosyann numaras. Bu numara Open komutu ile
belirlenen dosya numarasdr.

kayitno : Yazlacak veya okunacak deikenin dosya iindeki kayt numaras. Bu


numara dosyadaki ilk kayt iin 1 ve olabilecek en byk deer 2,147,483,647 dir.

Dim x
x = Merhaba
Put #1, 5, x

Yukardaki satrlarla 1 numaral dosyann 5 numaral kaydna x deeri yazlmaktadr. Eer


kayt numarasn belitmeseydik x deikeni sradaki kayda yazlacakt. Rastgele eriimdi
modda btn kaytlar dolu olmak zorunda deildir. Yani

Dim x
Get #1, 5, x
MsgBox x

Yukardaki satrlarda ise 1 numaral dosyann 5 numaral kayd okunmaktadr.

SIRALI ERML DOSYAYA YAZMA ve OKUMA

Output ve Append modu ile alan dosyalara Write veya Print komutu ile yazma yaplr.

Write # dosyano [,degiskenler]

dosyano : Yazlacak dosyann numaras. Bu numara Open komutu ile belirlenen dosya
numarasdr.

degiskenler : Dosyaya yazlacak olan deiken listesi araya virgller konarak yazlr.

Write ile dosyaya yazlan deikenler trnak ierisinde ve araya virgl konarak yazlrlar
ve son deikenden sonra satr sonu karakteri konur.

Dim ad, dt
Open \test.txt For Output As #1
ad = Mehmet zpnar
dt = 15.01.1983
Write #1, ad, dt

ad = Adem Kseman
dt = 10.10.1984
Write #1, ad, dt
Close #1

47
ki ayr Write komutu ile dosyaya yazlan ad ve dt deikenleri dosyada aadaki gibi
olacaktr.

Mehmet zpnar,15.01.1983
Adem Kseman,10.10.1984

Bu tip dosyalara Print komutu ile yazlabilmektedir.

Print # dosyano [,degiskenformati]

degiskenformati : Print komutunun dosyaya yazan bu format Vb de ekrana k


yapan print gibidir. Deiken formatn ekrana kt yapyormu gibi dosyaya yazar.

Dim ad, dt
Open \test.txt For Output As #1
ad = Mehmet zpnar
dt = 15.01.1983
Print #1, ad, dt;

ad = Adem Kseman
dt = 10.10.1984
Print #1, ad; dt
Close #1

ki ayr Print komutu ile dosyaya yazlan ad ve dt deikenleri dosyada aadaki gibi
olaraktr.

Mehmet zpnar 15.01.1983 Adem Kseman 10.10.1984

Input modu ile alan sral eriimli dosyalardan okuma ilemi ise Input ve Line Input
komutlar ile yaplr.

Input # dosyano, degiskenlistesi

degiskenlistesi : Dosyadan okunan kaytlar bu deikenlere aktarlr. Dosyada her ift


trnak iindeki karakterler bir kayt kabul edilir ve srasyla bu deikenlere aktarlr. Eer
trnak iaretleri iinde bir karakter kmesi yoksa satr sonuna kadar olan karakterler bir
kayt kabul edilir.
Test dosyasnda u kaytlar bulunsun.

Mehmet zpnar 15.01.1983


Adem Kseman 10.10.1984

Dim ad, dt
Open \test.txt For Input As #1
Input #1, ad, dt
Cells(1,1) = ad
Cells(1,2) = dt
Close #1

Input (KarakterSayisi, Dosyano)


Bu fonksiyonla numaras verilen dosyadan karaktersayisi kadar karakter okunur ve sonu
geri gnderir. Bu fonksiyon Sral eriimli olarak vey Binary modda alm dosyalarda
kullanlabilir.

Dim c
Open "c:\test.txt" For Input As #1
Do While Not EOF(1) 'dosya sonuna gelinceye kadar
Sheets(1).Cells(1, 1) = Input(1, #1) 'bir karakter oku
Loop
Close #1
48
DOSYALARI KAPATMAK

Hangi modda alrsa alsn dosya Close komutu ile numaras verilerek kapatlr.

Close # dosyano [;dosyano]

dosyano : Kapatlacak dosyann numaras. Bu numara Open komutu ile belirlenen


dosya numarasdr.

Reset
Ak olan btn dosyalar kapatmak iin Reset komutu kullanlabilir.

Open \dosya.dat For Random as #1


.
.
Close #1

DOSYA KONTROL FONKSYONLARI

Dosya Sonu Kontrol

EOF (dosyano)
Numaras verilen dosyann sonuna gelinmise True deer gnderir. Sral eriimli
dosyalarda dosya sonu tespiti iin kullanlr.

rnek: Bir snftaki rencilerin ad, soyad, vize ve final notlarn aralarnda * kullanlarak
c:\bilgi.txt olarak kaydedildiini varsayalm. Aadaki gibi

Amacmz bu sral dosyann iindeki bilgileri paralayarak alma kitabmzn birinci


sayfasna yazmak olacaktr. Ancak ortalama bilgisi dosyamzda kaytl olmad iin
bilgileri okurken hesaplatp ondan sonra alma sayfamza yazdracaz. Paralama
ilemi, ayra olarak kullanlan * a gre olarak. lk nce bir makro kaydedelim ve kod
penceresine geip aadaki kodlrar yazalm. Nasl makro oluturulduunu daha nceki
konularmzda anlatlmt.

49
Sub bilgi()
Cells(1, 1) = "Ad"
Cells(1, 2) = "Soyad"
Cells(1, 3) = "Vize"
Cells(1, 4) = "Final"
Cells(1, 5) = "Ortalama"
Open "c:\bilgi.txt" For Input As #1
i = 2 bilgilerin alma sayfasna yazlmaya balayaca satr numaras
While Not EOF(1) 1 numaral dosyann sonuna kadar alan dng
ad$ = "" dng her baa dndnde deikenlerin ileri boaltlyor
soy$ = ""
v$ = ""
f$ = ""
Input #1, sat$
yer = 1 paralama ilemine yardmc olan, dosyadaki satr numaras
While Mid$(sat$, yer, 1) <> "*" paralama ilemi balyor
ad$ = ad$ + Mid$(sat$, yer, 1) ad$ deikenine bulunan ad atanyor
yer = yer + 1
Wend
yer = yer + 1
While Mid$(sat$, yer, 1) <> "*"
soy$ = soy$ + Mid$(sat$, yer, 1) soy$ deikenine bulunan soyad atanyor
yer = yer + 1
Wend
yer = yer + 1
While Mid$(sat$, yer, 1) <> "*"
v$ = v$ + Mid$(sat$, yer, 1)
yer = yer + 1
Wend
yer = yer + 1
For j = yer To Len(sat$) final bilgisi satrn sonunda olduu iin For ile paraland
f$ = f$ + Mid$(sat$, j, 1)
Next j
Cells(i, 1) = ad$ deikendeki bilgiler hcrelere yazlyor
Cells(i, 2) = soy$
Cells(i, 3) = v$
Cells(i, 4) = f$
o = Val(v$) * 0.4 + Val(f$) * 0.6 ortalama hesaplanyor
Cells(i, 5) = o bulunan ortalama hcrelere yazdrlyor
i=i+1
Wend
Close #1
End Sub

Yaptmz bu dosya okuma ilemini, byk lekli iletmeler oluturduklar fiyat listelerini
bayilerine gnderirler ve bayiler de bu yntem ile programlarna alrlar.

50
Dosya Boyu Kontrol

LOF (dosyano)
Numaras verilen dosyann byte olarak uzunluunu verir. FileLen fonksiyonu gibidir ancak
farkl olarak uzunluu renilecek dosyann Open ile alm olmas gerekir.

Aktif Kayd Deitirmek

Dosya ierisinde aktif kayd veya karakteri gsteren bir gsterici vardr. Kayt numaras
verilmeden yaplan okuma ve yazma ilemleri bu gstericinin gsterdii yerden yaplr.
Yaplan yazma ve okuma ilemleri de gstericiyi okunan veya yazlan kaydn sonuna tar.
Dosya Random modla almsa bu gsterici kayt numarasdr dier modlarda alm ise
bu gsterici dosya ierisindeki karakterin konumudur.

Seek #dosyano, yenikonum

Bu komut numaras verilen dosyadaki gstericiyi yeni konuma tar. Bu komutun Random
dosyalarda kullanlmas gerekmeyebilir. nk bu modda alan dosyalarda Get ve Put
komutlaryla istenen kayda ulalabilmektedir. Ancak Sral eriimli dosyalarda dosya
ierisinde istenen bir karaktere bu komutla ulalabilir.
Aktif gsterici konumunu renmek iinse bu komutun fonksiyon format kullanlr.

Seek (dosyano)
Bu ekilde kullanmda dosya numaras verilen dosyadaki gstericinin konumu
renilebilir.

FreeFile

Dosya aarken bu dosyalara birer numara veriyorduk ve bu numaray kullanarak o


dosyadan okuma ve yazma yapabiliyorduk.
Ak olan her dosyann numaras da farkl olmas gerektii iin ayn anda atnz btn
dosyalara farkl bir numara vermeniz gerekir.
Genel amal olarak yazdnz fonksiyonlarda atnz dosyalarda bu numarann,
programn dier blmlerinde kullanlmayan bir numara olduundan emin olabilmek
dosya numaras olarak herhangi bir say vermek yerine bu sayy FreeFile fonksiyonu
kullanarak buldurabilirsiniz.
FreeFile fonksiyonu o anda kullanlmayan bo bir dosya numaras gnderecektir. Bylece
bu numarann programn dier ksmlarnda kullanlmadndan emin olabilirsiniz.

Dim DosyaNo
DosyaNo = FreeFile
Open deneme For Random As #DosyaNo
Put #DosyaNo, 1, abc
..
Get #DosyaNo, 1, x

Close #DosyaNo

51
BLM -9- EXCEL de PROGRAM YAZMA

Excel de program yazabilmek iin Visual Basic bilinmesi gerekmektedir. Buraya kadar ki
rendikleriniz Excel de program yazabilmeniz in gerekli olan temel bilgileri ieriyordu.

Bunlarn haricinde tabi ki Excel in de kendi komutlar, fonksiyonlar vs. var. Bunlarn
zerinde fazla durulmayacak. Kitabn asl konusunu ieren bu blm bir program ve
eitli rnekler yaparak en iyi ekilde ve pratik yollardan anlatmaya alacaz.

Excel de makro iki trl yazlr. Row-Range ve Cells yntemleri. Row-Range yntemi
Cells yntemine gre daha hzl olsa da programn yazlmas ve okunabilirlii iin biz Cells
yntemini tercih ediyoruz.

Programlar ierisinde geen daha nceki grdnz komutlar, fonksiyonlar vs.


anlatlmayacak. Onlarn yerine Excel komutlar anlatlacak.

PERSONEL PROGRAMI

Programmzn ierii,

- Yeni ie girmi personelin kayd


- Kaytl personel bilgilerinin grlmesi ve deiikliklerinin yaplmas
- Personel mesai bilgilerinin girilmesi. Avans
- Personelin sigorta giriinin yaplmas
- Personelin iten karlmas
- Maa listesi
- irket bilgilerinin girilmesi. Asgari cretin belirtilmesi ve personelin alaca
blmlerin nceden girilmesi

Programmzn ierii bu kadar. imdi programn ilk nce alt zemini hazrlayalm.

lk nce alma sayfalarn hazrlayalm. alma sayfalarn veri taban olarak


kullanacaz.
- Sayfa 1 de bilgilerimizi kaydedeceimiz alanlar oluturulacak.
- Sayfa 2 de sabit bilgilerimiz olacak. irket bilgileri, irketteki blmlerin tutulduu
alan, asgari cret.
- Sayfa 3 de ise maa dkmnn olaca sayfann tasarm. Yalnzca balklar
yazlacak. Kenarlklar programdan ayarlanacak.

Sayfa 1 deki alan adlar unlar:

- Numara
- T.C kimlik no
- Ad
- Soyad
- Baba ad
- Ana ad
- Doum yeri
- Doum tarihi
- Medeni hali
- Cinsiyeti
- Adres
- Ev tel
- Cep tel
- Blm
- Maa
- Yevmiyesi
52
- Pazar mesaisi
- Hafta ii mesaisi
- Avans
- e giri tarihi
- Sigorta numaras
- Vergi dairesi
- Vergi no
- Anne kzlk soyad
- ten k tarihi

Bu alan balklar programda kullanlmayacaktr. Sadece programcnn program


yazmasn kolaylatracak stun balklardr. Alanlarn genilikleri nemli deil.
Unutmayalm bunlar sadece balk. Bu alanlarn sayfadaki yerleimi u ekilde olacaktr.

Sayfa 2 deki alan adlar unlar:

- irket bilgileri
- Blmler
- Asgari cret

Bu alan adlarda programda kullanlmayacak. Sadece programcnn program yazmasn


kolaylatrmak iin verilmi alan balklardr. Alanlarn ierisinde yazan bilgiler varsaym
olarak girilmitir. Daha sonra bu bilgiler programdan girilecek veya gncellenecek. Bu
sayfann yerleimi aadaki gibi olacaktr.

Sayfa 3 n tasarmnda alan adlar yok. nk burada kayt ilemi olmayacak. Bilgiler
sayfaya aktarlp yazcdan kt alnacak daha sonra aktarlan bilgiler silinecek. Sayfa
yapsn Yatay olarak ayarlayn. Sayfa tasarm yle olacak.

53
Bu tasarm ve kt alnan bilgileri rnek olarak bu ekilde aldk. Siz isteinize gre
tasarlayabilir veya farkl bilgilerin dkmnde alabilirsiniz. Tabi ki programdan da
gerekli dzenlemeleri yapmak art ile.

Programn ana zemini oluturduk. imdi de bilgileri kaydetmek, dzenlemek veya ilemek
iin gerekli olan Formlarn oluturulmasna sra geldi. Bunun iinde Visual Basic kod
dzenleyicisini ap gerekli formlar ekliyoruz. Formlarn tasarmlarn kendi isteinize
gre dzenleyebilirsiniz.

Formlarmz ve formun programda kullanlaca ad,

- Ana Men - anamenu


- Yeni kayt formu - yenikart
- Sabit bilgilerin girilecei form - sabitler
- Sigorta giriinin yaplabilmesi iin form - sigortagiris
- Maa ve avans belirleme - avans
- Maa listesinin dkm iin form - maasdokum
- ten karma iin form - istencikar
- Bilgi ekran iin bir form - bilgiekrani

Programn hemen her tarafnda kullanacamz yer deyimi ve While dngs hakknda
biraz aklama yapalm.

yer dediimiz Integer tipinden bir deikendir. Buna yer deilde baka bir deiken ismi
de verilebilir. Bunu programda, kaydn nereden baladn belirlemek iin kullanacaz.
Mesela, yer deikenine 2 verirsek kaydetme veya bulma ilemi 2. kayttan itibaren
balayacaktr.

While dngsnn mantn hatrlarsak eer, bir dngnn ka defa alaca daha
nceden bilinmiyorsa kullanlr demitik. Bir art gerekletii srece almas gereken
program bloklarnda kullanlr. Bizim programlarmz daki artmz bo alan grene kadar
dn olacaktr.
Yani,

yer = 2
While Sheets(1).Cells(yer,1)<>
yer = yer+1
Wend

Bu satrlarn mant udur. Balang satr olarak 2 yi al ve yer numaral satr boluktan
farklysa yani dolu ise yer in deerini 1 arttr. Eer yer in deerini arttrmazsak dng
sonsuz dngye girecektir. Ve dngnn sonu gelmeyecektir.
Bu dng genellikle kaydetme ilemlerinde kullanlr. Dngnn knda yer in deerini
1 azaltrsak buldurma ilemlerinde de kullanabiliriz. nk dngnn iinde bir boluk
kalm durumda. Dolaysyla dng knda bu boluun alnmas gerekmektedir.

54
Ana Men

Formumuzun grnts aadaki gibi olacak ekilde tasarm izin. k bir Label dr.

Anamenu formunda olacak kodlar aadaki gibidir.

Private Sub CommandButton1_Click()


yenikart.Show 'Yeni kart formunu gster gster
End Sub

Private Sub CommandButton2_Click()


sigortagiris.Show ' Sigorta giri formunu gster
End Sub

Private Sub CommandButton3_Click()


maasdokum.Show 'Maa dkm formunu a
End Sub

Private Sub CommandButton4_Click()


istencikar.Show 'ten karma formunu a
End Sub

Private Sub CommandButton5_Click()


sabitler.Show 'Sabit bilgi girii formunu gster
End Sub

Private Sub CommandButton6_Click()


bilgiekrani.Show 'Bilgi ekrann gster
End Sub

Private Sub CommandButton7_Click()


avans.Show
End Sub

Private Sub UserForm_Activate()


Label1.Caption = Sheets(2).Cells(1, 2) irketin sheets(2).cells(1,2) den getiriliyor
End Sub

Formlar aras gei iin Show komutu kullanlr. Tekrar dn iin yine alacak formun
ad ile birlikte Show komutu kullanlr.

Program kapatmak iin End komutu kullanlr. Kullanm yalnz banadr. Burada bir
mesaj kutusu ile kullancya programn kapatlp kapatlmayaca soruluyor. Cevap evet

55
olunca program End komutu ile sonlandrlyor. End, alt formlar kapatmada kullanlmaz,
sadece ana form kapatmada kullanlr. End komutu tm ak olan formlarla birlikte
kendisini de kapatr. Alt formlar kapatmak iin Unload Me kullanlr. Bir baka form
kapatlacaksa Unload formadi kullanlr.

Sabitler Formu

Bu formda irket ad, nvan ve adresi, asgari cret belirtme ve blm ekleme alanlar
olacak. Formumuzun grnts aadaki gibidir.

Adres alanndaki TextBox n MultiLine zellii ok satrl bilgi girileceinden True olacak.

Bu formda kullanlan kodlar aadadr.

Private Sub CommandButton1_Click()


Dim mesaj As Integer 'mesaj diye bir tam say tipi tanmlanyor
mesaj = MsgBox("irket Bilgilerini Gncellemek stediinizden Eminmisiniz?", 4 + 32,
"Uyar")
If mesaj = 6 Then
Sheets(2).Cells(1, 2) = TextBox1 ' ikinci sayfann 1,2 numaral hcresine textbox1
deki bilgiler yazlyor
Sheets(2).Cells(2, 2) = TextBox2
Sheets(2).Cells(3, 2) = TextBox3
TextBox1 = "": TextBox2 = "": TextBox3 = "" ' kayt ileminden sonra textboxlarn
ileri boaltlyor
Else
Cancel = True
End If
End Sub

Private Sub CommandButton2_Click()


Dim mesaj As Integer
mesaj = MsgBox("Asgari creti Gncellek stiyormusunuz?", 4 + 32, "Uyar")
If mesaj = 6 Then
Sheets(2).Cells(2, 4) = TextBox4
Else
Cancel = True
End If
End Sub

Private Sub CommandButton3_Click()


Dim mesaj, yer As Integer yer ve mesaj deikenleri birer tam saydr
yer = 2 yer in deeri 2 olarak verilmi
While Sheets(2).Cells(yer, 3) <> "" yer,3 dolu ise
56
yer = yer + 1 yer i 1 arttr
Wend dngy kapat
mesaj = MsgBox("irketinize Yeni Bir Blm Eklemek stiyormusunuz?", 4 + 32, "Uyar")
If mesaj = 6 Then
Sheets(2).Cells(yer, 3) = TextBox5 yer,3 e yani ilk bolua TextBox5 i yaz
TextBox5 = "" kayttan sonra TextBox n iini boalt
Else
Cancel = True
End If
End Sub

Private Sub TextBox1_Change()


TextBox1 = UCase(TextBox1)
End Sub

Private Sub TextBox2_Change()


TextBox2 = UCase(TextBox2)
End Sub

Private Sub TextBox3_Change()


TextBox3 = StrConv(TextBox3, vbProperCase)
End Sub

Private Sub UserForm_Activate()


TextBox1 = Sheets(2).Cells(1, 2)
TextBox2 = Sheets(2).Cells(2, 2)
TextBox3 = Sheets(2).Cells(3, 2)
TextBox4 = Sheets(2).Cells(2, 4)
End Sub

Ad ve Unvan alanlarna yazlacak olan bilginin tm harflerinin byk yazlmas iin daha
nceki konularda grdmz UCase fonkiyonunu kullandk.
Adres alannda yer alan bilgideki her kelimenin ba harfi byk dier harflerin ise kk
yazlmas iin StrConv fonksiyonunu kullandk. Bu tr ilemlerde UCase fonksiyonun
grevi yeterli olmad iin StrConv fonksiyonunu kullandk.

Formun alnda (Activate) ad, unvan, adres ve asgari zeret bilgileri otomatik olarak
ilgili metin kutularna getiriliyor. Bu, daha nceki girilmi bilgiyi hatrlamamza yardmc
olacaktr.

Yeni Personel Kart Formu

Bu formda kodlar biraz fazla veya karmak olabilecei iin kodlarn tmn birden
vermeyip tek tek anlatarak verilecek. Burada maa bilgilerinin otomatik hesaplanaca
iin Yevmiye, Pazar Mesaisi ve Hafta i Mesaisi TextBox larnn Lock zelliini True
yapalm.

57
Formun format yle.

Formun Activate olaynda baz alanlarn otomatik gelmesi gerekiyor.


Medeni hali, cinsiyeti ve blm alanlar.

ComboBox1.Clear ComboBox larn ileri temizleniyor


ComboBox2.Clear
ComboBox3.Clear

ComboBox1.AddItem "Evli" ComboBox1 e Evli deeri ekleniyor


ComboBox1.AddItem "Bekar" Bekar deeri ekleniyor
ComboBox1.AddItem "Dul"

ComboBox2.AddItem "Kadn" combobox2 ye Kadn deeri ekleniyor


ComboBox2.AddItem "Erkek"

yer = 2
While Sheets(2).Cells(yer, 3) <> ""
yer = yer + 1
Wend
yer = yer 1 buldurma ilemi yaplaca iin yer in deeri 1 eksiltilmi

For i = 2 To yer 2 den yer e yani bolua kadar dner ve


ComboBox3.AddItem Sheets(2).Cells(i, 3) grd tm kaytlar combobox3 e ekler
Next i

Tarih alanlarn da tarih ayrac kullanmak isteyebilirsiniz. Bunun iin eitli yntemler
vardr. Mesela, Mid fonksiyonu ile paralamak, Len fonksiyonu ile girilen karakter saysna
gre araya ayra koyma veya daha farkl fonksiyonlar ile bu ilemler yaplabilir. imdi
Len fonksiyonu ile araya ayra koymay yapalm;

58
Doum tarihi alanna bunu uygulayalm. Sizde TextBox larn isimlerini deitirerek baka
alanlara uygulayabilirsiniz.

If Len(TextBox8) = 2 Then TextBox8 = TextBox8 & "."


If Len(TextBox8) = 5 Then TextBox8 = TextBox8 & "."
If Len(TextBox8) = 10 Then ComboBox1.SetFocus

Bu satrlar ilgili metin kutusunun Change olayna yazld iin girilen karakter saysn
bulmak olduka kolaydr. Bizde bundan faydalanp her girilen karakterde toplam karakter
saysn buldurarak ilemimizi yapyoruz. nce ilk girilen iki karakter bulunup textbox n
sonuna bir ayra ekleniyor daha sonra girilen iki karakterle ve ayrala birlikte toplam be
karakter ediyor ve textbox n sonuna tekrar bir ayra ekleniyor. En sonunda ise bir tarih
en fazla 10 karakter uzunluunda olacandan uzunluk 10 olduunda textbox kontrol bir
sonraki eleman olan combobox a brakyor.

Maa hesabnn otomatik olarak yaplabilmesi iin Maa metin kutusunun Change olayna
aadaki kodlar yazn. Burada personelin gnlk yevmiyesini bulmak iin bir ay 30 gn
varsayp maa 30 a blp yevmiyesini, gnlk alma saatini 8 saat kabul edip 8 e
blerek haftaii saatlik mesaisini ve Pazar mesaisi gnlk yevmiyesinin 2 kat olacandan
gnlk yevmiye cretini 2 ile arpp Pazar mesaisini bulacaz.

On Error Resume Next


TextBox13 = Val(TextBox12 / 30) yevmiyesi bulunuyor
TextBox14 = Val(TextBox13 * 2) Pazar mesaisi bulunuyor
TextBox15 = Val(TextBox13 / 8) haftaii mesaisi bulunuyor

imdi de programmzn tm tarihli alanlarnda kullanabileceimiz basit bir fonksiyon


yazalm. Ama, formatl bir tarihi fonksiyonun geri dnen deerinden alp ift tklanan
textbox a yazdrmak.

Bunun iin ilk nce bir Module ekliyoruz(InsertModule). Alan bo kod sayfasna u
kodlar yazyoruz.

Public Function tarih()


tarih = Format(Date, "dd.mm.yyyy")
End Function

Genel bir fonksiyon proseduru alyor ve fonksiyondan geri dnen deere format
belirtilmi gnn tarihi atanyor. imdi bu fonksiyonu programn her alannda rahatlkla
kullanabiliriz. rnein, ie giri tarihi alann daki textbox a ift tklandnda gnn tarihi
textboxa otomatik bir ekilde yazdrlabilir.

Personel numaras alanna ift tklandnda program yeni bir personel numaras verebilir.
Bunun iin bir ok yntem vardr. Birincisi, toplam kayt says kontrol edilir, bulunan
saynn bir fazlas personele numaras olarak verilebilir. Ancak daha nce kaydedilmi bir
personel silindiinde ayn numaradan baka bir kayt daha olacandan numaralarda
akma olacaktr. Bu yzden fazla gvenli olmayan bir yntemdir.
kinci olarak , daha nce verilmi personel numaralar kontrol edilir ve ilerinden en
byk say bulunur, personele bulunan saynn bir fazlas verilir. Bylece nceki
kaytlardan birisi silinse dahi her zaman en byk say verileceinden hibir akma
olmayacaktr.
imdi ikinci ynteme gre programmzn bu ksmn yapalm.

Dim yer As Integer


Dim ebs, numara As Long
yer = 2
While Sheets(1).Cells(yer, 1) <> ""
yer = yer + 1
Wend
yer = yer 1 buldurma ilemi yapldndan yer 1 eksiltiliyor
59
ebs = 0
For i = 2 To yer
numara = Sheets(1).Cells(yer, 1)
If numara > ebs Then ebs = numara
Next i
TextBox1 = ebs + 1

Kodlarda yaplan ilemler ksaca unlar; buldurma ilemi iin yer tutulup While dngs
alyor. ebs (bir deikendir), yani en byk say olarak 0 kabul ediliyor. For dngs yer
e kadar dngye giriyor ve dngdeki her geilen kaydn numara alan numara
deikenine atanyor. Daha sonra If art yapsyla bulunan numara deikeni elimizdeki
ebs ile karlatrlyor, eer numara ebs den byk ise ebs ye yeni numara deeri
atanyor.
Dngden kldktan sonra yine dier yntemdeki gibi textbox a bulunan en byk
saynn bir fazlas personel numaras olarak veriliyor.

Eer el ile bir numara verilirse bu numarann daha nce baka bir personele verilip
verilmedii kontrol edilmelidir.
Bunun iin TextBox1 in Exit olayna aadaki kodu yazmamz yeterli.

Dim i, yer As Integer


yer = 2
While Sheets(1).Cells(yer, 1) <> ""
yer = yer + 1
Wend
yer = yer 1 buldurma yapld iin yer in deeri 1 azaltlyor(boluk alnyor)
For i = 2 To yer
If TextBox1 = Sheets(1).Cells(i, 1) Then
MsgBox Sheets(1).Cells(i, 1) & "-" & Sheets(1).Cells(i, 3) & " " & Sheets(1).Cells(i, 4)
& " " & "Daha nce Byle Bir Numara ile Personel Kayd Yaplm"
TextBox1.SetFocus: TextBox1 = ""
End If
Next i

imdi asl iimizi yapacak olan kaydetme ileminde sra. Bilgilerin kaydedilmesinden nce
baz alanlarn bo geilip geilmemesi kontrol edilmelidir. Eer bosa programc
tarafndan o alanlarn bir ekilde dolu gsterilmesi salanmaldr. Mesela o alana Yok
veya Bilgi Girilmedi yazdrlarak. Programn ilerideki ilemlerinde sorunsuz bir ekilde
almas iin bu gereklidir.
imdi Kaydet butonuna gerekli kodlar yazalm.

lk nce bo alanlar kontrol edilecek.

'Kiisel Bilgiler
Bilgiler kontrol ediliyor eer bunlardan birisi bosa Exit Sub ile Sub dan klyor
If TextBox1 = "" Then MsgBox "Ltfen Personel Numaras Veriniz": TextBox1.SetFocus: Exit Sub
If TextBox2 = "" Then MsgBox "Ltfen T.C Kimlik Numarasn Giriniz": TextBox2.SetFocus: Exit Sub
If TextBox3 = "" Then MsgBox "Ltfen Ad Alann Doldurunuz": TextBox3.SetFocus: Exit Sub
If TextBox4 = "" Then MsgBox "Ltfen Soyad Alann Doldurunuz": TextBox4.SetFocus: Exit Sub
If TextBox5 = "" Then MsgBox "Ltfen Baba Adn Giriniz": TextBox5.SetFocus: Exit Sub
If TextBox6 = "" Then MsgBox "Ltfen Ana Adn Giriniz": TextBox6.SetFocus: Exit Sub
If TextBox7 = "" Then MsgBox "Ltfen Doum Yerini Giriniz": TextBox7.SetFocus: Exit Sub
If TextBox8 = "" Then MsgBox "Ltfen Doum Tarihini Giriniz": TextBox8.SetFocus: Exit Sub
If ComboBox1.Text = "" Then MsgBox "Ltfen Personelin Medeni Halini Seiniz":
ComboBox1.SetFocus: Exit Sub
If ComboBox2.Text = "" Then MsgBox "Ltfen Personelin Cinsiyetini Seiniz":
ComboBox2.SetFocus: Exit Sub
If TextBox9 = "" Then MsgBox "Ltfen Adresi Giriniz": TextBox9.SetFocus: Exit Sub
If TextBox10 = "" Then MsgBox "Ltfen Ev Telefonunu Giriniz": TextBox10.SetFocus: Exit Sub
If TextBox11 = "" Then MsgBox "Ltfen Cep Telefonunu Giriniz": TextBox11.SetFocus: Exit Sub

60
'Dier Bilgiler
If ComboBox3.Text = "" Then MsgBox "Ltfen Personelin alaca Blm Seiniz":
ComboBox3.SetFocus: Exit Sub
If TextBox12 = "" Then MsgBox "Ltfen Maa Belirleyiniz": TextBox12.SetFocus: Exit Sub
If TextBox16 = "" Then MsgBox "e Balama Tarihini Giriniz": TextBox16.SetFocus: Exit Sub
If TextBox17 = "" Then TextBox17 = "Yok"
If TextBox18 = "" Then TextBox18 = "Yok"
If TextBox19 = "" Then TextBox19 = "Yok"
If TextBox20 = "" Then MsgBox " Ltfen Anne Kzlk Soyadn Giriniz": TextBox20.SetFocus: Exit
Sub

Sigorta No ve vergi bilgileri alanlar bo geilmise bu alanlara Yok bilgisi yazdrlyor.

Kayt ilemine devam edelim

'Deikenler tanmlanyor
Dim yer, mesaj As Integer
'bo yer aranyor
yer = 2
While Sheets(1).Cells(yer, 1) <> ""
yer = yer + 1
Wend
'kayt iin kullancdan onay isteniyor
mesaj = MsgBox("-" & TextBox1 & "-" & Chr(13) & TextBox2 & " " & TextBox3 & &
"Yeni Personel Girii Yaplacak Eminmisiniz?", 4 + 32, "Uyar")
If mesaj = 6 Then
'kullancnn cevab Evet ise
'kiisel bilgiler kaydediliyor
Sheets(1).Cells(yer, 1) = TextBox1
Sheets(1).Cells(yer, 2) = TextBox2
Sheets(1).Cells(yer, 3) = TextBox3
Sheets(1).Cells(yer, 4) = TextBox4
Sheets(1).Cells(yer, 5) = TextBox5
Sheets(1).Cells(yer, 6) = TextBox6
Sheets(1).Cells(yer, 7) = TextBox7
Sheets(1).Cells(yer, 8) = TextBox8
Sheets(1).Cells(yer, 9) = ComboBox1.Text
Sheets(1).Cells(yer, 10) = ComboBox2.Text
Sheets(1).Cells(yer, 11) = TextBox9
Sheets(1).Cells(yer, 12) = TextBox10
Sheets(1).Cells(yer, 13) = TextBox11
'dier bilgiler kaydediliyor
Sheets(1).Cells(yer, 14) = ComboBox3.Text
Sheets(1).Cells(yer, 15) = TextBox12
Sheets(1).Cells(yer, 16) = TextBox13
Sheets(1).Cells(yer, 17) = TextBox14
Sheets(1).Cells(yer, 18) = TextBox15
Sheets(1).Cells(yer, 19) = TextBox16
Sheets(1).Cells(yer, 20) = TextBox17
Sheets(1).Cells(yer, 21) = TextBox18
Sheets(1).Cells(yer, 22) = TextBox19
Sheets(1).Cells(yer, 23) = TextBox20
ThisWorkbook.Save bu alma kitabn kaydet
MsgBox "Bilgiler Baaryla Kaydedildi"
'Kayt bittikten sonra yeni bir kayt iin alanlar boaltlyor
textbosalt textbosalt Sub arlyor
Else
'kullancn cevab Hayr ise onay iptal ediliyor
Cancel = True
End If
End Sub

61
yer deikeninin deeri While dngsnn bulduu boluktur. Yani bilgilerin
kaydedilecei alandr.
Sheets(1).Cell(yer,1) = TextBox1 demek, birinci sayfann, birinci stununda grlen
boluk satrnn birinci stununa TextBox1 deki bilgiyi yaz demekdir.
Sheets(1).Cell(yer,2) = TextBox2 demek yine ayn mantkla bu kez ikinci stununa
TextBox2 yi yaz anlamna gelmektedir.

Kaydetme ilemi bittikten sonra alma kitabmz ThisWorkbook.Save komutu ile


kaydediyoruz.

Kod karmaas olmasn diye, alanlar boaltmak iin aadaki Sub yazalm. Daha nceki
konularda sub eklenmesi ve arlmasn grmtk.

Sub textbosalt()
TextBox1 = "": TextBox2 = "": TextBox3 = "": TextBox4 = "": TextBox5 = "": TextBox6
= "": TextBox7 = "": TextBox8 = "": TextBox9 = "": TextBox10 = ""
TextBox11 = "": TextBox12 = "": TextBox13 = "": TextBox14 = "": TextBox15 = "":
TextBox16 = "": TextBox17 = "": TextBox18 = "": TextBox19 = "": TextBox20 = ""
ComboBox1.Text = "": ComboBox2.Text = "": ComboBox3.Text = ""
End Sub

Yukardaki Sub da olduu gibi, VB ve VBA da bir den fazla satr tek satrda aralarna :
konularak yazlabilir.

Sigorta Giri Formu

Bu formdan sigorta girii yaplacak. Ve formun grnts aadaki gibi olacaktr.

lk nce personel numaras girilecek ve textbox tan kldnda o personele ait bilgiler
getirilecektir. Bunun iin TextBox1 in Exit olayna personeli buldurmak iin gerekli olan
kodu yazacaz.
TextBox2 = "": TextBox3 = "": TextBox4 = "": TextBox5 = ""
Dim i, yer As Integer
yer = 2
While Sheets(1).Cells(yer, 1) <> ""
yer = yer + 1
Wend
yer = yer - 1
For i = 2 To yer
If TextBox1 = Sheets(1).Cells(i, 1) Then
TextBox2 = Sheets(1).Cells(i, 3)
TextBox3 = Sheets(1).Cells(i, 4)
TextBox4 = Sheets(1).Cells(i, 19)
TextBox5 = Sheets(1).Cells(i, 20)
End If
Next i

62
Girilen numarann kaytl olup olmadn anlamak iin buldurma ileminden nce metin
kutularnn ilerini boalttrmamz yeterli olacaktr. Daha sonrasnda da bir For dngs
ierisinde TextBox1 deki bilgi If art ile kontrol ettirilip eer deerler eitse bilgiler
getiriliyor.

Kaydetme ilemi iin ise aadaki kodlar yazlacak.

Dim i, yer, mesaj As Integer


yer = 2
While Sheets(1).Cells(yer, 1) <> ""
yer = yer + 1
Wend
yer = yer - 1
For i = 2 To yer
If TextBox1 = Sheets(1).Cells(i, 1) Then
mesaj = MsgBox("Personelin Sigorta Giriini Yapmak stiyormusunuz?", 4 + 32, "Uyar")
If mesaj = 6 Then
Sheets(1).Cells(i, 20) = TextBox5
ThisWorkbook.Save
TextBox1 = "": TextBox2 = "": TextBox3 = "": TextBox4 = "": TextBox5 = ""
Else
Cancel = True
End If
End If
Next i

Sigorta girii yaplmadan nce hangi personelin sigorta giriinin yaplaca TextBox1 de
yazl olan personel numarasna gre bulduruluyor. Bulunan personelin sigorta numaras
alanna, verilen sigorta numaras kaydediliyor. Yeni bir ilem iin textler boaltlyor.

ten karma Formu

Bu formu personelin iine son vermek iin kullanacaz.

Yine personel numaras girilip alandan kldktan sonra personele ait baz bilgiler formda
gzkecek. Eer bulunan personelin iine daha nce son verilmi ise iten k tarihini bir
mesaj ile kullancya bildirmeyi salayalm. Bunun iin TextBox1 in Exit olayna buldurma
kodlarn yazacaz.

63
TextBox2 = "": TextBox3 = "": TextBox4 = "": TextBox5 = ""
Dim yer, i As Integer
yer = 2
While Sheets(1).Cells(yer, 1) <> ""
yer = yer + 1
Wend
yer = yer - 1
For i = 2 To yer
If TextBox1 = Sheets(1).Cells(i, 1) Then
TextBox2 = Sheets(1).Cells(i, 3)
TextBox3 = Sheets(1).Cells(i, 4)
TextBox4 = Sheets(1).Cells(i, 19)
TextBox5 = Sheets(1).Cells(i, 24)
If TextBox5 <> "" Then
MsgBox TextBox5 & Chr(13) & "Bu Personel Zaten ten karlm"
TextBox1 = "": TextBox2 = "": TextBox3 = "": TextBox4 = "": TextBox5 = ""
End If
End If
Next i

ten k tarihi alanna daha nce tanmladmz tarih fonksiyonunu gerektii yerde
getirtebiliriz. Personelin bugn iten ktn varsayarsak eer, textboxn DblClick
olayndan bu fonksiyonu artmamz gerekiyor.

TextBox5 = tarih

k ilemini gerekletirmek iin aadaki kodlar yazalm.

Dim yer, i, mesaj As Integer


yer = 2
While Sheets(1).Cells(yer, 1) <> ""
yer = yer + 1
Wend
yer = yer - 1
For i = 2 To yer
If TextBox1 = Sheets(1).Cells(i, 1) Then
mesaj = MsgBox("Personelin ine Son Vermek zeresiniz Eminmisiniz?", 4 + 32 + 256,
"Uyar")
If mesaj = 6 Then
Sheets(1).Cells(i, 24) = TextBox5
ThisWorkbook.Save
TextBox1 = "": TextBox2 = "": TextBox3 = "": TextBox4 = "": TextBox5 = ""
Else
Cancel = True
End If
End If
Next i

Onay mesajn da kullanc yanllkla Evet i semesin diye varsaylan deer olarak Hayr
(256) atyoruz.

64
Maa ve Avans Belirleme Formu

Formumuzun grnts aadaki gibidir.

Personel numaras girilerek ilgili personelin maa bilgileri getirilecektir. Maa miktarnda
deiiklik varsa veya personel avans alm ise bu formdan bu deerler belirlenebilir. Maa
miktarndan alnan avans dlmeyecek, maa dkmnde hesaplanarak dkm
alnacaktr.
Formumuzun kodlar aadadr.

Private Sub CommandButton1_Click()


If TextBox1 = "" Then MsgBox "Ltfen Personel Numarasn Giriniz": TextBox1.SetFocus:
Exit Sub
Dim yer, i, mesaj As Integer
yer = 2
While Sheets(1).Cells(yer, 1) <> ""
yer = yer + 1
Wend
yer = yer - 1
For i = 2 To yer
If TextBox1 = Sheets(1).Cells(i, 1) Then
mesaj = MsgBox("Maa ve Avans Bilgilerini Gncellemek stiyormusunuz?", 4 + 32,
"Uyar")
If mesaj = 6 Then
Sheets(1).Cells(i, 15) = TextBox4
Sheets(1).Cells(i, 16) = TextBox5
Sheets(1).Cells(i, 17) = TextBox6
Sheets(1).Cells(i, 18) = TextBox7
Sheets(1).Cells(i, 20) = TextBox8
ThisWorkbook.Save
TextBox1 = "": TextBox2 = "": TextBox3 = "": TextBox4 = "": TextBox5 = "":
TextBox6 = "": TextBox7 = "": TextBox8 = ""
Else
Cancel = True
End If
End If
Next i
End Sub

65
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox2 = "": TextBox3 = "": TextBox4 = "": TextBox5 = "": TextBox6 = "": TextBox7
= "": TextBox8 = ""
Dim yer, i As Integer
yer = 2
While Sheets(1).Cells(yer, 1) <> ""
yer = yer + 1
Wend
yer = yer - 1
For i = 2 To yer
If TextBox1 = Sheets(1).Cells(i, 1) Then
TextBox2 = Sheets(1).Cells(i, 3)
TextBox3 = Sheets(1).Cells(i, 4)
TextBox4 = Sheets(1).Cells(i, 15)
TextBox5 = Sheets(1).Cells(i, 16)
TextBox6 = Sheets(1).Cells(i, 17)
TextBox7 = Sheets(1).Cells(i, 18)
TextBox8 = Sheets(1).Cells(i, 20)
End If
Next i
End Sub

Private Sub TextBox4_Change()


On Error Resume Next
TextBox5 = Val(TextBox4 / 30)
TextBox6 = Val(TextBox5 * 2)
TextBox7 = Val(TextBox5 / 8)
End Sub

CommandButton un Click olaynda ilkgili personelin maa bilgileri ve ald avans miktar
kaydediliyor. TextBox4 n Change olaynda yeni maa miktar hesaplanyor. TextBox1 in
Exit olaynda kaytl personelin maa bilgileri grntleniyor. Kayt yoksa textboxlarn
ileri boaltlarak kullanc uyarlyor.

Maa Dkm Formu

Formumuzun grnts aadaki gibi olacaktr.

Hangi aya ait maa dkm yaplacaksa ilk nce o ay seilmeli daha sonra Bilgileri Aktar
butonuna baslarak bilgiler kt alnacak forma aktarlacak. Eer kullanc kenarlk
eklemek isterse Kenarlk Ekle butonu ile aktarlan son bilgiye kadar kenarlk
ekleyebilecek. Programmz bu bilgilere gre yazalm.

66
Formun Activate olaynda aylar ListBox1 e ekleyelim.

ListBox1.Clear
ListBox1.AddItem "Ocak"
ListBox1.AddItem "ubat"
ListBox1.AddItem "Mart"
ListBox1.AddItem "Nisan"
ListBox1.AddItem "Mays"
ListBox1.AddItem "Haziran"
ListBox1.AddItem "Temmuz"
ListBox1.AddItem "Austos"
ListBox1.AddItem "Eyll"
ListBox1.AddItem "Ekim"
ListBox1.AddItem "Kasm"
ListBox1.AddItem "Aralk"

Bilgileri aktar butonu ile seili ayn adn ve personel bilgilerini kt alcak sayfa olan
Sheets(3) e aktaralm.

Private Sub CommandButton3_Click()


If ListBox1.Text = "" Then MsgBox "Ltfen Bir Ay Seiniz": Exit Sub
Dim yer, yer1, i, k As Integer

yer = 1
While Sheets(1).Cells(yer, 1) <> ""
yer = yer + 1
Wend
yer = yer - 1

yer1 = 5
While Sheets(3).Cells(yer1, 2) <> ""
yer1 = yer1 + 1
Wend

For k = 5 To yer1
Sheets(3).Cells(k, 2) = ""
Sheets(3).Cells(k, 3) = ""
Sheets(3).Cells(k, 4) = ""
Sheets(3).Cells(k, 5) = ""
Sheets(3).Cells(k, 6) = ""
Next k
Sheets(3).Cells(2, 2) = ListBox1.Text & " - " & "Ayna Ait Maa Listesi"
yer1 = 5
For i = 2 To yer
Sheets(3).Cells(yer1, 2) = Sheets(1).Cells(i, 3)
Sheets(3).Cells(yer1, 3) = Sheets(1).Cells(i, 4)
Sheets(3).Cells(yer1, 4) = Sheets(1).Cells(i, 15)
Sheets(3).Cells(yer1, 5) = Sheets(1).Cells(i, 20)
Sheets(3).Cells(yer1, 6) = Sheets(1).Cells(i, 15) - Sheets(1).Cells(i, 20)
yer1 = yer1 + 1
Next i
MsgBox Bilgiler Aktarld
End Sub

imdide kullancnn tercihine braklan Kenarlk Eklemeyi yapalm. Burada yine yer ve
while ile satr saysn buldurup, bo satr grene kadar kenarlk eklettireceiz. Bu
yntemin Row-Range yntemine gre daha yava olduunu sylemitik. Programn bu
ksmnda bu yaval net bir ekilde grebilirsiniz.

67
Private Sub CommandButton1_Click()
Dim yer As Integer
yer = 5
While Sheets(3).Cells(yer, 2) <> ""
yer = yer + 1
Wend
yer = yer 1

Buraya kadar ki ilemler bildiimiz gibi dolu yerleri buluyor.

For i = 5 To yer
bir hcrenin tm kenarlar iin ayr ayr tanmlama yaplmak zorundadr.
'1.stun
With Sheets(3).Cells(i, 2).Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Sheets(3).Cells(i, 2).Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Sheets(3).Cells(i, 2).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Sheets(3).Cells(i, 2).Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With

'2.stun
With Sheets(3).Cells(i, 3).Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Sheets(3).Cells(i, 3).Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Sheets(3).Cells(i, 3).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Sheets(3).Cells(i, 3).Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
'3.stun
With Sheets(3).Cells(i, 4).Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
68
With Sheets(3).Cells(i, 4).Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Sheets(3).Cells(i, 4).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Sheets(3).Cells(i, 4).Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With

'4.stun
With Sheets(3).Cells(i, 5).Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Sheets(3).Cells(i, 5).Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Sheets(3).Cells(i, 5).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Sheets(3).Cells(i, 5).Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With

'5.stun
With Sheets(3).Cells(i, 6).Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Sheets(3).Cells(i, 6).Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Sheets(3).Cells(i, 6).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Sheets(3).Cells(i, 6).Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With

69
'6.stun
With Sheets(3).Cells(i, 7).Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Sheets(3).Cells(i, 7).Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Sheets(3).Cells(i, 7).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Sheets(3).Cells(i, 7).Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Next i
End Sub

Wtih End With bloklarnda tanmlanan deerler kenarln ynn belirler. rnein sa,
sol, taban, tavan gibi... Alaca deerler, xlEdgeLeft, xlEdgeTop, xlEdgeRight,
xlEdgeBottom.
bu blokun iine yazlan kodlar ise bu ynlerin zellikleridir. Mesela sa taraftaki izginin
izgi tr, kalnl, rengi gibi bu deerleri istediiniz gibi deitirebilirsiniz. .Weight =
xlMedium gibi.

imdi aktarlan bilgileri silen ve eklenen kenarlklar kaldrmak iin iki tane Sub yazalm.

Bilgileri silmek iin,

Sub bosalt()
Dim yer1, k As Integer
yer1 = 5
While Sheets(3).Cells(yer1, 2) <> ""
yer1 = yer1 + 1
Wend
Sheets(3).Cells(2, 2) = ""
For k = 5 To yer1
Sheets(3).Cells(k, 2) = ""
Sheets(3).Cells(k, 3) = ""
Sheets(3).Cells(k, 4) = ""
Sheets(3).Cells(k, 5) = ""
Sheets(3).Cells(k, 6) = ""
Next k
End Sub

Kenarlklar kaldrmak iin ise u Sub yazalm,

Sub kenarlikaldir()
Dim yer As Integer
yer = 5
While Sheets(3).Cells(yer, 2) <> ""
yer = yer + 1
Wend
yer = yer - 1

70
For i = 5 To yer
Sheets(3).Cells(i, 2).Borders(xlEdgeLeft).LineStyle = xlNone
Sheets(3).Cells(i, 2).Borders(xlEdgeTop).LineStyle = xlNone
Sheets(3).Cells(i, 2).Borders(xlEdgeBottom).LineStyle = xlNone
Sheets(3).Cells(i, 2).Borders(xlEdgeRight).LineStyle = xlNone
Sheets(3).Cells(i, 2).Borders(xlInsideVertical).LineStyle = xlNone
Sheets(3).Cells(i, 2).Borders(xlInsideHorizontal).LineStyle = xlNone

Sheets(3).Cells(i, 3).Borders(xlEdgeLeft).LineStyle = xlNone


Sheets(3).Cells(i, 3).Borders(xlEdgeTop).LineStyle = xlNone
Sheets(3).Cells(i, 3).Borders(xlEdgeBottom).LineStyle = xlNone
Sheets(3).Cells(i, 3).Borders(xlEdgeRight).LineStyle = xlNone
Sheets(3).Cells(i, 3).Borders(xlInsideVertical).LineStyle = xlNone
Sheets(3).Cells(i, 3).Borders(xlInsideHorizontal).LineStyle = xlNone

Sheets(3).Cells(i, 4).Borders(xlEdgeLeft).LineStyle = xlNone


Sheets(3).Cells(i, 4).Borders(xlEdgeTop).LineStyle = xlNone
Sheets(3).Cells(i, 4).Borders(xlEdgeBottom).LineStyle = xlNone
Sheets(3).Cells(i, 4).Borders(xlEdgeRight).LineStyle = xlNone
Sheets(3).Cells(i, 4).Borders(xlInsideVertical).LineStyle = xlNone
Sheets(3).Cells(i, 4).Borders(xlInsideHorizontal).LineStyle = xlNone

Sheets(3).Cells(i, 5).Borders(xlEdgeLeft).LineStyle = xlNone


Sheets(3).Cells(i, 5).Borders(xlEdgeTop).LineStyle = xlNone
Sheets(3).Cells(i, 5).Borders(xlEdgeBottom).LineStyle = xlNone
Sheets(3).Cells(i, 5).Borders(xlEdgeRight).LineStyle = xlNone
Sheets(3).Cells(i, 5).Borders(xlInsideVertical).LineStyle = xlNone
Sheets(3).Cells(i, 5).Borders(xlInsideHorizontal).LineStyle = xlNone

Sheets(3).Cells(i, 6).Borders(xlEdgeLeft).LineStyle = xlNone


Sheets(3).Cells(i, 6).Borders(xlEdgeTop).LineStyle = xlNone
Sheets(3).Cells(i, 6).Borders(xlEdgeBottom).LineStyle = xlNone
Sheets(3).Cells(i, 6).Borders(xlEdgeRight).LineStyle = xlNone
Sheets(3).Cells(i, 6).Borders(xlInsideVertical).LineStyle = xlNone
Sheets(3).Cells(i, 6).Borders(xlInsideHorizontal).LineStyle = xlNone

Sheets(3).Cells(i, 7).Borders(xlEdgeLeft).LineStyle = xlNone


Sheets(3).Cells(i, 7).Borders(xlEdgeTop).LineStyle = xlNone
Sheets(3).Cells(i, 7).Borders(xlEdgeBottom).LineStyle = xlNone
Sheets(3).Cells(i, 7).Borders(xlEdgeRight).LineStyle = xlNone
Sheets(3).Cells(i, 7).Borders(xlInsideVertical).LineStyle = xlNone
Sheets(3).Cells(i, 7).Borders(xlInsideHorizontal).LineStyle = xlNone
Next i
End Sub

InsideVertical ve InsideHorizantal zellii hcrenin iindeki dikey veya yatay izgilerdir.


Dier zellikler ise kenarlklar eklerken kullandmz sa, sol, tavan ve taban izgileridir.

Kenarlk ekleme ve kaldrma ilemleri balk hcrelerinin yalnzca taban izgilerini ekler
veya kaldrr.

Bu formun asl amac olan kt iini gerekletirelim.

Private Sub CommandButton3_Click()


If Sheets(3).Cells(5, 2) = "" Then MsgBox "Bilgiler Aktarlmam": Exit Sub
Sheets(3).PrintOut
MsgBox "Bilgiler Yazcya Gnderildi"
kenarlikaldir kenarlkkaldr Sub arlyor
bosalt bosalt Sub arlyor
End Sub

71
Birinci satrda sayfada bilgi olup olmad kontrol ediliyor. Eer cells(5,2) bosa, yani bu
sayfada bilgi yoksa mesaj verilerek kullanc uyarlyor ve dng kontrol ifadesi olan Exit
Sub kullanlarak Sub dan klyor.

PrintOut komutu bir Excel komutudur. Kullanm ise yukardaki rnek kodda verilmitir.
Sayfay yazcya gndermeden nce bask nizleme yapmak isteyebilirsiniz. Bunun iin
PrintPreview komutunu kullanabilirsiniz. Bu komutu kullanabilmeniz iin nizleme
yaplacak sayfann Visible zelliinin True olmas gerekmektedir. Gizlenmi bir sayfann
nizlenmesi hibir zaman yaplamaz. Bu durum PrintOut komutu iin sz konusu deildir.
Gizli bir sayfa dorudan printout edilebilir.

lk nce kenarlklar kaldrmamzn sebebi, buldurma ilemini bo olan satra kadar


yaptmz iin ilk nce bo olan satra kadarki kenarlklar kenarlikkaldir Sub n ararak
kaldryoruz daha sonra hcrelerdeki bilgileri bosalt Sub n ararak siliyoruz.

Form tekrar alp, bilgiler gnderildii zaman ayn bilgiler alt alta yazlacaktr. Programc
olarak kendimizi gvenceye almak iin bu form kapatlrken de kenarlklar ve hcrelerdeki
bilgileri kt sayfasndan kaldrlmak gerekir. Bunun iin formun Terminate olayna
aadaki kodlar yazmalyz.

kenarlikkaldir
bosalt

Her ikiside bir Sub (alt program) dr. Daha nce alt programlar tanmladmz iin burada
uzun uzun ayn kodlar yazmamza gerek kalmyor.

Bilgi Ekran Formu

irkette toplam ka personel var, ka sigortal ka sigortal deil, seili blmde ka


personel var ve ka personel sigortal gibi bilgilerin grlebilecei bir form hazrlayalm.

Formumuzun grnts aadaki gibi olsun.

Formun Activate olayna aadaki kodlar yazlarak irkette bulunan blmler ListBox1 e
listelenecek ve irkette toplam ka personel ve sigortal personel saysn bulduralm.

Dim yer, yer1, i, toppersonel, topsigortali As Integer


'Blm bulmak iin
yer = 2
While Sheets(2).Cells(yer, 3) <> ""
yer = yer + 1
Wend
yer = yer - 1

72
'Personel bulmak iin
yer1 = 2
While Sheets(1).Cells(yer1, 1) <> ""
yer1 = yer1 + 1
Wend
yer1 = yer1 - 1

Listbox a blm adlar listeleniyor.

For i = 2 To yer
ListBox1.AddItem Sheets(2).Cells(i, 3)
Next i
toppersonel = 0
topsigortali = 0

For i = 2 To yer1
toppersonel = toppersonel + 1 toplam personel says bulunuyor
If Sheets(1).Cells(i, 21) <> "Yok" Then arta bal olarak toplam sigortal says bulunuyor.
topsigortali = topsigortali + 1
End If
Next i
Label2.Caption = toppersonel label a toplam personel says yazlyor
Label6.Caption = topsigortali label a toplam sigortal says yazlyor

Kodun iinde iki tana saya kullanlmtr. Bunlarn birisi (toppersonel) toplam personel
saysn bulmak iin dieri (topsigortali) ise toplam sigortal personel saysn bulmak iin
kullanlmtr.

Toplam bir deer istenildii zaman (mesela toplam personel says gibi) belirli aralklar
arasndaki bir dngde sayac tutularak sonuca varlabilir.
Mesela,

For i = 2 to yer
sayac = sayac+1
Next i
MsgBox sayac

Bu rnekte 2 den yer e bir dng alyor ve sayac deikenine dng her dndnde
bir fazlas verilerek toplam ka kayt olduu bulunuyor.

Seilen blmde ka personel ve ka sigortas yaplm personel olduunu ise ListBox1 in


Click olayna yazlacak kodlar ile bulabiliriz.

Dim yer, i, pers, sigorta As Integer


yer = 2
While Sheets(1).Cells(yer, 1) <> ""
yer = yer + 1
Wend
yer = yer - 1

pers = 0 dngye girmeden nce sayaclar sfrlanyor


sigorta = 0
For i = 2 To yer
If ListBox1.Text = Sheets(1).Cells(i, 14) Then eer seilen blm cells(i,14) deki
pers = pers + 1 blmlere eitse pers deikeninin deeri 1 arttrlyor
End If
If ListBox1.Text = Sheets(1).Cells(i, 14) And Sheets(1).Cells(i, 21) <> "Yok" Then
sigorta = sigorta + 1 seilen blm cells(i,14) e eit ve cells(i,21) in deeri Yok
tan farkl ise yani sigortas yaplmsa sigorta deikenin deeri bir arttrlyor
End If
Next i
73
Label4.Caption = pers label a blmdeki personel says yazlyor
Label8.Caption = sigorta label a blmdeki sigortal personel says yazlyor

Programmz buraya kadar kullanlabilir hale getirdik. Bundan sonrasnda ise programn
alnda ve kapannda gerekleecek olaylar programzda uygulayarak greceiz.
lk nce alma kitabmza bir alma sayfas daha ekleyelim ve ad Ana Menu olsun.
Tasarmn biz aadaki resimde grld gibi yaptk siz isteinizse gre
uyarlayabilirsiniz. Programa aadaki tasarm varsayarak devam ediyoruz

Sayfa zerinde bulunan birinci ekil tklandnda programmz, kendi hazrladmz men
tasarml halini alacak, ikinci ekil tklandnda ise men modu kapatlp Ana Men formu
arlacaktr.
lk nce tarih fonksiyonu iin hazrladmz Module1 ierisine girerek iki tane Sub
(altprogram) yazalm. Birincisinin ad ozelmenu, dieri ise formmenu olsun.
alma sayfas zerinde bulunan zel Men ekline sa tklayarak Makro Ata seeneini
seelim. Alan Makro Ata penceresinden, ozelmenu makrosunu seip Tamam tklatarak
bu eklin makro atamasn sona erdirelim.
Ayn ilemi Form Men iin tekrarlayalm ve Makro Ata penceresinden formmenu
makrosunu seelim.

74
Makro atamalarn bitirdikten sonra bu makrolarn kodlarn yazalm.

Module1 in General Declarations ksmna aadaki deikenleri tanmlayalm.

Dim EskiMenuCubugu
Dim MenuParca
Dim YeniMenuCubugu
Dim kontrollerim

ozelmenu makrosunun kodlarn aadaki gibi yazalm.

alma kitabn tam ekran yapar


Application.DisplayFullScreen = True

Tam ekran yapld zaman grnen Tam Ekran Kapat ara ubuunu gizler
Application.CommandBars("Full Screen").Visible = False

Biimlendirme ara ubuunu gizler


Application.CommandBars("Formatting").Visible = False

Standart ara ubuunu gizler


Application.CommandBars("Standard").Visible = False

Application.CommandBars komutu bir Excel komutudur ve manas, uygulamada


bulunan komut ubuklar yani ara ubuklarnn zelliklerini biimlendirmeye yarar.
Burada belirtilen ara ubuklarnn grnmezlikleri salanmtr.

Aktif pencerenin balk ubuu, yatay ve dikey kaydrma ubuklarn kaldr


With ActiveWindow
.DisplayHeadings = False balk ubuu
.DisplayHorizontalScrollBar = False yatay kaydrma ubuu
.DisplayVerticalScrollBar = False dikey kaydrma ubuu
End With

EskiMenuCubugu, bir men ubuu olarak tanmlanyor. WorkSheets Bar yerine bir index
numarasda verebilirsiniz.
On Error GoTo hata hata oluursa hata: satrna git
Set EskiMenuCubugu = CommandBars("Worksheet Menu Bar").Controls

Burada eski menye ait tm elemalar gizleniyor.


For Each MenuParca In EskiMenuCubugu
MenuParca.Visible = False
Next

Yeni men ubuu tanm yaplyor.


CommandBars.Add komutu ile yeni bir ara ubuu tanm yaplyor ve zellikleri
belirleniyor. Ad, pozisyonu, men olarak davranp davranmayaca ve geici olup
olmamas gibi zellikleri.
Set YeniMenuCubugu = CommandBars.Add(Name:="YeniMenu", Position:=msoBarTop,
MenuBar:=True, temporary:=True)

Tanmlanan YeniMenuCubugu nun dier zellikleri ise bu ekilde belirleniyor.


With YeniMenuCubugu
.Visible = True grnr olmas
.Protection = msoBarNoMove tanamaz olmas salanyor.
End With

75
Tanmlanan men ubuuna menler eklemek iin baz kodlar ve men elemanlarna
tklandnda altrlacak kodlar iin ise Sub lar gerekmektedir. Mesela, menden Yeni
Personel Kart seildiinde dorudan yenikart.Show komutu verilemez. O yzden bu tr
tanmlamalar birer altprogram yazarak yapacaz. Kodlarn Module1 deki kodlarla
karmamas iin yeni bir modl ekleyelim ve buraya her men eleman iin birer Sub
yazalm.

Sub yeni_kart()
yenikart.Show
End Sub

Sub sigorta()
sigortagiris.Show
End Sub

Sub sabit()
sabitler.Show
End Sub

Sub maas_dokum()
maasdokum.Show
End Sub

Sub isten_cikar()
istencikar.Show
End Sub

Sub bilgi_ekrani()
bilgiekrani.Show
End Sub

Sub avanslar()
avans.Show
End Sub

Sub dosyakaydet()
ThisWorkbook.Save
End Sub

Men tanmlamasna kaldmz yerden devam edelim. Yeni men ubuunun tanmndan
sonra ise men tasarmn yapalm. Aadaki kodlar bu ii zecektir.

YeniMenuCubugu na kontrol ekleyerek yani yeni bir men ekleyip kontrollerim


deikenini yeni bir men olarak tanmlyoruz.
Set kontrollerim = YeniMenuCubugu.Controls.Add(Type:=msoControlPopup, ID:=1)
kontrollerim mensnn zellikleri belirleniyor.
With kontrollerim
Mennn bal belirleniyor.
.Caption = "&Personel zel Men"

Menye yeni bir eleman ekleniyor.


.Controls.Add(Type:=msoControlButton, before:=1).Caption = "Normal Menye Dn"

Menye eklenen elemann varsa iconu belirleniyor.


.Controls("Normal Menye Dn").FaceId = 34

Elemana komut veriliyor.


.Controls("Normal Menye Dn").OnAction = "ozelmenukapat"

76
Men eleman dier men elemanlaryla bir izgi ile ayrlyor.
.Controls("Normal Menye Dn").BeginGroup = True

.Controls.Add(Type:=msoControlButton, before:=1).Caption = "Dosyay Kaydet"


.Controls("Dosyay Kaydet").OnAction = "dosyakaydet"

.Controls.Add(Type:=msoControlButton, before:=1).Caption = "Bilgi Ekran"


.Controls("Bilgi Ekran").OnAction = "bilgi_ekrani"

.Controls.Add(Type:=msoControlButton, before:=1).Caption = "irket Tanmlar"


.Controls("irket Tanmlar").OnAction = "sabit"

.Controls.Add(Type:=msoControlButton, before:=1).Caption = "ten karma"


.Controls("ten karma").OnAction = "isten_cikar "

.Controls.Add(Type:=msoControlButton, before:=1).Caption = "Maa Dkm"


.Controls("Maa Dkm").OnAction = "maas_dokum"

.Controls.Add(Type:=msoControlButton, before:=1).Caption = "Maa ve Avans"


.Controls("Maa ve Avans").OnAction = "avanslar"

.Controls.Add(Type:=msoControlButton, before:=1).Caption = "Sigorta Girii"


.Controls("Sigorta Girii").OnAction = "sigorta"

.Controls.Add(Type:=msoControlButton, before:=1).Caption = "Yeni Personel Kart"


.Controls("Yeni Personel Kart").FaceId = 329
.Controls("Yeni Personel Kart").OnAction = "yeni_kart"
End With
hata:

FaceId, men elemann simge ile temsil eden, bir icon belirlememizi salar. Simgeler
index numaralar ile arlrlar.

BeginGroup, farkl grevlere sahip men elemanlarn biz izgi ile ayrmaya yarar. Bir nevi
gruplandrma yapar.

Men elemanlarnn tanm sondan balanarak yaplr.

Mennn son eleman olan Normal Menye Dn seenei tklandnda Module1


modlnn ozelmenukapat alt program arlyor. Bu alt programn kodlar aada
verilmitir.

77
Application.DisplayFullScreen = False
Application.CommandBars("Formatting").Visible = True
Application.CommandBars("Standard").Visible = True
With ActiveWindow
.DisplayHeadings = True
.DisplayHorizontalScrollBar = True
.DisplayVerticalScrollBar = True
End With
On Error Resume Next
Set EskiMenuCubugu = CommandBars("Worksheet Menu Bar").Controls
For Each MenuParca In EskiMenuCubugu
MenuParca.Visible = True
Next
CommandBars("YeniMenu").Delete
Application.CommandBars("Worksheet Menu Bar").Controls(11).Delete

zel menye gei iin kullanlan baz kodlarn tam tersi olan kodlar, normal menye
gei iin kullanlmaktadr. rnein, zel mende kullanlan False deeri burada True
deerini alarak ilemlerini gerekletirmektedir.

Yeni men ubuuna YeniMenu olarak eklenen men, burada


CommandBars(YeniMenu).Delete komutlar ile silinmektedir.

Formmenu makrosunun kodlar ise aadaki gibidir.

Sub formmenu()
ozelmenukapat
anamenu.Show
End Sub

ozelmenu modundan formmenu moduna geilecei zaman ilk nce ozelmenu


kapatlmaldr daha sonra formmenu moduna geilmelidir. Bu yzden ilk kodumuz
ozelmenukapat alt programn artmak olmutur.

Men tasarmlar bittikten sonra program aldnda gerekleecek olaylar anlatalm.


Excel in alnda Auto_Open makro alt program alr. Bu yzden alta
gerekleecek kodlar buraya yazacaz.

Auto_Open alt programn her hangi bir modl altna yazabilirsiniz.


Yazm,

Sub Auto_Open ()
Komutlar
End Sub

Programmzn alnda ana sayfa hari tm sayfalar gvenlik ve grn asndan


gizleyelim.
Auto_Open nn kodlar,

Sub auto_open()
For i = 1 To 3
Sheets(i).Visible = False
Next i
With ActiveWindow
.DisplayHeadings = False
.DisplayHorizontalScrollBar = False
.DisplayVerticalScrollBar = False
.DisplayWorkbookTabs = False
End With
End Sub

78
Yukardaki dngde 1 ile 3 arasnda bir dng kurulmutur. Bu dng, ilk alma
sayfasn gizler. Aktive olan pencerenin zellikleri ise, balk ubuu, yatay kaydrma
ubuu, dikey kaydrma ubuu ve sayfa sekmelerini kaldrmaktadr.

Excel in kapatlmas annda ise Auto_Close makro alt program alr.


Kullanm,

Sub Auto_Close ()
Komutlar
End Sub

Program kapatlrken, alta yaptmz deiiklikleri dzeltelim. Bunun iin aadaki


kodlar yazalm.

Sub auto_close()
With ActiveWindow
.DisplayHeadings = True
.DisplayHorizontalScrollBar = True
.DisplayVerticalScrollBar = True
.DisplayWorkbookTabs = True
End With
End Sub

Aktif olan pencerenin balk ubuu, sayfa sekmeleri vs. tekrar yerlerine getiriliyor.

Programmzn tm kodlar ve ayarlar bitmitir. imdi Excel dosyamz kaydedip program


kapatalm ve tekrar aalm. Programmz artk kullanlabilir hale gelmitir.

ETL RNEKLER

rnek 1: Otomatik Toplam

Hcreler zerinde bir Change olay gerekletiinde belirtilen alandaki saylar


hesaplanacak ve belli bir aralk kadar alt satrna sonu yazlacak. Yani hibir kontrol
eleman kullanmadan direkt hcreler zerinden ilemlerimizi gerekletireceiz.

Yaplacak olan ilemler 1 ve 2. stunlarda gerekleecek. Eer girilen saylar 500 den
kkse girilen saynn rengi krmz deil ise kahverengi olacak. Toplamlar eer cells(1,5)
ve cells(2,5) kk ise renkleri deiir, deil ise farkl bir renk alrlar.
imdid ilgili kodlar yazmak iin Code Editor aalm. Project Explorer penceresinden
Sayfa 1(Sayfa 1) e ift tklayarak bu sayfaya ait kod penceresine ulaalm. Buradan
Generalt yazan alr kutuyu aarak WorkSheet i seelim. Karmza alma sayfasna ait
Selection_Change olaynn kod yazma prosedr gelecek. Buraya yazlan kodlar hcreler
zerinde gezinti yaplrken alrlar. Yani hcrelerin Change olaylarnda gerekleir.
Buraya yazlan kodlarla tm hcreler kontrol edilebilecei gibi tek bir hcrede kontrol
edilebilir.

Bu rnein kodlar aadadr.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)


yer = 2
While Cells(yer, 1) <> ""
yer = yer + 1
Wend
yer1 = 2
While Cells(yer1, 2) <> ""
yer1 = yer1 + 1
Wend
79
For i = 2 To yer
Cells(i, 1).Font.ColorIndex = 1 hcre rengi deitiriliyor.
If Cells(i, 1) < 500 Then girilen say 500 den kkse
Cells(i, 1).Font.ColorIndex = 3 yaz rengi deitiriliyor
Else
Cells(i, 1).Font.ColorIndex = 9 deil ise baka bir renk veriliyor
End If
toplam = toplam + Cells(i, 1) saylar toplanyor ve deikene atanyor
Next i

Cells(yer + 1, 1) = "" yer den 1 fazla olan hcrenin ii boaltlyor


Cells(yer + 2, 1) = "" yer den 2 fazla olan hcrenin ii boaltlyor
Cells(yer + 3, 1) = toplam yer in fazlasna bulunan toplam deer yazlyor
If toplam < Cells(1, 5) Then eer toplam cells(1,5) ten kkse
Cells(yer + 3, 1).Font.ColorIndex = 3 toplam n rengi deitiriliyor
Else
Cells(yer + 3, 1).Font.ColorIndex = 8 deil se baka bir renk veriliyor
End If
For j = 2 To yer1 ayn ilemler ikici stun iin tekrarlanyor
Cells(j, 2).Font.ColorIndex = 1
If Cells(j, 2) < 500 Then
Cells(j, 2).Font.ColorIndex = 3
Else
Cells(j, 2).Font.ColorIndex = 9
End If
toplam1 = toplam1 + Cells(j, 2)
Next j
Cells(yer1 + 1, 2) = ""
Cells(yer1 + 2, 2) = ""
Cells(yer1 + 3, 2) = toplam1
If toplam1 < Cells(2, 5) Then
Cells(yer1 + 3, 2).Font.ColorIndex = 3
Else
Cells(yer1 + 3, 2).Font.ColorIndex = 8
End If
Cells(1, 7) = toplam + toplam1 cells(1,7) hcresine genel toplam yazdrlyor
If Cells(1, 7) >= Cells(1, 11) Then
Cells(1, 7).Font.ColorIndex = 3
Else
Cells(1, 7).Font.ColorIndex = 9
End If
End Sub

rnek 2: Hesaplama ve Dosyalama

Sayfamzn ierisinde aadaki ekildeki gibi bir okuldaki rencilerin notlarnn


hesaplanaca bir liste bulunmaktadr. Burada yan tarafta bulunan dmeye basld
anda rencilerin ortalamalar ve durumunun nasl olduunu yan taraftaki hcrelere
yazdrmasn salayacaz.

80
Ortalamay ve Durumu 1,6 ve 1,7 hcrelerine yazdracaz ve balklarn da kodlar ile
yazacaz. Eer yeni bir kayt daha eklenirse hesapla butonuna tekrar baslp tekrar
hesaplatacaz ve burada bulunan bilgileri C: srcsnn ierisine geenler ve kalanlar
adl iki ayr metin dosyasna gndereceiz.

Hesapla butonuna yazlacak kodlar aada verilmitir.

Sub hesapla()

Open "c:\gecenler.txt" For Output As #1 Takma ad #1 olan bir geenler adl txt alyor.
Open "c:\kalanlar.txt" For Output As #2 Takma ad #2 olan bir kalanlar adl txt alyor.

yer = 2 lk renci 2 satrdan balad iin dngnn balang deeri 2 alnd


While Cells(yer, 1) <> "" Cells(2,1) boluktan farkl iken
yer = yer + 1 yer adl deikeni bir defa arttryoruz
Wend eer art devam ediyorsa baa dn
yer = yer 1 Dng her zama bir fazla dneceinden bir eksilterek gerek sayy bulduk.

For i = 2 To yer ilk rencinin olduu satrdan renci saysna kadar bir dng kuruldu,

ad$ = Cells(i, 2) ad$ deikenine ilk rencinin ad aktarld


soy$ = Cells(i, 3) soy$ deikenine ilk rencinin soyad aktarld,
v = Cells(i, 4) v deikenine ilk rencinin vize notu aktarld,
f = Cells(i, 5) f deikenine ilk rencinin final notu aktarld,
o = v * 0.4 + f * 0.6 o deikenine v ile f deikeni arasndaki ilemin sonucu aktarld,

Cells(1, 6) = "Ortalama" 1,6 hcresine sabit olan Ortalama bal yazld


Cells(1, 7) = "Sonu" 1,7 hcresine sabit olan Sonu bal yazld.
Cells(i, 6) = o 2,6 hcresine o adl deikenin ierii aktarld.(Ortalama)
sat$ = ad$ + "*" + soy$ + "*" + Str(v) + "*" + Str(f) Bilgiler aralarnda * ile birletirildi

If (f >= 60) And (o >= 60) Then Gerekli art belirtiliyor

Print #1, sat$ art gerekleirse #1 dosyasna sat$daki bilgileri yaz,


Cells(i, 7) = "Geti" 2,7 hcresine art doruysa Geti yaz,

Else art doru deilse

Print #2, sat$ #2 dosyasna sat$daki bilgileri yaz


Cells(i, 7) = "Kald" 2,7 hcresine ise art doru deilse Kald yaz,

81
End If art bitimi
Next i Dng tekrar

Close #1 Alan #1 dosyalarn kapatlmas


Close #2 Alan #2 dosyasnn kapatlmas

End Sub

Programda ncelikle butona basld anda aadaki ekran olumaldr.

ekilde de grld gibi Ortalama ve Sonu balklar kendiliinde yazld ve tm


rencilere ait ortalamalarda hesapland.

Programdaki baz komutlar aklayacak olursak , bataki iki satr kullanacamz


dosyalarn ald blmdr. Ka adet dosya aacaksak burada belirtmeliyiz. Unutmadan
her alan dosyann mutlaka kapanmas lazm , bunun iin programn sonunda Close
komutu ile alan dosyalar kapatmalyz. Sonraki 5 satr ise While dngs ile renci
saysn bulmak iin kullanlmtr.Burada dng bo hcreyi grene kadar dnyor ve
grd anda dngden kyor.

For dngs ise ilk rencinin balad satrdan balayarak renci says kadar yani yer
deikeni kadar satrlar teker teker tarayacak ta ki dng deikeni olan i renci
saysndan byk veya eit olana kadar. Dngnn ierisinde i,2 elemanl rencinin
vizesinin %30 ile finalinin %70 i toplanarak ortalama hesaplanyor ve i,6 hcresine
yazlyor. Burada bir art belirtilmi ve final notu byk ise 60dan veya ortalama 60dan
byk ise i,7 hcresine Geti yazyor ve bu renciyi (i numaral renci) gecenler.txt
dosyasna bilgilerinin arasnda * iareti olarak yazyor. Bu artn gereklememesi
durumunda elseden sonraki komutlar alyor ve i,7 hcresine Kald , ve bu renciyi
yine bilgilerinin arasnda * olacak ekilde kalanlar.txt dosyasna kaydediyor. Dng tekrar
bir dndnde i deikeni 3 oluyor ve ayn ilemler 3c satr iin yazlyor. Alt tarafa
yeni bir renci eklendii zaman tekrar butona tklanarak yeni eklenen rencide
hesaplara katlm olur.

Bu rnekte Excel de ki bilgilerin nasl TXT (Metin Dosyas)na gnderildiini renmi


oldunuz. Gndermek istediiniz dosya uzants blmnde rnein kalanlar.txt yerine
kalanla.doc yazarsanz bilgileriniz Word dosyasna kaydedilecektir.

82
rnek 3: Dosyadan Bilgi Alma

Bu rnekte Excel e metin dosyasndan bilgi getirmeyi reneceiz. Metin dosyamz ve


ierisindeki bilgiler aadaki gibi olduunu varsayalm.

Grld gibi dosyamzn ierisindeki bilgilerin aralarnda * iareti olarak kayt


edilmiler ve bizde bu iarete gre bilgileri paralayarak Excel e aktaracaz. Excel
sayfanzn zerine bir makro buton oluturarak bunun adn al veya getir gibi bir isim
verelim. Daha sonra Aralar/Makrolardan kaydettiiniz makroyu aarak kod ksmndaki
tanmlamalarn altna veya tanmlar silerek aadaki kodlar butonun click ksmna
yazalm.

Sub trt()
Cells(1, 1) = "Ad" Sabit balklar yazdrlyor.
Cells(1, 2) = "Soyad" Sabit balklar yazdrlyor.
Cells(1, 3) = "Vize" Sabit balklar yazdrlyor.
Cells(1, 4) = "Final" Sabit balklar yazdrlyor.
Cells(1, 5) = "Ortalama" Sabit balklar yazdrlyor.

Open "c:\bilgi.txt" For Input As #1 C: srcsnde bilgi.txt dosyasn okumak iin ayor.
i = 2 Bilgilerin yazlaca balang satr hcresi,

While Not EOF(1) Dosyann sonuna gelmedii srece


ad$ = "" ad$ deikenini boalt
soy$ = "" soy$ deikenini boalt
v$ = "" v$ deikenini boalt
f$ = "" f$ deikenini boalt
Input #1, sat$ #1 adl dosyadan sat$ deikeni ile bilgi okuyor.

yer = 1 Paralamann balayaca deer


While Mid$(sat$, yer, 1) <> "*" sat$daki 1,1 *dan farkl iken
ad$ = ad$ + Mid$(sat$, yer, 1) ad$a bir harf daha ekliyor
yer = yer + 1 yeri bir arttracaz
Wend dngden baa dn,
yer = yer 1 Dngnn en sonundaki fazla sayy azaltmak iin kullanld.

While Mid$(sat$, yer, 1) <> "*" sat$daki 1,1 *dan farkl iken
soy$ = soy$ + Mid$(sat$, yer, 1) ) soy$a bir harf daha ekliyor
83
yer = yer + 1 art doru ise deikeni bir arttryor.
Wend Deilse
yer = yer + 1 Bir sonra ki paralama iin deikeni tekrar bir arttryor.

While Mid$(sat$, yer, 1) <> "*" sat$daki 1,1 *dan farkl iken
v$ = v$ + Mid$(sat$, yer, 1) v$a bir karakter daha ekliyor
yer = yer + 1 art doru ise deikeni bir arttryor.
Wend Deilse
yer = yer + 1 Bir sonra ki paralama iin deikeni tekrar bir arttryor.

For j = yer To Len(sat$) O anki yer deki deerin sat$daki karakter saysna kadar,
f$ = f$ + Mid$(sat$, j, 1) f$ deikenine sat$n yerinci karakterinden 1 adet ald,
Next j Dng tekrar kontrol iin baa dnd,
Cells(i, 1) = ad$ 2,1 hcresine ad$ daki deeri yazd ,
Cells(i, 2) = soy$ 2,2 hcresine soy$ daki deeri yazd ,
Cells(i, 3) = v$ 2,3 hcresine v$ daki deeri yazd ,
Cells(i, 4) = f$ 2,4 hcresine f$ daki deeri yazd ,
o = Val(v$) * 0.4 + Val(f$) * 0.6 Ortalamay hesaplad,
Cells(i, 5) = o 2,5 hcresine ortalamay yazd,
i = i + 1 Bir sonraki paralama iin deikenini bir arttrd,
Wend Dngy kontrol et ve baa dn,
Close #1 Alan #1 dosyas kapatld,
End Sub Program sonu,

rnek 4: Banka deme Plan Hesaplamas

Bir iyerinde eitli bankalara yaplan demeler fatura numaras , banka ad ve denen
cret sayfamzn sol kesinde kark olarak bulunmaktadr. Yani bir bankadan birka
defa yazlm ve her defasnda , farkl fatura numaralar ile farkl demeler kark olarak
yerletirilmi. Biz butona yazacamz bir makro kodu ile otomatik olarak sayfann sa
tarafnda bir yere her banka adndan birer tane ve bu bankalarn karlarna da o
bankadan ka tane varsa adedini ve denen fatura toplamn yazdralm. Sayfamzn ilk
grnts aadaki gibidir.

84
Butona tklanld zaman (1,10) hcresine banka ad , (1,11) hcresine fatura toplam ve
(1,12) hcresine banka saysn yazdracaz.

Sayfamza bir makro buton alarak yeni bir makro kaydediyoruz ve ierisine aadaki
kodlar yazyoruz.

Sub bul()
Cells(1, 10) = Cells(2, 2) Sol taraftaki lk banka adn (1,10)a yazdryoruz.
yer = 2 Sa tarafa bulunan bankalarn yazlaca satr deikeni.

For i = 3 To 21 Sol taraftaki bilgileri taramak iin.


bulundu = 0 Yeni bir banka bulunduu takdirde deiecek olan deiken.
For j = 1 To yer 1 Sa taraftaki bilgileri taramak iin.
If Cells(i, 2) = Cells(j, 10) Then Eer 3,1 eitse 1,10 a
bulundu = 1 Bulundu deikenini 1 yap.
End If arttan k.
Next j Dngnn bana dn.
If bulundu = 0 Then Eer yeni bir banka var ise.
Cells(yer, 10) = Cells(i, 2) Sol tarafa o bankay yaz.
yer = yer + 1 Sol taraftaki satr deikenini bir arttryoruz.
End If arttan k.
Next i Dngnn bana dn.

For j = 1 To yer 1 Banka says ve fatura toplam bulmak iin.


Top = 0 Top deikeninin ieriini 0 yap.
kac = 0 Kac deikeninin ieriini 0 yap.
For i = 2 To 21 Karlatrma iin sol tarafn taranmas.
If Cells(j, 10) = Cells(i, 2) Then Eer 1,10 eitse 2,2 ye
kac = kac + 1 kac deikenini bir arttr.nk bir tane buldu.
Top = Top + Cells(i, 3) Top deikenine de 2,3 hcresini ekletiyoruz.
End If arttan k.
Next i Dngnn bana dn.
Cells(j, 11) = Top (1,11) hcresine top deikeninin ieriini.
Cells(j, 12) = kac (1,12) hcresine kac deikeninin ieriini.
Next j Dngnn bana dn.

End Sub

Programda ilk banka direk olarak sol tarafa alnyor ve dier karlatrmalar bu bankaya
gre yaplyor. Yani sa taraftaki dngn gsterdii deer sol taraftaki dngnn
gsterdii bankaya eitse bankann saysn arttryor ve faturasn nceki fatura ile
topluyor . Sa taraftaki dngnn belirtmi olduu banka , sa taraftaki bankaya eit
deilse yeni bir banka bulundu demektir ve sol tarafa yer deikeninin deerindeki satra
yeni banka yazlyor , says ve fatura miktar hesaplanyor.
Butona tklandktan sonra sa tarafa 1,10 cu hcreden itibaren birer tane banka ad ve
says gelecek ve ilem tamamlanm olacak. Butona tkladktan sonra ki grnt

85
aadaki gibi olmaldr.

Bu rnekte , birden fazla kayt zerinde ayn ada sahip elemanlar tekrarsz birer tane
bulmay rendik. rnein bir listenin ierisinde ad Ahmet olanlardan ka tane var
denildii zaman bu yntem kullanlabilir.

rnek 5: arpm Tablosu

Bu rnekte arpm tablosunun hesaplanmasn makro ile yapacaz. Bunun iin ilemlerde
kullanlacak olan saylar nceden sayfaya girilmi olacak ve yazacamz makro sadece
her arpmn sonucunu yazacaktr. Eer istenirse sayfa komple boaltlp gerekli saylar ve
tanmlamalarda kodlar ile yaplabilir. Sayfamzn butona baslmadan nceki grnts
aadaki gibi olmaldr.

Grld gibi arpm tablosu iin her ey nceden yazlm sadece sonularn gelecei
hcreler bo. Buton tkland zaman bu bo hcrelere hesaplanan deerler gelecektir.
rnein (2,3) hcresine (2,1) ile (2,2) hcrelerinin arpm sonucu olan 1 deeri
yazlacaktr.

Program kodlar gayet ksa ve sade. Bu rnekte daha ok dnglerin alma prensibini
kavrama yeteneiniz ykselecektir.

Sayfamza bir Buton alarak yeni bir makro kaydedelim ve makromuza bir isim verelim.
rnein bul adl makro.Programn kodlar u ekildedir.

Sub Bul()
For i = 2 To 11
Cells(i, 3) = Cells(i, 1) * Cells(i, 2)
Cells(i, 6) = Cells(i, 4) * Cells(i, 5)
Cells(i, 9) = Cells(i, 7) * Cells(i, 8)
Cells(i, 12) = Cells(i, 10) * Cells(i, 11)
Cells(i, 15) = Cells(i, 13) * Cells(i, 14)
Next i
For j = 13 To 22
Cells(j, 3) = Cells(j, 1) * Cells(j, 2)
86
Cells(j, 6) = Cells(j, 4) * Cells(j, 5)
Cells(j, 9) = Cells(j, 7) * Cells(j, 8)
Cells(j, 12) = Cells(j, 10) * Cells(j, 11)
Cells(j, 15) = Cells(j, 13) * Cells(j, 14)
Next j
End Sub

Programda 2 adet dng kullanld. Birinci dng belere kadar arpm sonucunu bulmak
iin satrlar taryor , ikinci dng ise belerden sonrakiler iin alt taraftaki satrdan
balayarak satrlar taryor. Alt taraftaki stunlar da , belerden sonra yan taraftan devam
etse idi tek dng yeterli olacaktr. Bu durumda da tek dng ile yaplabilirdi fakat biraz
kark olurdu. Programn buton tklandktan sonraki grnts aadaki gibi olmaldr.

Buradaki dng mant ile daha bir ok karmak gibi grnen hesaplamalar kolaylkla
halledebilirsiniz.

87
rnek 6: Toplam Deer Bulma

Bir kurumda bulunan alanlarn bilgilerinin tutulduu bir dkmanmz olduunu


varsayalm. Bu rnekte butonlara yazacamz kodlar ile 20 saatten fazla alan kii
says ve 20 saatten az alan ii says ve ii, memur, teknisyen saysn buldurmasn
salayacaz. Bunun iin aadaki bilgileri sayfanza girerek gerekli makro kaytlarn
yaparak kod yazma ilemine geebilirsiniz.

Birinci butona yazlacak olan kodlar aada belirtilmitir.

Sub enok()
yer = 2
While Cells(yer, 1) <> ""
yer = yer + 1
Wend
x=0
For i = 2 To yer
If Cells(i, 5) > 20 Then (2,5) hcresi 20 den bykse x deikenini bir arttryor.
x=x+1
End If 20 den byk deilse arttan kyor.
Next i Dng bana dn.
Cells(2, 10) = x (2,10) x deikeninin ieriini yaz.
End Sub

lk drt satr ka adet eleman olduunu bulmak iin kullanlmtr. Birinci kolonu
tarayarak boluu grene kadar dngy arttrm ve eleman says bulunmutur.
Sonuta 20 den byk olanlarn saysn bulacamz iin bu sayy bir deikende
tutmalyz. X deikenine ilk deeri olarak 0 deeri verilmitir. (2,5) deerinden
balayarak tm satrlar taranyor ve arta uyan kayt bulunduu zaman x deikenini
arttryor. Dolaysyla arta uyan kayt 20 den fazla olan kayttr ve arttrlan say aranan
saydr. Sonuta (2,10) hcresine x deikeni yazdrlyor.

88
kinci butona yazlacak kodlar aada belirtilmitir.

Sub enaz()
yer = 2
While Cells(yer, 1) <> ""
yer = yer + 1
Wend
x=0
For i = 2 To yer
If Cells(i, 5) < 20 Then (2,5) hcresi 20 den kkse x deikenini bir arttryor.
x=x+1
End If 20 den kk deilse arttan kyor.
Next i Dng bana dn.
Cells(4, 10) = x (4,10) x deikeninin ieriini yaz.
End Sub

lk drt satr ka adet eleman olduunu bulmak iin kullanlmtr. Birinci stunu
tarayarak boluu grene kadar dngy arttrm ve eleman says bulunmutur.
Sonuta 20 den kk olanlarn saysn bulacamz iin bu sayy bir deikende
tutmalyz. X deikenine ilk deeri olarak 0 deeri verilmitir. (2,5) deerinden
balayarak tm satrlar taranyor ve arta uyan kayt bulunduu zaman x deikenini
arttryor. Dolaysyla arta uyan kayt 20 den az olan kayttr ve arttrlan say aranan
saydr. Sonuta (4,10) hcresine x deikeni yazdrlyor.

nc butona yazlacak kodlar aada belirtilmitir.

Sub iisays()
yer = 2
While Cells(yer, 1) <> ""
yer = yer + 1
Wend
isay = 0
For i = 2 To yer
If Cells(i, 4) = "i" Then (2,4) hcresindeki deer i ise
isay = isay + 1 i saysn bir arttr.
End If i deilse arttan kyor.
Next i Dng bana dn.
Cells(6, 10) = isay (6,10) hcresine ii saysn yaz i yani isay deikenini.
End Sub

lk drt satr ka adet eleman olduunu bulmak iin kullanlmtr. Birinci stunu
tarayarak boluu grene kadar dngy arttrm ve eleman says bulunmutur.
Sonuta ii saysn bulacamz iin bu sayy bir deikende tutmalyz. X deikenine
ilk deeri olarak 0 deeri verilmitir. (2,4) deerinden balayarak tm satrlar taranyor
ve arta uyan kayt bulunduu zaman x deikenini arttryor. Dolaysyla arta uyan kayt
ii saysdr. Sonuta (6,10) hcresine x deikeni yazdrlyor.
Drdnc butona yazlacak kodlar aada belirtilmitir.

Sub memursays()
yer = 2
While Cells(yer, 1) <> ""
yer = yer + 1
Wend
msay = 0
For i = 2 To yer
If Cells(i, 4) = "Memur" Then (2,4) hcresindeki deer Memur ise
msay = msay + 1 Memur saysn bir arttr.
End If i deilse arttan kyor.
Next i Dng bana dn.
Cells(8, 10) = msay (8,10) hcresine Memur saysn yaz , yani msay deikenini
End Sub
89
lk drt satr ka adet eleman olduunu bulmak iin kullanlmtr. Birinci kolonu
tarayarak boluu grene kadar dngy arttrm ve eleman says bulunmutur.
Sonuta memur saysn bulacamz iin bu sayy bir deikende tutmalyz. X
deikenine ilk deeri olarak 0 deeri verilmitir. (2,4) deerinden balayarak tm
satrlar taranyor ve arta uyan kayt bulunduu zaman x deikenini arttryor.
Dolaysyla arta uyan kayt memur saysdr. Sonuta (8,10) hcresine x deikeni
yazdrlyor.

Drdnc butona yazlacak kodlar aada belirtilmitir.

Sub teknisyensays()
yer = 2
While Cells(yer, 1) <> ""
yer = yer + 1
Wend
tsay = 0
For i = 2 To yer
If Cells(i, 4) = "Teknisyen" Then (2,4) hcresindeki deer Teknisyen ise
tsay = tsay + 1 Teknisyen saysn bir arttr.
End If Teknisyen deilse arttan kyor.
Next i Dng bana dn.
Cells(10, 10) = tsay (10,10) hcresine Memur saysn yaz , yani msay deikenini
End Sub

lk drt satr ka adet eleman olduunu bulmak iin kullanlmtr. Birinci kolonu
tarayarak boluu grene kadar dngy arttrm ve eleman says bulunmutur.
Sonuta Teknisyen saysn bulacamz iin bu sayy bir deikende tutmalyz. X
deikenine ilk deeri olarak 0 deeri verilmitir. (2,4) deerinden balayarak tm
satrlar taranyor ve arta uyan kayt bulunduu zaman x deikenini arttryor.
Dolaysyla arta uyan kayt teknisyen saysdr. Sonuta (10,10) hcresine x deikeni
yazdrlyor.

HATA AYIKLAMA

HATA YAKALAMA

Excel de yazm olduunuz komutlar her zaman doru almayabilir. Bir program
yazarken kullancdan doabilecek btn hatalar gz nnde bulundurmalsnz. Bunun
iin programda hata olabileceini dndnz yerlere etiketler ile isim belirtip daha
sonra bu hata sonucunda alacak kodlar veya mesajlar vererek hatann nne
geebilirsiniz.

Programn hata oluabileceini dndnz blmlerine bir art ile sorgu yaptrrsanz
ve bu artn gereklemesi durumunda GOTO komutu ile istediiniz yere ynlendirirseniz
hatay kullancya bildirmi olursunuz.

RNEK :

If Cells(1,1)=60 Then
Cells(1,2)=Geti
Else
Goto Hata:
Hata:
MsgBox(Ltfen bu alan bo gemeyiniz.)

90
Yukardaki rnekte Cells(1,1) hcresine 60 deeri girilmi ise Cells(1,2) hcresine Geti
yazyor. Eer Cells(1,1) hcresi bo ise bir hata sz konusu ve Hata diye bir komut
dizisine ynlendiriyor. Buradaki komutlar altrlarak gerekli bilgi veya dzeltmeler
yaplyor. rnein programnzda kayt ilemi yapyorsunuz ve bir ok alann girilmesi
zorunlu ve kullanc bu alanlardan bazlarn bo geti. te bu gibi durumlarda kontrol
ettirilerek eer bir hata varsa o hatay siz giderip programn almasn devam
ettirebilirsiniz. Bo braklan saysal alanlara otomatikman 0(sfr) yazdrmak gibi.

PROGRAMIN ADIM ADIM ALITIRILMASI

Yazm olduunuz programn bir blmnde kullancdan deil de sizden doan bir hata
ile karlatnzda program adm adm takip ederek hatann nerede olduunu
bulabilirsiniz. Bunun iin VB kod editrnde iken Debug mensnden Add Watch
seenei seilir. Gelen Add Watch penceresinde Expression blmne programda
kullandmz deiken adlarn srasyla yazacaz. Buraya yukardaki rnek iin
kullandmz a deikeninin yazalm ve OK dmesini tklayalm. Bundan sonra VB
editrnn alt ksmna Watches penceresi gelecektir ve buradan bu deikenin ieriini
grebileceiz. Alt taraftaki Watches penceresinde deikenin ad, tipi, deeri gibi
blmler bulunmaktadr.

Bundan sonra sadece F8 tuuna basarak adm adm almay balatabilirsiniz. Program
her F8 tuuna basta bir kod satrn okur ve derler. Her seferinde de Watches
penceresinde deiken veya deikenlerin deeri deimektedir. Bu blme bakarak
deimeyen bir yer grdnz zaman kolaylkla hatann nerede olduunu bulabilirsiniz.
rnein While dngsnn aklamasnda anlatlan ka adet renci olduunu bulan kod
satrnn sonundaki a=a-1 satrnn ne anlama geldiini adm adm altrarak daha net
grebilirsiniz.

91

You might also like