You are on page 1of 27

MAKRO YAZIM ETM

VBA
(VISUAL BASIC FOR APPLICATONS)

ARALIK 2004 /ANKARA

Hazrlayan/Derleyen Gkalp AKYZ


2004 ANKARA

Visual Basic Kurs Notlar

VBA (Visual Basic for Applications)


VBA (Visual Basic for Applications), Yllar boyunca Microsoft Office uygulamalar ile
kullanlacak programlama dili oldu. VBA programclarn (ve gl kullanclarn)
aadakileri yapmasn salayan basit bir programlama dilidir:

Office uygulamalarn geniletmek ve otomatize etmek


Office uygulamalarn ve verilerini, baka uygulamalar ile entegre etmek

Temel fikir gerekten basittir: insanlarn uygulamalar zgnletirebilmeleri ve kendi


ortamlarna uygun beceriler ekleyebilmeleri iin, birka uygulama iin ortak bir dil ve
programlama ortam oluturmak. Bu yzden VBA'in basit olmas gerekiyordu. VBA'i
gereksiniminiz olan veya enebileceimiz herhangi bir tr uygulamay gelitirmek iin
kullanmazsnz. VBA sadece temel denetim yaplarn, matematik ve karakter dizisi
fonksiyonlarn ve deiken kullanm becerilerini sunar. VBA'in asl gc, onu destekleyen
uygulamalarn nesnelerinden kaynaklanr.
Microsoft, VBA 5'in piyasaya srlmesiyle birlikte bu dili rnlerine programlanabilir
zellikler eklemek isteyen reticilere lisanslamaya balad: rnein Autodesk AutoCAD.
AutoCAD yllardr programlanabilen bir ortamd ama, programlama dili zgnd ve baka
uygulamalar ile paylalamyordu. Baka pek ok retici de yazlmlarna programlama dilleri
veya baka otomizasyon yntemleri eklediler. Ancak bu ok sayda uygulamadan oluan
paralar bir araya getirmede tutkal ilevi grecek olan global bir dilin gereklilii akt.
Sonunda Microsoft VBA'in dier reticilerin bu gereksinimlerini karlayan bir srmyle
ortaya kt, stelik VBA Windows altnda uygulamalar otomatize etmek iin kullanlan
evrensel bir dil olma yolundadr.
Gnmzde ou irket rafta satlan yazlmlar kullanr ve onlar zgnletirme
gereksinimleri vardr. Amerika'daki iletmelerin yarsndan ou Microsoft Office rnlerini
kullanr. stelik bu iletmelerin pek ou da bu uygulamalar kendi iletme gereksinimlerine
uyarlamak iin VBA kullanr. Bu eilim gelecekte srecek ve glenecek. Uygulamalar
sadece zgnletirme gereksinimi deil, ayn zamanda onlar iletiim kuracak ekilde
birbirine balama gereksinimi var. VBA bunu da yapar, stelik bunun bir sonucu olarak, VBA
programclarna olan gereksinim de nmzdeki birka yl ierisinde artacak.
Gnmz uygulamalar o kadar gl ve o kadar ok zellie sahip ki, zgn uygulamalar
gelitirmek artk mantkl deil. Bunun yerine mevcut uygulamalar zgnletirerek bir arada
almalarn salamak daha mantkl. Office 97 uygulamalar bile tipik bir irketin gnlk
bilgisayar ilemlerini karlamaya yeterlidir. VBA destei veren ok sayda nc parti
uygulamay da dnrseniz, onun irket ortamlarndaki nemini kolayca tahmin
edebilirsiniz.

VBA

Visual Basic Kurs Notlar


RNEK MAKRO (yada Basit bir VBA program )HAZIRLAMA
Oluturacamz makronun zellikleri aadadr. Anlatacamz admlar tek tek izleyin ve
makroyu kaydederken sylediklerimizden baka herhangi bir ilem yapmayn.
1- alma Kitabn an. Bo bir alma sayfasna gein.
2- Yeni Makro Kaydet... komutunu altrn. Makro Ad kutusuna Deneme yazn.
Tamam dmesine tklayn.
3- Fare ile B2 hcresini sein.
4- B-C stun balklar arasndaki izgiden fare ile tutun ve yeterli bir miktar geniletin.
Adnzn saca kadar.
5-B2 hcresine klavyeden adnz girin.
6-Enter tuuna basn ve bir alt hcreyi sein.
7-Tekrar fare ile B2 hcresini sein.
8-Fare ile Kaln ikonuna tklayn.
9-Fare ile talik ikonuna tklayn.
10-Fare ile Alt izili ikonuna tklayn.
11-Fare ile Ortala ikonuna tklayn.
12-Fare ile Dolgu Rengi ikonundan ve siyah rengi sein.
13-Fare ile Yaz Tipi Rengi ikonuna tklayn ve beyaz rengi sein
14-Kayd Durdur ikonuna tklayn ve Deneme makrosunu tamamlam olun.
Hazrlam olduunuz Deneme makrosunun grnts aadaki gibi olacaktr. Tek fark, biz
admz Deneme Bilgisi olarak girdik.

Deneme olarak hazrlam olduunuz makronun Kod penceresini amak iin


Aralar>Makro>Makrolar... (Tools/Macros/Macro ) komutunu tkladnzda Makro
penceresinde iki adet Makro adnn olduunu greceksiniz. Bunlardan ilki daha nce
hazrlam olan Aylar, ikincisi de yeni hazrlanan Deneme makrosudur. Bu alma kitab
iin hazrladnz btn makrolar bu pencerede otomatik olarak harf srasna gre
sralanacaktr. Siz Deneme makrosunu sein ve Dzenle (Edit) dmesine tklayn. Deneme
makrosuna ait Kod penceresi alacaktr.
Biz kod penceresindeki bilgilerin aynsn
VBA

Visual Basic Kurs Notlar


