Professional Documents
Culture Documents
Excel Macrolar PDF
Excel Macrolar PDF
YAZARLAR
NN NVERSTES
MALATYA 2004
NDEKLER
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.
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.
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
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.
Makro Nedir?
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.
2
tu kombinasyonuna(Ctrl+H) hatta grafik nesnesine de(Otomatik ekiller veya resim)
atayarak kolayca altrabilirsiniz.
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.
3
Blm -2- MAKROLARA GR
Bir makro kayd yapmak iin Aralar mensnden Makro ve alt sekmesi olan Yeni Makro
Kaydet i seelim.
5
Blm -3- NEML ARA UBUKLARI VE ELEMANLARI
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.
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.
7
Properties (zellikler) Bu dme seili denetim elemann zelliklerine eriebilmemize
yarayan pencereyi aar. Burada bulunan ayarlara ilerideki konularda daha geni bir
ekilde yer verilecektir.
Check Box (Onay Kutusu) Bu denetim Formlar Ara ubuunda bulunan onay
kutusuyla ayn ie yarar.
List Box (Liste Kutusu) erisinde srekli kullanlacak olan bilgileri tutar. Gerek
duyulduunda listeden istenilen eleman seilecek bilgiye ulalr.
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.
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.
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:
Sub makro1()
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.
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
10
BLM -4- VBA (Visual Basic for Applications)
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.
Name : Elemann program ierisinde kullanlaca ismidir. Bu isim bir deiken gibi
kullanlacandan Trke karakter ve ilk karakterde say kullanlmamaya zen
gsterilmelidir.
Enabled : Deer True ise eleman aktif, False ise pasif olur ve rengi pasif bir renk olur.
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.
TextAlign : zerindeki yaznn saa, sola ve ortala gibi ayarlarnn yapld zelliktir.
Visible : Deeri True ise eleman ekranda grnr, False ise eleman form zerinde
grnmez.
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.
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.
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.
13
ReSize : Formun boyutunun deitirilmesi halinde bu olay meydana gelir. VBA dorudan
formun boyutunun deitirilmesine msaade etmeyecektir. O yzden boyutlandrmay
kodlarla yapmak gerekiyor.
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
Formda bulunan dier butonlarn Click olaylarna Action zelliine numaralar srasyla 2,
3, 4, 5, 6 verilerek dier dialog pencerelerine ulalr.
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.
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.
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.
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
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
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.
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.
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.
Dim deyimiyle yaplan tanmlar tanmland yere gre Global veya Local dr. Dim ile
tanmlanan deiken,
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.
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.
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
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.
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 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
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 art
Komutlar
Loop
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.
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
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
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
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.
= 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
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,
ifadesi ile adres deikeninin herhangi bir yerinde stanbul bulunup bulunmad
ifadesi ile adres deikeninin banda stanbul bulunup bulunmad kontrol edilebilir.
ifadesi ile x deikeninin ilk harfinin herhangi bir karakter ancak dier karakterin abc
olup olmad
ifadesi ile x deikeninin ilk harfinin herhangi bir rakam ancak dier karakterin abc
olup olmad
ifadesi ile x deikeninin ilk harfinin a ile f arasnda herhangi bir karakter ve dier
karakterin abc olup olmad
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.
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
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,
Sub AltProgramAdi
32
Prosedr ars
AltProgramAdi [GirisDegerleri]
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.
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.
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
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.
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,
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.
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.
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
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.
InputBox fonksiyonundaki son iki parametre ile yardm dosyasnn ismi ve konu numaras
verilirse pencereye ayrca yardm dmesi de eklenecektir.
Dim giris
giris = InputBox("sminizi Girermisiniz?", "Bilgi Girii", "sminiz", 0, 0)
ListBox1.AddItem giris
36
BLM -7- KOMUTLAR
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.
ChDir
ChDir Dizin
Aktif dizini deitirmeye yarar. VB ve VBA daki komutlarn dosya isimlerinde yol
kullanlmazsa, aktif src ve dizinde aranr.
MkDir
MkDir DizinAd
Dizin oluturmak iin bu komut kullanlr. DizinAd isimli dizini oluturur.
RmDir
RmDir DizinAd
smi verilen dizini siler. smi verilen dizinin alt dizinlerinin bulunmamas ve bo olmas
gerekir.
37
Kill
Kill DosyaAd
smi verilen dosyay siler.
Name
Name Ad As YeniAd
Verilen dosyann adn deitirir.
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.
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.
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.
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.
Date
Gnn tarihini renmeye ve deitirmeye yarar.
Date = 19/06/2004
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.
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.
AppActivate
Programdan, o anda alan baak bir program aktif hale getirmek iin AppActivate
komutu kullanlr.
AppActivate pencerebasligi
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.
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])
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
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 (Metin, n)
Metin iinde sadan n karakteri verir. Aadaki rnekte sadan harf alnmas
istenmitir.
Left (Metin, n)
Metin iinde soldan n karakteri verir.
InStr, InStrRev
Yukardaki satrda i harfi bulunmak istenmitir. Sondan ilk i harfi geri bildirilmitir.
42
Space
Space (sayi)
Verilen sayda boluk oluturur.
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.
Val (String)
Verilen stringi sayya evirir. Bu ilemi yaparken evirme ilemi geersiz bir karaktere
rastlanncaya kadar devam eder.
Rnd
Fonksiyon 0 ile 1 arasnda say retir.
Fonksiyonun 0 ile bir say arasnda deil de iki say arasnda deer retmesini salamak
iin zerinde deiik ilemler yaplabilir.
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.
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.
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.
- 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.
- 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.
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.
46
RASTGELE ERML DOSYAYA YAZMA ve OKUMA
Random veya Binary modu ile alan dosyalara kaytlar Put komutu ile yazlr ve Get
komutu ile okunur.
dosyano : Yazlacak veya okunacak dosyann numaras. Bu numara Open komutu ile
belirlenen dosya numarasdr.
Dim x
x = Merhaba
Put #1, 5, x
Dim x
Get #1, 5, x
MsgBox x
Output ve Append modu ile alan dosyalara Write veya Print komutu ile yazma yaplr.
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
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.
Input modu ile alan sral eriimli dosyalardan okuma ilemi ise Input ve Line Input
komutlar ile yaplr.
Dim ad, dt
Open \test.txt For Input As #1
Input #1, ad, dt
Cells(1,1) = ad
Cells(1,2) = dt
Close #1
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.
Reset
Ak olan btn dosyalar kapatmak iin Reset komutu kullanlabilir.
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
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.
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.
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
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.
PERSONEL PROGRAMI
Programmzn ierii,
Programmzn ierii bu kadar. imdi programn ilk nce alt zemini hazrlayalm.
- 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
- irket bilgileri
- Blmler
- Asgari cret
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.
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.
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.
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.
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.
yer = 2
While Sheets(2).Cells(yer, 3) <> ""
yer = yer + 1
Wend
yer = yer 1 buldurma ilemi yaplaca iin yer in deeri 1 eksiltilmi
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.
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.
Bunun iin ilk nce bir Module ekliyoruz(InsertModule). Alan bo kod sayfasna u
kodlar yazyoruz.
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.
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.
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.
'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
'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.
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.
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.
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.
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
Onay mesajn da kullanc yanllkla Evet i semesin diye varsaylan deer olarak Hayr
(256) atyoruz.
64
Maa ve Avans Belirleme Formu
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.
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
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.
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.
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
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.
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
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
Kenarlk ekleme ve kaldrma ilemleri balk hcrelerinin yalnzca taban izgilerini ekler
veya kaldrr.
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.
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.
Formun Activate olayna aadaki kodlar yazlarak irkette bulunan blmler ListBox1 e
listelenecek ve irkette toplam ka personel ve sigortal personel saysn bulduralm.
72
'Personel bulmak iin
yer1 = 2
While Sheets(1).Cells(yer1, 1) <> ""
yer1 = yer1 + 1
Wend
yer1 = yer1 - 1
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.
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.
Dim EskiMenuCubugu
Dim MenuParca
Dim YeniMenuCubugu
Dim kontrollerim
Tam ekran yapld zaman grnen Tam Ekran Kapat ara ubuunu gizler
Application.CommandBars("Full Screen").Visible = False
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
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.
76
Men eleman dier men elemanlaryla bir izgi ile ayrlyor.
.Controls("Normal Menye Dn").BeginGroup = True
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.
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.
Sub formmenu()
ozelmenukapat
anamenu.Show
End Sub
Sub Auto_Open ()
Komutlar
End Sub
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.
Sub Auto_Close ()
Komutlar
End Sub
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.
ETL RNEKLER
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.
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.
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.
For i = 2 To yer ilk rencinin olduu satrdan renci saysna kadar bir dng kuruldu,
81
End If art bitimi
Next i Dng tekrar
End Sub
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.
82
rnek 3: Dosyadan Bilgi Alma
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 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,
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.
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.
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
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.
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.
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.
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