You are on page 1of 95

Temel Bilgiler Makrolara Giri VBA (Visual Basic for Applications) Programlamaya Gei Deiken ve Veri Tipleri Program

Kontrol Deyimleri Dngler ve Kontrol fadeleri Operatrler Fonksiyonlar ve Alt Programlar Bilgi Giri ve Mesaj Pencereleri Disk ve Dosya Ynetim Komutlar String lemler Tarih ve Zaman Fonksiyonlar

Additional Kontroller Denetim Ara ubuu Formlar Ara ubuu Form Oluturma Dosyalama lemleri Rastgele Eriimli Dosyalar Sral Eriimli Dosyalar Dosya Kontrol Fonksiyonlar Excel de Program Yazma Hata Yakalama Debug Personel Program o ve daha birok rnek

YAZARLAR Adem KSEMAN


Bilg.Prog.

Mehmet ZPINAR
Bilg.Prog.

NN NVERSTES MALATYA 2004

NDEKLER
1. BLM Makro Nedir? 2. BLM MAKROLARA GR 4 5 6 7 8 11 11 17 18 22 25 26 26 27 27 27 27 28 28 28 29 29 29 29 29 30 32 33 Basit Bir Makronun Kayd Nasl Yaplr? Bir Makronun Ksa Yoldan altrlmas 3. BLM NEML ARA UBUKLARI ve ELEMANLARI Formlar Ara ubuu ve zellikleri Denetim Ara Kutusu ve zellikleri Formlar ve Denetim Ara ubuklarnn Karlatrlmas 4. BLM VBA (Visual Basic for Applications) VBA (Visual Basic for Applications) Componentleri ile alma Componentler ve Genel zellikleri Additional Controls En ok Kullanlan Ek Kontroller 5. BLM PROGRAMLAMAYA GE Deikenler ve Veri Tipleri Global ve Local Deiken Tanm Deikenlerin ve Kontrollerin Tipini Belirlemek Program Kontrol Deyimleri If Yaps Select Case Yaps IFF Choose-Switch Dng Deyimleri For Dngs While - Wend ve Do While-Loop Dngs Do Until Loop Dngs Do Loop While ve Do Loop Until Dngs Dng Kontrol fadeleri Exit Do Exit For Exit Sub, Exit Function End With With End Operatrler Fonksiyonlar ve Alt Programlar Procedur Tanm Procedur ars TEMEL BLGLER 1 2 Excel deki baz nemli kavramlar

6. BLM

BLG GR ve MESAJ PENCERELER 34 36 37 39 40 41 43 44 45 47 47 49 49 52 79 80 83 84 86 88 90 91

MsgBox (Mesaj Kutusu) InputBox (Bilgi Giri Kutusu) 7. BLM KOMUTLAR Disk ve Dosya Ynetim Komutlar Tarih ve Zaman Fonksiyonlar Uygulamalarla lgili Komutlar String lemleri Rastgele Say retim Fonksiyonlar Yuvarlatma Fonksiyonlar 8. BLM DOSYALAMA LEMLER Dosya Amak Rastgele Eriimli Dosyaya Yazma ve Okuma Sral Eriimli Dosyaya Yazma ve Okuma Dosyalar Kapatmak Dosya Kontrol Fonksiyonlar 9. BLM EXCEL de PROGRAM YAZMA Personel Program eitli rnekler rnek 1 Otomatik Toplam rnek 2 - Hesaplama ve Dosyalama rnek 3 Dosyadan Bilgi Alma rnek 4 Banka deme Plan Hesaplamas rnek 5 arpm Tablosu rnek 6 Toplam Deer Bulma Hata Ayklama Programn Adm Adm altrlmas

NSZ

Bilinli kullanc olmak, her eyden nce, sz konusu rn veya hizmeti yakndan tanmak ve onunla ilgili temel kavramlar bilmekten geer. Dolaysyla tketici konumunda olsak bile, tkettiimiz rn veya hizmetin zelliklerini bilmeye almalyz. Bu anlamda gnlk hayatta ev ve ofislerde kullandmz Excel ile yaplan nemli ilevleri sadece iimiz grlsn diye kullanmaktayz. Halbuki Excel ile bir programlama dili gibi btnleebilirsiniz. Excelin bnyesinde bulunan Ara ubuklarndan, Formlar ve Denetim Ara ubuu vastasyla hibir kod yazmadan baz zel ilemleri, hem kolay hem de gzel bir grnt vererek yapabilirsiniz. Veri sorgulama, bulma, deitirme gibi ilemler de formller kullanlamayaca iin bu tr ilemler de makrolara ihtiya duyulur. Bunun iin biraz programlama bilgisi ile Excel de gvenli, ilevsel ve akc bir program yazabilirsiniz. Excel in bu anlamda sunmu olduu VB (Visual Basic ) editrnden faydalanlr ve burada form ve form elemanlar ile alabilirsiniz. Kitabn yazm amac, Excel in farkl ynlerini gstermek ve programclk mantn anlatmaktr. Kitabn yazm aamasnda yardm ve desteklerini esirgemeyen sayn hocamz N.Murat Yamurlu hocamza sonsuz kranlarmz belirtmek istiyoruz. Mehmet ZPINAR mozpinar@e-kolay.net Adem KSEMAN kosemanadem@hotmail.com

Blm -1-

TEMEL BLGLER

Excel deki Baz nemli Kavramlar Hcre Excel Excel 97, 2000, 2002 ve 2003 gibi, yeni bir kitabn yeni bir alma sayfasnda, her bir hcreye 32,767 karakterlik bilgi kabul eder. Bir sayfada en fazla 65,536 satr olabilir. Excel bilgileri, hcrelerin iine yazlr; bunun iin hcrenin seili olmas gerekir. Bir hcreyi iini tklayarak seiiniz zaman hcrenin ad, Ad Sekmesinin iinde gsterilir. Hcrelerin ad, bulunduklar stunun harfi ve bulunduklar satrn numaras yan yana getirilerek verilir: A1 gibi. Hcre adna Excel dilinde adres, bavuru adresi veya referans denir. Bir hcre seildii anda, o hcrenin stun ve satr balklar da koyu harflerle gsterilir. Excel bilgisinin temel ta, hcreleri tanmak ve tantmaktr diyebiliriz. Excele hesap yaptrmak, bir hcre ile bir dier hcreyi veri al-verii ilikisine sokmak demektir. Baka bir deyile Excel de sadece gzel ve dzenli listeler yapmayacak, sayfalarnza girdiiniz bilgilerle hesaplar yaptracaksanz, bu, bir hcrenin, bir veya daha fazla sayda dier hcrede bulunan bilgileri alp, bunlarla matematik, mal, istatistiksel veya bir baka kategorideki ilemi yapmas demektir. Excelde hcrelerin bavuru adresi, tek hcreler iin rnein A1, birden fazla hcre iin ise grubun, balang ve biti hcreleri, iki nokta st ste iaretiyle birletirilerek (A1:A10 gibi) yazlr. Birden fazla stunu kaplayan ok sayda satr seerseniz, bu grup birinci stunun ilk hcre ile son stunun son hcresinin adyla adlandrlr (A1:D10 gibi). Excel dilinde hcre gruplarna Aralk (Range) denir. (Excel 2000de Excel 97deki Erim kelimesinin terkedildii grlyor!) Excel de bir hcreyi semek iin hcrenin iini tklamanz yeterli. Bir birine komu olmayan hcreleri semek iin, ilk hcreyi setikten sonra, klavyede Ctrl tuunu tutun ve bu kez seilecek dier hcreleri tklayn. Ayn ekilde bir birine komu olmayan hcre gruplarn da seebilirsiniz. Bir hcreyi tkladnz zaman forml ubuunun solunda adres sekmesinde hcrenin adresinin belirdiine dikkat edin. Birden fazla komu hcreyi seseniz de adres sekmesinde bu grubun semeye baladnz ilk hcresinin ad yazl olur. Hcreler arasnda hareket iin klavyedeki hareket tularn kullanabilirsiniz. Yukar ok: Bir hcre yukar Aa ok: Bir hcre aa Sa ok: Bir hcre saa Sol ok: Bir hcre sola Sekme: Bir hcre saa st-karakter (Shift )-Sekme: Bir hcre sola Home: Satrn birinci hcresine Page Up: bir pencere dolusu (ekran znrlnze ve ekrannzn byklne bal olarak, takriben 30-36 satr kadar) yukar. Page Down: Bir pencere dolusu satr kadar aa Ctrl+Home: A1 hcresine Ctrl+end: iinde bilgi olan son satrn son stunda hcreye Ctrl+Page Down: Bir sonraki alma sayfasnn seili hcresine (seili hcre yoksa A1e) Ctrl+Page Up: Bir nceki alma sayfasnn seili hcresine (seili hcre yoksa A1e) Birden fazla hcre seebilmek iin seeceiniz grubun sol st hcresini tklayn; Mouse iaretisini grubun sol alt hcresine kadar srkleyin. Mouse iaretisini braktnz anda, setiiniz hcreler grubunun evresinde kaln bir izgi oluur; sol-st hcrenin zemini beyaz olmak zere dier yelerinin zemini renklendirilir. Bir satrdaki veya stundaki btn hcreleri semek iin, satrn veya stunun baln tklamanz yeterlidir. Birbirine komu satrlarn veya stunlarn tmn semek iin ilk satr veya stunu tklayn; Mouse iaretisini seilecek satr veya stun balklar boyunca srkleyin. Birbirine komu olmayan satr ve stunlarn tmn semek iin, ilk satr

veya stunu tkladktan sonra klavyede Ctrl tuunu tutun ve dier satr veya stunlarn balklarn tklayn. Hcrelerin eni-boyu stun veya satr balklar arasndaki izgiler saa-sola veya yukar aa kaydrlarak deitirilebilir. Forml Excel belgelerini bir kelime-ilem programyla yaplabilen listelerden farkl klan, formlleridir. Forml, bir hcreye girdiimiz ve bize bir sonu bildiren denklemdir. Formlleri, Forml ubuuna, = iaretiyle balayarak yazarz. Formln sonucu, formln bulunduu hcrede gsterilir. Bir formlde u unsurlar bulunabilir: 1. lem iaretleri: art, eksi, arp, bl. (Excel in yardm metinlerinde bunlara ile dendiini greceksiniz.) 2. Hcre veya hcre grubu adresleri (bavuru, referans): A1, B2 A1:A15 gibi 3. Saylar ve metinler 4. Excelin kendi kullanlmaya hazr fonksiyonlar (SUM gibi) Bir hcreye forml, elle girebiliriz. Bunun iin hcreyi seip, forml ubuuna nce eittir (=) iaretini, ardndan formln dier unsurlarn yazarz. rnein, A3 hcresinde A1 deki deerin A2 ye blnmesinin sonucu yer alsn istiyorsak, A3 tklayp forml ubuuna =A1/A3 yazmamz gerekir. Forml giriinin bittiini belirtmek iin klavyeden Enter tuuna basmak veya baka bir hcreyi tklamak gerekir. Formlleri, Mouse iaretisiyle, hcrelere, hcre gruplarna iaret ederek de girebiliriz. Yukardaki rnei iaretleyerek uygulamak iin, A3 tklayp, = iaretini yazdktan sonra, klavyede yukar ok tuuna iki kere basarak, A1 i seilmi hale getirmek, klavyede bl (/) tuuna basmak, tekrar yukar oka basarak A2 yi seilmi hale getirdikten sonra Entera basmak yeter. Bu ilemi yaparken, yukar oklara bastnz srada Excel in A1 ve A2 hcrelerinin evresine kesik izgili bir ereve koyduuna dikkat edin: bu hcrenin bir formlde referans olarak kullanlacann iaretidir. Excelde formlleri zel bir blmde ele alacaz. Makro Nedir? Microsoft Excel'de bir ii sk gerekletiriyorsanz, bu ii makro kullanarak otomatikletirebilirsiniz. Makro, Microsoft Visual Basic modlnde (modl: Bir tek adlandrlm birim halinde depolanan bir bildiriler, deyimler ve yordamlar btn. ki tr modl vardr: standart modller ve snf modlleri.) saklanan ve ii her gerekletirmeniz gerektiinde altrlabilen bir komut ve fonksiyonlar (fonksiyon: Bir deer veya deerleri alan, bir ilemi gerekletiren ve bir deer veya deerler dndren, nceden yazlm bir forml. alma sayfasndaki formlleri, zellikle uzun veya karmak hesaplamalar yapanlar sadeletirmek ve ksaltmak iin fonksiyonlar kullann.) dizisidir. rnein, hcrelere sk sk uzun metin dizileri giriyorsanz, bu hcreleri ilerindeki metinleri kaln, eik ve alt izili ekilde biimleyen bir makro oluturabilirsiniz. Makro kaydetme Bir makro kaydettiimizde Excel, Excel zerinde yaptmz her trl ii veya olay, siz bir dizi komutu gerekletirmisiniz gibi saklar. Bundan sonra, makroyu altrarak komutlarn yinelenmesini veya yeniden yrtmesini salarsnz. Makro kaydederken hata yaparsanz, yapacanz dzeltmelerde kaydedilir. Visual Basic (Visual Basic: Basic in yksek dzeyli bir programlama srm. Visual Basic Microsoft tarafndan Windows tabanl uygulamalar oluturmak iin gelitirmitir.) her makroyu bir alma kitabna ilitirilen yeni bir modlde saklar. Makronun kolay almasn salama Makrolar, Makro iletiim kutusundaki (Aralar mensnden Makro/Makrolar) listeden seerek veya bir butona, fonksiyon tuuna(F6),

tu kombinasyonuna(Ctrl+H) hatta grafik nesnesine de(Otomatik ekiller veya resim) atayarak kolayca altrabilirsiniz. Makrolar ynetme Makro kaydettikten sonra hatalar dzeltmek veya makronun ileyiini deitirmek iin Visual Basic Dzenleyicisi (Aralar mensnden Makro/Visual Basic Dzenleyicisi veya ALT+F11)(Microsoft Visual Basic Editor: Kaydettiiniz makrolar dzenleyebileceiniz ve yeni makrolar ve Visual Basic for Applications programlar yazabileceiniz bir ortam.) ile makro kodunu grebilirsiniz. rnein, metni biimlendiren makronun ayn zamanda metni ortalamasn da istiyorsanz, hcrede metni sola yaslamaya yarayan bir makro kaydedebilir ve sonra bu makrodaki ynergeleri metni biimlendiren makroya kopyalayabilirsiniz. Visual Basic Dzenleyicisi, makro kodu yazmay ve dzenlemeyi yeni balayanlar iin kolaylatrmak amacyla tasarlanm bir programdr. Makrolarnzda basit deiiklikler yapmak iin programlama renmeniz veya Visual Basic dilini kullanmanz gerekmez. Visual Basic Dzenleyicisi ile makro dzenleyebilir, makrolar bir modlden dierine kopyalayabileceiniz gibi, farkl alma kitaplar arasnda da kopyalama yapabilir, makrolar saklayan modlleri veya makrolar yeniden adlandrabilirsiniz. Makro gvenlii Excel, makrolarla bulaabilen virslere kar koruma salar. Hazrladnz makrolarn virs iermediinden emin olduktan sonra bir baka bilgisayarda altrabilmeniz iin ncelikle makro gvenlik seviyesini drmeniz gerekmektedir. Bunun iin Aralar mensnden Makro/Gvenlik ve buradan Dk seeneini sememiz gerekmektedir.

Blm -2-

MAKROLARA GR

Basit bir makro kayd nasl yaplr? Bir makro kayd yapmak iin Aralar mensnden Makro ve alt sekmesi olan Yeni Makro Kaydet i seelim.

Karnza gelen Makro Kaydet iletiim kutusunda kaydedeceimiz makronun adn, ksayol tanmlamasn, makronun nereye kaydedileceini ve makroyla ilgili aklamalar ayarlayabileceiniz gibi makro kayd bittikten sonrada yapabilirsiniz. Bu yzden biz hibir ayar yapmadan Tamam tklayarak makro kaydn balatyoruz. Kayt baladktan sonra Excel zerindeki yaptmz her ey kaydedilmektedir. Excel bizi kameraya alyor dersek yanl olmaz heralde. Bu kayd durdurabilmemiz iin ise kk bir Kayt Durdur kutucuu alacaktr. Bu kutucuun zerinde iki tane dme vardr. Bunlardan biri Kayd Durdur dieri ise Greli Bavuru dmeleridir. Kayd Durdur, kayt iimiz bittiinde kayd bitirmemize yarayan dmedir. Greli Bavuru dmesi ise, makronun, etkin hcrenin konumuna greli olarak almasn isterseniz, makroyu, greli hcre bavurular kullanarak kaydedebilirsiniz. Siz Excel den kncaya veya Greli Bavuru yu yeniden tklatp seimini kaldrncaya kadar, Excel greli bavurular kaydetmeye devam eder. Kaydedilmi bir makronun altrlmas Daha nce kaydettiimiz bir makroyu altrmak iin daha nceki konular da bahsettiimiz gibi eitli yollar vardr. imdilik bunlardan bir tanesini greceiz. Bunun iin Aralar mensnden Makro/Makrolar veya Alt+F8 e basalm. Karmza gelen bu pencerese daha nce kaydettiimiz makrolarn

listesini ve bu makrolarla ilgili ayarlar grebilirsiniz. altrmak istediiniz makroyu seip altr dmesine tkladnzda kaydettiiniz makro alacaktr. Bu penceredeki dier elemanlara da bakacak olursak; Admla, setiimiz makronun iinde yer alan kodlar tek tek altrr. Yani kaydederken yaptmz olaylar Admla ile tek tek altrabiliz. Bunun bize faydas, istediimiz yerde almasn durdurabilir, atlatabilir veya yanl yaptmz yerleri kolayca yakalamamza yardmc olur. Dzenle, setiimiz makronun kodlarn dzenleyebilmemiz iin Visual Basic Dzenleyicisini aar. Burada kodlar zerinde her trl deiiklik yaplabilir. Bu konu ileriki konularda ayrntl bir ekilde anlatlacak. Sil, seili olan makroyu siler. Seenekler, seili makronun ksayol tanmnn ve aklamasnn yapld alanlar ierir. Makro yeri ise, makronun nerede alacan belirler. Bir makronun ksa yoldan altrlmas Makro altrma yntemlerinden basite olann bir nceki konuda grdk. Ksayol tularyla altrmak iin ksayol tanmnn nasl yapldnda daha nce grmtk. Bunu altrmak iin tanmladmz ksayol tularna basmamz yeterli olacaktr. Dier bir yntem ise grafik nesneler veya resimlere makro atamak ve daha sonra bu nesnelere bir kez tklayarak ilgili makroyu altrmak. Bunun iin Grnm mensnden Ara ubuklar na oradan da izim i seelim. alma kitabmzn alt tarafna izim ara ubuu otomatik olarak yerleti. imdi bu ubuktaki Otomatik ekil den herhangi bir ekli seelim ve sayfamza bir tane izelim. Bu ekil zerinde Mouse ile sa tklayn ve Makro Ata y sein. Alan pencerede daha nce kaydettiiniz makrolarn listesi yer almaktadr. Bunlardan atamak istediinizi seip Tamam a tklayn. Artk o ekil zerine bir kez tkladnzda makronuz alacaktr. Eer daha nce kaydettiiniz makro yoksa bu alan pencereden direkt olarak makro kaydedebilirsiniz ve atama otomatik olarak yaplcaktr. Ayn ilemleri bir resime veya sayfa zerinde duran herhangi bir nesneyede uygulayabilirsiniz. Makrolarn butona tklanarak altrlmasna Blm -3- te geni bir ekilde yer verilecektir.

Blm -3-

NEML ARA UBUKLARI VE ELEMANLARI

Formlar Ara ubuu Bu ubuk zerinde bulunan elemanlarn zellikleri makro atanabilmeleri ancak ilerine makro yazlamamasdr (iine makro yazlmas ileri konularda anlatlacak). Bizim burada kullanacamz elemanlar unlardr; Dme, Etiket, Onay Kutusu, Seenek Dmesi, Liste Kutusu, Alan Kutu, Kaydrma ubuu, Deer Deitirici ve Grup Kutusu. Dme: Bu eleman kullanmak iin Formlar ara ubuundan Dme yi semek yeterlidir. Seili iken sayfaya bir kez tklayn, dme otomatik olarak sayfaya yerleecek ve ardndan Makro Ata penceresi alacak. Buradan yeni makro kayd, makro atamas veya elle makro yazabilirsiniz. Yeni bir makroyu Dme yoluyla oluturmak daha ksa bir srede ve ok daha kolay bir ekilde yaplabilir. Dolaysyla Blm -2- deki ilemlerin bir ouna gerek kalmaz. Dmenin adn, zerine bir kez tkladktan sonra deitirebilirsiniz. Etiket: Formlar ara ubuunun stndeki dier elemanlar etiketlendirmek iin kullanlr. Etiket adn, zerine bir kez tkladktan sonra deitirebilirsiniz. Onay Kutusu Genellikle oklu seimler yapmak iin kullanlr. Bu elemann seili olup olmad DORU YANLI deerleriyle belirlenir. Bunun iin ilk nce bir hcre balants yaplmaldr. Balanty yapmak iin elemann zerine sa tklanp Denetimi Biimlendir seilmelidir. Karnza gelen Kontrol Biimlendir penceresinden Denetim sekmesini sein. Orada bir takm seenekler vardr. Bunlardan Hcre Balants ksmna balantnn yaplaca adres yazlr. Adresi otomatik yazdrmak sa tarafndaki butona basp alan istiyorsanz bu kutunun pencereyi kapatmadan bir hcre seip Enter tuuna basarak adresi alabilirsiniz. Bylece hcre balants yaplm olur. Bu pencerede bulunan dier seenekler ise unlar; aretlenmemi, yani Onay Kutusu bo ve Hcre Balantsnn oluturulduu hcrede YANLI yazar. aretlenmi, yani Onay Kutusu iaretli ve balant yaplan hcrede DORU yazar. Dier bir seenek ise Karma, bu da hi manasna gelmektedir. Yani her ikiside deil ve balant yaplan hcrede #YOK yazar. Balantl hcre bosa Excel Onay Kutusunun durumunu YANLI olarak yorumlar. 3-B Glgelendirme, Onay Kutusunu 3 boyutlu glgelendirme efektiyle grntlenmesini salar. Seenek Dmesi Tek sonucu olan seenek sunumlarnda kullanlr. Bu elemann seili olup olmad ka tane Seenek Dmesi varsa ona gre sra numaras alr. Bunun iin hcre balants yaplr. Hcre balants Onay Kutusu ile ayn ekilde yaplr. Liste Kutusu Srekli olarak kullandnz verileri bir listede tutmak ve istediiniz zaman rahatlkla o veriyi bulup gerekli bilgilere eriebileceiniz bir form eleman. Listedeki her elemann bir sra numaras vardr. Ve bu sra numaras hcre balants yapldnda alaca deerdir. Hcre balants dier form elemanlar gibi Denetim Biimlendir iletiim kutusundan yaplr. Burada Girdi Aral ksmna listede yer alacak olan verilerin bulunduu adres yazlr. Hcre Balants ksmna ise dier form elemanlar gibi bir balant hcresi seilir. Hangi elemann seili olduu bu adresten bulunur. Seim Tr Birden ok yada Geni ayarlanrsa Hcre Balants kutusunda belirtilen hcre gz ard edilir. Liste kutusunun grevi en iyi aadaki rnekle anlalacaktr. Sayfa 2 nin A stununa 5 tane il ad, B stununa o ilin trafik kodu ve C stununun C1 hcresini de Liste