aaya aldk.
Sub Deneme_Makro()
' Deneme_Makro Makro
' Makro xxx tarafndan xx.xx.xxxx tarihinde kaydedildi.
'
Range("B2").Select
Columns("B:B").ColumnWidth = 22.57
ActiveCell.FormulaR1C1 = "Deneme Bilgisi"
Range("B2").Select
Selection.Font.Bold = True
Selection.Font.Italic = True
Selection.Font.Underline = xlUnderlineStyleSingle
WithSelection
.HorizontalAlignment=xlCenter
.VerticalAlignment=xlBottom
.WrapText=False
.Orientation=0
.AddIndent=False
.ShrinkToFit=False
.MergeCells=False
End With
With Selection.Interior
.ColorIndex = 1
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 2
End Sub
imdi yukardaki makro kodundaki satrlarn bize neler anlattn ksaca aklayalm.
Sub Deneme_Makro()
Bildiri deyimi. Visual Basic programnda kullanlan yordam ve alt programlar Sub deyimi ile
balar. Burada Deneme adl programn balad bildirilmektedir.
'Deneme Makro
Genelde Kod penceresinde yeil olarak grntlenen bu satrlar () kesme iareti ile
balyorsa, programa ait olmayan fakat program hakknda aklayc bilgi veren satrlardr.
Range("B2").Select
B2 hcresinin seildiini belirtir. Her hcre seiminde bu satr grntlenir ve baka bir
hcrenin seildii satra gelene kadar yaplan ilemler, bu hcreye ait olan ilemlerdir.
Columns("B:B").ColumnWidth = 22.57
B stununun (sadece hcre deil), stun geniliinin 22.57 deerine kadar arttrldn ya da
daraltldn anlatr. Geerli stun geniliinin 8.43 birimdir. Bu ifadeye gre stunu
geniletmi olduk.
VBA

Visual Basic Kurs Notlar


ActiveCell.FormulaR1C1 = "Deneme Bilgisi"
R1C1 formundaki seilmi olan aktif hcreye girilen veriyi anlatr.
Range("B2").Select
Makroyu hazrlarken 6. Admda Eter tuuna baslmt. Daha sonra tekrar B2 hcresi
seilmiti. Burada Enter tuunun grevi hcreye girilen bilgiyi (veriyi) onaylamaktr. Fakat
bizim u an kullandmz Excelin Seenekler /Options penceresinde, Seimi Enter
tuundan sonra ta onay kutusu Aa seili olduu iin, Enterden sonra seim bir aa
hcreye gemiti. Bunun iin herhangi bir komut satr yazlmad, fakat ikinci defa B2
seildiinde yani fare tklandnda, bu defa bu satr koda eklenmi oldu.
Selection.Font.Bold = True
B2 hcresine yazlan isme ait yaztipinin (fontun) Bold (kaln) olarak seildiini Doru
(True) lar. Bu seimin zdd False (yanl) olur.
Selection.Font.Italic = True
B2 hcresine girilen isme ait fontun Italic (eik) olarak seildiini dorular.
Selection.Font.Underline = xlUnderlineStyleSingle
B2 hcresindeki seili metnin altnn dz bir izgiyle izilmi olduunu ifade eder.
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.ShrinkToFit = False
.MergeCells = False
End With
WithEnd With deyimi, kontrollere ait zelliklerin deitirilmek istenmesi ya da bir
metod arld zaman, kontrol adnn verilmesinde kolaylk salar. Kontrollere ait
elemanlarn birden fazlasnn zellikleri deitirilmek istendiinde kullanmda rahatlk salar.
rneimizin 14. admnda fare ile Ortala ikonunu tklayn demitik. te tam bu srada
zerinde uratmz hcreye ait bilginin zelliini deitirmek istediimizde with zellii
devreye program blou olarak girdi.
With ile bloun balad End With ile de bittii anlalr.
HorizontalAlignment = xlCenter
Hcredeki verinin yatay hizasnn (HorizontalAlignment) hcre iinde ortalandn
(xlCenter) anlatan satrdr.
VerticalAlignment = xlBottom
Hcredeki verinin dikey hizasnn (VerticalAlignment) hcrenin altnda (xlBottom) olduunu
anlatan satrdr. Biz hcre iinde sadece bu kadar deiiklik yaptmz iin dierleri sfr
deerini yada False deerini aldlar. Vertical satrnda deiiklik yapmadmz halde bunun
da blok ierisinde gsterildiini grdnz.
With Selection.Interior
VBA

Visual Basic Kurs Notlar


.ColorIndex = 1
.Pattern = xlSolid
End With
Yukardaki program blounu da hcrenin iinin dolgu rengiyle boyandn ve bu rengin renk
indeksindeki (ColorIndex) 1. renk olan siyahn olduu anlatlr.
Selection.Font.ColorIndex = 2
Hcre ierisindeki bilginin yani fontun renk kutusundaki 2 numaral renge (beyaza) atandn
anlatan satr.
Hazr Makronun Dmeye Yada Menye Atanmas
Hazrladnz bir makroyu, her kullanmak istediinizde, Aralar> Makro> Makrolar...>
(tools/Macros/Macro ) Makro Penceresi> altr Dmesi yolunu kullanarak altrmak
uzun ve skc olabilir. Excel, bunun iin kullanclarna kolaylk salamaktadr. Dilerseniz
makronuzu Ara ubuklarnda bulan ikonlar gibi bir ikona atayabilirsiniz. Dilerseniz Men
ubuundaki gibi bir men oluturabilirsiniz. sterseniz hem Men ubuuna men olarak
ayn anda da Ara ubuunda ikon olarak bulundurabilirsiniz. Seim size ait.
Daha nce oluturduunuz Makro1 makrosunu, hem Men ubuuna atayalm hem de ikon
olarak atayalm.
1-Aralar>zeletir...>zelletir Penceresi>Komutlar Sayfa Sekmesini
(Tools/Custimize/Commands) tklayn.
2- Kategoriler liste kutusunun sa tarafnda bulunan Dikey Kaydrma ubuunu kullanarak
aadaki grnty yakalayn.

VBA

Visual Basic Kurs Notlar

3-Makrolar komutunu tkladnzda Komutlar liste kutusunda zel Dme grnts


ekrana gelecektir.
4-Farenizin sa tuunu basl tutarak, zel Dme ikonunu Ara ubuklarndan herhangi
birisinin zerine srkleyin ve brakn.

