Professional Documents
Culture Documents
Makro Not Lar
Makro Not Lar
Ramazan BAYKAL
Excel ierisinde kaydedilen visual basic programlama komutlaryla alarak program gelitirme faaliyetine makro programlama denilmektedir. Bu derste Excel alma sayfasnda makro kaydederek ve kodlar inceleyerek makro programlarn anlamaya alacaz. Form tasarlama, bileenleri ekleme, modl ekleme, kod yazma ilemleri yap acaz. Form elemanlar zelliklerini reneceiz.
Ayrca makro bulunan Excel alma kitabnz kaydederken dosya tr seimi yap arak da altrmanz mmkndr. Tr Makro erebilen Excel alma Kitab
Label
Etiket anlamna gelen bu nesne ile form zerine istediiniz konuma metin ekleyebilirsiniz. Eklediiniz metni zellikler penceresinden yaz tipi ile bykln, grnmn deitirmeniz mmkndr.
TextBox
Metin kutusu anlamna gelen bu nesne ile form zerine istediiniz konuma metin giri kutusu ekleyebilirsiniz. Eklediiniz giri kutusuna girilecek olan metni zellikler pe nceresinden yaz tipi ile bykln, grnmn deitirmeniz mmkndr.
CommandButton
Komut butonu anlamna gelen bu nesne ile form zerine istediiniz konuma komut butonu ekleyebilirsiniz. Eklediiniz komut butonu zerine girilecek olan metni zelli kler penceresinden belirleyip, yaz tipi ile bykln, rengini ve grnmn deitirmeniz mmkndr.
Form zellikleri
Name BackColor BorderStyle Caption Enabled Font ForeColor Height Left MouseIcon MousePointer Picture PictureAlignment PictureSizeMode PictureTiling ScrollBars StartUpPosition Top WhatThisButton Width Zoom : : : : : : : : : : : : : : : : : : : : : Form ad Form rengi Pencere kenarl stili Pencere bal Kullanlabilirlik (True, False) Yaz tipi zellikleri Metin rengi Form ykseklii Formun ekrann sol kenardan uzakl Fare simgesi Fare iaretisi Form yzeyine resim ekleme Form yzeyine eklenen resmin hizalanmas Form yzeyine eklenen resmin boyutlandrma modu Form yzeyine eklenen resmi deme (True, False) Kaydrma ubuklar Formun balang pozisyonu Formun ekrann st kenardan uzakl Bu nedir butonu ekler (True, False) Formun genilii Formu bytme/kltme yzdesi
F5 ile altrnz.
Form zerine Bir adet Label ve Bir adet ListBox yerletiriniz. Sayfa1de ders isimlerini nceden yaznz. ListBoxRowSource zelliine Sayfa1!A1:A10 yaznz. Label iin Ders seimi ifadesini Caption olarak belirtiniz. F5 ile altrnz.
MultiPage yapma
Form zerine bir adet MultiPage, Pageler ierisine birka tane CheckBox yerletiriniz. Page1 Caption zelliini Zorunlu Dersler olarak deitiriniz. Page2Caption zelliini Semeli Dersler olarak deitiriniz. CheckBoxcaptionlarn ders isimleri olarak belirleyiniz. F5 tuuyla altrnz.
10
Form zerine bir adet GrupBox yerletiriniz. Caption zelliine Eitim Durumu yaznz. GrupBox ierisine drt adet OptionButton yerletiriniz. Caption zelliine lkokul, Ortaokul, Lise, niversite kelimelerini yaznz. Form zerine bir adet Label yerletiriniz. Caption zelliine Tahsil Durumu yaznz. Font zelliinde yaz boyutunu 12 ve kaln seiniz. Form zerine bir adet TextBox yerletiriniz. Font zelliinde yaz boyutunu 12 ve kaln seiniz. Form zerine bir adet CommandButton yerletiriniz. Caption zelliine Kaydet yaznz. Font zelliinde yaz boyutunu 11 ve kaln seiniz. CommandButton1 nesnesi altna yazlacak kodlar u ekildedir: Private Sub CommandButton1_Click() Range("B1").Value = TextBox1.Text End Sub OptionButton nesneleri iin yazlacak kodlar u ekildedir: Private Sub OptionButton1_Click() TextBox1.Text = "Zayf" End Sub
11
ToggleButton Kullanm
Deitirici dmeleri anlamnda kullanlr.
Form zerine bir adet ToggleButton yerletiriniz. Caption zelliine Resmi Gizle yaznz. Form zerine bir adet Image yerletiriniz. Picture zelliini kullanarak bir resim seiniz. ToggleButton altnda altrlacak kodlar u ekilde olmaldr:
12
Private Sub ToggleButton1_Click() If ToggleButton1.Value = False Then Image1.Visible = True ToggleButton1.Caption = "Resmi Gizle" Else Image1.Visible = False ToggleButton1.Caption = "Resmi Gster" End If End Sub
ToggleButtona tkladnzda resmi gizliyor veya gsteriyor. Her seferide buton zerindeki metin duruma uygun olarak deiiyor. Seilen resim Image erevesinden byk veya kk olmas durumunda stretch zellii ile ereveye gre boyutlandrabilirsiniz. Image1.PictureSizeMode=1- fmPictureSizeModeStretch gibi.
13
rnek uygulamada form zerine bir adet SpinButton, bir adet ScrollBar, iki adet label nesnesi, iki adet TextBox nesnesi yerletirelim. Label nesnelerinin Caption zelliini ekran grntsndeki gibi deitirelim. TextBox nesnelerinin BackColor zelliini kullanarak renklendirelim. SpinButton nesnesine tklandka deer deiecektir. Bu deeri TextBox1 deeri olarak tanmlayalm.
14
ScrollBar nesnesine tklandka deer deiecektir. Bu deeri TextBox2 deeri olarak tanmlayalm. imdi sra geldi kod yazmaya: SpinButton nesnesine tklandka altrlacak procedure aadaki gibi olmaldr. Private Sub SpinButton1_Change() TextBox1.Value = SpinButton1.Value End Sub ScrollBar nesnesine tklandka altrlacak procedure aadaki gibi olmaldr. Private Sub ScrollBar1_Change() TextBox2.Value = ScrollBar1.Value End Sub Kodlar yazlp altrldnda aadaki grntye ulaabilirsiniz. Deerleri fareyle deitiriniz. ScrolBar zerindeki deer noktasn fareyle tutup ekerek de deeri deitirmek mmkndr.
15
For Dngs
Bir ilemi tekrarlamak iin oluturulan programlama yapsdr. Bir deiken, balang ve biti deerleri belirlenmelidir. Aadaki form tasarmn yapalm. Yazdr butonu altna gerekli kodlar yazalm. rnek olarak girilen bir metni yineleme says kadar tekrarlayarak hcrelere yazdralm.
Kodlar u ekilde olmaldr: PrivateSub CommandButton1_Click() For i = 1 To TextBox1.Value Range("A" & i).Value = TextBox2.Value Next i EndSub
16
If sorgusu
Bir deikeni veya bir durumu sorgulamak iin kullanlan programlama yapsdr. Aadaki form tasarmn yapalm. Yazdr butonu altna gerekli kodlar yazalm. rnek olarak onaylanm dersleri hcrelere yazdralm.
Kodlar u ekilde olmaldr: PrivateSub CommandButton1_Click() If CheckBox1.Value = True Then Range("D1").Value = CheckBox1.Caption EndIf If CheckBox2.Value = True Then Range("D2").Value = CheckBox2.Caption EndIf If CheckBox3.Value = True Then Range("D3").Value = CheckBox3.Caption EndIf If CheckBox4.Value = True Then Range("D4").Value = CheckBox4.Caption EndIf EndSub
17
18
Private Sub ToggleButton1_Click() If ToggleButton1.Value = True Then ToggleButton1.Caption = "Hi Birini Seme" CheckBox1.Value = True CheckBox2.Value = True CheckBox3.Value = True CheckBox4.Value = True Else ToggleButton1.Caption = "Tmn Se" CheckBox1.Value = False CheckBox2.Value = False CheckBox3.Value = False CheckBox4.Value = False End If End Sub Burada rendiiniz makro programlama kodlaryla derslerin hepsini veya dilediiniz birkan onaylayarak ders kayd yapabilirsiniz. ift grnml buton balnn hangi durumda nasl olmas gerektiine dikkat ediniz.
19
20
21
Gerekli kod yle olmaldr: Private Sub CommandButton1_Click() Shell "C:\WINDOWS\system32\Calc.exe", vbNormalFocus End Sub Not Defteri program iin gerekli kod ise aadaki gibidir. Private Sub CommandButton1_Click() Shell "C:\WINDOWS\system32\notepad.exe", vbNormalFocus End Sub
22
Form Olaylar
Activate AddControl BeforeDragOver BeforeDropOrPaste BeforeUpdate Click Change DblClick DeActivate DropButtonClick Error Initialize KeyDown KeyPress KeyUp Layout MouseDown MouseMove MouseUp QueryClose : Form aktif olduunda : Kontrol eklendiinde : Srklemeden nce : Brakma veya yaptrmadan nce : Gncellemeden nce : Fare tek tklandnda : Deerde deiiklik olduunda : Fare ift tklandnda : Form pasif olduunda : Butonu tklayp braktnda : Hata ile karlatnda : Balatldnda : Tu aa indiinde : Tua basl durumda : Tu yukar kalktnda : Dzenlendiinde : Fare sol tuuna basldnda : Fare zerine geldiinde : Baslan fare sol tuu brakldnda : Sorgu kapandnda
23
Kontrol(Nesne) Olaylar
AfterUpdate BeforeDragOver BeforeDropOrPaste Click DblClick Enter Error Exit KeyDown KeyPress KeyUp MouseDown MouseMove : Gncelleme sonrasnda : Srklemeden nce : Brakma veya yaptrmadan nce : Fare tek tklandnda : Fare ift tklandnda : Enter tuuna basldnda : Hata olduunda : kldnda : Tua aa indiinde : Tua basl durumda : Tu yukar kalktnda : Fare sol tuuna basldnda : Fare zerine geldiinde
24
25
SheetPivotTableBeforeAllocateChange : zet tablosu ayrma deiikliinden nce SheetPivotTableBeforeCommitChange : zet tablosu deiiklii tamamlamadan nce SheetPivotTableBeforeDiscardChange : zet tablosu deiiklii atlmadan nce SheetPivotTableChangeSync SheetPivotTableUpdate SheetSelectionChange Sync WindowActivate WindowDeActivate : zet tablosu uyumu deitiinde : zet tablosu gncellendiinde :Seim deitiinde :Senkronize : Pencere etkinletiinde : Pencere pasifletiinde
26
27
rnekler :
Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean) MsgBox "ift tklama yaptnz" End Sub Private Sub UserForm_Resize() MsgBox UserForm1.Width End Sub Private Sub UserForm_Terminate() MsgBox "program kapattnz." End Sub Private Sub TextBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) MsgBox "1. Text kutusu zerindesiniz" End Sub Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) MsgBox "1. Etiket zerindesiniz" End Sub Private Sub CommandButton2_Click() UserForm1.Zoom = TextBox1.Value End Sub Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) MsgBox "1. Komut Butonu zerindesiniz" End Sub Private Sub Workbook_Open() UserForm1.Show End Sub
28
29
Bul deitir Formu tasarmn hazrlamak iin; 4 adet Label, 4 adet TextBox, 1 adet SpinButton ve 4 adet CommandButton kullanlacaktr. Captionlar resimdeki gibi deitirin
30
Bul deitir formu iin makro kodlar aadadr; Private Sub SpinButton1_SpinDown() If TextBox1 = Empty Then TextBox1 = 1 ElseIf TextBox1 < 2 Then TextBox1 = 1 Else TextBox1 = TextBox1 - 1 End If End Sub Private Sub SpinButton1_SpinUp() If TextBox1 = Empty Then TextBox1 = 1 Else TextBox1 = TextBox1 + 1
31
Kaydet formu iin makro kodlar aadadr; Private Sub kaydet_Click() ALAN.adsoyad = TextBox2.Text ALAN.gorev = TextBox3.Text ALAN.ikamet = TextBox4.Text Put #1, TextBox1, ALAN TextBox1 = TextBox1 + 1 TextBox2 = "" TextBox3 = "" TextBox4 = "" TextBox2.SetFocus End Sub Private Sub UserForm_Initialize() TextBox1.Locked = True TextBox2.SetFocus Open "c:\Personel.txt" For Random As #1 Len = Len(ALAN) TextBox1 = LOF(1) / Len(ALAN) TextBox1 = TextBox1 + 1 End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode <> 1 Then Cancel = 1 End Sub Text dosyasna aadaki gibi kayt yaplacaktr.
32
res1.jpg
res2.jpg
res3.jpg
Private Sub Worksheet_Change(ByVal Target As Excel.Range) On Error Resume Next Image1.Picture = LoadPicture("D:\Yedek3\ex-makro\" & Cells(1, 1).Value & ".jpg") If Err.Number = 53 Then MsgBox "Dosya Bulunamyor!" Image1.Picture = LoadPicture("D:\Yedek3\ex-makro\dosyayok.jpg") End If End Sub
33
A1 hcresine res1, res2, res3 yazarak Enter tuuna basldnda resim deiecektir. Resimler buradaki kodlara gre D:\Yedek3\ex-makro klasrnde bulunmaktadr. Deiiklik yaparak istediiniz klasrdeki resimleri grntleyebilirsiniz.
34
rnek alma
Kayt Al butonu hazrlayarak, giri kutusu yardmyla notlar alalm. Hesapla butonu yardmyla girilen vize ve finalin ortalamasn, harf notunu ve GEER/TEKRAR durumunu yazdralm. Sub Kaytyap() vize = InputBox("Vize notu ?") final = InputBox("Final notu ?") kac = InputBox("Kanc satra yazlacak ?") Cells(kac, 1).Value = vize Cells(kac, 2).Value = final End Sub Sub Dme1_Tklat() ' ' Dme1_Tklat Makro ' Makro abc tarafndan 28.01.2002 tarihinde kaydedildi. kyt = InputBox("Kayt Says ?") For i = 1 To kyt Cells(i, 3).Value = 0.4 * Cells(i, 1).Value + 0.6 * Cells(i, 2).Value hh = Cells(i, 3).Value Select Case hh Case Is >= 90 Cells(i, 5).Value = "AA" Case Is >= 80 Cells(i, 5).Value = "BB" Case Is >= 70 Cells(i, 5).Value = "CC" Case Is >= 60 Cells(i, 5).Value = "DC" Case Is >= 50 Cells(i, 5).Value = "DD" Case Is >= 40 Cells(i, 5).Value = "FD" Case Is >= 30 Cells(i, 5).Value = "FF"
35
36
37