Kutusunun hcre balant adresi olarak belirtelim. imdi de listeden seilen ilin trafik kodunu reneceimiz hcre formln yazalm. Sayfa 1 de Liste Kutusunun hemen yanndaki hcreye gelelim ve unlar yazalm; =NDS(Sayfa2!B1:B5;Sayfa2!C1;1) ndis formlnn grevi bir tablo yada aralktan bir deer yada deere yaplan bavuruyu vermektir. Bu forml trafik kodunun yazdrlaca hcreye girildikten sonra o hcrede hangi il seilmise ona ait trafik kodu yazacaktr. Alan Kutu Bu form elemann Liste Kutusundan tek fark Alan Satrlar kutusudur. Bu da alan listede ka tane elemann grntleneceini belirtmemize yarar. Bunun dnda her trl kullanm Liste Kutusuyla ayndr.

Kaydrma ubuu Bu form elaman kaydrma oklarn tklattnz veya kaydrma kutusunu srklediinizde belirttiiniz deer aral boyunca kaydrma ilemi yapar. Kaydrma kutusuyla kaydrma oku arasna tklatarak, deerler sayfas boyunca hareket edebilirsiniz. Deer atamak iin elemann zerinde sa tklayp Denetimi Biimlendir seenei seilerek denetim tabna geilir. Burada gerekli dzenlemeler yaplr. Geerli deer, Kaydrma kutusunun kaydrma ubuundaki ilk deeridir. En kk deer, Kaydrma ubuunun en kk deerinin belirlenmesi. En byk deer, Kaydrma ubuunun en byk deerinin belirlendii yer. Art deeri, Kaydrma ubuunun ularndaki ok iareti tklatldnda, kaydrma kutusunun hareket ettii mesafe miktar. Sayfa deiimi, Kaydrma kutusuyla kaydrma oklarnn birinin arasnda tklattnzda, kaydrma kutusunun hareket ettii mesafe miktar. Hcre balants, Kaydrma kutusunun hangi hcreyle ilikilendirileceini belirleyen blmdr. 3 Boyutlu Glgelendirme, Kaydrma ubuunu 3 boyutlu glgelendirme efektiyle birlikte grntler. Deer Deitirici Deeri artrr veya azaltr. Deeri artrmak iin yukar okunu, azaltmak iin aa okunu tklatn. Yine bu eleman bir hcreye balamak iin elemann zerine sa tklayp Denetimi Biimlendir seilerek Denetim sekmesinde gerekli ayarlar yaplr. Hcre balants ksmna balamak istediiniz hcrenin adresini veya o hcreyi gidip semekle o hcrenin adresini yazm olursunuz. Denetim Ara Kutusu Denetimler, veri grntlemek veya girmek, bir eylem gerekletirmek veya formu daha kolay okunabilir hale getirmek iin bir forma yerletirdiiniz grafik nesneleridir. Bunlar yandaki ekilde grld gibi Metim Kutusu, Komut Dmesi, Seenek Dmesi vs. nesne elemanlarndan olumaktadr. Denetimler kullanclara seilecek seenekler veya tklatlacak dmeler sunar; bunlar makrolar veya web kodlarn altrr. Microsoft Excel iki tr denetime sahiptir. ActiveX Denetimleri(ActiveX denetimi: Onay kutusu veya dme gibi kullanclara seenekler sunan veya bir grevi otomatikletiren makrolar veya komut dosyalarn altran bir denetim.) birok durum iin uygundur ve hem Microsoft Visual Basic for Application (VBA: Microsoft Visual Basic'in Windows uygulamalarn programlamak iin kullanlan ve baz Microsoft uygulamalaryla birlikte gelen makro dili srm.) makrolar hemde web kodlar ile alr. imdi ksaca bu denetimler nelerdir ve kullanmlar hakkndaki bilgileri grelim. Design Mode (Tasarm Modu) Bu dme tasarm moduna gemek veya tasarm modundan kmak iin kullanlr. Bir tasarm dan veya programlamadan sonra programmz altrabilmemiz iin tasarm modundan kmamz gerekir.

Properties (zellikler) Bu dme seili denetim elemann zelliklerine eriebilmemize yarayan pencereyi aar. Burada bulunan ayarlara ilerideki konularda daha geni bir ekilde yer verilecektir. View Code (Kod Grntle) Bu dme seili denetimin kodlarn grntlememize yarar. Denetimlerin zerlerine ift tklandnda yine ayn yer alacaktr. Check Box (Onay Kutusu) kutusuyla ayn ie yarar. Text Box (Metin Kutusu) Bu denetim Formlar Ara ubuunda bulunan onay

Bilgi girii iin kullanlan denetimdir. Tklandnda eylen, olay balatan denetimdir. Seenek grubundan bir seenek belirlenmesine

Command Button (Komut Dmesi) Option Button (Seenek Dmesi) yarayan denetimdir.

List Box (Liste Kutusu) erisinde srekli kullanlacak olan bilgileri tutar. Gerek duyulduunda listeden istenilen eleman seilecek bilgiye ulalr. Combo Box (Karma Kutu) Liste Kutusunun alabilir olandr. Tklatlnca basl kalan, yeniden tklatlnca da

Toggle Button (Deitirme Dmesi) serbest kalan dme.

Spin Button (Dndrme Dmesi) Hcreye veya metin kutusuna ilitirilebilen dmedir. Deeri artrmak iin yukar, azaltmak iin aa okunu tklanr. Scrool Bar (Kaydrma ubuu) Kaydrma oklarn tklattnz veya kaydrma kutusunu srklediinizde deer aral boyunca kaydrma ilemi yapmaya yarayan denetimdir. Label (Etiket) alma sayfas veya forma denetim, alma sayfas veya form hakknda bilgi salamak iin eklenmi metin. Picture (Resim) Forma resim kattran denetimdir.

Additional Controls (Dier (Ek) Denetimler) Ek ActiveX Denetimlerinin listesinin grntlenmesine yarar. Alan listeden istediinilen farkl bir denetimi seerek forma eklenebilir. Formlar ve Denetim Ara ubuklarnn Karlatrlmas ActiveX Denetimleri Hakknda Ne zaman kullanlr : ActiveX Denetimini birok evrimii form iin kullann, zellikle denetim kullanldnda meydana gelen farkl olaylar denetlemeniz gerektiinde. rnein, alma sayfasna liste kutusu denetimi ekleyebilir ve sonra da kullancnn listeden yapt seime bal olarak farkl eylemler gerekletirecek bir makro yazabilirsiniz. Denetimler ne yapabilir : ActiveX denetimleri, Microsoft Visual Basic gibi programlama dillerinde bulunan denetimlere benzer ve Visual Basic Dzenleyicisi'ndeki zel formlara ekleyebileceiniz denetimlerle ayndr. Bir alma sayfasna ActiveX denetimi eklediinizde, denetim tklatldnda altrlacak bir makro atamann aksine, denetimin kimlik numarasna referans eden makro kodu yazarsnz. Formun bir kullancs denetimi kullandnda, kodunuz alr ve meydana gelen tm olaylar iler. Denetimler ne yapamaz : ActiveX denetimlerini grafik sayfalarnda veya XLM makro sayfalarnda kullanamazsnz. Bu tip durumlarda, Formlar ara ubuu denetimlerini kullann. Dorudan denetimden alan bir makro eklemek istiyorsanz, bir Formlar ara ubuu denetimi kullann.

zel zmlerdeki ActiveX denetimleri : ActiveX denetimlerinin, zelletirebileceiniz zellikleri vardr. rnein, bir kullanc denetimin zerine geldiinde iaretinin alaca grnm belirleyebilirsiniz. ActiveX denetimleriyle ilikili olaylara yant olan makrolar yazabilirsiniz. ActiveX denetimlerini hem Excel formlarnda hem de VBA programlarndaki formlarda ve iletiim kutularnda kullanabilirsiniz. Web sayfalarndaki ActiveX denetimleri : Web sayfalarna koymay planladnz Excel formlar ve verileri iin, ActiveX denetimleri dahil edebilir ve denetimler bir Web taraycsnda kullanldnda alacak Web kodlar (makro kodundan baka) yazabilirsiniz. Kodlar Microsoft Kod Dzenleyicisi'ni kullanarak Excel'de VBScript (Visual Basic Scripting Edition) programnda yazabilirsiniz. Denetimler nerede bulunur : ActiveX denetimleri salayan bir ara ubuudur. Bu denetimlerin bazlar Formlar ara ubuu denetimlerine benzemektedir ve deitirme dmeleri ve resim denetimleri gibi dierleri Formlar ara ubuunda kullanlamaz. Denetim Ara Kutusu ayn zamanda dier programlar tarafndan yklenen zel ActiveX denetimleri ierir, rnein Microsoft Internet Explorer tarafndan yklenen etkin film denetimi. Form Denetimleri Hakknda Ne zaman kullanlr : Bir forma ilikin tm makrolar kaydetmek istiyorsanz ama hibir makro kodunu VBA'da yazmak veya deitirmek istemiyorsanz Formlar ara kutusundan bir denetimi kullann. Ayrca grafik sayfalarndaki Formlar ara kutusu denetimlerini kullanabilirsiniz. Denetimler ne yapabilir : Bu denetimler dier kullanclarn Microsoft Excel kullanarak doldurduu alma sayfas formlarnda kullanmak iin tasarlanmtr. Varolan bir makroyu bir denetime ilitirebilir ya da yeni bir makro yazabilir veya kaydedebilirsiniz. Formun bir kullancs denetimi tklattnda, denetim makroyu altrr. Denetim neler yapamaz : Formlar ara ubuu denetimleri, ActiveX denetimlerinin kullanlabildii gibi, olaylar denetlemek iin kullanlamaz. Buna ek olarak, Formlar ara ubuu denetimleri web sayfalarnda web kodlar altrmak iin kullanlamazlar. Denetimler nerede bulunur : Formlar ara ubuu denetimleri Formlar ara ubuunda bulunur. rnekler: Form denetimi: rneimiz de hcrelere girilmi on saynn toplamn bulacaz. lk nce alma sayfamza bir tane Dme getirip brakalm ve kan pencereden Kaydet i sonraki pencerede ise Tamam tklayalm. Daha sonra makro kaydn durdurmak iin Aralar/Makro/Kayd Durdur u seelim ve kayd durduralm. Tekrar ayn menye girip bu kez Makrolar seelim. Alan pencereden kaydettiimiz makroyu seip Dzenle ye tklayalm. Karmza VBA kodlarn yazacamz kod penceresi geldi. Kod penceresinde yeil ile yazlm olan ksmlar aklama satrlardr bunlar silebilirsiniz. imdi aadaki kodlar yazalm. Sub makro1() For i = 1 To 10 1den 10 a kadar dng alyor. Top = Top + Cells(i, 1) deikene dng her dndnde deer atanyor Next i dng kapatlyor MsgBox Top sonu mesaj olarak kullancya bildiriliyor. End Sub

ActiveX denetimi : Bu rneimizde on satrdan ka tanesinin dolu ka tanesinin bo olduunu bulup E1 hcresine dolu hcre saysn E2 hcresine ise bo hcre saysn yazdrtalm. Bunun iin Denetim Ara ubuundan CommandButton u alma sayfamza getirelim. Ve CommandButton un zerine ift tklayarak kodlar yazacamz pencereye ulaalm. Buraya aadaki kodlar yazalm. Private Sub CommandButton1_Click() For i = 1 To 10 If Cells(i, 1) <> "" Then Eer hcreler dolu ise dolu deikeni bir arttrlyor dolu = dolu + 1 End If dng kapatlyor If Cells(i, 1) = "" Then Eer hcreler bo ise bos = bos + 1 bos deikenin bir arttrlyor End If dng kapatlyor Next i Cells(1, 5) = dolu dolu deeri E1 hcresine Cells(2, 5) = bos bos deeri E2 hcresine yazdrlyor. End Sub imdi programn alabilmesi iin Design(Tasarm Modu) nun kapatlmas gerekiyor. Kapatmak iin Denetim Ara ubuundan tasarm modu butonunu sein.

10

BLM -4-

VBA (Visual Basic for Applications)

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

VBA (Visual Basic for Applications) Componentleri ile alma Excel de makro yazabilmek iin VB editr kullanlr. Dolaysyla makro daki bir ok komut VB komutlaryla ayndr. VB editrn amak iin Aralar mensnden Makro seeneinin alt mensnden Visual Basic Dzenleyicisi seilir. Yada Alt+F11 tu kombinasyonlar kullanlr. Ekrana gelen VB editrnde sol tarafta Project-VBAProject penceresinde alm olan btn sayfalarn isimleri mevcuttur. Standart 3 sayfa olduu iin Sayfa1 (Sayfa1), Sayfa2 (Sayfa2), Sayfa3 (Sayfa3) eklinde yazldr. Ayrca ThisWorkbook seenei o anki alma kitabn temsil etmektedir. Yine sayfann sol tarafnda sayfalara ait Properties ler (zellikler) penceresi yer almaktadr. Bu blmden projenizdeki elaman ve nesnelerin zelliklerini deitirebilirsiniz. Sayfann st orta tarafnda ise yan yana iki tane alr kutu mevcuttur. lk bata bunlarn birinde General, dierinde ise Declerations yazldr. General blmnden WorkSheet seildiinde alma sayfasnn olaylar ksmna gei yaplyor. Sa taraftaki alr kutuda ise alma sayfasna ait olaylar listelenmitir. Burada yaplan projeyi altrmak iin RUN mensnden Run seilir veya F5 tuu ile program altrlr. VB editrnde birok VB elemanlarn kullanbilirsiniz. Component lerin (Bileen) Genel zellikleri Name : Elemann program ierisinde kullanlaca ismidir. Bu isim bir deiken gibi kullanlacandan Trke karakter ve ilk karakterde say kullanlmamaya zen gsterilmelidir. BackColor : Elemann arka zemin rengidir. BorderColor : Elemann kenarlk rengini belirler. BorderStyle : Elemann kenarlk tipi buradan belirlenir. Caption : Elemanlarn zerinde yazan isimlerdir. Tke karakter alabilir ve istenilen karakterle balayabilir. Enabled : Deer True ise eleman aktif, False ise pasif olur ve rengi pasif bir renk olur. Font : Elemann yaz tipini, boyutunu ve biimini belirlemenize yarar. ForeColor : Yaz rengini belirler. Height : Elemann yksekliini belirler. HelpContextID : Programda Help (Yardm) dosyas kullanlm ise help dosyasndaki balk numaralarn bu kontrole atamaya yarar. Left : Elemann Forma gre sol tarafa olan mesafesini belirler. Locked : Elamann kilitlenmesini salar. Enabled zelliinde olduu gibi rengi pasiflemez yalnzca kontrol kilitlenir.

11

MousePointer : Mouseun eleman zerine gittiinde alaca cursor (imle) stilidir. PasswordChar : Bu zellik yalnzca TextBox larda kullanlr. Eer TextBox a ifre girii yaplacaksa bu zellikte bir karakter belirlenmelidir. Picture : Seili kontrole resim eklenmesine yarar. PictureAlignment : Picture zelliinden eklenmi resmin istee gre yerletirilmesini salar. PictureSizeMode : Eklenen resmin boyutu buradan belirlenir. ScrollBars : Kaydrma ubuunun yerini belirler. ShowModal : Excel 2000 srmnden sonraki versiyonlar da gelen bu zellik, deeri False ise Form ile alrken Excel ile de alabilirsiniz. Deeri True ise Form ak iken Excel ile hibir ekilde alamazsnz. SpecialEffect : Elemana grsel baz efektler katar. Kabartma, basklk vs StartUpPosition : Bu zellik sadece Form elemannda kullanlr. Form aldnda ekrann neresine geleceini belirler. Ekrann ortas gibi TextAlign : zerindeki yaznn saa, sola ve ortala gibi ayarlarnn yapld zelliktir. Visible : Deeri True ise eleman ekranda grnr, False ise eleman form zerinde grnmez. Width : Kontroln geniliini belirler. Yukardaki zelliklerin dndaki zellikler ilgili kontrol anlatlrken anlatlacaktr. Form Projenize form eklemek iin VB editrnde Insert (Ekle) mensnden UserForm seilir ve yeni bir form eklenir. Eklenen form ile birlikte gelen Component Palet ise bizim form zerinde kullanacamz elemanlar iermektedir. Eklenen formun zellikleri yan taraftaki Properties penceresinden deitirilir. Projenize baka formlar eklemek iin tekrar Insert mensnden UserForm seilir ve ikinci bir form eklenir. Eklenen formlar yan tarafta Project penceresinde Forms seenei altna srayla listelenecektir. Burada istenildii zaman istenilen formu zerine ift tklatlarak o forma gei yaplabilir. Bu aamada program altrdnzda bo formun alr halini greceksiniz. Formu kapatnca program da kapanacaktr. Bir formdan dier forma gei yapmak iin Form2.Show, alan formu kapatmak iin UnLoad Me, aktif formu gizlemek iin Me.Hide, gizlenen formu tekrar gstermek iin Me.Show ve ana formu kapatmak iin End kullanlr. Me yazlan yerlere istenilen bir formun adda yazlabilir. rnein, Form3.Hide Events (Olaylar) Events, Windows ta bir nesneye tklamak, mouseun bir nesne zerine gelmesi halinde aklama ifadelerinin grntlenmesi, iconlarn tanmas olay, bir dosyann fare ile tklatlarak bir yerden baka bir yere alnmas olay, mouseun baz blgelerde gezinmesi halinde eklinin deimesi, mouseun tular basl tutularak izim yaplmas vb. gibi yaplan her hareket bir olay temsil eder. Form ve Form zerinde bulunan her kontrol eleman ift tklatlarak o elemana ait kod penceresine ve olay prosedrlerine ulalr. rnein form zerine ift tklarsanz aadaki resimde grld gibi Form elemannn Click olayna gelirsiniz.

12

Dier olaylara ulamak iin ise yukardaki resimde grld gibi sa tarafta bulunan alr kutu kullanlr. Burada her componente gre deien olaylar vardr. Mesela Activate olay yalnzca Form elemannda vardr. imdi Form elemanna ait baz olaylara deinelim. Activate Deactivate : Programnz da birka form varsa bu formlardan ayn anda yalnz biri aktiftir. Aktivitenin programdaki formlardan dierine gemesi durumunda aktiviteyi kaybeden formun Deactivate olay, aktif olan formun da Activate olay meydana gelir. Bu olaylar yalnz sizin programnzdaki formlar aras geite meydana gelir. Windows altnda alan baka bir programn aktiviteyi ele geirmesi veya kaybetmesi bu olay meydana getirmez. AddControl - RemoveControl: Form zerine kodlarla yeni bir kontrol yani component eklendiinde AddControl olay meydana gelir. Mesela forma yeni bir TextBox eklendiinde bu olay meydana gelecektir. Form zerinden bir component yine kodlarla kaldrlmaya alld zaman RemoveControl olay meydana gelir. Click : Form zerine tklandnda meydana gelir. DbClick : Form zerine ift tklandnda meydana gelir. Error : Form ile ilgili herhangi bir hata ktnda bu olay meydana gelir. Exit : Elemandan kld zaman gerekleen olaydr. Yani eleman kontrol kaybedince bu olya meydana gelir. Initialize : Formun alnda meydana gelir. Mesela programn alnda Programa ho geldiniz gibi bir mesaj verdirtmek isterseniz bu olay kullanmanz gerekecektir. KeyPress KeyDown - KeyUp : Eer programda kullandnz genel tular varsa bunlarn kontrolne bu olaylara yazacanz kodla salayabilirsiniz. KeyPress, tua bastnz zaman KeyDown, tu basl olduu srece KeyUp, tu brakld zaman meydana gelir. MouseDown MouseUp MouseMove : Bu olaylarda mouseun kontrolnde kullanlr. MouseDown, mouseun tuu basl iken MouseUp, mouseun tuu brakld zaman MouseMove ise formun zerinde mouse gezerken meydana gelir. QueryClose : Terminate olayyla ayn ii yapar ancak formun kimin tarafndan kapatlmaya alldn da renebilirsiniz.. Ayrca bu olay Terminate olayndan nce meydana gelir ve burada Cancel=True ile kapatma iptal edilirse Terminate olay meydana gelmez. Mesela formun kapatma kontrol dmesinden kapatlmaya alldnda mesaj vererek kullancnn formu kapatmasn aadaki kodlarla nleyebiliriz. Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If vbFormControlMenu = 0 Then Kapat dmesine basld kontrol ediliyor. MsgBox "Program Kapatmak in Ltfen k Dmesini Kullannz" Cancel = True Kapatma olay iptal ediliyor End If End Sub

13

ReSize : Formun boyutunun deitirilmesi halinde bu olay meydana gelir. VBA dorudan formun boyutunun deitirilmesine msaade etmeyecektir. O yzden boyutlandrmay kodlarla yapmak gerekiyor. Scroll : Formda bulunan ScrollBarlar kullanldnda bu olay meysana gelir. Terminate : Formun kapatlaca zaman meydan gelir. Label (Etiket) Daha ok kullancya form zerinde bilgi vermek iin kullanlr. Bu nesneye kullanc tarafndan giri yaplamaz. AutoSize zellii True verildii zaman ierisine getirilen bilginin uzunluna gre otomatik olarak boyutlanr. ComboBox (Alr Kutu) Aa doru alabilen liste kontroldr. Genellikle, deerleri daha nceden belli olan elemanlarn seimi iin kullanlrlar. Methods (Metotlar) AddItem Eleman, SraNo : Listeye eleman eklemek iin kullanlan bir metotdur. ComboBox1.AddItem Excel RemoveItem Index : Listedeki index nolu eleman listeden karmaya yarayan bir metottur. lk elemann index numaras 0 olduu iin elemanlarn listedeki yerinin bir eksii index olarak verilmelidir. ComboBox1.RemoveItem 1 Clear : Listenin ieriini temizler. ComboBox1.Clear Properties (zellikleri) ListCount : Liste iindeki eleman saysn verir. MsgBox "Listede" & " " & ComboBox1.ListCount & & "Tane Eleman Var" ListIndex : Listedeki aktif elemann (seili elemann) liste iindeki numarasn verir veya listedeki aktif olacak eleman belirler. Bu eleman ilk eleman iin 0 dr. Son eleman iin ListCount-1 dir. ComboBox1.ListIndex=5 Listedeki 6. eleman seer. List(index) : Liste iindeki index numaral elemann derini renmek veya deitirmek iin kullanlr. ComboBox1.List(1) = Word 2. eleman Word yapar Text : Liste iinde seili olan elemann ieriini verir. Sadece okunabilir bir zelliktir. MsgBox ComboBox1.Text ColumnCount : Bu zellikle alan liste kutusu birka kolon yaplabilir. Deeri 0 ise tek stundur, 0 deil ise listenin genilii verilen sayda stuna blnr ve bir stunun dolmasyla ikinci stuna geilir. Burada her kolonun genilii listenin geniliinin verilen kolon saysna orandr. rnein; ColumnCount = 5 ve Width = 3000 ise her kolonun genilii 3000/5 = 600 olacaktr. TopIndex : O anda ekranda grlen en stteki elemann indexidir. Bu zellik ile listenin o anda ekranda grlen ksmn renebiliriz. ListBox (Liste Kutusu) Bu form eleman ayn ComboBox gibidir. Elemanlar listelemek, sralamak gibi zellikler sunan genel amal bir kontroldr. Methods (Metodlar) Metodlarn tm ComboBox ile ayndr.

14

Properties (zellikler) MultiSelect (oklu Seim) Bu zellik bir kutu iinde birden fazla eleman seme imkan verir. deiik modu vardr. 0 : Birden fazla eleman seimi yaplamaz. 1 : Mouse ile tklanan her eleman seilir veya seilmise seilmilii kaldrlr. 2 : Bu modda Shift veya Ctrl tuu basl tutularak birden fazla seim yaplr. SelCount, Selected (Index) MultiSelect zellii 0 olmayan listelerde birden fazla eleman seilebilecei iin SelCount zellii ile seili eleman saysn, Selected (Index) zellii ile de Index numaral elemann seili olup, olmad renilebilir. Seili olan elemanlar renebilmek iin listeyi batan sona tarayacak bir dng oluturulur ve Selected zellii ile her elemann seili olup olmad kontrol edilir. Dim i For i=0 to ListBox1.ListCount 1 If ListBox1.Selected(i) Then MsgBox ListBox1.List(i) & eleman seili End If Next i rnek : Amacmz form zerinde bulunan metin kutularndan girilen bilgilerin listelere eklemek ve her listede bilgi bulunduu iin listeden bir eleman seildiinde dier listelerdede ona ait bilgilerin seilmesi gerekmektedir. imdi form zerine tane TextBox, tane ListBox ve bir tanede CommandButton yerletirelim. Private Sub CommandButton1_Click() ' Listelere bilgiler ekleniyor ListBox1.AddItem TextBox1.Text ListBox2.AddItem TextBox2.Text ListBox3.AddItem TextBox3.Text MsgBox "Bilgiler Eklendi" End Sub

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

15

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

Private Sub CheckBox1_Click() If CheckBox1.Value = True Then TextBox1.Font.Bold = True Else TextBox1.Font.Bold = False End If End Sub Private Sub CheckBox2_Click() If CheckBox2.Value = True Then TextBox1.Font.Italic = True Else TextBox1.Font.Italic = False End If End Sub Private Sub CheckBox3_Click() If CheckBox3.Value = True Then TextBox1.Font.Underline = True Else TextBox1.Font.Underline = False End If End Sub

'CheckBox1 in seili olup olmad kontrol ediliyor. 'Seili ise ierik Kaln ' seili deilse ' normal formatta kalyor.

OptionButton (Seenek Dmesi) CheckBox dan farkl olarak birden fazla seimlerde sadece bir tanesini seebilmemize olanak sunar. rnein yukardaki rnee gre seeneklerden sadece bir tanesini seebiliriz. CommandButton (Komut Dmesi) Bir olayn kullanc tarafndan balatlmas iin programlarda ok kullanlan kontrollerden biridir. Default zellii True ise o dmenin bulunduu form zerinde Entera baslmas durumunda o dme tklanm gibi olur. Cancel zellii de Default gibidir ancak ESC tuu ile aktif hale gelir. Cancel zellii True olan bir komut dmesinin bulunduu formda ESC tuuna baslmasyla bu komut dmesi aktif yaplm olur.

16

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

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

Bu ereveler iine konan elemanlar, ereveye bamldrlar ve konumlar bu ereve dna taamaz. zellikle birka kontrol birden grnr veya grnmez yapmak iin herpsinin Visible zelliini tek tek deitirmek yerine erevenin Visible zellii deitirilerek ereve iindeki tm kontroller ayn anda grnmez yaplabilir. Ayn durum tama iinde geerlidir her birini tek tek tamak yerine ereve tanr. erevelerin buna benzer birok faydalar vardr. zellikle OptionButton larn kullanlmasnda ereve kullanmak zorunlu hale gelebilir. MultiPage (oklu Sayfa) Tek formda ok fazla bilgi girilecei yerlerde kontoller form zerine smayacaktr. Bunun iin MultiPage kullanmak en iyi zmdr. Tek kontol zerinde birden fazla sayfa ekleyerek yerden ve zamandan tasarruf salanabilir. Kontrol ilk eklendiinde zerinde iki adet sayfa tab bulunur. Bunlar tablarn sa tarafna sa tklanp New Page seilerek oaltlabilir. Daha nce eklenmi bir sayfay kaldrmak iin yine ayn alan menden Delete Page, adn deitirmek iin Rename ve yerini deitirmek iin ise Move seilir.

ToolBox zerinde bulunan mevcut kontroller haricinde birok kullanl kontrollerde vardr. Standart olarak gelen ToolBox paletine yeni elemanlar eklemek iin VB kod editrnde iken Tools mensndeki Additional Controls seenei seilerek Additional penceresine ulalr. Additional Controls (Ek veya lave Kontrol) penceresine ksa yoldan da ulalabilir. Kod editrndeki ToolBox penceresinin herhangi bir blmnde sa Mouse tuu ile alan pencereden de Additional Controls mensne ulalabilir.

17

Alan Additional Controls penceresinden istediiniz elaman iaretleyerek projenize ekleyebilirsiniz. Fakat burada bulunan kontroller olduka fazla olduundan bir ounun kullanm iin VB deki grevlerinin tam olarak bilinmesi gereklidir. Bu blmde en ok kullanlan ek kontroller adnn banda Microsoft yazan kontrollerdir. Bu kontroller System32 ierisinde bulunan ocx uzantl ve VB ile de kullanlan komponentlerden olumaktadr. Bu komponentlerin daha ok kullanlmasnn sebebi sistemin otomatik olarak bu elemanlar tanmas ve projelerin baka yerde hata vermeden almasn salamaktr. Ayrca bilgisayarda VB programlama dili de kurulu ise yapm olduunuz Excel projesi sorunsuz olarak ek kontroller ile birlikte alacaktr. Additional Controls penceresindeki Show blmnde Selected Items Only seeneini seerseniz sadece ekli olan komponentler listelenir. areti kaldrrsanz btn komponentler listelenecektir. En ok Kullanlan Ek Kontroller (Additional Controls) En ok kullanlan kontroller banda Microsoft yazl kontroller olduunu daha nce belirtmitik. imdi bunlardan bazlarn rnekler ile inceleyelim. Microsoft Animation Control 6.0 (SP4) Bu komponent bir ilemi yaparken kullancya ilemin yapldna dair grsel bir grnt oluturmas iin kullanlr.rnein bir arama,kopyalama,silme veya bir kullanc girii srasnda durumu animasyon eklinde gstermek iin kullanlabilir. Windows da sk sk karlatmz kontrollerden biridir. Mesela CDROM dan veya Hard Diskten bir yere bir dosya kopyalama veya tanmas srasnda ekrana gelen diyalog penceresindeki animasyon ile ayn grevi grmektedir. Microsoft Common Dialog Control , Versiyon 6.0 Eer projenizi Windows uygulamalar ile btnleik yapmay planlyorsanz bu kontrol ile Windows un standart Dialog pencerelerine ulaabilirsiniz. Form zerine alnan Common Dialog kontroln kullanabilmek iin ksa bir kod yazmanz gerekmektedir. Common Dialog nesnesi Action zelliine atanan saysal deerler ile dialog pencerelerine ulalr. Bu numaralar aada verilmitir. A Dialog Penceresi Farkl Kaydet Penceresi Renk Palet Kutusu Font Dialog Kutusu Yazdrma Dialog Kutusu :1 :2 :3 :4 :5

18

rnek : Formunuzun zerine 6 adet CommandButton ve bir adet Common Dialog nesnesi yerletirin. CommandButon1in Click olayna aadaki kodu yaznz. Private Sub CommandButton1_Click() CommonDialog1.Action = 1 End Sub Formda bulunan dier butonlarn Click olaylarna Action zelliine numaralar srasyla 2, 3, 4, 5, 6 verilerek dier dialog pencerelerine ulalr. Microsoft Masked Edit Control , Versiyon 6.0 Bu kontrol standart TextBox kontrolne benzer. Ancak TextBox kutusu formatl bilgilerin girii durumlarda fazla kullanl deildir. rnein kullancnn doum tarihi girilmesi gereken bir blmde TextBox kullanlrsa kullanc tarihin aralarna . veya / iareti koymakla uraacaktr. Fakat MaskedEdit kontrolnde ise kullanc sadece saylar yazacak ve MaskEdit kontrol bunu tarih formatna evirecektir. Bu kontrol hem kullanc hem de programc asndan byk kolaylklar salamaktadr. MaskEdit kontroln formunuza aldktan sonra sol taraftaki properties ksmndaki Mask ve Format zellikleri ile MaskEdit kontrolnn formatn belirlenir. Yan taraftaki resimde Mask zellii tarih biimi iin ayarlanm bir rnek grlmektedir.

Microsoft MonthView Control 6.0 (SP4) Bu kontrol kullanarak projenize takvim ekleyebilirsiniz. Sadece bir ay eklenebilecei gibi birden fazla ayda grntlenebilir. Kullancdan tarih girmesini istediiniz durumlarda bu kontrol kullanabilirsiniz. MonthView kontrolnn Properties zelliklerinde MaxDate e vereceiniz tarih ile maksimum tarih ve MinDate e vereceiniz tarih ile de minumum tarihi belirleyebilirsiniz. Ayrca MonthColumns zelliine vereceiniz deer, takvime yatay olarak ay eklemenize, MonthRows zelliine vereceiniz deer ise takvimin altna ay eklemenizi salar.

19

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

ProgressBar nesnesinin kullanlabilmesi iin Value deerini Min ve Max deerleri arasnda arttrmak gerekir. Properties blmnde Min ve Max deerleri belirlenir ve programda bir dng ile Value deeri artrlr. Eer programnz bir ilem yaparken bunu yapacaksanz o ilemin deerlerini Progressbar da belirtmelisiniz. Microsoft StatusBar Control 6.0 (SP6) ou programda formlarn en altnda o anki durumu gsteren baz bilgiler bulunur. Bu bilgiler formdaki elaman veya alanlar hakknda bilgiler olabilecei gibi kullanc ile ilgili bilgiler veya tarih, saat bilgileride olabilir. StatusBar kontrolne panel eklemek iin Properties blmnde Custom zellii ile alan pencerenin Panels tabna geilir. Burada Insert Panel ile yeni paneller eklenebilir, Remove Panel seenei ile de eklenen paneller silinebilir. Eklenen panellerin hizalama, stil ve bykln bu pencereden ayarlayabilirsiniz. Style blmnde seili panelin ieriini belirleyebilirsiniz. Burada ki 0-sbrText seili ise metin yazabilirsiniz ve dier seenekler seilerek CapsLock, NumLock, ScrollLock, Insert gibi tularn durumunu gsterebilir, Tarih ve Saat grntleyebilirsiniz.

20

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

Bu kontrol formunuza aldktan sonra kontrol seili iken Properties ksmndan Custom zellii ile alan pencerenin General blmnde yeni tablar ekleyebilir ve bu tablarn Tab Caption (Sekme Etiketi) gibi zelliklerini belirleyebilirsiniz. Yeni tab eklemek iin General blmndeki TabsPerRow ve TabCount seenei ile yan tarafa yeni tablar ekleyebilir, uzunluk ve Style ni deitirebilirsiniz. Microsoft ToolBar Control 6.0 (SP6) Bir ok programda formun st tarafnda ara ubuklar bulunmaktadr. Bu ara ubuklarn ToolBar kontrol ile rahatlkla kendi projenizde oluturabilirsiniz. ToolBar kontrol kullancnn programda girecei yerleri ksa yoldan girmesi iin ve kullanlacak butonlarn belli bir dzen iinde olmas iin kullanlr.

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

21

BLM -5-

PROGRAMLAMAYA GE
DEKENLER ve VER TPLER

Deikenler Deikenler genellikle bir bilgiyi hafzada tutmak ve gerektiinde kullanmak iin vardr. rnein birine ismini soruyorsanz ve bunu gerektiinde kullanabilmek iin bir deikene almalsnz. Btn programlama dillerin de deikenler bulunur ve deiik ekillerde tanmlanabilir. VBA da deikenlerin kullanm Visual Basic teki gibidir. Deikenler iin nemli bir durum, deikenlerin karkla meydan vermemesi iin tanmlanmas mecburiyetinin olmadr. VBA da deikenleri kullanmadan nce tanmlama mecburiyeti programcnn seimine braklmtr. i=5 j=6 aratoplam = 1000 geneltoplam = i * j + aratoplam rnekte grld gibi aratoplam deikenine 1000 atamas yaplm ve geneltoplam n hesaplanmasnda kullanlmak istenmitir. Tanmlama Kurallar : Deikene verilecek ismin anlalr bir isim olmas programn okunurluunu kolaylatrr. Bir deiken tanmlanrken aadaki kurallara uymak gerekir. Deiken ismi bir harf ile balamaldr. Ad1, Ad2 Doru 1Ad, 2.Ad Yanl Deiken isminde boluk bulunamaz. Bunun yerine alt izgi karakteri kullanlabilir. Ad_Soyad, Doum_Yeri Doru Ad ve Soyad, Doum Yeri Yanl Deiken isminde sadece harfler, rakamlar ve alt izgi karakteri bulunabilir. Al_Yeri, Gr_Yeri Doru Al-Tarihi, Gr.Yeri Yanl Deikene verilecek isim VB komutlarn olumamaldr. Not, Dim, Val, Str, Int, For, While vs. Deiken ismi 255 karakterden fazla olmamaldr. Ogrencinin_Annesinin_Soyadi Doru Veri Tipleri VB de ve VBA da deiken tipleri modern olarak Dim deyimiyle yaplr. Bu deyimin basit format yledir. Dim deg_ismi [(diziboyutu)] As tipi Deg_ismi tanmlanacak deikenin ismidir. Diziboyutu eer deiken bir dizi olarak tanmlanacaksa dizinin boyutu deiken isminden sonra parantezler iine yazlr. Dim a (15) tanmyla 16 elemanl bir dizi tanmlanm olur ve dizinin ilk eleman a(0), son eleman a(15) tir. Bir dizinin ilk eleman 0 olmak zorunda deildir. Dim a(5 to 15) tanmyla ilk eleman a(5) ve son eleman a(15) olan dizi de tanmlanabilir.

22

Ancak Dim kullanlacak bir fonksiyon/altprogram ierisinde dizi tanm yaplamaz. Formun General-Declarations ksmnda veya bir modl iinde tanmlanabilir. Bir fonksiyon veya altprogram iinde Redim veya Static deyimleriyle dizi tanm yaplabilir. Tipi tanmlanacak deiken tipini belirler. VB ve VBA da tip tanm verilmeyebilir. Sadece Dim x eklinde tanmla bir x deikeni tanmlanabilir. Bu tr deikenlere Variant denir ve iinde her trden bilgi bulundururlar. Ancak hz asndan Variant deikenler iyi bir seim deildir. Tipler Byte 1 Baytlk iaretsiz tamsay tipidir. 0 ile 255 arasnda deer alabilir. Integer 2 Baytlk iaretli tamsay tipidir. -32.768 ile 32.767 arasnda deer alabilir. Long 4 Baytlk iaretli tamsay tipidir. -2.147.483.648 ile 2.147.483.647 arasnda deer alabilir. Bu tipe ondalk say atanmas durumunda say en yakn tamsayya yuvarlatlacaktr. Dim i As Integer i = 4.3 i = 4 olarak atanr i = 4.5 i = 5 olarak atanr i = 4.6 i = 5 olarak atanr Single 4 Baytlk ondalk say tipidir. 3.402823x1038 alabilir. ve 1.401298x10-45 arasnda deer

Double 8 Baytlk ondalk say tipidir. 1.79769313486232x10308 ve 4.94065645841247x10-324 arasnda deer alabilir. Currency 8 Baytlk bir ondalk say tipidir. Ancak saynn ondalk ksm 4 basamaktan daha fazla olamaz ve saynn btn dijitleri korunur. Bu tip, daha ok para hesaplar ve virglden sonraki hassasiyeti nemsiz olan ilemler iin dnlmtr. -922337203685477.5808 ile 822337203685477.5807 arasnda deerler alabilir. Ondalk ksmn 4 basamaktan fazla olmas durumunda say yuvarlatrlr. Decimal 14 Baytlk bir veri tipidir. Bu tipin en nemli zellii saydaki btn basamaklarn tutulmasdr. 29 basamakl bir sayy btn dijitleri koruyarak tutabilir. Tam saylar iin, 79228162514264337593543950335 arasnda, ondalk saylar iin, 7.9228162514264337593543950335 arasnda say alabilir. Bu tip dierlerinde farkl olarak Dim deyimi ile tanmlanmaz. Bu tip bir Variant deikene CDec fonksiyonu ile atanabilir. Kullanm, Dim x, y x = 79228162514264337593543950335 MsgBox x y = CDec(79228162514264337593543950335) MsgBox y Saysal olarak tanmlanan tiplerde deiken tipinin snrlar dnda bir deer atanmas durumunda VB ve VBA Owerflow hatas verecektir.

23

Boolean 2 Baytlk bir veri tipi olmasna ramen sadece True ve False deerleri alabilir. Yani daha ok iki durumlu deikenlerde kullanlr. Bu tipten tanmlanan deikenlere direkt True, False deerleri atanabilecei gibi saysal deer de atanabilir. Atanan 0 ise False, deilse True kabul edilir. Bu tipte tanmlanan deikenler programlarn daha anlalr olmas asndan avantajldr. String Karakter snr verilmezse 2 milyar karaktere kadar atama yaplabilen saysal olmayan veri tipidir. Bu tip karakter says +10 byte yer kaplar. Karakter saysn snrn belirlemek iin Dim degisken As String * snr eklinde kullanlr. Bu durumda verilen snr kadar yer kaplar ve en byk snr olarak 65400 verilebilir. Variant VB ve VBA da deiken tanmlanrken tip ismi verilmemise bu tip Variant olarak ele alnr ve deiken tipi atanacak deere gre deiir. Variant tipler yukardaki tiplerden herhangi biri gibi ileme girebilir ve programn almas esnasnda tipi de deitirilebilir. Date 8 Bayt kaplayan bu deikene 1/1/100 ile 31/12/9999 arasnda tarih ve 0:00:00 ile 23:59:59 arasnda saat atamalar yaplabilir. Bu tipteki deikenlere atama bir string gibi veya # # karakterleri arasnda yaplabilir. Aslnda bu deiken ondalk say tipinden tanmland iin bu tipte tanmlanm tarihler arasnda ilem yaplabilir. rnein iki tarih arasndaki gn saysn bulmak iin karma ilemi yaplabilir. Dim i As Date i = 17/11/1973 MsgBox i & tarihinden bu gne kadar & Date i & gn geti Object 4 Baytlk bir veri tipidir ve OLE ilemlerinde kullanlmak zere tasarlanmtr. bu tipteki deikenlere atama yaparken Set operatre kullanlr. Kullanc Tarafndan Yeni Tip Tanmlanmas Yukardaki verilen standart tiplerden kendi tiplerimizide tasarlayabiliriz. Kullanc tanml tipler yle tanmlanr; Type tip_ismi Deg_ismi As Tipi Deg_ismi As Tipi . . End Type Tip tanm bir form ierisinde ancak Private olarak tanmlanabilir. Yani tanmlanan tip sadece o formda kullanlr. Genel yani Public bir tip ise ancak bir modl ierisinde olabilir. Bir form da tip, Private Type Ad .. End Type

24

Global ve Local Deiken Tanm Deikenler genelde iki snfa ayrlr. Global (Genel) deikenler ve Local (Yerel) deikenlerdir. Global deikenler programn btn fonksiyonlar tarafndan kullanlabilirken, Local deikenler sadece tanmlandklar fonksiyonda kullanlr. Global deikenlerin btn fonksiyonlarda kullanlmas grlmesine ramen, programn gelitirilmesi ve takip zorlatrdklarndan dolay ok byk dezavantajlar vardr. ilk bakta avantaj gibi edilmesini nemli lde

Dim deyimiyle yaplan tanmlar tanmland yere gre Global veya Local dr. Dim ile tanmlanan deiken, General-Declarations ksmnda tanmlanmsa tanmland modl/form ierisinde Global dir buna VB ve VBA da Module Level denir. O modldeki/formdaki btn prosedrler bu deikeni kullanabilir fakat dier modller/formlar bu deikeni kullanamaz. Bir fonksiyon yada alt programda tanmlanmsa Local dir. Sadece o prosedr tarafndan kullanlabilir. Bir formun General Declarations ksmnda Public deyimi ile tanmlanmsa dier modller ve formlar da bu deikeni kullanabilir. Ancak deikenin isminden nce modln/formun ismini vermesi gerekir.

Yukardaki birinci resime ait kod penceresinde x Public, y ise Private olarak tanmlanmtr. x ve y deikenlerini birinci resimdeki tm prosedrler kullanabilir. kinci resimdeki prosedrler ise sadece Public olarak tanmlanm x deikenini kullanabilirler ancak deikenin isminden nce formun isminin de verilmesi gerekir. Bir deikeni programn her tarafndan kullanacak ekilde, tam olarak global tanmlamak iin o deikeni bir modln (Insert mensnden Module seilerek eklenebilir) General-

25

Declarations ksmnda Public deyimi kullanlarak tanmlanmaldr. Baka prosedrlerde kullanmak iin modln ismini yazmaya gerek yoktur. Local deikenlerin dier nemli ise bellekte fazladan yer igal etmemeleridir (Statik olarak belirtilmemise). Global deikenler program alt srece bellekte tutulmalarna ramen Local deikenler, deikenin bulunduu fonksiyona girince deiken bellee alnr ve fonksiyonun almas bitince bellekten silinir. Bylece hangi fonksiyon alyorsa sadece o fonksiyonun deikenleri bellekte bulunacaktr. Deikenlerin ve Kontrollerin Tipini Belirlemek Variant tipindeki bir deikenin program ierisinde yaptmz atamaya gre tipinin deitiini belirtmitik. Variant olarak tanmlanm olan bir deikenin hangi tipte olduunu renmek iin VarType fonksiyonu gelitirilmitir. VarType (Degisken) Deiken: Tipi renilecek Variant olarak tanmlanm deiken. Bu deiken herhangi bir tipten bir deikende olabilir. Ancak bu durumda geri dnen deer deikenin tanmland tiptir. Fonksiyondan geri dnn deer deikenin tipini ifade eder ve aadaki deerlerden biridir. Sembolik vbEmpty vbBoolean vbInteger vbLong vbSingle vbDouble vbCurrency vbDate vbString Saysal 0 1 2 3 4 5 6 7 8 Anlam Empty Boolean Integer Long Single Double Currency Date String Sembolik vbObject vbError vbNull vbVariant vbDataObject vbDecimal vbByte vbArray Saysal 9 10 11 12 13 14 17 8192 Anlam Object Error Null Variant DataObject Decimal Byte Array

PROGRAM KONTROL DEYMLER If Yaps If- art yaps btn programlama dillerinde olan, baz artlarn gereklemesi durumunda ve gereklememesi durumunda ayr-ayr kodlarn altrlmasna imkan veren yapdr. If art Then Komutlar Else Komutlar End If artn gereklemesi halinde Then deyiminden sonraki satr iletilir. Gereklememesi durumunda Else deyiminden sonraki satrlar iletilir. artn gereklememesi durumunda alacak Else blou istenirse verilmeyebilir. Ayrca tek satrda art yaplyorsa End If kullanlmaz.

26

Select Case Yaps Bir deikenin ald bir ok deere gre ayr komutlarn altrlmas gereken durumlar iin If yaps yeri Select Case yapsn kullanmak daha avantajldr. Select Case Deiken Case Durum1:Komutlar Case Durum2,Durum3:Komutlar Case Durum4 to Durum7:Komutlar Case is < durum8:Komutlar Case is > durum9:Komutlar .. Case Durum N:Komutlar Case Else Komutlar End Select IIF Bir deikenin deeri iki durumdan birine gre deer alyorsa Bir deikenin deeri iki durumdan birine gre deer alyorsa If yaps yerine IIF kullanlabilir. Bu size daha az satrla ayn ii yapabilme imkan verir. IFF (art;doru ise;yanl ise) Bu fonksiyonda art doru ise birinci ifade, yanlsa ikinci ifade ileme girer. Choose Bir deikenin ald deer bir sayya bal ise Choose yapsn kullanmak daha uygundur. Sonu=Choose(Say,deer1,deer2,deer3,,deerN) formatnda kullanlr. Buradaki sonu sayya bal olarak deer listesinden bir deerdir. rnein say 3 ise sonu deer3 olacaktr. Switch Switch fonksiyonunda ise birden fazla art ayn satrda kontrol etmek mmkndr. Sonu=Switch(art1,Deer1,art2,Deer2,..,artN,DeerN) eklinde kullanlr.

DNG DEYMLER Belirli bir komut parasnn belli artlar gerekleinceye kadar defalarca almas gerekebilir. alma saysnn belli olduu durumlarda For dngs dier durumlarda yani dng saysnn deiken olduu durumlarda ise While-Wend, Do-Loop bloklar kullanlr. FOR Dngs For Saya = BalangDeeri to BitirDeeri [Step Artm] Komutlar Next For dngs sayan balang deerinden balayarak biti deerine kadar sayac birer artrarak Next e kadar olan komutlar altrr. Eer birer artmas deilde sizin belirleyeceiniz aralklarla artp azalmasn istiyorsanz Step parametresinden sonra artm miktarn yazmanz gerekir.

27

Sayacn artarak deilde azalarak almas iin Step ten sonra negatif deer vermeniz gerekir. rnein, A1 stununun 5. satrndan itibaren 10 tane satra satr numaras verdirelim. For i = 5 To 15 Cells(i, 1) = i Next i While - Wend ve Do While-Loop Dngs Bir dngnn ka defa alaca daha nceden bilinmiyorsa While dngleri kullanlr. Bir art gerekletii srece almas gereken program bloklarnda kullanlr. While art Komutlar Wend Do While art Komutlar Loop Yukardaki her iki dngnn mant ayndr. art gerekletii srece dngde kalnr. Do Until Loop Dngs Bu dng yapsda art gerekleene kadar almas gereken program bloklarnda kullanlr. Dikkat ederseniz yukardaki dngler art gerekletii srece alyordu bu ise art gerekleene kadar alr. Yani art gereklemedii srece alr. Do Until art Komutlar Loop Do Loop While ve Do Loop Until Dngs Do Komutlar Loop Until art Do Komutlar Loop While art Bu dnglerin yukardakilerden tek fark dngye girerken deil karken art kontrol edilir. Yani dng ierisinde kod en az bir kez alr. rnein kullancya snav notunu sorduumuzu dnelim. Girecei not 0-100 aral dnda ise; notu bu aralkta girilinceye kadar tekrar tekrar sorulmas gerekir. Bu ie DoLoop Until yaps uygundur. nk dng ierisinde not sorulduktan sonra not 0-100 aral dnda ise tekrar sorulmas gerekir. Dim nott not deil nk not zel bir deyim Do Nott = InputBox (Not Girii, Snav Notunuz, 50) Loop Until (nott > 0) And (nott < 100)

28

DNG KONTROL FADELER Exit Do Exit Do komutu Do-Loop, Whlie Wend dnglerinden birinde baz artlarn gerkelemesi durumunda dngden kmak iin kullanlr. Exit For Bu komutta For Next dngs tamamlanmadan, baz artlar gerekletiinde dngden kmaya yarar. Exit Sub, Exit Function Exit Sub ve Exit Function deyimleri alt program sonuna ulamadan alt programdan kmaya yarar. Dim i, j j = Val(TextBox1) If j <= 0 Then Exit Sub For i = 1 to j ListBox1.AddItem Log ( & i & ) = & Log(i) / Log(10) Next Burada 1 den TextBox1 kutusuna girilen sayya kadar olan saylarn logaritmasn listeye ekliyoruz. Ancak kullanc kutuya 0 veya daha kk bir say girmise alt programdan kyoruz. End Program sona erdirir. Btn ak olan formlar kapatr. With End With Deyimi Bir kontrole ait bir zellik deitirilmek istendii veya bir metod arld durumlarda kontrol adnn da verilmesi gerekir. Herhangi bir kontrol elemannn birden fazla zelliini deitirmek yada metodlarna ulamak iin With End Wtih deyimi kolaylk salar. Kullanm biimi yledir, With KontrolAd .zellik = Deer .zellik = Deer End Wtih ComboBox1.Clear ComboBox1.AddItem ComboBox1.AddItem ComboBox1.AddItem ComboBox1.AddItem Excel Word PowerPoint Access With ComboBox .Clear .AddItem Excel .AddItem Word .AddItem PowerPoint .AddItem Access End With

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

29

OPERATRLER Btn programlama dillerinde aritmetik ve lojik ilemler iin gerekli operatrler bulunur. VB ve VBA da aritmetik ilemlerin bazlar operatrlerle yaplrken bazlar da fonksiyonlarla yaplr. VB ve VBA da kullanlan aritmetik ve lojik operatrler unlardr: = + * / \ & ^ Mod And Or XOr Not Atama Toplama karma arpma Blme Tam Blme String Toplama st Blmede Kalan Ve Veya XOr Deil X=5 20+5 25 10-5 5 3-5 15 9/2 4,5 9\2 4 Bayram & paa & Sonu: Bayrampaa 4^2 16 5 Mod 2 1 5 And 17 Sonu: 1 (00101 And 10001=00001) 7 Or 17 Sonu: 23 (00111 Or 10001=10111) 7 XOr 17 Sonu: 22 (00111 XOr 10001=10110) Not &H1 Sonu: &HFFFE (Not 0000 0000 0000 0001=1111 1111 1111 1110)

Mod lemi Mod ilemi bir saynn bir baka sayya blmnden kalan verir. Bu ilk bakta programclk asndan fazla nemli deil gibi gzksede aslnda bir saynn katlarn bulmak iinde kullanlabilineceinden olduka kullanl bir operatrdr. Bir say baka bir saynn tam kat ise o sayya blmde kalan 0 olacaktr. rnein 1 den 100 e kadar olan saylar toplanacak bir programda her 10 adm sonucunu mesaj ile ekranda grmek istersek, Dim i, top For i=1 to 100 top=top+i If (i Mod 10) = 0 Then MsgBox top Next MsgBox Sonu: & top Karlatrma lemleri VB ve VBA da kullanlan karlatrma operatrleri ise unlardr, = <> < > <= >= Eit Eit Deil Kk Byk Kk veya Eit Byk veya Eit If x=5 Then MsgBox 5 Else 5 Deil If x<>5 Then MsgBox 5 Deil Else MsgBox 5 If x<5 Then MsgBox 5 den kk Else MsgBox 5 den byk If x>5 Then MsgBox 5 den byk Else MsgBox 5 den kk If x<=5 Then MsgBox 5 den kk veya eit Else MsgBox 5 den byk If z>=5 Then MsgBox 5 den byk veya eit Else MsgBox 5 den kk

30

Bunlarn haricinde VB ve VBA deki Like operatr ile stringler zerinde daha detayl karlatrma ilemleri yaplabilmektedir. Like operatrnde tpk dosya isimlerinde olduu gibi joker karakterler vererek karlatrma yapmak mmkndr. Like operatrnde kullanlabilecek joker karakterler unlardr, ? # * [aralk] [!aralk] If adres Like *stanbul Then ifadesi ile adres deikeninin sonunda stanbul bulunup bulunmad If adres Like *stanbul* Then ifadesi ile adres deikeninin herhangi bir yerinde stanbul bulunup bulunmad If adres Like stanbul* Then ifadesi ile adres deikeninin banda stanbul bulunup bulunmad kontrol edilebilir. If x Like ?abc Then ifadesi ile x deikeninin ilk harfinin herhangi bir karakter ancak dier karakterin abc olup olmad If x Like #abc Then ifadesi ile x deikeninin ilk harfinin herhangi bir rakam ancak dier karakterin abc olup olmad If x Like [a-f]abc Then ifadesi ile x deikeninin ilk harfinin a ile f arasnda herhangi bir karakter ve dier karakterin abc olup olmad If x Like [!a-f]abc Then ifadesi ile de x deikeninin ilk harfinin a ile f arasnda olmayan herhangi bir karakter ve dier karakterin abc olup olmad kontrol edileblilr. lem ncelii Aritmetik ilemler sz konusu olduunda ilem ncelii sonucu etkileyen nceli bir etkendir. rnein, 5+7*2-3/9^3*5 ileminin sonucun ka olduu ilemdeki operatrlerin ncelii ile ilgilidir. Bu tip ilemlerde parantezler kullanmak her zaman ncelii belirleyici faktrdr. Ancak parantezlerin bulunmad durumlarda aadaki ilem nceliklerine gre ilemler yaplr. Aritmetik ^ Negatiflik iareti (-) *,/ \ Mod +,& Karlatrma = <> < > <= >= Like Is Lojik Not And Or XOr Eqv Imp Herhangi bir karakter Herhangi bir rakam Bir veya daha fazla karakter Verilen aralkta bir karakter Verilen aralk dnda bir karakter

31

FONKSYONLAR ve ALT PROGRAMLAR Bir fonksiyon yada bir alt program belirli bir ii yapmak iin oluturulan kk program paralardr. (Fonksiyon ve altprogram, bu ikisini birden belitmek iin prosedr kelimesini kullanacaz). Fonksiyon ve alt program tanmlamann bir ok avantaj vardr. Bir ok yerde ayn kodlar kullanamanz gerektiinde bunlar her sefer yeniden yazmak yerine bu kodlar bir prosedrde tanmlayp, kullanacanz yerden bunu armanz yeterlidir. Prosedr Tanm Bir alt program tanm yle yaplr: Sub AltProgramAdi ([GirisParametreleri[As Tipi]]) Komutlar [Exit Sub] End Sub Bir fonksiyon tanm ise yle yaplr: Function FonksiyonAdi ([GirisParametreleri [As Tipi]]) [As Tipi] Komutlar [Exit Function] [FonksiyonAd=GeriDonusDegeri] End Function Fonksiyon alt programdan farkl olarak geriye bir deer gnderebilir. Bu deer gnderme ilemi fonksiyon ismine geri dnecek deerin atanmasyla olur. Bir fonksiyon veya alt program normalde End Sub veya End Function satryla biter. Ancak baz artlar gerekletiinde, fonksiyonun almasn bitirmeden kmak Exit Function (alt program ise Exit Sub) ile yaplabilir. Programda yeni bir fonksiyon veya alt program tanmlamak iin kod penceresinde bo bir yere gelerek aadaki kodlar yazmak yeterlidir. Geri kalan tamamlama kodlarn VBA kendisi yazacaktr zaten. Bu ekilde yazld takdirde VBA giri parametlerinin ve tip tanmlamalarn yazmayacaktr. Bunlar belirtmek istersek yukardaki anlattmz ekilde yazmak gerekecektir. Yerel fonksiyon, Function FonksiyonAdi Genel fonksiyon, Public Function FonksiyonAdi Yerel alt program, Sub AltProgramAdi Genel alt program, Public Sub AltProgramAdi

32

Prosedr ars Programn herhangi bir yerinden alt program armak AltProgramAdi [GirisDegerleri] Fonksiyonu armak ise Donendeger=FonksiyonAd([GirisDegerleri]) eklinde yaplr. rnek: Programlarn hemen hemen tmnde ihtiya duyulan gnn tarihini kendi formatmzla bir genel fonksiyonda tanmlayp daha sonrada bir TextBox a ift tklanp iine fonksiyonun geri dnen deerini yazdralm. lk nce fonksiyonun tanmn yapalm. Public Function tarih () tarih = Format (Date, dd.mm.yyyy) End Function Burada ilk nce genel bir fonksiyon alyor. Daha sonra geri dnen deer fonksiyon deikenine atanyor. Sonrada fonksiyon kapatlyor. Artk fonksiyonumuzu programmzn her yerinde rahatlkla arp kullanabiliriz. TextBox n DoubleClick olayna aadaki kodu yazalm. TextBox1 = tarih ok basit bir fonksiyon olmasna ramen, gnn tarihinin ok fazla kullanlaca yerlerde (rnein, sekreter programlarnda) programcy karmak kodlardan kurtaracaktr.

33

BLM -6-

BLG GR ve MESAJ PENCERELER

MSGBOX (Mesaj Kutular) Windows ta en aina olduumuz ey programn ak srasnda bilgi vermek ve onaylatmak iin karmza kan mesaj kutulardr. rnein bir programdan karken Kaydedilsin mi? gibi bir soru ve duruma gre Evet, Hayr, ptal vb. seenekleri olan bir kutu kar. Bu kutu Windows tarafndan salanan standart bir kutudur ve Windows altnda alan btn programlarda ayndr. Mesaj kutusu sadece kullancya mesaj vermek amacyla kullanlacaksa aadaki gibi kullanlr. MsgBox Programa ho geldiniz Bu durumda mesajla birlikte Tamam dmesi olan aadaki pencere kar.

Mesaj kutular bir ok durumda sadece bir mesaj vermek iin deil ayn zaman da kullancdan onay almak iinde kullanlr. Kullancnn mesaj kutularnda verebilecei cevaplar iin uygun dmeleri belirlemek ve verilen cevab da renebilmek iin MsgBox fonksiyonu aadaki formatta kullanlr. cevap = MsgBox ( mesaj, [tip], [pencerebasligi], [, helpfile, [context]) Komut formatnn parametleri unlardr. Mesaj Kutu ierisine yazlmasn istediiniz mesaj. Pencerebasligi Pencerenin balna yazlacak metin. Helpfile, Context Bu iki zellikle bir yardm dosyas ismi ve bir konu numaras belirlenebilir. Bylece kullancnn mesaj kutusunda yardm istediinde ilgili help dosyas alr ve ilgili konu gsterilir. Tip Pencerenin iine konacak seenekler, iconlar, pencerenin nceliini ve varsaylan seenekleri belirten bir saydr. Tip parametresini u ekilde formlize edersek, tip = secenek + icon + varsayilan + oncelik bu formldeki deerlerin alabilecei liste aadaki gibidir. Aadaki tabloda en nemli parametre mesaj kutusunun tipini belirleyen seenek parametresidir. Bu parametre mesaj kutusunda hangi dmelerin bulunacan belirler. Icon parametresi ise kullancnn dikkatini ekebilmek iin mesaja uygun bir resmin gsterilmesinde kullanlr.

34

Varsaylan dme parametresi ise kullancnn yanl seim yapmasn nlemek iin alan pencerede hangi dmenin aktif olacan belirler. rnein nemli bir dosyay silmek iin kullancdan onay alrken atnz pencerede varsaylan dmeyi Hayr dmesi yaparak kullancnn dosyay yanllkla silmesi nlenebilir. ncelik parametresi 4096 olmas durumunda mesaj kutusunda herhangi bir seim yaplmadan dier uygulamalara gei yaplamaz. Bu ayr drt seenek birbiriyle toplanarak MsgBox fonksiyonunun ikinci parametresi olarak kullanlr. Seenek 0 1 2 3 4 5 16 32 48 64 vbOKOnly vbOkCancel vbAbortRetryIgnore vbYesNoCancel vbYesNo vbRetryCancel Icon vbCritical Hata iconu vbQuestion Soru iconu vbExclamation nlem iconu vbInformation Bilgi iconu Varsaylan 0 256 512 4096 0 vbDefaultButton1 vbDefaultButton2 vbDefaultButton3 ncelik vbApplicationModal vbSystemModa System modal Normal Birinci dme kinci dme nc dme

MsgBox fonksiyonundan kullancnn hangi dmeyi setiini belirtir bir tamsay geri dner. Bu deerler aadaki tabloda verilmitir. Sembolik vbOk vbCancel vbAbort vbRetry vbIgnore vbYes vbNo Saysal 1 2 3 4 5 6 7 Anlam Tamam dmesi seildi ptal dmesi seildi lemi Durdur dmesi seildi Tekrar Dene dmesi seildi Gz ard et dmesi seildi Evet dmesi seildi Hayr dmesi seildi

35

rnek: Program kapatlrken kmak isteyip istemediini soracak bir mesaj kutusu oluturalm ve gerekli kodu yazalm. Form kapatlrken Terminate olay meydana geleceinden gerekli kodu bu olaya yazacaz. Dim cevap cevap = MsgBox (kmak stiyormusunuz, vbYesNo+vbQuestion, k) If cevap = vbYes Then MsgBox yi Gnler Else Cancel = True k iptal et End If

INPUTBOX (Bilgi Giri Kutusu) Kullancnn gereken deeri girmesi iin Visual Basic te InputBox fonksiyonu gelitirilmitir. Bu fonksiyon standart olarak Ok ve Cancel dmeleri bulunan bir pencere aar ve deer girii bu pencereden yaplr. InputBox (mesaj [,baslik][,varsayilan deger][,x][,y][,helpfile, context]) Mesaj Girilmesi gereken deer iin aklama veya soru. Balk Alacak pencerenin bal. Varsaylandeer Deer giri kutusunda bulunmas istenen deer. x, y Pencerenin, sol st kesinin x ve y koordinatlarn belirler. Fonksiyondan dnen deer kullancnn yazd metindir. Kullanc Cancel dmesini semise bo deer dner. InputBox fonksiyonundaki son iki parametre ile yardm dosyasnn ismi ve konu numaras verilirse pencereye ayrca yardm dmesi de eklenecektir.

rnek: InputBox araclyla girilen isimleri, ListBox a ekletelim. Dim giris giris = InputBox("sminizi Girermisiniz?", "Bilgi Girii", "sminiz", 0, 0) ListBox1.AddItem giris

36

BLM -7-

KOMUTLAR
DSK ve DOSYA YNETM KOMUTLARI

ChDrive ChDrive Src Harfi Aktif srcy deitirir. Src Harfi: Geilmek istenen srcnn ba harfini ieren string deerdir. Stringin ierii bir karakterden fazla ise ilk harf dikkate alnr. On Local Error Goto Hata ChDrive A A srcsne ge Exit Sub Hata: MsgBox Disket srcye eriilemedi: & Error Exit Sub ChDir ChDir Dizin Aktif dizini deitirmeye yarar. VB ve VBA daki komutlarn dosya isimlerinde yol kullanlmazsa, aktif src ve dizinde aranr. On Local Error Goto Hata ChDir C:\Windows Aktif dizini Windows dizini yap Exit Sub Hata: MsgBox Dizine eriilemedi: & Error Exit Sub MkDir MkDir DizinAd Dizin oluturmak iin bu komut kullanlr. DizinAd isimli dizini oluturur. On Local Error Goto Hata MkDir C:\Windows\yedek Windows dizini altna yedek dizini a Exit Sub Hata: MsgBox Dizin oluturulamad: & Error Exit Sub RmDir RmDir DizinAd smi verilen dizini siler. smi verilen dizinin alt dizinlerinin bulunmamas ve bo olmas gerekir. On Local Error Goto Hata RmDir C:\Windows\yedek Windows dizini altna yedek dizinini sil Exit Sub Hata: MsgBox Dizin silinemedi: & Error Exit Sub

37

Kill Kill DosyaAd smi verilen dosyay siler. On Local Error Goto Hata Kill C:\Windows\*.tmp Windows dizini altndaki tmp dosyalar sil Exit Sub Hata: MsgBox Dosyalar silinemedi: & Error Exit Sub Name Name Ad As YeniAd Verilen dosyann adn deitirir. Name Eski.doc As Yeni.Doc satr ile Eski.Doc dosyasnn ismi Yeni.Doc olarak deitirilmitir. CurDir CurDir[Srcharfi] Aktif dizini renmenize yarar. Srcharfi kullanlmazsa aktif srcdeki aktif dizini bildirir. Src harfi verilirse verilen srcdeki aktif dizini bildirir. CurDir C FileCopy FileCopy kaynakdosya, hedefdosya Bu komut DOS un Copy komutu kadar gelimi olmasada bir dosyay bir yerden, baka bir yere kopyalamanz salar. kaynakdosya: Kopyalanacak dosyann yeri ve dosyann ad. hedefdosya: Kopyalanacak dosyann yeni yeri ve ad. Dosya ad, src ismi ve yol ierebilir ancak joker karakter dediimiz *,? Gibi karakterleri ieremez. Bu da, bu komutu kullanarak bir seferde sadece bir dosya kopyalayabilirsiniz demektir. FileCopy \windows\win.com, \dos\win.com Dikkat ederseniz DOS un Copy komutundan farkl olarak, hedef olarak yolu ve dosya ismini vermeniz gerekir. FileLen FileLen (Dosyaadi) smi verilen dosyann boyutunu byte olarak bildirir. Bu dosya adna src ve yol ismi de verilebilir. FileLen (\Windows\win.com) FileDateTime FileDateTime (Dosyaadi) Dosyann tarih ve saatini verir. Geri dnen deer Tarih Saat formatndadr.

38

Dir Dir [(Dosyaadi[,AttrMaskesi])] Dosya, dizin listelemeye ve bulmaya yarayan kullanl bir komuttur. Dosyaadi : Dosyann veya dizinin ismi. Bu isim ierisinde * ve ? karakterleri de bulunabilir. AttrMaskesi : Bu parametre verilmezse sadece attributesi normal olan dosyalar dikkate alnr. Bu maskeye aadaki tablo deerleri verilerek gizli dosyalar, dizinlerin de dikkate alnmas salanabilir. Attribute 0 1 2 4 8 16 Anlam Normal Read Only Hidden System Volume Dizin

Bu deerler de OR ilemine tabi tutularak dosyalarn birka maskeye ayn anda tabi tutulmas salanabilir. TARH ve ZAMAN FONKSYONLARI Date Gnn tarihini renmeye ve deitirmeye yarar. MsgBox Bugn : & Date Bilgisayarn tarihini deitirmek iin direkt atama yaplabilir. Date = 19/06/2004 ki tarih arasndaki fark bulmak iin de CVDate (veya CDate) fonksiyonundan faydalanlabilir. Dim x x = Date CVDate(15/06/2004) MsgBox 15/06/2004 den bugne kadar olan gn says : & x Time Saati renmeye ve deitirmeye yarar. MsgBox Saat : & Time Bilgisayarn saatini deitirmek iin direkt atama yaplabilir. Time = 22:41:00 Now Bu gnn tarihini ve saatini birlikte verir. MsgBox Now MsgBox Date & Time Bu iki satrda ayn ii yaparlar. Date ve Time komutlaryla zaman ayar yaplrken Now komutu ile bu ayar yaplamaz.

39

UYGULAMALARLA LGL KOMUTLAR Shell Shell (Komutsatiri, [penceresekli]) Programdan baka bir program altrmak iin Shell komutu kullanlr. Komutsatiri : altrlacak programn ad. Penceresekli : Bu parametreye aadaki saylardan biri verilerek programn alt pencere ekli belirlenebilir. Bu parametre kullanlmazsa 2 kabul edilir. Pencere ekli 1,5,9 2 3 4,8 6,7 Anlam Normal ve kontrol alacak programda Simge durumunda ve Kontrol alacak programda Ekran kapla durumunda ve Kontrol alacak programda Normal ve Kontrol altran programda Simge durumunda ve Kontrol altran programda

AppActivate Programdan, o anda alan baak bir program aktif hale getirmek iin AppActivate komutu kullanlr. AppActivate pencerebasligi pencerebasligi : aktif hale getirilecek programn pencere bal. Aktif hale getirilecek programn o anda alyor olmas ve pencere balnn tam olarak verilmesi gerekir. Bu parametrede byk ve kk harf kullanm ayn deildir. Yani Program Yneticisi ve program yneticisi farkl iki balktr. Pencere bal yerine o penceresini task ID deeride verilebilir. Bu deer API ler vastasyla renilebilinecei gibi aktif hale getirilecek program Shell komutu ile arlmsa Shell komutundan geri dnen deer de kullanlabilir. Environ letim sisteminin evre deikenleri bu komut ile renilebilir. evre deikeni iletim sisteminde SET deyimi ile tanmlanabililen, bir ksm zel deikenlerdir. rnein, PATH, PROMPT gibi evre deikenleri iletim sistemi tarafndan direkt olarak tannan evre deikenleridir, BLASTER, CLIPPER gibi evre deikenleri ise zeldir ve baz programlar tarafndan tannr. Environ (no) no : stenen evre deikeninin numarasdr. Bu numara standart bir deikeni temsil etmez. Tanmlan srasna gre ilk deiken 1 kabul edilir. lk kullanm formatnda geri dnen deer o evre deikeninin tam metnidir. MsgBox Environ (1)

40

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

STRING LEMLER StrComp Daha nceki kuak Basic lerde bu ilem direkt olarak = operatr ile yaplyordu. VB ve VBA da da bu karlatrma ilemi = operatr ile yaplabilirken dah gelimi olarak StrConp fonksiyonu ile de yaplabilir. StrComp (String1, String2, [art]) String1, String2 : Karlatrlacak iki string. art : Bu parametreye 0 verilirse byk-kk harf ayrm yaplr, 1 verilirse bu ayrm yaplmaz. Burada Windows tan kaynaklanan bir avantaj da vardr. Byk-kk harf karlatrmas sadece ngilizce alfabesinde bulunan karakterler iin geerli deildir, Windows Trke ise Trke byk-kk harf ayrm da yapabilir. Yalnz (i) harfinde problem vardr. Kk (i) harfi byk (I) harfine evrilir. Geri dnen deer 0 ise iki string eittir. Negatif ise String2 byk, pozitif ise String1 byktr. Bu byklk karakter says olarak deil alfabetik sradaki nceliidir. Trim Kullancdan bir metin girmesini istediinizde, kullanc metnin bana veya sonuna fazladan boluklar brakm olabilir. zellikle karlatrma ilemlerinde bu boluklar problem karr. Ayn durum rastgele eriimli dosyalarda da olur. Okunan bilginin sonunda fazladan bolukla bulunabilir. Bu boluklar atmak iin tane komut vardr. LTrim (Metin) Verilen metnin bandaki boluklar kaldrr. RTrim (Metin) Verilen metnin sonundaki boluklar kaldrr. Trim (Metin) Verilen metnin her iki tarafndaki boluklar kaldrr. UCase, LCase Metin ieren ifadeleri byk veya kk harfe evirmek iin iki tane komut bulunur. UCase (Metin) Girilen metindeki karakterleri byk harfe evirir. LCase (Metin) Girilen metindeki karakterleri kk harfe evirir.

41

StrConv, StrReverse StrConv (Metin, Mod) Metni verilen moda gre dntrr. Mod parametresinin alabilecei deerler ve yaplacak dnmler ise yledir. vbLowerCase : Metni kk harfe evirir. vbUpperCase : Metni byk harfe evirir. vbProperCase : Metindeki her kelimenin ilk harfini byk dierlerini kk yapar. StrReverse (Metin) Verilen stringi ters evirir. Dim s s = Excel s = StrReverse (s) MsgBox s lecxE Len Len (Metin) Metin iindeki karakter saysn verir. Bu sayya boluklarda dahildir. MsgBox Len(TextBox1) Right, Left, Mid Right (Metin, n) Metin iinde sadan n karakteri verir. Aadaki rnekte sadan harf alnmas istenmitir. MsgBox Right("Excel", 3) Sonu cel

Left (Metin, n) Metin iinde soldan n karakteri verir. Mid (Metin, Baslangic [,uzunluk]) Metin iinde Balang tan Uzun luk kadar karakter verir. Aadaki rnekte nc harften itibaren alt harf alnmas istenmitir. MsgBox Mid("Excel, Word, PowerPoint", 3, 6) InStr, InStrRev Bulunanyer = InStr ([KacinciHarften,] NeyinIcinde, Neyi, Nasil) InStr fonksiyonu bir stringin iinde bir baka stringi istediiniz konumdan itibaren bykkk harf ayrm yaparak veya yapmadan arayabilir ve bulursa bulduu yerin konumunu geri gnderir. Burada, KacinciHarften parametresi ile aramaya kanc karakterden balanacan belirtir. Bu parametre kullanlmazsa batan itibaren aranr. Nasl parametresinin 0 olmas durumunda byk-kk harf ayrm yapacan, 1 durumunda yapmayacan belirler. Geri dnen deer 0 ise aranan ifade bulunamamtr. Aksi takdirde geri dnen deer ifadenin bulunduu yeri bildiren saydr. InStrRev (NeyinIcinde, Neyi, [KacinciHarften],[Nasil]) InStr fonksiyonu gibidir ama arama ilemini batan deil sonran balayarak yapar. MsgBox InStrRev (nn niversitesi, i) Sonu 18 Sonu cel, W

Yukardaki satrda i harfi bulunmak istenmitir. Sondan ilk i harfi geri bildirilmitir.

42

Space Space (sayi) Verilen sayda boluk oluturur. MsgBox Excel e & Space(10) & ho geldiniz ASC, CHR Bilindii gibi bilgisayarda harfler, rakamlar, iaretler ve dier karakterler birer say ile temsil edilir. Her karakterin 0-255 aras bir kodu vardr. Bu koda Ascii kodu denir. VB ve VBA da hem bir karakterin ascii kodunu verecek, hemde ascii kodu bilinen karakteri retecek fonksiyonlar mevcuttur. Asc (Harf) Verilen harfin Ascii kodunu verir. Chr (AsciiKodu) Ascii kodu verilen saynn karakter karln retir. Str, Val Programlama dillerinde hem say hemde metin iin deikenler tanmlanabilmektedir. Ancak baz durumlarda metin olarak tanmlanm bir deiken iinde say olabilir. rnein metin kutusu metin trnde olmasna ramen iine say girilmesini isteyebilirsiniz. Metin trndeki bir deiken iindeki say zerinde ilem yapabilmek iinde onu Val fonksiyonu ile sayya evirmek gerekir. Str (sayi) Verilen says stringe evirir. a = Str(123) sonuta a = 123

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

RASTGELE SAYI RETM FONKSYONLARI Rnd Fonksiyon 0 ile 1 arasnda say retir. MsgBox Rnd 0 ile 1 arasnda bir say retir MsgBox Rnd * 100 0 ile 100 arasnda bir say retir MsgBox Int(Rnd * 100) 0 ile 100 arasnda bir tamsay retir Fonksiyonun 0 ile bir say arasnda deil de iki say arasnda deer retmesini salamak iin zerinde deiik ilemler yaplabilir. MsgBox Rnd * 30 + 20 20 ile 50 arasnda bir say Genel olarak bir forml oluturacak olursak a ile b arasnda bir say retmek iin Rnd * (b-a) + a

43

YUVARLATMA FONKSYONLARI Eer iki tam sayy blp sonucu yine tam say olarak gstermek isterseniz, yani virglden sonraki ksmn atlmasn isterseniz \ operatrn kullanabilirsiniz. Int (Say) Int fonksiyonu ise virglden sonraki sayy atarak kendinden dk en yakn tamsayya yuvarlatr. Eer say pozitifse saynn tam ksm alnm olur, negatifse kendinden bir nceki sayya yuvarlatlm olur. Fix (Say) Int fonksiyonu negatif saylarda saynn tam ksmn vermek yerine kendinden nceki sayy veriyordu. Fix fonksiyonu ise negatif ve pozitif saylarda ayn ekilde davranr ve saynn virglden sonraki ksmn atar. Round (sayi,basamaksayisi) Int ve Fix fonksiyonlar virglden sonraki btn basamaklar atyor ve yuvarlatma ilemeni (yani 5 den bykleri bir ste, kkleri bir alta) yapmyordu. Bu fonksiyonla saynn istediiniz kadar basaman yuvarlatabilirsiniz. basamaksayisi parametresine 0 verirseniz, virglden sonraki btn rakamlar yuvarlatlr. rnein, bu parametreye 2 verdiinizde virglden sonraki iki basamak listelenecektir. Msgbox Round (60.215, 0) MsgBox Round (60.215, 1) MsgBox Round (60.215, 2) MsgBox Round (60.715, 0) Sonu: 60 Sonu: 60.2 Sonu: 60.22 Sonu: 61

44

BLM -8-

DOSYALAMA LEMLER

Programdaki baz bilgilerin kalc olarak saklanmas ihtiyac her zaman vardr. Bir dosyadan kayt okuyabilmek veya kayt yapabilmek iin nce dosya alr zerinde ilem yapldktan sonra da kapatlr. Eer ak olan bir dosya tekrar almaya allrsa VBA hata verecektir. Dosyalar yaplan ie gre temelde iki trde alr: Rastgele eriimli ve Sral eriimli olarak. Rastgele eriimli modda istenen kayda numaras verilerek ulalabilmesine ramen sral eriimli modda btn kaytlar ilendikten sonra istenen kayda ulalabilir.

DOSYA AMAK ster sral eriimli olsun, ister rastgele eriimli olsun bir dosyay amak veya oluturmak iin Open komutu kullanlr. Open Dosya Ad [For AmaModu] [Access EriimModu] [lock] As [#]dosyano [Len = kayituzunlugu] Dosya Ad AmaModu : Alacak veya oluturulacak dosyann ad. : Dosyann ama modunu belirler. Dosya u 5 moddan birinde alabilir.

Random, dosyadaki her kayituzunlugu ile belirlenen uzunluktaki alanlara yazlr. Dosyaya yazlan kayitlar kayituzunlugu ile belirlenen saydan kk de olsa kayituzunlugu kadar yer kaplar. Bylece dosyadaki her kaydn uzunluu ayn olacandan dosyada istenen kayda numaras verilerek eriilebilir. Her kaydn uzunluu 6 karakter ve dosyaya yazlan kaytlar unlar olsun. ali, veli, excel. Bu kaytlar dosyaya yazmak iin u program yazalm. Dim x as String * 6, dosyaadi dosyaadi = \d.dd Open dosyaadi For Random As #1 Len = 6 x = ali Put #1, 1, x 1 nolu kayda yaz x = veli Put #1, 2, x 2 nolu kayda yaz x = excel Put #1, 3, x 3 nolu kayda yaz Close #1 Program altrdktan sonra DOS ta Type d.dd komutu ile dosyann ieriine bakarsak bu kaytlar dosyada u ekilde olacaktr. a l i v e l i e x c e l

Grld gibi dosyadaki her kaydn uzunluu sabit olduundan dosyadaki her hangi bir kayda o kaydn numarasn vererek erimek mmkndr. - Binary, dosya binary modda alrsa dosya ierisindeki her karaktere, karakterin numaras verilerek ulalabilir. Dikkaet edilise Random modda dosya ierisindeki kaytlara bir btn olarak ulaabiliyorduk, bu modda ise kayt iindeki istenen karakterede ulalabilmektedir. - Input, dosya okunmak iin alr. Input, Output ve Append modda alan dosyalara sral eriimli dosyalar denir. Ve bu tip dosyalarda her kayt eit uzunlukta olmak zorunda deildir. Kaytlardan biri ok bykken dieri ok kk olabilir. Dolays ile dosyadaki

45

hangi kaydn nerede olduu o kaydn numaras verilerek bulunamaz. Bu tip dosyalarda bir kayda ulaabilmek iin o kayttan nceki btn kaytlar okumak gerekir. - Output, dosya yazmak iin sral eriimli olarak alr. - Append, Output modu gibidir ancak dosya gstericisi dosyann sonunda duracaktr ve yazlan kaytlar dosya sonuna eklenecektir. Amak istenen dosya mevcut deilse Append, Binary, Output veya Random modlarnda oluturulur. Yani bir dosyay Input modunda aabilmek iin o dosyann var olmas gerekir. Aksi takdirde hata oluacaktr. Dosyay Input modunda amadan nce Dir(dosyaadi) komutuyla dosyann varln kontrol etmek gerekir. Yoksa dosyay oluturmak gerekebilir. erisimmodu : Dosya alrken dosyann ne iin ald belirtilebilir. Bu parametre u kelimeden biriyl kullanlr. - Read: Dosya sadece okumak iin alr. Dosyadaki kaytlarn deitirilmesine ve yeni kaytlar eklenmesine izin verilmez. - Write: Dosya sadece yazmak iin alr. - ReadWrite: Dosya hem okumak hemde yazmak iin alr. Dosya Read ile yalnz okunmak iin almsa, dosyaya yazan komutlarda (Put gibi) veya Write ile yalnz yazmak iin almsa dosyadan okuyan komutlarda (Get gibi) VBA Path/File Access Error hatas verir. Lock : Dosya alrken istenirse dier programlarn bu dosyaya eriimi engellenebilir. u drt kelime ile birlikte kullanlr. - Shared, alan dosyaya dier uygulamalar tarafndan okuma ve yazma yaplabilir. - Read, okumaya kar kilitler. Dosya ak olduu srece dier programlar bu dosyadan okuma yapamazlar. Ancak dosyaya yazabilirler. - Write, dosyay yazmaya kar kilitler. Close komutu verilinceye kadar dier programlar bu dosyaya yazamazlar. - Read Write, dosyay hem yazmaya he de okumaya kar kilitler. dosyano : Dosya alrken o dosyaya 1 ile 255 arasnda bir numara verilir ve dosyada yaplan ilemlerde bu numara kullanlr. (Get #1 gibi). Ayn anda birka dosya alyorsa numaralarda farkl olmaldr. Dosya Binary, Input ve Random modlarndan biri ile almsa ayn dosya kapatlmaya gerek kalmadan farkl bir dosya numaras verilerek tekrar alabilir. Ancak Append ve Output modlarnda ayn dosyay kapatmadan tekrar amak mmkn deildir. kayituzunlugu : Dosyann am moduna gre bu parametrenin iki farkl anlam vardr ve 32767 den byk olamaz. Ayrca Binary modda alan dosyalarda bu parametrenin anlam yoktur. Dosya Random modu ile almsa bu say her kaydn uzunluunu belirler. Dosyaya yazlan kayt bu deerden bykse hata oluur. Bu deer verilmezse her kaydn uzunluu 128 karakter olarak kabul edilir. Dosya Random modundan farkl bir modla almsa bu say karakter buffer inin boyutunu belirler. Verilmezse 512 karakter olarak kabul edilir. Buffer bir seferde okunacak ve yazlacak karakter saysn belirler. Yani dosyadan bir kayt okunaca zaman buffer boyutu kadar okuma yaplr ve bir sonraki okuma isteinde okunmak istenen kayt bufferde ise tekrar dosyadan okunmaz. Yazarken de buffer doluncaya kadar dosyaya yazlmaz. Buffern byk deerleri okuma ve yazma ilemlerinin hzlanmasna sebep olur fakat bellekte fazla yer kaplar. Ancak SMARTDRV gibi bir Cache program kullanyorsanz veya kullandnz iletim sistemi Cache destei veriyorsa bu buffer byk vermenizin hibir avantaj olmaz nk Cache program zaten yapacaktr.

46

RASTGELE ERML DOSYAYA YAZMA ve OKUMA Random veya Binary modu ile alan dosyalara kaytlar Put komutu ile yazlr ve Get komutu ile okunur. Put [#] dosyano, [kayitno], degisken Get [#] dosyano, [kayitno], degisken degisken : erii yazlacak deikeni kaydn alnaca deiken. dosyano : Yazlacak veya okunacak dosyann numaras. Bu numara Open komutu ile belirlenen dosya numarasdr. kayitno : Yazlacak veya okunacak deikenin dosya iindeki kayt numaras. Bu numara dosyadaki ilk kayt iin 1 ve olabilecek en byk deer 2,147,483,647 dir. Dim x x = Merhaba Put #1, 5, x Yukardaki satrlarla 1 numaral dosyann 5 numaral kaydna x deeri yazlmaktadr. Eer kayt numarasn belitmeseydik x deikeni sradaki kayda yazlacakt. Rastgele eriimdi modda btn kaytlar dolu olmak zorunda deildir. Yani Dim x Get #1, 5, x MsgBox x Yukardaki satrlarda ise 1 numaral dosyann 5 numaral kayd okunmaktadr.

SIRALI ERML DOSYAYA YAZMA ve OKUMA Output ve Append modu ile alan dosyalara Write veya Print komutu ile yazma yaplr. Write # dosyano [,degiskenler] dosyano : Yazlacak dosyann numaras. Bu numara Open komutu ile belirlenen dosya numarasdr. degiskenler : Dosyaya yazlacak olan deiken listesi araya virgller konarak yazlr. Write ile dosyaya yazlan deikenler trnak ierisinde ve araya virgl konarak yazlrlar ve son deikenden sonra satr sonu karakteri konur. Dim ad, dt Open \test.txt For Output As #1 ad = Mehmet zpnar dt = 15.01.1983 Write #1, ad, dt ad = Adem Kseman dt = 10.10.1984 Write #1, ad, dt Close #1

47

ki ayr Write komutu ile dosyaya yazlan ad ve dt deikenleri dosyada aadaki gibi olacaktr. Mehmet zpnar,15.01.1983 Adem Kseman,10.10.1984 Bu tip dosyalara Print komutu ile yazlabilmektedir. Print # dosyano [,degiskenformati] degiskenformati : Print komutunun dosyaya yazan bu format Vb de ekrana k yapan print gibidir. Deiken formatn ekrana kt yapyormu gibi dosyaya yazar. Dim ad, dt Open \test.txt For Output As #1 ad = Mehmet zpnar dt = 15.01.1983 Print #1, ad, dt; ad = Adem Kseman dt = 10.10.1984 Print #1, ad; dt Close #1 ki ayr Print komutu ile dosyaya yazlan ad ve dt deikenleri dosyada aadaki gibi olaraktr. Mehmet zpnar 15.01.1983 Adem Kseman 10.10.1984

Input modu ile alan sral eriimli dosyalardan okuma ilemi ise Input ve Line Input komutlar ile yaplr. Input # dosyano, degiskenlistesi degiskenlistesi : Dosyadan okunan kaytlar bu deikenlere aktarlr. Dosyada her ift trnak iindeki karakterler bir kayt kabul edilir ve srasyla bu deikenlere aktarlr. Eer trnak iaretleri iinde bir karakter kmesi yoksa satr sonuna kadar olan karakterler bir kayt kabul edilir. Test dosyasnda u kaytlar bulunsun. Mehmet zpnar 15.01.1983 Adem Kseman 10.10.1984 Dim ad, dt Open \test.txt For Input As #1 Input #1, ad, dt Cells(1,1) = ad Cells(1,2) = dt Close #1 Input (KarakterSayisi, Dosyano) Bu fonksiyonla numaras verilen dosyadan karaktersayisi kadar karakter okunur ve sonu geri gnderir. Bu fonksiyon Sral eriimli olarak vey Binary modda alm dosyalarda kullanlabilir. Dim c Open "c:\test.txt" For Input As #1 'dosya sonuna gelinceye kadar Do While Not EOF(1) Sheets(1).Cells(1, 1) = Input(1, #1) 'bir karakter oku Loop Close #1

48

DOSYALARI KAPATMAK Hangi modda alrsa alsn dosya Close komutu ile numaras verilerek kapatlr. Close # dosyano [;dosyano] dosyano : Kapatlacak dosyann numaras. Bu numara Open komutu ile belirlenen dosya numarasdr. Reset Ak olan btn dosyalar kapatmak iin Reset komutu kullanlabilir. Open \dosya.dat For Random as #1 . . Close #1

DOSYA KONTROL FONKSYONLARI Dosya Sonu Kontrol EOF (dosyano) Numaras verilen dosyann sonuna gelinmise True deer gnderir. Sral eriimli dosyalarda dosya sonu tespiti iin kullanlr. rnek: Bir snftaki rencilerin ad, soyad, vize ve final notlarn aralarnda * kullanlarak c:\bilgi.txt olarak kaydedildiini varsayalm. Aadaki gibi

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

49

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

50

Dosya Boyu Kontrol LOF (dosyano) Numaras verilen dosyann byte olarak uzunluunu verir. FileLen fonksiyonu gibidir ancak farkl olarak uzunluu renilecek dosyann Open ile alm olmas gerekir. Aktif Kayd Deitirmek Dosya ierisinde aktif kayd veya karakteri gsteren bir gsterici vardr. Kayt numaras verilmeden yaplan okuma ve yazma ilemleri bu gstericinin gsterdii yerden yaplr. Yaplan yazma ve okuma ilemleri de gstericiyi okunan veya yazlan kaydn sonuna tar. Dosya Random modla almsa bu gsterici kayt numarasdr dier modlarda alm ise bu gsterici dosya ierisindeki karakterin konumudur. Seek #dosyano, yenikonum Bu komut numaras verilen dosyadaki gstericiyi yeni konuma tar. Bu komutun Random dosyalarda kullanlmas gerekmeyebilir. nk bu modda alan dosyalarda Get ve Put komutlaryla istenen kayda ulalabilmektedir. Ancak Sral eriimli dosyalarda dosya ierisinde istenen bir karaktere bu komutla ulalabilir. Aktif gsterici konumunu renmek iinse bu komutun fonksiyon format kullanlr. Seek (dosyano) Bu ekilde kullanmda renilebilir. FreeFile Dosya aarken bu dosyalara birer numara veriyorduk ve bu numaray kullanarak o dosyadan okuma ve yazma yapabiliyorduk. Ak olan her dosyann numaras da farkl olmas gerektii iin ayn anda atnz btn dosyalara farkl bir numara vermeniz gerekir. Genel amal olarak yazdnz fonksiyonlarda atnz dosyalarda bu numarann, programn dier blmlerinde kullanlmayan bir numara olduundan emin olabilmek dosya numaras olarak herhangi bir say vermek yerine bu sayy FreeFile fonksiyonu kullanarak buldurabilirsiniz. FreeFile fonksiyonu o anda kullanlmayan bo bir dosya numaras gnderecektir. Bylece bu numarann programn dier ksmlarnda kullanlmadndan emin olabilirsiniz. Dim DosyaNo DosyaNo = FreeFile Open deneme For Random As #DosyaNo Put #DosyaNo, 1, abc .. Get #DosyaNo, 1, x Close #DosyaNo dosya numaras verilen dosyadaki gstericinin konumu

51

BLM -9-

EXCEL de PROGRAM YAZMA

Excel de program yazabilmek iin Visual Basic bilinmesi gerekmektedir. Buraya kadar ki rendikleriniz Excel de program yazabilmeniz in gerekli olan temel bilgileri ieriyordu. Bunlarn haricinde tabi ki Excel in de kendi komutlar, fonksiyonlar vs. var. Bunlarn zerinde fazla durulmayacak. Kitabn asl konusunu ieren bu blm bir program ve eitli rnekler yaparak en iyi ekilde ve pratik yollardan anlatmaya alacaz. Excel de makro iki trl yazlr. Row-Range ve Cells yntemleri. Row-Range yntemi Cells yntemine gre daha hzl olsa da programn yazlmas ve okunabilirlii iin biz Cells yntemini tercih ediyoruz. Programlar ierisinde geen daha nceki grdnz komutlar, anlatlmayacak. Onlarn yerine Excel komutlar anlatlacak. fonksiyonlar vs.

PERSONEL PROGRAMI Programmzn ierii, Yeni ie girmi personelin kayd Kaytl personel bilgilerinin grlmesi ve deiikliklerinin yaplmas Personel mesai bilgilerinin girilmesi. Avans Personelin sigorta giriinin yaplmas Personelin iten karlmas Maa listesi irket bilgilerinin girilmesi. Asgari cretin belirtilmesi ve personelin alaca blmlerin nceden girilmesi

Programmzn ierii bu kadar. imdi programn ilk nce alt zemini hazrlayalm. lk nce alma sayfalarn hazrlayalm. alma sayfalarn veri taban olarak kullanacaz. - Sayfa 1 de bilgilerimizi kaydedeceimiz alanlar oluturulacak. - Sayfa 2 de sabit bilgilerimiz olacak. irket bilgileri, irketteki blmlerin tutulduu alan, asgari cret. - Sayfa 3 de ise maa dkmnn olaca sayfann tasarm. Yalnzca balklar yazlacak. Kenarlklar programdan ayarlanacak. Sayfa 1 deki alan adlar unlar: Numara T.C kimlik no Ad Soyad Baba ad Ana ad Doum yeri Doum tarihi Medeni hali Cinsiyeti Adres Ev tel Cep tel Blm Maa Yevmiyesi

52

Pazar mesaisi Hafta ii mesaisi Avans e giri tarihi Sigorta numaras Vergi dairesi Vergi no Anne kzlk soyad ten k tarihi

Bu alan balklar programda kullanlmayacaktr. Sadece programcnn program yazmasn kolaylatracak stun balklardr. Alanlarn genilikleri nemli deil. Unutmayalm bunlar sadece balk. Bu alanlarn sayfadaki yerleimi u ekilde olacaktr.

Sayfa 2 deki alan adlar unlar: irket bilgileri Blmler Asgari cret

Bu alan adlarda programda kullanlmayacak. Sadece programcnn program yazmasn kolaylatrmak iin verilmi alan balklardr. Alanlarn ierisinde yazan bilgiler varsaym olarak girilmitir. Daha sonra bu bilgiler programdan girilecek veya gncellenecek. Bu sayfann yerleimi aadaki gibi olacaktr.

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

53

Bu tasarm ve kt alnan bilgileri rnek olarak bu ekilde aldk. Siz isteinize gre tasarlayabilir veya farkl bilgilerin dkmnde alabilirsiniz. Tabi ki programdan da gerekli dzenlemeleri yapmak art ile. Programn ana zemini oluturduk. imdi de bilgileri kaydetmek, dzenlemek veya ilemek iin gerekli olan Formlarn oluturulmasna sra geldi. Bunun iinde Visual Basic kod dzenleyicisini ap gerekli formlar ekliyoruz. Formlarn tasarmlarn kendi isteinize gre dzenleyebilirsiniz. Formlarmz ve formun programda kullanlaca ad, Ana Men - anamenu Yeni kayt formu - yenikart Sabit bilgilerin girilecei form - sabitler Sigorta giriinin yaplabilmesi iin form - sigortagiris Maa ve avans belirleme - avans Maa listesinin dkm iin form - maasdokum ten karma iin form - istencikar Bilgi ekran iin bir form - bilgiekrani

Programn hemen her tarafnda kullanacamz yer deyimi ve While dngs hakknda biraz aklama yapalm. yer dediimiz Integer tipinden bir deikendir. Buna yer deilde baka bir deiken ismi de verilebilir. Bunu programda, kaydn nereden baladn belirlemek iin kullanacaz. Mesela, yer deikenine 2 verirsek kaydetme veya bulma ilemi 2. kayttan itibaren balayacaktr. While dngsnn mantn hatrlarsak eer, bir dngnn ka defa alaca daha nceden bilinmiyorsa kullanlr demitik. Bir art gerekletii srece almas gereken program bloklarnda kullanlr. Bizim programlarmz daki artmz bo alan grene kadar dn olacaktr. Yani, yer = 2 While Sheets(1).Cells(yer,1)<> yer = yer+1 Wend Bu satrlarn mant udur. Balang satr olarak 2 yi al ve yer numaral satr boluktan farklysa yani dolu ise yer in deerini 1 arttr. Eer yer in deerini arttrmazsak dng sonsuz dngye girecektir. Ve dngnn sonu gelmeyecektir. Bu dng genellikle kaydetme ilemlerinde kullanlr. Dngnn knda yer in deerini 1 azaltrsak buldurma ilemlerinde de kullanabiliriz. nk dngnn iinde bir boluk kalm durumda. Dolaysyla dng knda bu boluun alnmas gerekmektedir.

54

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

Anamenu formunda olacak kodlar aadaki gibidir. Private Sub CommandButton1_Click() yenikart.Show 'Yeni kart formunu gster gster End Sub Private Sub CommandButton2_Click() sigortagiris.Show ' Sigorta giri formunu gster End Sub Private Sub CommandButton3_Click() maasdokum.Show 'Maa dkm formunu a End Sub Private Sub CommandButton4_Click() istencikar.Show 'ten karma formunu a End Sub Private Sub CommandButton5_Click() sabitler.Show 'Sabit bilgi girii formunu gster End Sub Private Sub CommandButton6_Click() bilgiekrani.Show 'Bilgi ekrann gster End Sub Private Sub CommandButton7_Click() avans.Show End Sub Private Sub UserForm_Activate() Label1.Caption = Sheets(2).Cells(1, 2) End Sub irketin sheets(2).cells(1,2) den getiriliyor

Formlar aras gei iin Show komutu kullanlr. Tekrar dn iin yine alacak formun ad ile birlikte Show komutu kullanlr. Program kapatmak iin End komutu kullanlr. Kullanm yalnz banadr. Burada bir mesaj kutusu ile kullancya programn kapatlp kapatlmayaca soruluyor. Cevap evet

55

olunca program End komutu ile sonlandrlyor. End, alt formlar kapatmada kullanlmaz, sadece ana form kapatmada kullanlr. End komutu tm ak olan formlarla birlikte kendisini de kapatr. Alt formlar kapatmak iin Unload Me kullanlr. Bir baka form kapatlacaksa Unload formadi kullanlr. Sabitler Formu Bu formda irket ad, nvan ve adresi, asgari cret belirtme ve blm ekleme alanlar olacak. Formumuzun grnts aadaki gibidir.

Adres alanndaki TextBox n MultiLine zellii ok satrl bilgi girileceinden True olacak. Bu formda kullanlan kodlar aadadr. Private Sub CommandButton1_Click() Dim mesaj As Integer 'mesaj diye bir tam say tipi tanmlanyor mesaj = MsgBox("irket Bilgilerini Gncellemek stediinizden Eminmisiniz?", 4 + 32, "Uyar") If mesaj = 6 Then Sheets(2).Cells(1, 2) = TextBox1 ' ikinci sayfann 1,2 numaral hcresine textbox1 deki bilgiler yazlyor Sheets(2).Cells(2, 2) = TextBox2 Sheets(2).Cells(3, 2) = TextBox3 TextBox1 = "": TextBox2 = "": TextBox3 = "" ' kayt ileminden sonra textboxlarn ileri boaltlyor Else Cancel = True End If End Sub Private Sub CommandButton2_Click() Dim mesaj As Integer mesaj = MsgBox("Asgari creti Gncellek stiyormusunuz?", 4 + 32, "Uyar") If mesaj = 6 Then Sheets(2).Cells(2, 4) = TextBox4 Else Cancel = True End If End Sub Private Sub CommandButton3_Click() Dim mesaj, yer As Integer yer ve mesaj deikenleri birer tam saydr yer = 2 yer in deeri 2 olarak verilmi While Sheets(2).Cells(yer, 3) <> "" yer,3 dolu ise

56

yer = yer + 1 yer i 1 arttr Wend dngy kapat mesaj = MsgBox("irketinize Yeni Bir Blm Eklemek stiyormusunuz?", 4 + 32, "Uyar") If mesaj = 6 Then Sheets(2).Cells(yer, 3) = TextBox5 yer,3 e yani ilk bolua TextBox5 i yaz TextBox5 = "" kayttan sonra TextBox n iini boalt Else Cancel = True End If End Sub Private Sub TextBox1_Change() TextBox1 = UCase(TextBox1) End Sub Private Sub TextBox2_Change() TextBox2 = UCase(TextBox2) End Sub Private Sub TextBox3_Change() TextBox3 = StrConv(TextBox3, vbProperCase) End Sub Private Sub UserForm_Activate() TextBox1 = Sheets(2).Cells(1, 2) TextBox2 = Sheets(2).Cells(2, 2) TextBox3 = Sheets(2).Cells(3, 2) TextBox4 = Sheets(2).Cells(2, 4) End Sub Ad ve Unvan alanlarna yazlacak olan bilginin tm harflerinin byk yazlmas iin daha nceki konularda grdmz UCase fonkiyonunu kullandk. Adres alannda yer alan bilgideki her kelimenin ba harfi byk dier harflerin ise kk yazlmas iin StrConv fonksiyonunu kullandk. Bu tr ilemlerde UCase fonksiyonun grevi yeterli olmad iin StrConv fonksiyonunu kullandk. Formun alnda (Activate) ad, unvan, adres ve asgari zeret bilgileri otomatik olarak ilgili metin kutularna getiriliyor. Bu, daha nceki girilmi bilgiyi hatrlamamza yardmc olacaktr. Yeni Personel Kart Formu Bu formda kodlar biraz fazla veya karmak olabilecei iin kodlarn tmn birden vermeyip tek tek anlatarak verilecek. Burada maa bilgilerinin otomatik hesaplanaca iin Yevmiye, Pazar Mesaisi ve Hafta i Mesaisi TextBox larnn Lock zelliini True yapalm.

57

Formun format yle.

Formun Activate olaynda baz alanlarn otomatik gelmesi gerekiyor. Medeni hali, cinsiyeti ve blm alanlar. ComboBox1.Clear ComboBox2.Clear ComboBox3.Clear ComboBox larn ileri temizleniyor

ComboBox1.AddItem "Evli" ComboBox1 e Evli deeri ekleniyor ComboBox1.AddItem "Bekar" Bekar deeri ekleniyor ComboBox1.AddItem "Dul" ComboBox2.AddItem "Kadn" ComboBox2.AddItem "Erkek" combobox2 ye Kadn deeri ekleniyor

yer = 2 While Sheets(2).Cells(yer, 3) <> "" yer = yer + 1 Wend yer = yer 1 buldurma ilemi yaplaca iin yer in deeri 1 eksiltilmi For i = 2 To yer 2 den yer e yani bolua kadar dner ve ComboBox3.AddItem Sheets(2).Cells(i, 3) grd tm kaytlar combobox3 e ekler Next i Tarih alanlarn da tarih ayrac kullanmak isteyebilirsiniz. Bunun iin eitli yntemler vardr. Mesela, Mid fonksiyonu ile paralamak, Len fonksiyonu ile girilen karakter saysna gre araya ayra koyma veya daha farkl fonksiyonlar ile bu ilemler yaplabilir. imdi Len fonksiyonu ile araya ayra koymay yapalm;

58

Doum tarihi alanna bunu uygulayalm. Sizde TextBox larn isimlerini deitirerek baka alanlara uygulayabilirsiniz. If Len(TextBox8) = 2 Then TextBox8 = TextBox8 & "." If Len(TextBox8) = 5 Then TextBox8 = TextBox8 & "." If Len(TextBox8) = 10 Then ComboBox1.SetFocus Bu satrlar ilgili metin kutusunun Change olayna yazld iin girilen karakter saysn bulmak olduka kolaydr. Bizde bundan faydalanp her girilen karakterde toplam karakter saysn buldurarak ilemimizi yapyoruz. nce ilk girilen iki karakter bulunup textbox n sonuna bir ayra ekleniyor daha sonra girilen iki karakterle ve ayrala birlikte toplam be karakter ediyor ve textbox n sonuna tekrar bir ayra ekleniyor. En sonunda ise bir tarih en fazla 10 karakter uzunluunda olacandan uzunluk 10 olduunda textbox kontrol bir sonraki eleman olan combobox a brakyor. Maa hesabnn otomatik olarak yaplabilmesi iin Maa metin kutusunun Change olayna aadaki kodlar yazn. Burada personelin gnlk yevmiyesini bulmak iin bir ay 30 gn varsayp maa 30 a blp yevmiyesini, gnlk alma saatini 8 saat kabul edip 8 e blerek haftaii saatlik mesaisini ve Pazar mesaisi gnlk yevmiyesinin 2 kat olacandan gnlk yevmiye cretini 2 ile arpp Pazar mesaisini bulacaz. On Error Resume Next TextBox13 = Val(TextBox12 / 30) yevmiyesi bulunuyor TextBox14 = Val(TextBox13 * 2) Pazar mesaisi bulunuyor TextBox15 = Val(TextBox13 / 8) haftaii mesaisi bulunuyor imdi de programmzn tm tarihli alanlarnda kullanabileceimiz basit bir fonksiyon yazalm. Ama, formatl bir tarihi fonksiyonun geri dnen deerinden alp ift tklanan textbox a yazdrmak. Bunun iin ilk nce bir Module ekliyoruz(Insert Module). Alan bo kod sayfasna u kodlar yazyoruz. Public Function tarih() tarih = Format(Date, "dd.mm.yyyy") End Function Genel bir fonksiyon proseduru alyor ve fonksiyondan geri dnen deere format belirtilmi gnn tarihi atanyor. imdi bu fonksiyonu programn her alannda rahatlkla kullanabiliriz. rnein, ie giri tarihi alann daki textbox a ift tklandnda gnn tarihi textboxa otomatik bir ekilde yazdrlabilir. Personel numaras alanna ift tklandnda program yeni bir personel numaras verebilir. Bunun iin bir ok yntem vardr. Birincisi, toplam kayt says kontrol edilir, bulunan saynn bir fazlas personele numaras olarak verilebilir. Ancak daha nce kaydedilmi bir personel silindiinde ayn numaradan baka bir kayt daha olacandan numaralarda akma olacaktr. Bu yzden fazla gvenli olmayan bir yntemdir. kinci olarak , daha nce verilmi personel numaralar kontrol edilir ve ilerinden en byk say bulunur, personele bulunan saynn bir fazlas verilir. Bylece nceki kaytlardan birisi silinse dahi her zaman en byk say verileceinden hibir akma olmayacaktr. imdi ikinci ynteme gre programmzn bu ksmn yapalm. Dim yer As Integer Dim ebs, numara As Long yer = 2 While Sheets(1).Cells(yer, 1) <> "" yer = yer + 1 Wend yer = yer 1 buldurma ilemi yapldndan yer 1 eksiltiliyor

59

ebs = 0 For i = 2 To yer numara = Sheets(1).Cells(yer, 1) If numara > ebs Then ebs = numara Next i TextBox1 = ebs + 1 Kodlarda yaplan ilemler ksaca unlar; buldurma ilemi iin yer tutulup While dngs alyor. ebs (bir deikendir), yani en byk say olarak 0 kabul ediliyor. For dngs yer e kadar dngye giriyor ve dngdeki her geilen kaydn numara alan numara deikenine atanyor. Daha sonra If art yapsyla bulunan numara deikeni elimizdeki ebs ile karlatrlyor, eer numara ebs den byk ise ebs ye yeni numara deeri atanyor. Dngden kldktan sonra yine dier yntemdeki gibi textbox a bulunan en byk saynn bir fazlas personel numaras olarak veriliyor. Eer el ile bir numara verilirse bu numarann daha nce baka bir personele verilip verilmedii kontrol edilmelidir. Bunun iin TextBox1 in Exit olayna aadaki kodu yazmamz yeterli. Dim i, yer As Integer yer = 2 While Sheets(1).Cells(yer, 1) <> "" yer = yer + 1 Wend yer = yer 1 buldurma yapld iin yer in deeri 1 azaltlyor(boluk alnyor) For i = 2 To yer If TextBox1 = Sheets(1).Cells(i, 1) Then MsgBox Sheets(1).Cells(i, 1) & "-" & Sheets(1).Cells(i, 3) & " " & Sheets(1).Cells(i, 4) & " " & "Daha nce Byle Bir Numara ile Personel Kayd Yaplm" TextBox1.SetFocus: TextBox1 = "" End If Next i imdi asl iimizi yapacak olan kaydetme ileminde sra. Bilgilerin kaydedilmesinden nce baz alanlarn bo geilip geilmemesi kontrol edilmelidir. Eer bosa programc tarafndan o alanlarn bir ekilde dolu gsterilmesi salanmaldr. Mesela o alana Yok veya Bilgi Girilmedi yazdrlarak. Programn ilerideki ilemlerinde sorunsuz bir ekilde almas iin bu gereklidir. imdi Kaydet butonuna gerekli kodlar yazalm. lk nce bo alanlar kontrol edilecek.
'Kiisel Bilgiler Bilgiler kontrol ediliyor eer bunlardan birisi bosa Exit Sub ile Sub dan klyor If TextBox1 = "" Then MsgBox "Ltfen Personel Numaras Veriniz": TextBox1.SetFocus: Exit Sub If TextBox2 = "" Then MsgBox "Ltfen T.C Kimlik Numarasn Giriniz": TextBox2.SetFocus: Exit Sub If TextBox3 = "" Then MsgBox "Ltfen Ad Alann Doldurunuz": TextBox3.SetFocus: Exit Sub If TextBox4 = "" Then MsgBox "Ltfen Soyad Alann Doldurunuz": TextBox4.SetFocus: Exit Sub If TextBox5 = "" Then MsgBox "Ltfen Baba Adn Giriniz": TextBox5.SetFocus: Exit Sub If TextBox6 = "" Then MsgBox "Ltfen Ana Adn Giriniz": TextBox6.SetFocus: Exit Sub If TextBox7 = "" Then MsgBox "Ltfen Doum Yerini Giriniz": TextBox7.SetFocus: Exit Sub If TextBox8 = "" Then MsgBox "Ltfen Doum Tarihini Giriniz": TextBox8.SetFocus: Exit Sub If ComboBox1.Text = "" Then MsgBox "Ltfen Personelin Medeni Halini Seiniz": ComboBox1.SetFocus: Exit Sub = "" Then MsgBox "Ltfen Personelin Cinsiyetini Seiniz": If ComboBox2.Text ComboBox2.SetFocus: Exit Sub If TextBox9 = "" Then MsgBox "Ltfen Adresi Giriniz": TextBox9.SetFocus: Exit Sub If TextBox10 = "" Then MsgBox "Ltfen Ev Telefonunu Giriniz": TextBox10.SetFocus: Exit Sub If TextBox11 = "" Then MsgBox "Ltfen Cep Telefonunu Giriniz": TextBox11.SetFocus: Exit Sub

60

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

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

61

yer deikeninin deeri While dngsnn bulduu boluktur. Yani bilgilerin kaydedilecei alandr. Sheets(1).Cell(yer,1) = TextBox1 demek, birinci sayfann, birinci stununda grlen boluk satrnn birinci stununa TextBox1 deki bilgiyi yaz demekdir. Sheets(1).Cell(yer,2) = TextBox2 demek yine ayn mantkla bu kez ikinci stununa TextBox2 yi yaz anlamna gelmektedir. Kaydetme ilemi bittikten sonra alma kitabmz ThisWorkbook.Save komutu ile kaydediyoruz. Kod karmaas olmasn diye, alanlar boaltmak iin aadaki Sub yazalm. Daha nceki konularda sub eklenmesi ve arlmasn grmtk. Sub textbosalt() TextBox1 = "": TextBox2 = "": TextBox3 = "": TextBox4 = "": TextBox5 = "": TextBox6 = "": TextBox7 = "": TextBox8 = "": TextBox9 = "": TextBox10 = "" TextBox11 = "": TextBox12 = "": TextBox13 = "": TextBox14 = "": TextBox15 = "": TextBox16 = "": TextBox17 = "": TextBox18 = "": TextBox19 = "": TextBox20 = "" ComboBox1.Text = "": ComboBox2.Text = "": ComboBox3.Text = "" End Sub Yukardaki Sub da olduu gibi, VB ve VBA da bir den fazla satr tek satrda aralarna : konularak yazlabilir. Sigorta Giri Formu Bu formdan sigorta girii yaplacak. Ve formun grnts aadaki gibi olacaktr.

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

62

Girilen numarann kaytl olup olmadn anlamak iin buldurma ileminden nce metin kutularnn ilerini boalttrmamz yeterli olacaktr. Daha sonrasnda da bir For dngs ierisinde TextBox1 deki bilgi If art ile kontrol ettirilip eer deerler eitse bilgiler getiriliyor. Kaydetme ilemi iin ise aadaki kodlar yazlacak. Dim i, yer, mesaj As Integer yer = 2 While Sheets(1).Cells(yer, 1) <> "" yer = yer + 1 Wend yer = yer - 1 For i = 2 To yer If TextBox1 = Sheets(1).Cells(i, 1) Then mesaj = MsgBox("Personelin Sigorta Giriini Yapmak stiyormusunuz?", 4 + 32, "Uyar") If mesaj = 6 Then Sheets(1).Cells(i, 20) = TextBox5 ThisWorkbook.Save TextBox1 = "": TextBox2 = "": TextBox3 = "": TextBox4 = "": TextBox5 = "" Else Cancel = True End If End If Next i Sigorta girii yaplmadan nce hangi personelin sigorta giriinin yaplaca TextBox1 de yazl olan personel numarasna gre bulduruluyor. Bulunan personelin sigorta numaras alanna, verilen sigorta numaras kaydediliyor. Yeni bir ilem iin textler boaltlyor. ten karma Formu Bu formu personelin iine son vermek iin kullanacaz.

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

63

TextBox2 = "": TextBox3 = "": TextBox4 = "": TextBox5 = "" Dim yer, i As Integer yer = 2 While Sheets(1).Cells(yer, 1) <> "" yer = yer + 1 Wend yer = yer - 1 For i = 2 To yer If TextBox1 = Sheets(1).Cells(i, 1) Then TextBox2 = Sheets(1).Cells(i, 3) TextBox3 = Sheets(1).Cells(i, 4) TextBox4 = Sheets(1).Cells(i, 19) TextBox5 = Sheets(1).Cells(i, 24) If TextBox5 <> "" Then MsgBox TextBox5 & Chr(13) & "Bu Personel Zaten ten karlm" TextBox1 = "": TextBox2 = "": TextBox3 = "": TextBox4 = "": TextBox5 = "" End If End If Next i ten k tarihi alanna daha nce tanmladmz tarih fonksiyonunu gerektii yerde getirtebiliriz. Personelin bugn iten ktn varsayarsak eer, textboxn DblClick olayndan bu fonksiyonu artmamz gerekiyor. TextBox5 = tarih k ilemini gerekletirmek iin aadaki kodlar yazalm. Dim yer, i, mesaj As Integer yer = 2 While Sheets(1).Cells(yer, 1) <> "" yer = yer + 1 Wend yer = yer - 1 For i = 2 To yer If TextBox1 = Sheets(1).Cells(i, 1) Then mesaj = MsgBox("Personelin ine Son Vermek zeresiniz Eminmisiniz?", 4 + 32 + 256, "Uyar") If mesaj = 6 Then Sheets(1).Cells(i, 24) = TextBox5 ThisWorkbook.Save TextBox1 = "": TextBox2 = "": TextBox3 = "": TextBox4 = "": TextBox5 = "" Else Cancel = True End If End If Next i Onay mesajn da kullanc yanllkla Evet i semesin diye varsaylan deer olarak Hayr (256) atyoruz.

64

Maa ve Avans Belirleme Formu Formumuzun grnts aadaki gibidir.

Personel numaras girilerek ilgili personelin maa bilgileri getirilecektir. Maa miktarnda deiiklik varsa veya personel avans alm ise bu formdan bu deerler belirlenebilir. Maa miktarndan alnan avans dlmeyecek, maa dkmnde hesaplanarak dkm alnacaktr. Formumuzun kodlar aadadr. Private Sub CommandButton1_Click() If TextBox1 = "" Then MsgBox "Ltfen Personel Numarasn Giriniz": TextBox1.SetFocus: Exit Sub Dim yer, i, mesaj As Integer yer = 2 While Sheets(1).Cells(yer, 1) <> "" yer = yer + 1 Wend yer = yer - 1 For i = 2 To yer If TextBox1 = Sheets(1).Cells(i, 1) Then mesaj = MsgBox("Maa ve Avans Bilgilerini Gncellemek stiyormusunuz?", 4 + 32, "Uyar") If mesaj = 6 Then Sheets(1).Cells(i, 15) = TextBox4 Sheets(1).Cells(i, 16) = TextBox5 Sheets(1).Cells(i, 17) = TextBox6 Sheets(1).Cells(i, 18) = TextBox7 Sheets(1).Cells(i, 20) = TextBox8 ThisWorkbook.Save TextBox1 = "": TextBox2 = "": TextBox3 = "": TextBox4 = "": TextBox5 = "": TextBox6 = "": TextBox7 = "": TextBox8 = "" Else Cancel = True End If End If Next i End Sub

65

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox2 = "": TextBox3 = "": TextBox4 = "": TextBox5 = "": TextBox6 = "": TextBox7 = "": TextBox8 = "" Dim yer, i As Integer yer = 2 While Sheets(1).Cells(yer, 1) <> "" yer = yer + 1 Wend yer = yer - 1 For i = 2 To yer If TextBox1 = Sheets(1).Cells(i, 1) Then TextBox2 = Sheets(1).Cells(i, 3) TextBox3 = Sheets(1).Cells(i, 4) TextBox4 = Sheets(1).Cells(i, 15) TextBox5 = Sheets(1).Cells(i, 16) TextBox6 = Sheets(1).Cells(i, 17) TextBox7 = Sheets(1).Cells(i, 18) TextBox8 = Sheets(1).Cells(i, 20) End If Next i End Sub Private Sub TextBox4_Change() On Error Resume Next TextBox5 = Val(TextBox4 / 30) TextBox6 = Val(TextBox5 * 2) TextBox7 = Val(TextBox5 / 8) End Sub CommandButton un Click olaynda ilkgili personelin maa bilgileri ve ald avans miktar kaydediliyor. TextBox4 n Change olaynda yeni maa miktar hesaplanyor. TextBox1 in Exit olaynda kaytl personelin maa bilgileri grntleniyor. Kayt yoksa textboxlarn ileri boaltlarak kullanc uyarlyor. Maa Dkm Formu Formumuzun grnts aadaki gibi olacaktr.

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

66

Formun Activate olaynda aylar ListBox1 e ekleyelim. ListBox1.Clear ListBox1.AddItem ListBox1.AddItem ListBox1.AddItem ListBox1.AddItem ListBox1.AddItem ListBox1.AddItem ListBox1.AddItem ListBox1.AddItem ListBox1.AddItem ListBox1.AddItem ListBox1.AddItem ListBox1.AddItem "Ocak" "ubat" "Mart" "Nisan" "Mays" "Haziran" "Temmuz" "Austos" "Eyll" "Ekim" "Kasm" "Aralk"

Bilgileri aktar butonu ile seili ayn adn ve personel bilgilerini kt alcak sayfa olan Sheets(3) e aktaralm. Private Sub CommandButton3_Click() If ListBox1.Text = "" Then MsgBox "Ltfen Bir Ay Seiniz": Exit Sub Dim yer, yer1, i, k As Integer yer = 1 While Sheets(1).Cells(yer, 1) <> "" yer = yer + 1 Wend yer = yer - 1 yer1 = 5 While Sheets(3).Cells(yer1, 2) <> "" yer1 = yer1 + 1 Wend For k = 5 To yer1 Sheets(3).Cells(k, 2) = "" Sheets(3).Cells(k, 3) = "" Sheets(3).Cells(k, 4) = "" Sheets(3).Cells(k, 5) = "" Sheets(3).Cells(k, 6) = "" Next k Sheets(3).Cells(2, 2) = ListBox1.Text & " - " & yer1 = 5 For i = 2 To yer Sheets(3).Cells(yer1, 2) = Sheets(1).Cells(i, Sheets(3).Cells(yer1, 3) = Sheets(1).Cells(i, Sheets(3).Cells(yer1, 4) = Sheets(1).Cells(i, Sheets(3).Cells(yer1, 5) = Sheets(1).Cells(i, Sheets(3).Cells(yer1, 6) = Sheets(1).Cells(i, yer1 = yer1 + 1 Next i MsgBox Bilgiler Aktarld End Sub

"Ayna Ait Maa Listesi" 3) 4) 15) 20) 15) - Sheets(1).Cells(i, 20)

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

67

Private Sub CommandButton1_Click() Dim yer As Integer yer = 5 While Sheets(3).Cells(yer, 2) <> "" yer = yer + 1 Wend yer = yer 1 Buraya kadar ki ilemler bildiimiz gibi dolu yerleri buluyor. For i = 5 To yer bir hcrenin tm kenarlar iin ayr ayr tanmlama yaplmak zorundadr. '1.stun With Sheets(3).Cells(i, 2).Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Sheets(3).Cells(i, 2).Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Sheets(3).Cells(i, 2).Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Sheets(3).Cells(i, 2).Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With '2.stun With Sheets(3).Cells(i, 3).Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Sheets(3).Cells(i, 3).Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Sheets(3).Cells(i, 3).Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Sheets(3).Cells(i, 3).Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With '3.stun With Sheets(3).Cells(i, 4).Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With

68

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

69

'6.stun With Sheets(3).Cells(i, 7).Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Sheets(3).Cells(i, 7).Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Sheets(3).Cells(i, 7).Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Sheets(3).Cells(i, 7).Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With Next i End Sub Wtih End With bloklarnda tanmlanan deerler kenarln ynn belirler. rnein sa, sol, taban, tavan gibi... Alaca deerler, xlEdgeLeft, xlEdgeTop, xlEdgeRight, xlEdgeBottom. bu blokun iine yazlan kodlar ise bu ynlerin zellikleridir. Mesela sa taraftaki izginin izgi tr, kalnl, rengi gibi bu deerleri istediiniz gibi deitirebilirsiniz. .Weight = xlMedium gibi. imdi aktarlan bilgileri silen ve eklenen kenarlklar kaldrmak iin iki tane Sub yazalm. Bilgileri silmek iin, Sub bosalt() Dim yer1, k As Integer yer1 = 5 While Sheets(3).Cells(yer1, 2) <> "" yer1 = yer1 + 1 Wend Sheets(3).Cells(2, 2) = "" For k = 5 To yer1 Sheets(3).Cells(k, 2) = "" Sheets(3).Cells(k, 3) = "" Sheets(3).Cells(k, 4) = "" Sheets(3).Cells(k, 5) = "" Sheets(3).Cells(k, 6) = "" Next k End Sub Kenarlklar kaldrmak iin ise u Sub yazalm, Sub kenarlikaldir() Dim yer As Integer yer = 5 While Sheets(3).Cells(yer, 2) <> "" yer = yer + 1 Wend yer = yer - 1

70

For i = 5 To yer Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Sheets(3).Cells(i, Next i End Sub

2).Borders(xlEdgeLeft).LineStyle = xlNone 2).Borders(xlEdgeTop).LineStyle = xlNone 2).Borders(xlEdgeBottom).LineStyle = xlNone 2).Borders(xlEdgeRight).LineStyle = xlNone 2).Borders(xlInsideVertical).LineStyle = xlNone 2).Borders(xlInsideHorizontal).LineStyle = xlNone 3).Borders(xlEdgeLeft).LineStyle = xlNone 3).Borders(xlEdgeTop).LineStyle = xlNone 3).Borders(xlEdgeBottom).LineStyle = xlNone 3).Borders(xlEdgeRight).LineStyle = xlNone 3).Borders(xlInsideVertical).LineStyle = xlNone 3).Borders(xlInsideHorizontal).LineStyle = xlNone 4).Borders(xlEdgeLeft).LineStyle = xlNone 4).Borders(xlEdgeTop).LineStyle = xlNone 4).Borders(xlEdgeBottom).LineStyle = xlNone 4).Borders(xlEdgeRight).LineStyle = xlNone 4).Borders(xlInsideVertical).LineStyle = xlNone 4).Borders(xlInsideHorizontal).LineStyle = xlNone 5).Borders(xlEdgeLeft).LineStyle = xlNone 5).Borders(xlEdgeTop).LineStyle = xlNone 5).Borders(xlEdgeBottom).LineStyle = xlNone 5).Borders(xlEdgeRight).LineStyle = xlNone 5).Borders(xlInsideVertical).LineStyle = xlNone 5).Borders(xlInsideHorizontal).LineStyle = xlNone 6).Borders(xlEdgeLeft).LineStyle = xlNone 6).Borders(xlEdgeTop).LineStyle = xlNone 6).Borders(xlEdgeBottom).LineStyle = xlNone 6).Borders(xlEdgeRight).LineStyle = xlNone 6).Borders(xlInsideVertical).LineStyle = xlNone 6).Borders(xlInsideHorizontal).LineStyle = xlNone 7).Borders(xlEdgeLeft).LineStyle = xlNone 7).Borders(xlEdgeTop).LineStyle = xlNone 7).Borders(xlEdgeBottom).LineStyle = xlNone 7).Borders(xlEdgeRight).LineStyle = xlNone 7).Borders(xlInsideVertical).LineStyle = xlNone 7).Borders(xlInsideHorizontal).LineStyle = xlNone