5-Dme, Ara ubuunda yerini aldnda, hem otomatik olarak seili olduuna dikkat
edin, hem de tam bu esnada zelletir penceresindeki Seimi Deitir dmesinin aktif hale
geldiine dikkat edin.
6-zel Dme ikonu seiliyken, Seenei Deitir dmesine tklayn. Alan menden
Makro Ata komutunu sein.

Makro Ata... (Assign Macro) komutunu setiinizde ekrana Makro Ata penceresi gelecektir.
Bu pencerenin daha nce hazrlam olduunuz makrolarnz altrmak, dzenlemek vs..
iin kullandnz Makro penceresine benzediine dikkat edin.

VBA

Visual Basic Kurs Notlar

Makro Ata penceresinde u ana kadar kullandnz alma Kitabnda hazrladnz ne


kadar makro varsa hepsinin ismi sralanm olarak beklemektedirler. Tabi bu arada unu da
belirtmeden gemeyelim. Biz buradaki makrolar olutururken Makro Kaydet penceresindeki
Makronun Saklanaca Yer kutusuna Bu alma Kitab (This Workbook) seeneini
girmitik.
7-Makro Ad liste kutusuna Makro1 makrosunu girin.
8-Tamam dmesine tklayn. Makro Ata penceresi kapanacak ve zelletir penceresine
tekrar geri dneceksiniz.
imdi Makro1 isimli makronuzu Ara ubuunda bulunan zel Dmeye atam
olduunuz. Dilerseniz zelletir penceresini kapatmadan Seimi Deitir Dmesine
tklayarak alan menden dmenize ait dier zellikleri deitirebilirsiniz. Mesela, Ad
seeneini ierisinde yazan zel Dme yazsn silin ve Makro1 olarak tekrar yazn.
9-Dier istediiniz deiiklikleri de yaptktan sonra zelletir penceresini kapatn ve Excel
alma Sayfanza geri dnn.
10-Fare ile Ara ubuuna yerletirdiiniz Makro1 ikonuna tklayn
Makroyu Silmek
Oluturulmu bir makroyu tamamen kaldrmak iin Aralar>Makro>Makrolar...
komutlarn tkladktan sonra ekrana gelen Makro penceresinden, silmek istediiniz bir
makroyu sein ve daha sonra Sil dmesine tklayn. Bylece hazrlam olduunuz kaytl
makro silinecektir. Fakat silinmeden nce size aadaki gibi bir uyar mesaj verecektir.

VBA

Visual Basic Kurs Notlar


Makrolarda Adres
Yukardaki ekilde hazrlanan herhangi bir makroyu bir alma kitabnda birka yerde
kullanmak istenebilir. Fakat makroyu altrdmzda, hangi hcrelerde makroyu
oluturduysak her seferinde ayn yere yazdrr. Oysa bu tr bir makro bizim ok kullanl
deildir.
Makrolara ait iki trl adres tipi vardr.
1.

Mutlak Bavuru(Sabit Adres, Absolute) Tipi

2.

Greceli Bavuru(zafi Adres,Relative) Tipi.

Aadaki bilgiler Microsoft Excelin Yardm dosyasndan alnp aktarlmtr. Konu


hakknda aklayc olmas amacyla orijinalini aynen buraya aktardk. Bu konu mutlaka
renilmesi gereken bir husustur.
Bavuru; alma sayfasndaki bir hcreyi veya hcre araln tanmlar ve Microsoft Excel'e
formlde kullanmak istediiniz deerleri veya verileri nerede aramas gerektiini belirtir.
Bavurularla, alma sayfasnn farkl ksmlarnda bulunan verileri bir formlde kullanabilir
veya bir hcredeki deeri birden fazla formlde kullanabilirsiniz. Ayrca, ayn alma
kitabnn baka sayfalarndaki hcrelere, baka alma kitaplarna ve baka programlardaki
verilere bavurabilirsiniz. Baka alma kitaplarndaki hcrelere yaplan bavurulara, d
bavuru denir. Baka programlardaki verilere yaplan bavurulara, uzaktan bavuru denir.
Varsaylan olarak, Microsoft Excel , stunlar harflerle (A'dan IV'ye kadar, toplam 256 stun
olarak) ve satrlar saylarla (1'den 65536'ya kadar) etiketleyen A1 bavuru biemini kullanr.
Bir hcreye bavurmak iin, stun harfini, arkasndan da satr numarasn girin. rnein, D50,
D stunuyla 50. satrnn kesitii yerdeki hcreye bavurur. Bir hcre aralna bavurmak
iin, araln sol st kesindeki hcrenin bavurusunu girin, iki nokta st ste imi (:) girin,
sonra araln sa alt kesindeki hcrenin bavurusunu girin. Aadakiler, bavuru
rnekleridir.
Buna bavurmak iin

Bunu kullann

A. stun ve 10. satrdaki hcre


A. stun ve 10. satrdan 20.satra kadar olan hcreler
15. satr ve B. stundan E. stuna kadar olan hcreler
5. satrdaki tm hcreler
5. satrdan 10. satra kadar olan btn hcreler
H. stundaki btn hcreler
H. stundan J. stuna kadar olan tm hcreler

A10
A10:A20
B15:E15
5:5
5:10
H:H
H:J

Mutlak Bavuru: Bir formlde, forml ieren hcrenin konumuna baklmadan, hcrenin
tam adresi, mutlak bavuru $A$1, $B$1 vs. biimini alr.
Greceli Bavuru: MS Excele forml ieren hcreden balayarak baka bir hcreyi nasl
bulacan syleyen, A1 gibi hcre bavurusu. Greceli bavuru kullanma, kiiye bulunduu
yerden balayarak nereye gideceini aklayan ynergelere benzer. rnein; iki blok yukar
ve bir blok dz gidin gibi.
VBA

Visual Basic Kurs Notlar

Greceli ve Mutlak Bavurularn Arasndaki Fark


Bir forml hazrladnzda, hcrelere veya aralklara yaplan bavurular, ounlukla forml
ieren hcreye gre konumlarna dayandrlr. Aadaki rnekte, B6 hcresi, =A5 formln
iermektedir; Microsoft Excel, B6 hcresinin bir hcre stnde ve bir hcre solundaki deeri
bulur. Bu ileme, greceli bavuru denir.