InsideVertical ve InsideHorizantal zellii hcrenin iindeki dikey veya yatay izgilerdir. Dier zellikler ise kenarlklar eklerken kullandmz sa, sol, tavan ve taban izgileridir. Kenarlk ekleme ve kaldrma ilemleri balk hcrelerinin yalnzca taban izgilerini ekler veya kaldrr. Bu formun asl amac olan kt iini gerekletirelim. Private Sub CommandButton3_Click() If Sheets(3).Cells(5, 2) = "" Then MsgBox "Bilgiler Aktarlmam": Exit Sub Sheets(3).PrintOut MsgBox "Bilgiler Yazcya Gnderildi" kenarlikaldir kenarlkkaldr Sub arlyor bosalt Sub arlyor bosalt End Sub

71

Birinci satrda sayfada bilgi olup olmad kontrol ediliyor. Eer cells(5,2) bosa, yani bu sayfada bilgi yoksa mesaj verilerek kullanc uyarlyor ve dng kontrol ifadesi olan Exit Sub kullanlarak Sub dan klyor. PrintOut komutu bir Excel komutudur. Kullanm ise yukardaki rnek kodda verilmitir. Sayfay yazcya gndermeden nce bask nizleme yapmak isteyebilirsiniz. Bunun iin PrintPreview komutunu kullanabilirsiniz. Bu komutu kullanabilmeniz iin nizleme yaplacak sayfann Visible zelliinin True olmas gerekmektedir. Gizlenmi bir sayfann nizlenmesi hibir zaman yaplamaz. Bu durum PrintOut komutu iin sz konusu deildir. Gizli bir sayfa dorudan printout edilebilir. lk nce kenarlklar kaldrmamzn sebebi, buldurma ilemini bo olan satra kadar yaptmz iin ilk nce bo olan satra kadarki kenarlklar kenarlikkaldir Sub n ararak kaldryoruz daha sonra hcrelerdeki bilgileri bosalt Sub n ararak siliyoruz. Form tekrar alp, bilgiler gnderildii zaman ayn bilgiler alt alta yazlacaktr. Programc olarak kendimizi gvenceye almak iin bu form kapatlrken de kenarlklar ve hcrelerdeki bilgileri kt sayfasndan kaldrlmak gerekir. Bunun iin formun Terminate olayna aadaki kodlar yazmalyz. kenarlikkaldir bosalt Her ikiside bir Sub (alt program) dr. Daha nce alt programlar tanmladmz iin burada uzun uzun ayn kodlar yazmamza gerek kalmyor.

Bilgi Ekran Formu irkette toplam ka personel var, ka sigortal ka sigortal deil, seili blmde ka personel var ve ka personel sigortal gibi bilgilerin grlebilecei bir form hazrlayalm. Formumuzun grnts aadaki gibi olsun.

Formun Activate olayna aadaki kodlar yazlarak irkette bulunan blmler ListBox1 e listelenecek ve irkette toplam ka personel ve sigortal personel saysn bulduralm. Dim yer, yer1, i, toppersonel, topsigortali As Integer 'Blm bulmak iin yer = 2 While Sheets(2).Cells(yer, 3) <> "" yer = yer + 1 Wend yer = yer - 1

72

'Personel bulmak iin yer1 = 2 While Sheets(1).Cells(yer1, 1) <> "" yer1 = yer1 + 1 Wend yer1 = yer1 - 1 Listbox a blm adlar listeleniyor. For i = 2 To yer ListBox1.AddItem Sheets(2).Cells(i, 3) Next i toppersonel = 0 topsigortali = 0 For i = 2 To yer1 toppersonel = toppersonel + 1 toplam personel says bulunuyor If Sheets(1).Cells(i, 21) <> "Yok" Then arta bal olarak toplam sigortal says bulunuyor. topsigortali = topsigortali + 1 End If Next i label a toplam personel says yazlyor Label2.Caption = toppersonel label a toplam sigortal says yazlyor Label6.Caption = topsigortali Kodun iinde iki tana saya kullanlmtr. Bunlarn birisi (toppersonel) toplam personel saysn bulmak iin dieri (topsigortali) ise toplam sigortal personel saysn bulmak iin kullanlmtr. Toplam bir deer istenildii zaman (mesela toplam personel says gibi) belirli aralklar arasndaki bir dngde sayac tutularak sonuca varlabilir. Mesela, For i = 2 to yer sayac = sayac+1 Next i MsgBox sayac Bu rnekte 2 den yer e bir dng alyor ve sayac deikenine dng her dndnde bir fazlas verilerek toplam ka kayt olduu bulunuyor. Seilen blmde ka personel ve ka sigortas yaplm personel olduunu ise ListBox1 in Click olayna yazlacak kodlar ile bulabiliriz. Dim yer, i, pers, sigorta As Integer yer = 2 While Sheets(1).Cells(yer, 1) <> "" yer = yer + 1 Wend yer = yer - 1 pers = 0 dngye girmeden nce sayaclar sfrlanyor sigorta = 0 For i = 2 To yer If ListBox1.Text = Sheets(1).Cells(i, 14) Then eer seilen blm cells(i,14) deki pers = pers + 1 blmlere eitse pers deikeninin deeri 1 arttrlyor End If If ListBox1.Text = Sheets(1).Cells(i, 14) And Sheets(1).Cells(i, 21) <> "Yok" Then sigorta = sigorta + 1 seilen blm cells(i,14) e eit ve cells(i,21) in deeri Yok tan farkl ise yani sigortas yaplmsa sigorta deikenin deeri bir arttrlyor End If Next i