Greceli bavurular kullanan bir forml kopyaladnz zaman, yaptrlan formldeki


bavurular gncelletirilir ve formln konumuna bal olarak farkl hcrelere bavurur.
Aadaki rnekte, B6 hcresindeki forml, B7 hcresine kopyalanmtr. B7 hcresindeki
forml, B7 hcresinin bir hcre yukarsnda ve solundaki hcreye bavuran=A6 olarak
deiir.

Bir forml baka bir hcreye kopyaladnz zaman, bavurularn deimesini


istemiyorsanz, bir mutlak bavuru kullann. rnein, formlnz A5 hcresini, C1
hcresiyle arpyorsa (=A5*C1) ve forml baka bir hcreye kopyalarsanz, her iki bavuru
da deiir. Bavurunun deimeyen paralarndan nce bir dolar imi ($) yerletirerek, C1
hcresine bir mutlak bavuru yaratabilirsiniz. C1 hcresine bir mutlak bavuru yaratmak iin,
rnein, formle, aadaki biimde dolar imleri ekleyin: =A5*$C$1
Hcre Tadktan ve Kopyaladktan Sonra, Hcre Bavurular Hatal
Kopyalanan formller, greceli hcre bavurular ieriyorsa, Microsoft Excel bavurular (ve
karma hcre bavurularnn greceli ksmlarn), oaltlm formllerde ayarlar. rnein, B8
hcresinin =TOPLA(B1:B7) formln ierdiini varsayalm. Bu forml, C8 hcresine
kopyalarsanz, oaltlm forml, o stundaki ilikili hcrelere bavurur: =TOPLA(C1:C7).
Kopyalanan formller, mutlak hcre bavurular ieriyorsa, oaltlm formllerdeki
bavurular deitirilmez.
Hcreleri tarsanz, tanan hcrelerdeki formller ayarlanmaz. Bununla birlikte, tanan
hcrelere bavuran formller ayarlanarak, yeni konumlarndaki hcrelere bavurmalar
salanr.
VBA

10

Visual Basic Kurs Notlar

stediiniz sonular alamadysanz, zgn formllerdeki bavurular, ya greceli ya da


mutlak hcre bavurularna deitirin. Sonra hcreleri yeniden kopyalayn.
Yukardaki anlatlanlardan bu blmde bahsetmek istediimiz ksm zetlemek gerekirse:
Mutlak bavuruyu (sabit adres) kullanrsanz, hazrladnz makroyu hep ayn hcrelere
kopyalarsnz. Greceli bavuruyu kullanrsanz, hazrladnz makroyu setiiniz herhangi
bir hcreden balatabilirsiniz.
Sabit adres tipine ait rnekleri anladnz. imdi sra Greceli adres tipine rnek vermeye
geldi. Aslnda her ikisi arasnda makro oluturmak asndan hibir fark yok. Tamamen
birbirinin ayns. Tek fark makroyu kaydederken, Kayd Durdur ara ubuundaki Greceli
Bavuru ikonuna tklamak.
imdi basit bir Greceli Bavuru tipinde makro hazrlayalm.
1-

Aralar mensnden Makro komutunu, buradan da Yeni Makro Kaydet...


komutunu tklayn.
2Alan Makro Kaydet penceresindeki Makro ad kutusuna Greceli yazn.
Tamam dmesini tklayn.
4) Ekrana gelen Kayd Durdur ara ubuundaki Greceli Bavuru (Relative )
ikonuna tklayn. konun basl olduuna dikkat edin.

5) Ayn admlar takip ederek Deneme makrosunun benzerini oluturun.


6) Makro hazrlama ilemi bittiyse Kayd Durdur ikonuna tklayn ve kayd
durdurun.
Greceli makronuzu da B2 hcresinde oluturdunuz. imdi alma tablonuzdan
herhangi bir hcreyi sein ve daha nce rendiiniz ekilde Greceli makronuzu
altrn. rnein D6 hcresini seilir ve altrlr ise :

imdi sra hazrlam olduumuz makronun kodunu grntlemeye geldi. Evet aslnda ayn
makroyu yazdk. Fakat, bavuru tipini deitirdik. Bakalm Greceli Bavuru ikonunu
tklamanz kod sayfasnda ne gibi deiikliklere sebep olmu.
Sub Greceli()
'
' Greceli Makro
' Makro .. '
VBA

11

Visual Basic Kurs Notlar


ActiveCell.Offset(1, 1).Range("A1").Select
ActiveCell.Columns("A:A").EntireColumn.ColumnWidth= 22.57
ActiveCell.FormulaR1C1 = "Deneme Bilgisi"
ActiveCell.Select
Selection.Font.Bold = True
Selection.Font.Italic = True
Selection.Font.Underline = xlUnderlineStyleSingle
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.ShrinkToFit = False
.MergeCells = False
End With
With Selection.Interior
.ColorIndex = 1
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 2
End Sub
Aada; Greceli ve Mutlak bavuru arasndaki sadece farkl olan satrlar
karlatrdk. Bunlardan Kaln olarak yazdrlan stte olup Greceli bavuruya ait kod satr,
altta bulunan da Mutlak (sabit) bavuruya ait kod satrdr.
ActiveCell.Offset(1, 1).Range("A1").Select
Range("B2").Select
ActiveCell.Columns("A:A").EntireColumn.ColumnWidth = 22.57
Columns("B:B").ColumnWidth = 22.57
ActiveCell.FormulaR1C1 = "Deneme Bilgisi"
ActiveCell.FormulaR1C1 = "Deneme Bilgisi"
ActiveCell.Select
Range("B2").Select
Yukarda uzun metin halinde verdiimiz yardm dosyas net olarak anlaldnda, bu bavuru
kod satrlar arasndaki fark da anlalacaktr. Yine de aadaki tablolarda bu durumun izah
grsel olarak size sunulmutur.

VBA

12

Visual Basic Kurs Notlar