73

Label4.Caption = pers label a blmdeki personel says yazlyor Label8.Caption = sigorta label a blmdeki sigortal personel says yazlyor Programmz buraya kadar kullanlabilir hale getirdik. Bundan sonrasnda ise programn alnda ve kapannda gerekleecek olaylar programzda uygulayarak greceiz. lk nce alma kitabmza bir alma sayfas daha ekleyelim ve ad Ana Menu olsun. Tasarmn biz aadaki resimde grld gibi yaptk siz isteinizse gre uyarlayabilirsiniz. Programa aadaki tasarm varsayarak devam ediyoruz

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

74

Makro atamalarn bitirdikten sonra bu makrolarn kodlarn yazalm. Module1 in General Declarations ksmna aadaki deikenleri tanmlayalm. Dim Dim Dim Dim EskiMenuCubugu MenuParca YeniMenuCubugu kontrollerim

ozelmenu makrosunun kodlarn aadaki gibi yazalm. alma kitabn tam ekran yapar Application.DisplayFullScreen = True Tam ekran yapld zaman grnen Tam Ekran Kapat ara ubuunu gizler Application.CommandBars("Full Screen").Visible = False Biimlendirme ara ubuunu gizler Application.CommandBars("Formatting").Visible = False Standart ara ubuunu gizler Application.CommandBars("Standard").Visible = False Application.CommandBars komutu bir Excel komutudur ve manas, uygulamada bulunan komut ubuklar yani ara ubuklarnn zelliklerini biimlendirmeye yarar. Burada belirtilen ara ubuklarnn grnmezlikleri salanmtr. Aktif pencerenin balk ubuu, yatay ve dikey kaydrma ubuklarn kaldr With ActiveWindow .DisplayHeadings = False balk ubuu .DisplayHorizontalScrollBar = False yatay kaydrma ubuu .DisplayVerticalScrollBar = False dikey kaydrma ubuu End With EskiMenuCubugu, bir men ubuu olarak tanmlanyor. WorkSheets Bar yerine bir index numarasda verebilirsiniz. On Error GoTo hata hata oluursa hata: satrna git Set EskiMenuCubugu = CommandBars("Worksheet Menu Bar").Controls Burada eski menye ait tm elemalar gizleniyor. For Each MenuParca In EskiMenuCubugu MenuParca.Visible = False Next Yeni men ubuu tanm yaplyor. CommandBars.Add komutu ile yeni bir ara ubuu tanm yaplyor ve zellikleri belirleniyor. Ad, pozisyonu, men olarak davranp davranmayaca ve geici olup olmamas gibi zellikleri. Set YeniMenuCubugu = CommandBars.Add(Name:="YeniMenu", Position:=msoBarTop, MenuBar:=True, temporary:=True) Tanmlanan YeniMenuCubugu nun dier zellikleri ise bu ekilde belirleniyor. With YeniMenuCubugu .Visible = True grnr olmas .Protection = msoBarNoMove tanamaz olmas salanyor. End With

75

Tanmlanan men ubuuna menler eklemek iin baz kodlar ve men elemanlarna tklandnda altrlacak kodlar iin ise Sub lar gerekmektedir. Mesela, menden Yeni Personel Kart seildiinde dorudan yenikart.Show komutu verilemez. O yzden bu tr tanmlamalar birer altprogram yazarak yapacaz. Kodlarn Module1 deki kodlarla karmamas iin yeni bir modl ekleyelim ve buraya her men eleman iin birer Sub yazalm. Sub yeni_kart() yenikart.Show End Sub Sub sigorta() sigortagiris.Show End Sub Sub sabit() sabitler.Show End Sub Sub maas_dokum() maasdokum.Show End Sub Sub isten_cikar() istencikar.Show End Sub Sub bilgi_ekrani() bilgiekrani.Show End Sub Sub avanslar() avans.Show End Sub Sub dosyakaydet() ThisWorkbook.Save End Sub Men tanmlamasna kaldmz yerden devam edelim. Yeni men ubuunun tanmndan sonra ise men tasarmn yapalm. Aadaki kodlar bu ii zecektir. YeniMenuCubugu na kontrol ekleyerek yani yeni bir men ekleyip kontrollerim deikenini yeni bir men olarak tanmlyoruz. Set kontrollerim = YeniMenuCubugu.Controls.Add(Type:=msoControlPopup, ID:=1) kontrollerim mensnn zellikleri belirleniyor. With kontrollerim Mennn bal belirleniyor. .Caption = "&Personel zel Men" Menye yeni bir eleman ekleniyor. .Controls.Add(Type:=msoControlButton, before:=1).Caption = "Normal Menye Dn" Menye eklenen elemann varsa iconu belirleniyor. .Controls("Normal Menye Dn").FaceId = 34 Elemana komut veriliyor. .Controls("Normal Menye Dn").OnAction = "ozelmenukapat"