VBA Program Yazm
"Visual Basic For Application" Vba Excel Ortamnda Visual Basic programla diliyle
uygulamalar gelitirmek manasna gelir. (Konumuz Excel olduu iin Excel ortam diyoruz.
Bu MSAccess veya MSWord' de olabilir vs...)
Bu blmde Excel'in Visual Basic kodlama penceresinde yazlabilen ve Excel tablosuna
hkmedecek kodlar ve ksa aklamalarn bulacaksnz. Bu kodlardan bazlar tamamen bir
program ve veya programck olabilecei gibi bazlar da sadece programdan bir paradr. Bu
paray uygun kullandnzda iinizi kolaylatracaktr.
Program parasn her ne olursa olsun Vba kod sayfasnda
Sub...
End Sub
deyimleri arasna yazmalsnz.
Daha sonra Excel tablosuna da Formlar(Forms) Ara ubuu'nda bulunan dme ikonuna
tklayarak, Excel alma sayfasna izin. Dme zerinde sa tua tklayn ve alan
menden Makro Ata (Assign Macro) komutunu sein. kan pencereden makro adn tklayn
ve Tamam dmesine basn. Artk kod sayfasndaki programnz dmeye atam oldunuz.
Program altrmak iin Dmeye tklamanz yeterli.
Elimizde bulunan Program paras
Range("B2").Select
olsun.
1. VBA Kod sayfas alr.
2. Eer bir modl ak deilse Ara ubuklarndan yada Menden Modl komutunu
tklayn ve Madl sayfasn alr.
3. Kod sayfasna aadaki gibi program yazlr.
SubMakrom()
Range("B2").Select
End Sub
4. Fark ettiiniz gibi Sub deyiminden sonra programmza Makrom ismini verdik. imdi
de Excel alma sayfasna geilir. Eer ak deil ise Formlar ara ubuu alr.
5. Bu ubuk zerindeki Dme ikonuna tklanr ve alma sayfasna bir dme izilir
Makro penceresi otomatik alacaktr. Eer almadysa dmenin zrinde farenin sa
tuuna tklanr ve Makro penceresi alr.
6. Alan makro penceresinde Makrom ismine tklanr ve Tamam dmesine tklanr. te
bu kadar, Makroyu altrmak iin Excel alma Sayfasndaki dmeye tklamak
yeterli. Yukardaki Makro sonucunda dmeye tklanrsa B2 hcresi seilecektir.

VBA

13

Visual Basic Kurs Notlar


Deikenler, Sabitler ve Deiken Tipleri
Sabitler (Constants):
Temelde 3 tipte sabit kullanlmaktadr, bunlar :
nteger (tamsay)
-1, 50 gibi ondalk ksm olamayan saylar
Real (Gerek Say, Floating Point)
Ondalk ksm olan saylar. r:3.1415, -9.81,
Ayrca gsteriminde Engineering Notation denilen format kullanlmaktadr
r : 6.2E5 =
6.2x105 = 620000
6.2E-5 = 6.2x10-5 = 0.000062
Chracter (Karakter yada Karaker dizisi yada text)
Excel Kurs Notlar, Blm 1, A gibi alfanmerik yada saysal karakterlerden
oluan dizi.
Deiken Tipleri
VBte kullanlan deikenler aadaki tiplerden olumaktadr :
Deiken Tipi
Kullanlanan Byte Deer Aral
Byte
1 byte
0 ile 255 arasnda
Boolean
2 byte
True or False Doru yada Yanl
Integer
2 byte
32,768 ile 32,767 arasnda
Long
4 byte
2,147,483,648 to 2,147,483,647
Negatif deerler iin 3.402823E38 ile
1.401298E45
Pozitif deerler iin 1.401298E45 ile 3.402823E38
Single
4 byte
arasnda
Negatif deerler iin 1.79769313486232E308 ile
4.94065645841247E324
Pozitif deerler iin 4.94065645841247E324 ile
Double
8 byte
1.79769313486232E308
922,337,203,685,477.5808 ile
Currency
8 byte
922,337,203,685,477.5807
Ondalk noktas olmadan :
+/79,228,162,514,264,337,593,543,950,335 ;
Ondalk nokta ve 28 hane hassasiyet ile :
Decimal
14 byte
'+/7.9228162514264337593543950335
Date
8 byte
1 Ocak 100 ile 31 aralk 9999 aras
Object
4 byte
Herhangi bir nesne iin
String (variable10 byte + karakter
length)
boyu
0 ile yaklak 2milyar karakter
String (fixed-length) Karakterin boyu
1 ile yaklak 65,400 karakter
Variant (with
numbers)
16 byte
Double tipinin snrna kadar herhangi bir deer
22 bytes + dizinin
Variant (w)
boyu
0 ile yaklak 2milyar karakter
User-defined
Varies
Deikenin tipine gre deiir

VBA

14

Visual Basic Kurs Notlar


VBde bir deiken ilk kullanld zaman atand deere gre yaratlr. Ancak bu yntem
pratik gzkmekle birlikte iyi bir programclk alkanl deildir. En dorusu bu
deikenlerin programn banda tantlmasdr. Bu ise Dim komut ile yaplr. r:
Dim a, b As Integer
Dim g As Single
Dim y as Double
Dim bugun As String
Dim x as Variant
Eer otomatik deiken kullanm zelliini kaldrmak istiyorsak, programn bana Option
Explicit komutu yazlabilir. Bu komut var ise, bir deiken nceden tantlmam ise hata
mesaj vererek uyaracaktr.
Ayrca deikenlerin tipini belirlemek iin daha nce Qbasic, GwBasic, BasicA gibi basic
kullanclarnn uygulad deikenin sonuna eitli karakter getirmeklede yaplabilir. Bu
karakterler :
Karakter
%
&
!
#
@
$

Deiken Tipi
Integer
Long
Single
Double
Currency
String

EER CMLES ( IF STATEMENT)


VB dilinde karar vermek iin kullanlan temel komut if else endif komutudur.
rnein klasik bir rnek olarak bir denklem sisteminin zm programndan alnan bir rnei
kullanabiliriz
d=b^2-4*a*c
If d > 0 Then
r1 = (- b + SQR(d)) / (2 * a)
r2 = (- b - SQR(d)) / (2 * a)
i1 = 0
i2 = 0
ELSE
r1 = - b / (2 * a)
r2 = - b / (2 * a)
i1 = SQR(ABS(d)) / (2 * a)
i2 = - I1
End If

VBA

15

Visual Basic Kurs Notlar


DNGLER
Do loop
x = 22
Do
x=x-2
If x < = 5 Then Exit Do
Loop
Bu programda do ve loop komutlar arasnda ter alan komutlar tekrarlanmaktadr. Dngden
Exit Do komutu ile k salanmtr. Ayrca kontrol satrlar do yada loop satrnada
yazlabilir.
Do [{While | Until} koul]
[komutlar]
[Exit Do]
[komutlar]
Loop
Yada
Do
[komutlar]
[Exit Do]
[komutlar]
Loop [{While | Until} koul]
While .. wend
Dim sayac
sayac = 0 ' sayac sfrla.
While sayac < 20 ' Sayac 20den kk ise devam et.
sayac = sayac + 1 ' sayac 1 arttr.
Wend ' Sayac 19dan buyuk ise dngden kar
For Next
x=1
For i = 1 To 5
x=x*i
Next i
Yukardaki x = x * i komutu 5 kere tekrarlanacaktr. Bylece 5! Deeri hesaplanacaktr.
Genel format
For saya = balangdeeri To sondeer [Step adm]
[komutlar]
[Exit For]
[komutlar]
Next [saya]

VBA

16

Visual Basic Kurs Notlar


Array Tantm
Arrayler Dim [] komutu ile tantlr. r:
Dim DayArray(50)
Dim Matrix(3, 4) As Integer iki boyutlu array
' 3 boyutlu ve snrlar belirli bir array
Dim MyMatrix(1 To 5, 4 To 9, 3 To 5) As Double
' 1den 10 kadar dogum gnlerinin tutulduu array
Dim Dogumgunu(1 To 10) As Date
' Snrlar deer eklendike belirlenen dinamik bir array
Dim MyArray()

Subroutine ve Fonksiyonlar
Moduler programlamann temeli olan iki kavram altprogram (subroutine) ve fonksiyon
aadaki ekilde tanmlanr :
[Private | Public | Friend] [Static] Sub isim[(parametre listesi)]
[komutlar]
[Exit Sub]
[komutlar]
End Sub
Eer bir sub program private ise sadece o modl ierisinden arlabilir, public ise dardan
baka bir modlden arlabilir .Friend ise o proje iinden arlabilir.
Static parametresi ise o sub program kapatlsa bile iinde yaratlan lokal deikenler silinmez
ve sabit kalr.
Fonksiyonlar sub programlara benzemekle birlikte geriye bir deer dndrmektedir.
[Public | Private | Friend] [Static] Function fonsiyonad[(parametrelistesi)] [As type]
[komutlar]
[fonksiyonad= expression]
[Exit Function]
[komutlar]
[fonksiyonad = expression]
End Function

VBA

17

Visual Basic Kurs Notlar


Kullancdan Bilgi Al ve Bilgi Verme
Kullancya bilgi vermek iin kullanlan en pratik komut msgBox komutudur
Msgbox program sona ermitir
Bu komut alt zaman sonu :

MsgBox "program sona ermitir", , "UYARI" :

Genel yazm format aadaki gibidir :


MsgBox(prompt[, buttons] [, title] [, helpfile, context])
Burada
Prompt : mesaj
Buttons : aada verilen dmelerin karlk numaralrnn toplamdr
Constant
Deer
Aklama
vbOKOnly

Sadece OK buttonu

vbOKCancel

OK ve Cancel

vbAbortRetryIgnore

Abort, Retry, and Ignore

vbYesNoCancel

Yes, No, ve Cancel

vbYesNo

Yes ve No

vbRetryCancel

Retry ve Cancel

vbCritical

16

Kritik mesaj ikonu.

vbQuestion

32

Soru iareti ikonu

vbExclamation

48

Uyar ! ikonu

vbInformation

64

Bilgi konu.

vbDefaultButton1

lk buton varsaylan

vbDefaultButton2

256

kinci buton varsaylan

vbDefaultButton3

512

nc buton varsaylan

vbDefaultButton4

768

Dordnc buton varsaylan

vbApplicationModal

Application modal; Kullanc devam edebilmek iin


seim yapmak zorundadr.

vbSystemModal

4096

System modal; Kullanc cevap verene kadar tm


sistem bekler

VBA

18

Visual Basic Kurs Notlar


vbMsgBoxHelpButton

16384

Help dmesi eklenir

VbMsgBoxSetForeground 65536

Mesaj kutusu penceresi, arka plan penceresi gibi


davranr

vbMsgBoxRight

524288

Mesajlar saa dayal yazlr.

vbMsgBoxRtlReading

1048576 Arapa ve branicedeki gibi yazlar sadan sola yazlr

Title : pencere bal


Helpfile ve context :F1 tuuna basnca arlacak help dosyas ve o dosyada gsterilecek olan
konunun numarasdr.
Kullancn hangi tua bast ise dn deerinden anlalr. Bu deerler:
Constant Deer

Aklama

vbOK

OK

vbCancel

Cancel

vbAbort

Abort

vbRetry

Retry

vbIgnore

Ignore

vbYes

Yes

vbNo

No

INPUTBOX Kullancdan bilgi alma


Kullancdan bilgi almak iin aadaki formattaki InputBox komutu kullanlr.
InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])
Prompt : mesaj
Title : pencere bal
Default : Varsaylan deer
Xpos,ypos : mesajn ekrandaki koordinati
Helpfile ve context :F1 tuuna basnca arlacak help dosyas ve o dosyada gsterilecek olan
konunun numarasdr.
Kullancn girdii deer string olarak geri dner.

VBA

19

Visual Basic Kurs Notlar


Excel ve VB ile pratik lemler
1- Hcre Semek.
Range("B2").Select
Cells(2,1).Select
[B2].Select
2- Hcreye deer atamak.
Range("B2").Value=100 'saysal deer
Range("B2").Value="Gkalp AKYZ Trnak iinde
3- Hcredeki Fontun Bykln deitirmek.
Range("B2").Font.Size=20
4- Hcredeki fontun adn deitirmek.
Range("B2").Font.Name="Verdana"
5- Hcredeki fontu Kaln,talic ve Alt izgili yapmak.
Range("B2").Font.Bold = True
Range("B2").Font.Italic = True
Range("B2").Font.Underline = xlUnderlineStyleSingle
yada
Range("B2").Select
Selection.Font.Bold = True
Selection.Font.Italic = True
Selection.Font.Underline = xlUnderlineStyleSingle
6- Hcrenin dolgu rengini deitirmek.
Range("B2").Interior.ColorIndex = 6 'Sar renk
7- Hcrenin Fontunun rengini deitirmek.
Range("B2").Font.ColorIndex = 3 'Krmz renk
8- Hcreye Forml yazdrmak.
Range("B2").Formula="=A1+A2"'A1 ve A2 hcresini toplar,B2 ye yazdrr.
9- Aktif olan hcrenin etrafndaki hcreyi semek
ActiveCell.Offset(1, 0).Select 'Aktif hcrenin altdakini seer.
ActiveCell.Offset(-1, 0).Select 'Aktif hcrenin stndekini seer.
ActiveCell.Offset(0, 1).Select 'Aktif hcrenin sandakini seer.
ActiveCell.Offset(0, -1).Select 'Aktif hcrenin solundakini seer.
10- Aktif olan hcrenin belirtilen kadar uzandaki hcreyi semek.
ActiveCell.Offset(0, 5).Select 'Aktif hcrenin sandaki 5. hcreyi seer.
11- Aktif hcreden belirtilen uzaklktaki hcreye deer atamak.
ActiveCell.Offset(1,1).Value = "DENEME" 'Aktif hcrenin altnda ve sandaki
hcreye DENEME yazdrr.
VBA