76

Men eleman dier men elemanlaryla bir izgi ile ayrlyor. .Controls("Normal Menye Dn").BeginGroup = True .Controls.Add(Type:=msoControlButton, before:=1).Caption = "Dosyay Kaydet" .Controls("Dosyay Kaydet").OnAction = "dosyakaydet" .Controls.Add(Type:=msoControlButton, before:=1).Caption = "Bilgi Ekran" .Controls("Bilgi Ekran").OnAction = "bilgi_ekrani" .Controls.Add(Type:=msoControlButton, before:=1).Caption = "irket Tanmlar" .Controls("irket Tanmlar").OnAction = "sabit" .Controls.Add(Type:=msoControlButton, before:=1).Caption = "ten karma" .Controls("ten karma").OnAction = "isten_cikar " .Controls.Add(Type:=msoControlButton, before:=1).Caption = "Maa Dkm" .Controls("Maa Dkm").OnAction = "maas_dokum" .Controls.Add(Type:=msoControlButton, before:=1).Caption = "Maa ve Avans" .Controls("Maa ve Avans").OnAction = "avanslar" .Controls.Add(Type:=msoControlButton, before:=1).Caption = "Sigorta Girii" .Controls("Sigorta Girii").OnAction = "sigorta" .Controls.Add(Type:=msoControlButton, before:=1).Caption = "Yeni Personel Kart" .Controls("Yeni Personel Kart").FaceId = 329 .Controls("Yeni Personel Kart").OnAction = "yeni_kart" End With hata: FaceId, men elemann simge ile temsil eden, bir icon belirlememizi salar. Simgeler index numaralar ile arlrlar.

BeginGroup, farkl grevlere sahip men elemanlarn biz izgi ile ayrmaya yarar. Bir nevi gruplandrma yapar. Men elemanlarnn tanm sondan balanarak yaplr. Mennn son eleman olan Normal Menye Dn seenei tklandnda Module1 modlnn ozelmenukapat alt program arlyor. Bu alt programn kodlar aada verilmitir.

77

Application.DisplayFullScreen = False Application.CommandBars("Formatting").Visible = True Application.CommandBars("Standard").Visible = True With ActiveWindow .DisplayHeadings = True .DisplayHorizontalScrollBar = True .DisplayVerticalScrollBar = True End With On Error Resume Next Set EskiMenuCubugu = CommandBars("Worksheet Menu Bar").Controls For Each MenuParca In EskiMenuCubugu MenuParca.Visible = True Next CommandBars("YeniMenu").Delete Application.CommandBars("Worksheet Menu Bar").Controls(11).Delete zel menye gei iin kullanlan baz kodlarn tam tersi olan kodlar, normal menye gei iin kullanlmaktadr. rnein, zel mende kullanlan False deeri burada True deerini alarak ilemlerini gerekletirmektedir. eklenen Yeni men ubuuna YeniMenu olarak CommandBars(YeniMenu).Delete komutlar ile silinmektedir. Formmenu makrosunun kodlar ise aadaki gibidir. Sub formmenu() ozelmenukapat anamenu.Show End Sub ozelmenu modundan formmenu moduna geilecei zaman ilk nce ozelmenu kapatlmaldr daha sonra formmenu moduna geilmelidir. Bu yzden ilk kodumuz ozelmenukapat alt programn artmak olmutur. Men tasarmlar bittikten sonra program aldnda gerekleecek olaylar anlatalm. Excel in alnda Auto_Open makro alt program alr. Bu yzden alta gerekleecek kodlar buraya yazacaz. Auto_Open alt programn her hangi bir modl altna yazabilirsiniz. Yazm, Sub Auto_Open () Komutlar End Sub Programmzn alnda ana sayfa hari tm sayfalar gvenlik ve grn asndan gizleyelim. Auto_Open nn kodlar, Sub auto_open() For i = 1 To 3 Sheets(i).Visible = False Next i With ActiveWindow .DisplayHeadings = False .DisplayHorizontalScrollBar = False .DisplayVerticalScrollBar = False .DisplayWorkbookTabs = False End With End Sub men, burada

78

Yukardaki dngde 1 ile 3 arasnda bir dng kurulmutur. Bu dng, ilk alma sayfasn gizler. Aktive olan pencerenin zellikleri ise, balk ubuu, yatay kaydrma ubuu, dikey kaydrma ubuu ve sayfa sekmelerini kaldrmaktadr. Excel in kapatlmas annda ise Auto_Close makro alt program alr. Kullanm, Sub Auto_Close () Komutlar End Sub Program kapatlrken, alta yaptmz deiiklikleri dzeltelim. Bunun iin aadaki kodlar yazalm. Sub auto_close() With ActiveWindow .DisplayHeadings = True .DisplayHorizontalScrollBar = True .DisplayVerticalScrollBar = True .DisplayWorkbookTabs = True End With End Sub Aktif olan pencerenin balk ubuu, sayfa sekmeleri vs. tekrar yerlerine getiriliyor. Programmzn tm kodlar ve ayarlar bitmitir. imdi Excel dosyamz kaydedip program kapatalm ve tekrar aalm. Programmz artk kullanlabilir hale gelmitir.

ETL RNEKLER rnek 1: Otomatik Toplam Hcreler zerinde bir Change olay gerekletiinde belirtilen alandaki saylar hesaplanacak ve belli bir aralk kadar alt satrna sonu yazlacak. Yani hibir kontrol eleman kullanmadan direkt hcreler zerinden ilemlerimizi gerekletireceiz. Yaplacak olan ilemler 1 ve 2. stunlarda gerekleecek. Eer girilen saylar 500 den kkse girilen saynn rengi krmz deil ise kahverengi olacak. Toplamlar eer cells(1,5) ve cells(2,5) kk ise renkleri deiir, deil ise farkl bir renk alrlar. imdid ilgili kodlar yazmak iin Code Editor aalm. Project Explorer penceresinden Sayfa 1(Sayfa 1) e ift tklayarak bu sayfaya ait kod penceresine ulaalm. Buradan Generalt yazan alr kutuyu aarak WorkSheet i seelim. Karmza alma sayfasna ait Selection_Change olaynn kod yazma prosedr gelecek. Buraya yazlan kodlar hcreler zerinde gezinti yaplrken alrlar. Yani hcrelerin Change olaylarnda gerekleir. Buraya yazlan kodlarla tm hcreler kontrol edilebilecei gibi tek bir hcrede kontrol edilebilir. Bu rnein kodlar aadadr. Private Sub Worksheet_SelectionChange(ByVal Target As Range) yer = 2 While Cells(yer, 1) <> "" yer = yer + 1 Wend yer1 = 2 While Cells(yer1, 2) <> "" yer1 = yer1 + 1 Wend