20

Visual Basic Kurs Notlar

12- Aktif hcrenin zerindeki iki hcrenin deerleri toplanr ve sonu aktif olan hcreye
yazlr.
Sub toplama()
t1 = ActiveCell.Offset(-1, 0).Value
t2 = ActiveCell.Offset(-2, 0).Value
ActiveCell.Value = t1 + t2
End Sub
13- Seili hcrelerdeki biimleri siler.
Selection.ClearFormats
14- Seili hcreleri aa teler.
Range("A1:A5").Select 'A1 ile A5 arasndaki hcreler seilir.
Selection.Insert Shift:=xlDown 'Seimi aa kaydrr. Burada sadece seili olan 5 adet hcre
aa kaydrlr.
15- Seili hcrelere ait hm satr telemek.
Range("A1:A5").Select
Selection.EntireRow.Insert '14. koddan farkl olarak seili olan hcrelere ait 1 ila 5 arasndaki
tm satrlar 5 satr aa telenir.
16- Seili hcrelere ait tm stunu telemek.
Range("D6:E7).Select
selection.EntireColumn.Insert
17- Ak olan Excel alma Kitabnn belirtilen sayfasndaki istenen hcreye deer atar.
Workbooks("Kitap1.xls").Worksheets("Sayfa1").Range("A1").Value = 3
18- Yaplan seimlerde bo olmayan hcre saysn verir.
Sub hucresayisi()
Dim kontur As Integer
kontur = Application.CountA(Selection)
MsgBox "Seimdeki dolu hcrelerin says:" & kontur
End Sub
19- 18. maddedeki kodlamada 'CountA' da bulunan 'A' kaldrlrsa seimde sadece ka
hcrede say (rakam) varsa onlarn adedini verir.
Application.Count(Selection)
20- Seili hcrelerin saysn verir.
Selection.Count
21- Seimin satr saysn verir.
Selection.Rows.Count
22- Seimin stun saysn verir.
Selection.Columns.Count
23- Deiik blgelerdeki seili alanlarn stun saysn verir.
VBA

21

Visual Basic Kurs Notlar


Sub sutunsayisi()
Dim i As Integer
Dim alankonturu As Integer
alankonturu = Selection.Areas.Count
If alankonturu <= 1 Then
MsgBox "Bu seimin kapsad " & Selection.Columns.Count & "_
stundur"
Else
For i = 1 To alankonturu
MsgBox "Alan " & i & " deki seimin kapsad " & _
Selection.Areas(i).Columns.Count & " stun"
Next i
End If
End Sub
24- Seili hcrenin altnda veriler varsa onlar seer. lk bo hcreden sonra ilk deer
olan hcreyi seer.
Range(ActiveCell,ActiveCell.End(xlDown)).Select
25- 24. de stteki hcreler iin ayn ilemi yapar.
Range(ActiveCell,ActiveCell.End(xlUp)).Select
26- 24. de sadaki hcreler iin ayn ilemi yapar.
Range(ActiveCell,ActiveCell.End(xlToRight)).Select
27- 24. de soldaki hcreler iin ayn ilemi yapar.
Range(ActiveCell,ActiveCell.End(xlToLeft)).Select
28- Aktif hcrenin etrafndaki dolu hcreleri seer.
ActiveCell.CurrentRegion.Select
29- Seimin etrafndaki dolu hcreleri seer.
Selection.CurrentRegion.Select
30- Aktif hcrenin bulunduu stunun tamamn seer.
ActiveCell.EntireColumn.Select
31- Seili hcrelerin bulunduklar stunlar tamamen seer.
Selection.EntireColumn.Select
30- Aktif hcrenin bulunduu satr tamamn seer.
ActiveCell.EntireRow.Select
31- Seili hcrelerin bulunduklar satrlar tamamen seer.
Selection.EntireRow.Select
32- alma sayfasnda bulunan btn hcreleri seer.
Cells.Select
VBA

22

Visual Basic Kurs Notlar


33- Dolu hcrelerden sonraki ilk bo hcreyi seer. (Stunlar iin.)
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select '(0,1) olduu zaman satrlar iin olur.
Loop
34. Srklenmeyi Engelleme
Hcrelerin tanabilir zellii her zaman iimizi kolaylatran bir zelliktir. Kopyalamak
istediimiz bir forml, hcrenin kenarndan tutup istediimiz ynde ektiimizde, formln
dier hcrelere de kolayca oaltldn grrz. Diyelim ki, A1 hcresine "Ocak" yazdnz
ve dier aylar da Excel'in oaltma zelliinden yararlanarak yazdrmak istiyorsunuz.
Aadaki resimlerde bunun bir rneini gryorsunuz.

Yada aadaki resimlerde olduu gibi, bir hcredeki bilgiyi yine fare yardm ile baka bir
hcreye tayabilirsiniz.

Evet bu tr yntemler her zaman faydal olmutur. Ama bir program yaptnz ve son
kullancnn bu yntemleri kullanmasn istemiyorsunuz. Tabi buna her zaman hakknz var. O
halde aadaki makro kodunu yazn.
Sub SuruklemeyiEngelle()
Application.CellDragAndDrop = False
End Sub
Burada CellDragAndDrop, Application nesnesinin bir zelliidir. Bu makroyu altrdnz
Excel dosyasnda hcrelerin Drag (Srkle) ve Drop (Brak) olayn engellemi olursunuz.
Makroyu altrn ve deneyin. Hcrelerin tanamayacan greceksiniz.
Bu zellii iptal etmek iin ise True deerini kullanmalsnz.
VBA

23

Visual Basic Kurs Notlar


UYARI: Bu zellii Auto_Open makrosuna yazarsanz, uygulama alr almaz etkinleir.
Ama zelliin kapatlmas iinde True deerini Auto_Close makrosuna yazmalsnz. Tabi siz
uygulamanzda istediiniz yere yazabilirsiniz. Aada basit bir yer gsterim verilmitir.
Sub Auto_Open()
Application.CellDragAndDrop = False
...........
...........
End Sub
Sub Auto_Close()
...........
...........
Application.CellDragAndDrop = True
End Sub
Aksi takdirde btn Excel almalarnzda DragAndDrop ilemi ile tablonuzu kullanclar
tablonun dzeni kontrolnz dnda deitirebilir ve programnzn almasn
engelleyebilirler.

RNEK UYGULAMALAR
Word Programn Rapor Arac olarak Kullanmak
Bu uygulamada kullanc farkna varmadan Worde belirli bir yaz kullanlarak arka planda
dkm alnmaktadr. Apllication nesnesinin (oWord ) visible zelliinin varsaylan deeri
false olduu iin word ekranda gzkmez. Ancak gzkmesini istersek bu zellik true
yaplmaldr.
VBA

24

Visual Basic Kurs Notlar

Private Sub cmdWordDoc_Click()


'Hata durumunda yaplacak ilemler
On Error GoTo cmdWordDoc_Err
'Lokal Nesne deikenlerini yaratn
Dim Word As Object 'Word.Application
Dim WordActiveDoc As Object ' Word.Document
Dim WordSel As Object ' Word.Selection
'Word nesnesini yaratn
Set Word = CreateObject("Word.Application")
'Word ierisinde yeni bir dkman yaratn
Set WordActiveDoc = Word.Documents.Add
Set WordSel = Word.Selection
'Seilen alana bir eyler yazalm
WordSel.TypeText "Bu satr VB tarafndan word'e yazdrlmtr."
WordSel.WholeStory
WordSel.Font.Name = "Arial"
WordSel.Font.Size = 12
WordSel.Font.Bold = wdToggle
'Dkman yazdr
WordActiveDoc.PrintOut
'karken yaratlan nesneleri yoketmeyi unutmayalm
Set oWordSel = Nothing
Set WordActiveDoc = Nothing
Set Word = Nothing
Exit Sub
cmdWordDoc_Err:
MsgBox Err.Number & vbCrLf & Err.Description & vbCrLf & Err.Source
End Sub

VBA

25

Visual Basic Kurs Notlar

VB ile Outlook program aracl ile mail gnderme


Bu rnekte ayni kuruluta yer alan birden fazla kullancya mesaj gnderilmesi gsterilmitir.
Mesajlarn gnderilecei kullanclarn alan ad (rnek tcmb.gov.tr) bir form zerinde
txtDomain isimli bir textBoxta yazldr. Gnderilecek kiilerin emailleeri ise ayni form
zerinde lstEmails adndaki bir Listboxta yazldr.
Private Function SendReturnEMail() As Boolean
' Hata Durumunda
On Error GoTo SendReturnEMail_Err
'Varsaylan dn deeri
SendReturnEMail = False
'Nesneler iin deikenleri yarat
Dim objSession As Object
Dim objMessage As Object
Dim objRecipient As Object
'dier deikenler
Dim i As Integer
Dim sSubject As String
Dim sText As String
Dim sName As String
' Emailde gnderilecek mesaj
sText = "Bu mesaj test amal olarak otomatik gnderilmitir, " & _
vbCrLf & "Ltfen aldnz email ile teyit ediniz."
'e mail konusu
sSubject = "Test Mesaj"
'MAPI session objesini yarat
Set objSession = CreateObject("mapi.session")
'Kullanlacak Lokal Outlook profilini belirle.
'Farkl bir profil kullanyorsanz deitirin.
objSession.LogOn profilename:="Microsoft Outlook"
'Email Listesini tarayp emailleri hazrla ve gnderme ilemi
For i = 0 To lstEmails.ListCount - 1
'tam email adresini olutur.
sName = Trim(lstEmails.List(i)) & "@" & _
Trim(txtDomain.Text)
'Mesaj nesnesini yarat
Set objMessage = objSession.outbox.messages.Add
'Hazrlanan deerleri mesaj nesnesine yaz
objMessage.subject = sSubject
objMessage.Text = sText
VBA

26

Visual Basic Kurs Notlar

'mesajn alcsn yaz


Set objRecipient = objMessage.Recipients.Add
'dier zellikler
objRecipient.Name = sName
objRecipient.Type = 1
'email adresinin doru olup olmadn kontrol er
objRecipient.resolve
'mesaj gnder
objMessage.Send showdialog:=False
'mesaj deikenini sfrla
Set objRecipient = Nothing
Set objMessage = Nothing
'bir sonraki kii ile devam
Next i
'ilem tamam
objSession.logoff
'yaratlan nesneleri sfrla
Set objSession = Nothing
'Baardmz dn deikenine yaz
SendReturnEMail = True
Exit Function
SendReturnEMail_Err:
MsgBox Err.Number & vbCrLf & Err.Description & vbCrLf _
& Err.Source
End Function

VBA

27

You might also like