79

For i = 2 To yer Cells(i, 1).Font.ColorIndex = 1 hcre rengi deitiriliyor. If Cells(i, 1) < 500 Then girilen say 500 den kkse Cells(i, 1).Font.ColorIndex = 3 yaz rengi deitiriliyor Else Cells(i, 1).Font.ColorIndex = 9 deil ise baka bir renk veriliyor End If saylar toplanyor ve deikene atanyor toplam = toplam + Cells(i, 1) Next i Cells(yer + 1, 1) = "" yer den 1 fazla olan hcrenin ii boaltlyor yer den 2 fazla olan hcrenin ii boaltlyor Cells(yer + 2, 1) = "" yer in fazlasna bulunan toplam deer yazlyor Cells(yer + 3, 1) = toplam If toplam < Cells(1, 5) Then eer toplam cells(1,5) ten kkse toplam n rengi deitiriliyor Cells(yer + 3, 1).Font.ColorIndex = 3 Else deil se baka bir renk veriliyor Cells(yer + 3, 1).Font.ColorIndex = 8 End If For j = 2 To yer1 ayn ilemler ikici stun iin tekrarlanyor Cells(j, 2).Font.ColorIndex = 1 If Cells(j, 2) < 500 Then Cells(j, 2).Font.ColorIndex = 3 Else Cells(j, 2).Font.ColorIndex = 9 End If toplam1 = toplam1 + Cells(j, 2) Next j Cells(yer1 + 1, 2) = "" Cells(yer1 + 2, 2) = "" Cells(yer1 + 3, 2) = toplam1 If toplam1 < Cells(2, 5) Then Cells(yer1 + 3, 2).Font.ColorIndex = 3 Else Cells(yer1 + 3, 2).Font.ColorIndex = 8 End If Cells(1, 7) = toplam + toplam1 cells(1,7) hcresine genel toplam yazdrlyor If Cells(1, 7) >= Cells(1, 11) Then Cells(1, 7).Font.ColorIndex = 3 Else Cells(1, 7).Font.ColorIndex = 9 End If End Sub rnek 2: Hesaplama ve Dosyalama Sayfamzn ierisinde aadaki ekildeki gibi bir okuldaki rencilerin notlarnn hesaplanaca bir liste bulunmaktadr. Burada yan tarafta bulunan dmeye basld anda rencilerin ortalamalar ve durumunun nasl olduunu yan taraftaki hcrelere yazdrmasn salayacaz.

80

Ortalamay ve Durumu 1,6 ve 1,7 hcrelerine yazdracaz ve balklarn da kodlar ile yazacaz. Eer yeni bir kayt daha eklenirse hesapla butonuna tekrar baslp tekrar hesaplatacaz ve burada bulunan bilgileri C: srcsnn ierisine geenler ve kalanlar adl iki ayr metin dosyasna gndereceiz. Hesapla butonuna yazlacak kodlar aada verilmitir. Sub hesapla() Open "c:\gecenler.txt" For Output As #1 Takma ad #1 olan bir geenler adl txt alyor. Open "c:\kalanlar.txt" For Output As #2 Takma ad #2 olan bir kalanlar adl txt alyor. lk renci 2 satrdan balad iin dngnn balang deeri 2 alnd yer = 2 While Cells(yer, 1) <> "" Cells(2,1) boluktan farkl iken yer adl deikeni bir defa arttryoruz yer = yer + 1 Wend eer art devam ediyorsa baa dn yer = yer 1 Dng her zama bir fazla dneceinden bir eksilterek gerek sayy bulduk. For i = 2 To yer ilk rencinin olduu satrdan renci saysna kadar bir dng kuruldu, ad$ = Cells(i, 2) ad$ deikenine ilk rencinin ad aktarld soy$ = Cells(i, 3) soy$ deikenine ilk rencinin soyad aktarld, v = Cells(i, 4) v deikenine ilk rencinin vize notu aktarld, f = Cells(i, 5) f deikenine ilk rencinin final notu aktarld, o = v * 0.4 + f * 0.6 o deikenine v ile f deikeni arasndaki ilemin sonucu aktarld, Cells(1, 6) = "Ortalama" 1,6 hcresine sabit olan Ortalama bal yazld Cells(1, 7) = "Sonu" 1,7 hcresine sabit olan Sonu bal yazld. Cells(i, 6) = o 2,6 hcresine o adl deikenin ierii aktarld.(Ortalama) sat$ = ad$ + "*" + soy$ + "*" + Str(v) + "*" + Str(f) Bilgiler aralarnda * ile birletirildi If (f >= 60) And (o >= 60) Then Gerekli art belirtiliyor Print #1, sat$ art gerekleirse #1 dosyasna sat$daki bilgileri yaz, Cells(i, 7) = "Geti" 2,7 hcresine art doruysa Geti yaz, Else art doru deilse

Print #2, sat$ #2 dosyasna sat$daki bilgileri yaz Cells(i, 7) = "Kald" 2,7 hcresine ise art doru deilse Kald yaz,

81

End If art bitimi Next i Dng tekrar Close #1 Close #2 End Sub Programda ncelikle butona basld anda aadaki ekran olumaldr. Alan #1 dosyalarn kapatlmas Alan #2 dosyasnn kapatlmas

ekilde de grld gibi Ortalama ve Sonu balklar kendiliinde yazld ve tm rencilere ait ortalamalarda hesapland. Programdaki baz komutlar aklayacak olursak , bataki iki satr kullanacamz dosyalarn ald blmdr. Ka adet dosya aacaksak burada belirtmeliyiz. Unutmadan her alan dosyann mutlaka kapanmas lazm , bunun iin programn sonunda Close komutu ile alan dosyalar kapatmalyz. Sonraki 5 satr ise While dngs ile renci saysn bulmak iin kullanlmtr.Burada dng bo hcreyi grene kadar dnyor ve grd anda dngden kyor. For dngs ise ilk rencinin balad satrdan balayarak renci says kadar yani yer deikeni kadar satrlar teker teker tarayacak ta ki dng deikeni olan i renci saysndan byk veya eit olana kadar. Dngnn ierisinde i,2 elemanl rencinin vizesinin %30 ile finalinin %70 i toplanarak ortalama hesaplanyor ve i,6 hcresine yazlyor. Burada bir art belirtilmi ve final notu byk ise 60dan veya ortalama 60dan byk ise i,7 hcresine Geti yazyor ve bu renciyi (i numaral renci) gecenler.txt dosyasna bilgilerinin arasnda * iareti olarak yazyor. Bu artn gereklememesi durumunda elseden sonraki komutlar alyor ve i,7 hcresine Kald , ve bu renciyi yine bilgilerinin arasnda * olacak ekilde kalanlar.txt dosyasna kaydediyor. Dng tekrar bir dndnde i deikeni 3 oluyor ve ayn ilemler 3c satr iin yazlyor. Alt tarafa yeni bir renci eklendii zaman tekrar butona tklanarak yeni eklenen rencide hesaplara katlm olur. Bu rnekte Excel de ki bilgilerin nasl TXT (Metin Dosyas)na gnderildiini renmi oldunuz. Gndermek istediiniz dosya uzants blmnde rnein kalanlar.txt yerine kalanla.doc yazarsanz bilgileriniz Word dosyasna kaydedilecektir.

82

rnek 3: Dosyadan Bilgi Alma Bu rnekte Excel e metin dosyasndan bilgi getirmeyi reneceiz. Metin dosyamz ve ierisindeki bilgiler aadaki gibi olduunu varsayalm.

Grld gibi dosyamzn ierisindeki bilgilerin aralarnda * iareti olarak kayt edilmiler ve bizde bu iarete gre bilgileri paralayarak Excel e aktaracaz. Excel sayfanzn zerine bir makro buton oluturarak bunun adn al veya getir gibi bir isim verelim. Daha sonra Aralar/Makrolardan kaydettiiniz makroyu aarak kod ksmndaki tanmlamalarn altna veya tanmlar silerek aadaki kodlar butonun click ksmna yazalm. Sub trt() Cells(1, 1) Cells(1, 2) Cells(1, 3) Cells(1, 4) Cells(1, 5) = = = = = "Ad" Sabit balklar yazdrlyor. "Soyad" Sabit balklar yazdrlyor. "Vize" Sabit balklar yazdrlyor. "Final" Sabit balklar yazdrlyor. "Ortalama" Sabit balklar yazdrlyor.

Open "c:\bilgi.txt" For Input As #1 C: srcsnde bilgi.txt dosyasn okumak iin ayor. i = 2 Bilgilerin yazlaca balang satr hcresi, While Not EOF(1) Dosyann sonuna gelmedii srece ad$ = "" ad$ deikenini boalt soy$ = "" soy$ deikenini boalt v$ = "" v$ deikenini boalt f$ = "" f$ deikenini boalt Input #1, sat$ #1 adl dosyadan sat$ deikeni ile bilgi okuyor. yer = 1 Paralamann balayaca deer While Mid$(sat$, yer, 1) <> "*" sat$daki 1,1 *dan farkl iken ad$ = ad$ + Mid$(sat$, yer, 1) ad$a bir harf daha ekliyor yer = yer + 1 yeri bir arttracaz Wend dngden baa dn, yer = yer 1 Dngnn en sonundaki fazla sayy azaltmak iin kullanld. While Mid$(sat$, yer, 1) <> "*" sat$daki 1,1 *dan farkl iken soy$ = soy$ + Mid$(sat$, yer, 1) ) soy$a bir harf daha ekliyor

83

yer = yer + 1 Wend yer = yer + 1

art doru ise deikeni bir arttryor. Deilse Bir sonra ki paralama iin deikeni tekrar bir arttryor.

While Mid$(sat$, yer, 1) <> "*" sat$daki 1,1 *dan farkl iken v$ = v$ + Mid$(sat$, yer, 1) v$a bir karakter daha ekliyor yer = yer + 1 art doru ise deikeni bir arttryor. Wend Deilse yer = yer + 1 Bir sonra ki paralama iin deikeni tekrar bir arttryor. For j = yer To Len(sat$) O anki yer deki deerin sat$daki karakter saysna kadar, f$ = f$ + Mid$(sat$, j, 1) f$ deikenine sat$n yerinci karakterinden 1 adet ald, Next j Dng tekrar kontrol iin baa dnd, Cells(i, 1) = ad$ 2,1 hcresine ad$ daki deeri yazd , Cells(i, 2) = soy$ 2,2 hcresine soy$ daki deeri yazd , Cells(i, 3) = v$ 2,3 hcresine v$ daki deeri yazd , Cells(i, 4) = f$ 2,4 hcresine f$ daki deeri yazd , o = Val(v$) * 0.4 + Val(f$) * 0.6 Ortalamay hesaplad, Cells(i, 5) = o 2,5 hcresine ortalamay yazd, i = i + 1 Bir sonraki paralama iin deikenini bir arttrd, Wend Dngy kontrol et ve baa dn, Close #1 Alan #1 dosyas kapatld, End Sub Program sonu, rnek 4: Banka deme Plan Hesaplamas Bir iyerinde eitli bankalara yaplan demeler fatura numaras , banka ad ve denen cret sayfamzn sol kesinde kark olarak bulunmaktadr. Yani bir bankadan birka defa yazlm ve her defasnda , farkl fatura numaralar ile farkl demeler kark olarak yerletirilmi. Biz butona yazacamz bir makro kodu ile otomatik olarak sayfann sa tarafnda bir yere her banka adndan birer tane ve bu bankalarn karlarna da o bankadan ka tane varsa adedini ve denen fatura toplamn yazdralm. Sayfamzn ilk grnts aadaki gibidir.

84

Butona tklanld zaman (1,10) hcresine banka ad , (1,11) hcresine fatura toplam ve (1,12) hcresine banka saysn yazdracaz. Sayfamza bir makro buton alarak yeni bir makro kaydediyoruz ve ierisine aadaki kodlar yazyoruz. Sub bul() Cells(1, 10) = Cells(2, 2) Sol taraftaki lk banka adn (1,10)a yazdryoruz. yer = 2 Sa tarafa bulunan bankalarn yazlaca satr deikeni. For i = 3 To 21 Sol taraftaki bilgileri taramak iin. bulundu = 0 Yeni bir banka bulunduu takdirde deiecek olan deiken. For j = 1 To yer 1 Sa taraftaki bilgileri taramak iin. If Cells(i, 2) = Cells(j, 10) Then Eer 3,1 eitse 1,10 a bulundu = 1 Bulundu deikenini 1 yap. End If arttan k. Next j Dngnn bana dn. If bulundu = 0 Then Eer yeni bir banka var ise. Cells(yer, 10) = Cells(i, 2) Sol tarafa o bankay yaz. yer = yer + 1 Sol taraftaki satr deikenini bir arttryoruz. End If arttan k. Next i Dngnn bana dn. For j = 1 To yer 1 Banka says ve fatura toplam bulmak iin. Top = 0 Top deikeninin ieriini 0 yap. kac = 0 Kac deikeninin ieriini 0 yap. For i = 2 To 21 Karlatrma iin sol tarafn taranmas. If Cells(j, 10) = Cells(i, 2) Then Eer 1,10 eitse 2,2 ye kac = kac + 1 kac deikenini bir arttr.nk bir tane buldu. Top = Top + Cells(i, 3) Top deikenine de 2,3 hcresini ekletiyoruz. End If arttan k. Next i Dngnn bana dn. Cells(j, 11) = Top (1,11) hcresine top deikeninin ieriini. Cells(j, 12) = kac (1,12) hcresine kac deikeninin ieriini. Next j Dngnn bana dn. End Sub Programda ilk banka direk olarak sol tarafa alnyor ve dier karlatrmalar bu bankaya gre yaplyor. Yani sa taraftaki dngn gsterdii deer sol taraftaki dngnn gsterdii bankaya eitse bankann saysn arttryor ve faturasn nceki fatura ile topluyor . Sa taraftaki dngnn belirtmi olduu banka , sa taraftaki bankaya eit deilse yeni bir banka bulundu demektir ve sol tarafa yer deikeninin deerindeki satra yeni banka yazlyor , says ve fatura miktar hesaplanyor. Butona tklandktan sonra sa tarafa 1,10 cu hcreden itibaren birer tane banka ad ve says gelecek ve ilem tamamlanm olacak. Butona tkladktan sonra ki grnt

85

aadaki gibi olmaldr. Bu rnekte , birden fazla kayt zerinde ayn ada sahip elemanlar tekrarsz birer tane bulmay rendik. rnein bir listenin ierisinde ad Ahmet olanlardan ka tane var denildii zaman bu yntem kullanlabilir. rnek 5: arpm Tablosu Bu rnekte arpm tablosunun hesaplanmasn makro ile yapacaz. Bunun iin ilemlerde kullanlacak olan saylar nceden sayfaya girilmi olacak ve yazacamz makro sadece her arpmn sonucunu yazacaktr. Eer istenirse sayfa komple boaltlp gerekli saylar ve tanmlamalarda kodlar ile yaplabilir. Sayfamzn butona baslmadan nceki grnts aadaki gibi olmaldr.

Grld gibi arpm tablosu iin her ey nceden yazlm sadece sonularn gelecei hcreler bo. Buton tkland zaman bu bo hcrelere hesaplanan deerler gelecektir. rnein (2,3) hcresine (2,1) ile (2,2) hcrelerinin arpm sonucu olan 1 deeri yazlacaktr. Program kodlar gayet ksa ve sade. Bu rnekte daha ok dnglerin alma prensibini kavrama yeteneiniz ykselecektir. Sayfamza bir Buton alarak yeni bir makro kaydedelim ve makromuza bir isim verelim. rnein bul adl makro.Programn kodlar u ekildedir. Sub Bul() For i = 2 To 11 Cells(i, 3) = Cells(i, 1) * Cells(i, 2) Cells(i, 6) = Cells(i, 4) * Cells(i, 5) Cells(i, 9) = Cells(i, 7) * Cells(i, 8) Cells(i, 12) = Cells(i, 10) * Cells(i, 11) Cells(i, 15) = Cells(i, 13) * Cells(i, 14) Next i For j = 13 To 22 Cells(j, 3) = Cells(j, 1) * Cells(j, 2)

86

Cells(j, 6) = Cells(j, 4) * Cells(j, 5) Cells(j, 9) = Cells(j, 7) * Cells(j, 8) Cells(j, 12) = Cells(j, 10) * Cells(j, 11) Cells(j, 15) = Cells(j, 13) * Cells(j, 14) Next j End Sub Programda 2 adet dng kullanld. Birinci dng belere kadar arpm sonucunu bulmak iin satrlar taryor , ikinci dng ise belerden sonrakiler iin alt taraftaki satrdan balayarak satrlar taryor. Alt taraftaki stunlar da , belerden sonra yan taraftan devam etse idi tek dng yeterli olacaktr. Bu durumda da tek dng ile yaplabilirdi fakat biraz kark olurdu. Programn buton tklandktan sonraki grnts aadaki gibi olmaldr.

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

87

rnek 6: Toplam Deer Bulma Bir kurumda bulunan alanlarn bilgilerinin tutulduu bir dkmanmz olduunu varsayalm. Bu rnekte butonlara yazacamz kodlar ile 20 saatten fazla alan kii says ve 20 saatten az alan ii says ve ii, memur, teknisyen saysn buldurmasn salayacaz. Bunun iin aadaki bilgileri sayfanza girerek gerekli makro kaytlarn yaparak kod yazma ilemine geebilirsiniz.

Birinci butona yazlacak olan kodlar aada belirtilmitir. Sub enok() yer = 2 While Cells(yer, 1) <> "" yer = yer + 1 Wend x=0 For i = 2 To yer If Cells(i, 5) > 20 Then (2,5) hcresi 20 den bykse x deikenini bir arttryor. x=x+1 End If 20 den byk deilse arttan kyor. Next i Dng bana dn. Cells(2, 10) = x (2,10) x deikeninin ieriini yaz. End Sub lk drt satr ka adet eleman olduunu bulmak iin kullanlmtr. Birinci kolonu tarayarak boluu grene kadar dngy arttrm ve eleman says bulunmutur. Sonuta 20 den byk olanlarn saysn bulacamz iin bu sayy bir deikende tutmalyz. X deikenine ilk deeri olarak 0 deeri verilmitir. (2,5) deerinden balayarak tm satrlar taranyor ve arta uyan kayt bulunduu zaman x deikenini arttryor. Dolaysyla arta uyan kayt 20 den fazla olan kayttr ve arttrlan say aranan saydr. Sonuta (2,10) hcresine x deikeni yazdrlyor.

88

kinci butona yazlacak kodlar aada belirtilmitir. Sub enaz() yer = 2 While Cells(yer, 1) <> "" yer = yer + 1 Wend x=0 For i = 2 To yer If Cells(i, 5) < 20 Then (2,5) hcresi 20 den kkse x deikenini bir arttryor. x=x+1 End If 20 den kk deilse arttan kyor. Next i Dng bana dn. Cells(4, 10) = x (4,10) x deikeninin ieriini yaz. End Sub lk drt satr ka adet eleman olduunu bulmak iin kullanlmtr. Birinci stunu tarayarak boluu grene kadar dngy arttrm ve eleman says bulunmutur. Sonuta 20 den kk olanlarn saysn bulacamz iin bu sayy bir deikende tutmalyz. X deikenine ilk deeri olarak 0 deeri verilmitir. (2,5) deerinden balayarak tm satrlar taranyor ve arta uyan kayt bulunduu zaman x deikenini arttryor. Dolaysyla arta uyan kayt 20 den az olan kayttr ve arttrlan say aranan saydr. Sonuta (4,10) hcresine x deikeni yazdrlyor. nc butona yazlacak kodlar aada belirtilmitir. Sub iisays() yer = 2 While Cells(yer, 1) <> "" yer = yer + 1 Wend isay = 0 For i = 2 To yer If Cells(i, 4) = "i" Then (2,4) hcresindeki deer i ise isay = isay + 1 i saysn bir arttr. End If i deilse arttan kyor. Next i Dng bana dn. Cells(6, 10) = isay (6,10) hcresine ii saysn yaz i yani isay deikenini. End Sub lk drt satr ka adet eleman olduunu bulmak iin kullanlmtr. Birinci stunu tarayarak boluu grene kadar dngy arttrm ve eleman says bulunmutur. Sonuta ii saysn bulacamz iin bu sayy bir deikende tutmalyz. X deikenine ilk deeri olarak 0 deeri verilmitir. (2,4) deerinden balayarak tm satrlar taranyor ve arta uyan kayt bulunduu zaman x deikenini arttryor. Dolaysyla arta uyan kayt ii saysdr. Sonuta (6,10) hcresine x deikeni yazdrlyor. Drdnc butona yazlacak kodlar aada belirtilmitir. Sub memursays() yer = 2 While Cells(yer, 1) <> "" yer = yer + 1 Wend msay = 0 For i = 2 To yer If Cells(i, 4) = "Memur" Then (2,4) hcresindeki deer Memur ise msay = msay + 1 Memur saysn bir arttr. End If i deilse arttan kyor. Next i Dng bana dn. Cells(8, 10) = msay (8,10) hcresine Memur saysn yaz , yani msay deikenini End Sub

89

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

HATA AYIKLAMA

HATA YAKALAMA Excel de yazm olduunuz komutlar her zaman doru almayabilir. Bir program yazarken kullancdan doabilecek btn hatalar gz nnde bulundurmalsnz. Bunun iin programda hata olabileceini dndnz yerlere etiketler ile isim belirtip daha sonra bu hata sonucunda alacak kodlar veya mesajlar vererek hatann nne geebilirsiniz. Programn hata oluabileceini dndnz blmlerine bir art ile sorgu yaptrrsanz ve bu artn gereklemesi durumunda GOTO komutu ile istediiniz yere ynlendirirseniz hatay kullancya bildirmi olursunuz. RNEK : If Cells(1,1)=60 Then Cells(1,2)=Geti Else Goto Hata: Hata: MsgBox(Ltfen bu alan bo gemeyiniz.)

90

Yukardaki rnekte Cells(1,1) hcresine 60 deeri girilmi ise Cells(1,2) hcresine Geti yazyor. Eer Cells(1,1) hcresi bo ise bir hata sz konusu ve Hata diye bir komut dizisine ynlendiriyor. Buradaki komutlar altrlarak gerekli bilgi veya dzeltmeler yaplyor. rnein programnzda kayt ilemi yapyorsunuz ve bir ok alann girilmesi zorunlu ve kullanc bu alanlardan bazlarn bo geti. te bu gibi durumlarda kontrol ettirilerek eer bir hata varsa o hatay siz giderip programn almasn devam ettirebilirsiniz. Bo braklan saysal alanlara otomatikman 0(sfr) yazdrmak gibi. PROGRAMIN ADIM ADIM ALITIRILMASI Yazm olduunuz programn bir blmnde kullancdan deil de sizden doan bir hata ile karlatnzda program adm adm takip ederek hatann nerede olduunu Add Watch bulabilirsiniz. Bunun iin VB kod editrnde iken Debug mensnden seenei seilir. Gelen Add Watch penceresinde Expression blmne programda kullandmz deiken adlarn srasyla yazacaz. Buraya yukardaki rnek iin kullandmz a deikeninin yazalm ve OK dmesini tklayalm. Bundan sonra VB editrnn alt ksmna Watches penceresi gelecektir ve buradan bu deikenin ieriini grebileceiz. Alt taraftaki Watches penceresinde deikenin ad, tipi, deeri gibi blmler bulunmaktadr. Bundan sonra sadece F8 tuuna basarak adm adm almay balatabilirsiniz. Program her F8 tuuna basta bir kod satrn okur ve derler. Her seferinde de Watches penceresinde deiken veya deikenlerin deeri deimektedir. Bu blme bakarak deimeyen bir yer grdnz zaman kolaylkla hatann nerede olduunu bulabilirsiniz. rnein While dngsnn aklamasnda anlatlan ka adet renci olduunu bulan kod satrnn sonundaki a=a-1 satrnn ne anlama geldiini adm adm altrarak daha net grebilirsiniz.

91

You might also like