makro programlama ders notları
Transkript
makro programlama ders notları
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL MAKRO PROGRAMLAMA DERS NOTLARI Excel içerisinde kaydedilen visual basic programlama komutlarıyla çalışarak program geliştirme faaliyetine makro programlama denilmektedir. Bu derste Excel çalışma sayfasında makro kaydederek ve kodları inceleyerek makro programlarını anlamaya çalışacağız. Form tasarlama, bileşenleri ekleme, modül ekleme, kod yazma işlemleri yapacağız. Form elemanları özelliklerini öğreneceğiz. 1 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Makroları çalıştırma ayarı Makrolar güvenlik nedeniyle varsayılan olarak devre dışı bırakılmaktadır. Makroların çalıştırılması için etkinleştirmek gereklidir. İşlem adımları aşağıdaki gibidir. Dosya menüsü Excel seçenekleri Güven merkezi Güven merkezi ayarları butonu Makro ayarları Tüm Makroları etkinleştir seçimi Tamam butonuyla işlemi bitiriniz. Ayrıca makro bulunan Excel çalışma kitabınızı kaydederken dosya türü seçimi yaparak da çalıştırmanız mümkündür. Türü Makro İçerebilen Excel Çalışma Kitabı 2 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Örnek uygulama – İşçi Kazanç Tablosu Bir firmadaki işçilerin çalıştığı gün sayısına göre kazancını hesaplayan bir makro yazınız. Günlük ücreti makro programı içerisinde gun=70 olarak tanımlayınız. Hesaplamaları buna göre yaparak kazanç tablosunu oluşturunuz. 3 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Form ve Form Bileşenleri Program ara yüzü hazırlamak için formlara ihtiyaç vardır. Formlar üzerine çeşitli nesneler yerleştirilerek ara yüz içeriği tanımlanır. Microsoft Visual Basic kod penceresinde Insert menüsünden UserForm satırı tıklanarak form eklenir. Form eklenince otomatik olarak Toolbox (araç kutusu) görünür hale gelmektedir. Aşağıda bir form ve üzerine bazı nesneler (Controls) eklenmiştir. Form bileşenlerine kontroller de denilmektedir. Label Etiket anlamına gelen bu nesne ile form üzerine istediğiniz konuma metin ekleyebilirsiniz. Eklediğiniz metni özellikler penceresinden yazı tipi ile büyüklüğünü, görünümünü değiştirmeniz mümkündür. TextBox Metin kutusu anlamına gelen bu nesne ile form üzerine istediğiniz konuma metin giriş kutusu ekleyebilirsiniz. Eklediğiniz giriş kutusuna girilecek olan metni özellikler penceresinden yazı tipi ile büyüklüğünü, görünümünü değiştirmeniz mümkündür. CommandButton Komut butonu anlamına gelen bu nesne ile form üzerine istediğiniz konuma komut butonu ekleyebilirsiniz. Eklediğiniz komut butonu üzerine girilecek olan metni özellikler penceresinden belirleyip, yazı tipi ile büyüklüğünü, rengini ve görünümünü değiştirmeniz mümkündür. 4 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Properties Özellikler anlamına gelen bu pencerede seçili olan form nesnesine ait özellikler ayarlanabilmektedir. Caption : Başlık veya görünecek metin Font : Yazı tipi özellikleri ForeColor : Ön renk, yazı rengi BackColor : Arka renk, zemin rengi Name : Nesneye verilecek isim Value : Değer Text : Metin Height : Yükseklik Width : Genişlik Private Sub CommandButton1_Click() TextBox3.Value = TextBox1.Value * TextBox2.Value End Sub 5 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Private Sub CommandButton2_Click() TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" End Sub Private Sub CommandButton3_Click() UserForm2.Hide End Sub 6 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL 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 başlığı Kullanılabilirlik (True, False) Yazı tipi özellikleri Metin rengi Form yüksekliği Formun ekranın sol kenardan uzaklığı Fare simgesi Fare işaretçisi Form yüzeyine resim ekleme Form yüzeyine eklenen resmin hizalanması Form yüzeyine eklenen resmin boyutlandırma modu Form yüzeyine eklenen resmi döşeme (True, False) Kaydırma çubukları Formun başlangıç pozisyonu Formun ekranın üst kenardan uzaklığı Bu nedir butonu ekler (True, False) Formun genişliği Formu büyütme/küçültme yüzdesi Açılır liste kutusu yapma 7 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Form üzerine Bir adet Label ve Bir adet comboBox yerleştiriniz. Sayfa1’de ders isimlerini önceden yazınız. ComboBoxRowSource özelliğine Sayfa1!A1:A10 yazınız. ComboBoxText özelliğine“Ders seçimi yapınız :” ifadesini yazınız. Label için Ders seçimi ifadesini Caption olarak belirtiniz. F5 ile çalıştırınız. 8 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Liste kutusu yapma Form üzerine Bir adet Label ve Bir adet ListBox yerleştiriniz. Sayfa1’de ders isimlerini önceden yazınız. ListBoxRowSource özelliğine Sayfa1!A1:A10 yazınız. Label için Ders seçimi ifadesini Caption olarak belirtiniz. F5 ile çalıştırınız. 9 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL MultiPage yapma Form üzerine bir adet MultiPage, Pageler içerisine birkaç tane CheckBox yerleştiriniz. Page1 Caption özelliğini “Zorunlu Dersler” olarak değiştiriniz. Page2Caption özelliğini “Seçmeli Dersler” olarak değiştiriniz. CheckBoxcaptionlarını ders isimleri olarak belirleyiniz. F5 tuşuyla çalıştırınız. 10 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL GrupBox ve OptionButton hazırlama Form üzerine bir adet GrupBox yerleştiriniz. Caption özelliğine “Eğitim Durumu” yazınız. GrupBox içerisine dört adet OptionButton yerleştiriniz. Caption özelliğine “İlkokul, Ortaokul, Lise, Üniversite” kelimelerini yazınız. Form üzerine bir adet Label yerleştiriniz. Caption özelliğine “Tahsil Durumu” yazınız. Font özelliğinde yazı boyutunu 12 ve kalın seçiniz. Form üzerine bir adet TextBox yerleştiriniz. Font özelliğinde yazı boyutunu 12 ve kalın seçiniz. Form üzerine bir adet CommandButton yerleştiriniz. Caption özelliğine “Kaydet” yazınız. Font özelliğinde yazı boyutunu 11 ve kalın seçiniz. CommandButton1 nesnesi altına yazılacak kodlar şu şekildedir: Private Sub CommandButton1_Click() Range("B1").Value = TextBox1.Text End Sub OptionButton nesneleri için yazılacak kodlar şu şekildedir: Private Sub OptionButton1_Click() TextBox1.Text = "Zayıf" End Sub 11 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Private Sub OptionButton2_Click() TextBox1.Text = "İdare eder" End Sub Private Sub OptionButton3_Click() TextBox1.Text = "İyi" End Sub Private Sub OptionButton4_Click() TextBox1.Text = "Çok iyi" End Sub ToggleButton Kullanımı Değiştirici düğmeleri anlamında kullanılır. Form üzerine bir adet ToggleButton yerleştiriniz. Caption özelliğine “Resmi Gizle” yazınız. Form üzerine bir adet Image yerleştiriniz. Picture özelliğini kullanarak bir resim seçiniz. ToggleButton altında çalıştırılacak kodlar şu şekilde olmalıdır: 12 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Private Sub ToggleButton1_Click() If ToggleButton1.Value = False Then Image1.Visible = True ToggleButton1.Caption = "Resmi Gizle" Else Image1.Visible = False ToggleButton1.Caption = "Resmi Göster" End If End Sub ToggleButtona tıkladığınızda resmi gizliyor veya gösteriyor. Her seferide buton üzerindeki metin duruma uygun olarak değişiyor. Seçilen resim Image çerçevesinden büyük veya küçük olması durumunda stretch özelliği ile çerçeveye göre boyutlandırabilirsiniz. Image1.PictureSizeMode=1- fmPictureSizeModeStretch gibi. 13 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL SpinButton ve ScrollBar Kullanımı SpinButton, değer değiştirici olarak bilinen bir form nesnesidir. Üzerindeki aşağı/yukarı veya sağa/sola doğru ok işaretlerine tıklayarak değer değiştirilir. Başlangıç değeri belirlenebilir. Minimum ve Maksimum değerler belirlenebilir. Orientation özelliği ile pozisyonu değişebilir. Başlangıçta SpinButton değeri Minimum 0, Maximum 100 dür. İstenirse bu değerler -10/+10 gibi değiştirilebilir. ScrollBar, kaydırma çubuğu olarak bilinen bir form nesnesidir. Üzerindeki aşağı/yukarı veya sağa/sola doğru ok işaretlerine tıklayarak değer değiştirilir. Başlangıç değeri belirlenebilir. Minimum ve Maksimum değerler belirlenebilir. Orientation özelliği ile pozisyonu değişebilir. Başlangıçta ScrollBar değeri Minimum 0, Maximum 32767 dir. İstenirse bu değerler -100/+100 gibi değiştirilebilir. Örnek uygulamada form üzerine bir adet SpinButton, bir adet ScrollBar, iki adet label nesnesi, iki adet TextBox nesnesi yerleştirelim. Label nesnelerinin Caption özelliğini ekran görüntüsündeki gibi değiştirelim. TextBox nesnelerinin BackColor özelliğini kullanarak renklendirelim. SpinButton nesnesine tıklandıkça değer değişecektir. Bu değeri TextBox1 değeri olarak tanımlayalım. 14 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL ScrollBar nesnesine tıklandıkça değer değişecektir. Bu değeri TextBox2 değeri olarak tanımlayalım. Şimdi sıra geldi kod yazmaya: SpinButton nesnesine tıklandıkça çalıştırılacak procedure aşağıdaki gibi olmalıdır. Private Sub SpinButton1_Change() TextBox1.Value = SpinButton1.Value End Sub ScrollBar nesnesine tıklandıkça çalıştırılacak procedure aşağıdaki gibi olmalıdır. Private Sub ScrollBar1_Change() TextBox2.Value = ScrollBar1.Value End Sub Kodlar yazılıp çalıştırıldığında aşağıdaki görüntüye ulaşabilirsiniz. Değerleri fareyle değiştiriniz. ScrolBar üzerindeki değer noktasını fareyle tutup çekerek de değeri değiştirmek mümkündür. 15 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL For Döngüsü Bir işlemi tekrarlamak için oluşturulan programlama yapısıdır. Bir değişken, başlangıç ve bitiş değerleri belirlenmelidir. Aşağıdaki form tasarımını yapalım. Yazdır butonu altına gerekli kodları yazalım. Örnek olarak girilen bir metni yineleme sayısı kadar tekrarlayarak hücrelere yazdıralım. Kodlar şu şekilde olmalıdır: PrivateSub CommandButton1_Click() For i = 1 To TextBox1.Value Range("A" & i).Value = TextBox2.Value Next i EndSub 16 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL If sorgusu Bir değişkeni veya bir durumu sorgulamak için kullanılan programlama yapısıdır. Aşağıdaki form tasarımını yapalım. Yazdır butonu altına gerekli kodları yazalım. Örnek olarak onaylanmış dersleri hücrelere yazdıralım. Kodlar şu şekilde olmalıdır: 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 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Onay kutusunun her iki durumunu da kontrol etmek isterseniz kodlar aşağıdaki şekilde hazırlamalısınız. Private Sub CommandButton1_Click() If CheckBox1.Value = True Then Range("D1").Value = CheckBox1.Caption Else Range("D1").Value = "" End If If CheckBox2.Value = True Then Range("D2").Value = CheckBox2.Caption Else Range("D2").Value = "" End If If CheckBox3.Value = True Then Range("D3").Value = CheckBox3.Caption Else Range("D3").Value = "" End If If CheckBox4.Value = True Then Range("D4").Value = CheckBox4.Caption Else Range("D4").Value = "" End If End Sub 18 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Bir adet ToggleButton kullanarak derslerin hepsini seçebilir veya hiç birini seçmeyebilirsiniz. Aşağıdaki kodları ToggleButton altına yazarak buton adını değiştirebilir veya onay kutularının tümünü onaylayıp kaldırabilirsiniz. Private Sub ToggleButton1_Click() If ToggleButton1.Value = True Then ToggleButton1.Caption = "Hiç Birini Seçme" CheckBox1.Value = True CheckBox2.Value = True CheckBox3.Value = True CheckBox4.Value = True Else ToggleButton1.Caption = "Tümünü Seç" CheckBox1.Value = False CheckBox2.Value = False CheckBox3.Value = False CheckBox4.Value = False End If End Sub Burada öğrendiğiniz makro programlama kodlarıyla derslerin hepsini veya dilediğiniz birkaçını onaylayarak ders kaydı yapabilirsiniz. Çift görünümlü buton başlığının hangi durumda nasıl olması gerektiğine dikkat ediniz. 19 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Çarpım tablosu oluşturma 2’den 9’a kadar sayılar için çarpım tablosu komutları aşağıdadır. Sadece çarpım sonuçlarını gösterir. 2, 4, 6, 8, 10, 12, 14, 16, 18 gibi sayılar verecektir. Private Sub UserForm_Click() s=3 Range("B1").Value = "ÇARPIM TABLOSU" Range("B2").Value = "______________" For i = 2 To 9 For j = 1 To 9 Range("B" & s).Value = i * j s=s+1 Next j Next i End Sub Tablo görünümünde tek sütunda hazırlamak için değişken değerlerini ve aritmetik operatörleri de görüntülemek gerekecektir. 2X1=2 2X2=4 2 X 3 = 6 gibi Private Sub UserForm_Click() s=3 Range("B1").Value = "ÇARPIM TABLOSU" Range("B2").Value = "------------------------" For i = 2 To 9 For j = 1 To 9 Range("B" & s).Value = i & " X " & j & " = " & (i * j) s=s+1 Next j Next i End Sub 20 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Tablo görünümünde çok sütunda hazırlamak için değişken değerlerini ve aritmetik operatörleri de görüntülemek istendiğinde kod yazılımı aşağıdaki gibi olmalıdır. 2X1=2 3X1=3 2X2=4 3X2=6 2X3=6 3 X 3 = 9 gibi Private Sub CommandButton1_Click() s=3 st = 2 Range("D1").Value = "Ç A R P I M T A B L O S U" Range("D2").Value = "--------------------------------------------" For i = 2 To 9 For j = 1 To 9 Cells(s, st).Value = i & " X " & j & " = " & (i * j) s=s+1 Next j s=3 st = st + 1 Next i End Sub 21 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Makro kodlarıyla bir butondan herhangi bir programı çalıştırma Çalıştırılabilen dosya adlarını kullanarak bu işlem Shell komutuyla yapılmaktadır. Örneğin hesap makinası programını çalıştıralım. Gerekli kod şöyle olmalıdır: Private Sub CommandButton1_Click() Shell "C:\WINDOWS\system32\Calc.exe", vbNormalFocus End Sub Not Defteri programı için gerekli kod ise aşağıdaki gibidir. Private Sub CommandButton1_Click() Shell "C:\WINDOWS\system32\notepad.exe", vbNormalFocus End Sub 22 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Form Olayları Activate : Form aktif olduğunda AddControl : Kontrol eklendiğinde BeforeDragOver : Sürüklemeden önce BeforeDropOrPaste : Bırakma veya yapıştırmadan önce BeforeUpdate : Güncellemeden önce Click : Fare tek tıklandığında Change : Değerde değişiklik olduğunda DblClick : Fare çift tıklandığında DeActivate : Form pasif olduğunda DropButtonClick : Butonu tıklayıp bıraktığında Error : Hata ile karşılaştığında Initialize : Başlatıldığında KeyDown : Tuş aşağı indiğinde KeyPress : Tuşa basılı durumda KeyUp : Tuş yukarı kalktığında Layout : Düzenlendiğinde MouseDown : Fare sol tuşuna basıldığında MouseMove : Fare üzerine geldiğinde MouseUp : Basılan fare sol tuşu bırakıldığında QueryClose : Sorgu kapandığında 23 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL RemoveControl : Kontrol kaldırıldığında Resize : Form boyutu değiştirildiğinde Scroll : Kaydırıldığında Terminate : Form kapatıldığında Zoom : Büyütme/Küçültme yapıldığında Kontrol(Nesne) Olayları AfterUpdate : Güncelleme sonrasında BeforeDragOver : Sürüklemeden önce BeforeDropOrPaste : Bırakma veya yapıştırmadan önce Click : Fare tek tıklandığında DblClick : Fare çift tıklandığında Enter : Enter tuşuna basıldığında Error : Hata olduğunda Exit : Çıkıldığında KeyDown : Tuşa aşağı indiğinde KeyPress : Tuşa basılı durumda KeyUp : Tuş yukarı kalktığında MouseDown : Fare sol tuşuna basıldığında MouseMove : Fare üzerine geldiğinde 24 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL MouseUp : Basılan fare sol tuşu bırakıldığında Scroll : Kaydırıldığında SpinDown : Aşağı dönüş yapıldığında SpinUp : Yukarı dönüş yapıldığında Çalışma Kitabı olayları Activate : Çalışma kitabı aktif olduğunda AddinInstall : Eklenti kurulduğunda AddinUninstall : Eklenti kaldırıldığında AfterSave : Kaydettikten sonra AfterXmlExport : XML olarak veri dışarı aktarıldıktan sonra AfterXmlImport : XML olarak veri içeri aktarıldıktan sonra BeforeClose : Kapatmadan önce BeforePrint : Yazdırmadan önce BeforeSave : Kaydetmeden önce BeforeXmlExport : XML olarak veri dışarı aktarıldıktan önce BeforeXmlImport : XML olarak veri içeri aktarıldıktan önce DeActivate : Çalışma kitabı pasif olduğunda NewChart : Yeni grafik sayfası eklendiğinde NewSheet : Yeni çalışma sayfası eklendiğinde 25 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Open : Çalışma kitabı açıldığında PivotTableCloseConnection : Özet tablo bağlantısı kapandığında PivotTableOpenConnection : Özet tablo bağlantısı açıldığında RowSetComplete :Satır eylemi tamamlandığında SheetActivate :Çalışma sayfası aktif olduğunda SheetBeforeDoubleClick : Çalışma sayfasında çift tıklama yapıldığında SheetBeforeRightClick : Çalışma sayfasında Farenin sağ tuşuna basıldığında SheetCalculate : Çalışma sayfası hesaplandığında SheetChange : Çalışma sayfası değiştiğinde SheetDeActivate : Çalışma sayfası pasif olduğunda SheetFollowHyperlink : Çalışma sayfasında köprü izlendiğinde SheetPivotTableAfterValueChange : Özet tablosu değeri değiştikten sonra SheetPivotTableBeforeAllocateChange : Özet tablosu ayırma değişikliğinden önce SheetPivotTableBeforeCommitChange : Özet tablosu değişikliği tamamlamadan önce SheetPivotTableBeforeDiscardChange : Özet tablosu değişikliği atılmadan önce SheetPivotTableChangeSync : Özet tablosu uyumu değiştiğinde SheetPivotTableUpdate : Özet tablosu güncellendiğinde SheetSelectionChange :Seçim değiştiğinde Sync :Senkronize WindowActivate : Pencere etkinleştiğinde WindowDeActivate : Pencere pasifleştiğinde 26 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Çalışma Sayfası olayları Activate : Sayfa aktif olduğunda BeforeDoubleClick : Çift tıklamadan önce BeforeRightClick : Farenin sağ tuşuna basmadan önce Calculate : Hesaplandığında Change : Değiştiğinde DeActivate : Pasif olduğunda FollowHyperlink : Köprü izlendiğinde PivotTableAfterValueChange :Özet tablo değeri değiştikten sonra PivotTableBeforeAllocateChange : Özet tablosu ayırma değişikliğinden önce PivotTableBeforeCommitChange : Özet tablosu değişikliği tamamlamadan önce PivotTableBeforeDiscardChange : Özet tablosu değişikliği atılmadan önce PivotTableChangeSync : Özet tablosu uyumu değiştiğinde PivotTableUpdate : Özet tablosu güncellendiğinde SelectionChange : Çalışma sayfası seçildiğinde 27 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Örnekler : Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean) MsgBox "Çift tıklama yaptınız" End Sub Private Sub UserForm_Resize() MsgBox UserForm1.Width End Sub Private Sub UserForm_Terminate() MsgBox "programı kapattınız." 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 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) UserForm1.Show End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'MsgBox "sayfa1 seçildi" End Sub Soldaki formda textbox1 içine gireceğimiz sayısal değer oranına göre büyütme/küçülme yapılıyor Ayrıca Label, CommandButton veya TextBox üzerine fareyle gelindiğinde algılamakta ve mesaj kutusunda gerekli mesaj verilmektedir. Çalışma kitabı açıldığında bu form otomatik olarak ekrana getirilmektedir. 29 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Personel kayıt programı Bu program açılan bir text dosyasına kişi bilgileri kaydı yapar. Kayıt üzerinde bul-değiştir işlemleri yapar. C sürücüsünde Personel.txt isimli bir metin dosyanız bulunmalıdır. Kayıt Formu tasarımını hazırlamak için; 4 adet Label, 4 adet TextBox ve 3 adet CommandButton kullanılacaktır. Captionları resimdeki gibi değiştirin. Button ve form isimlerini değiştirin. (Name=buldegistir, frmkaydet gibi.) Bul değiştir Formu tasarımını hazırlamak için; 4 adet Label, 4 adet TextBox, 1 adet SpinButton ve 4 adet CommandButton kullanılacaktır. Captionları resimdeki gibi değiştirin 30 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Bul değiştir formu için makro kodları aşağıdadır; 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 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL End If End Sub Private Sub UserForm_Initialize() Open "c:\Personel.txt" For Random As #1 Len = Len(ALAN) End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode <> 1 Then Cancel = 1 End Sub Kaydet formu için makro kodları aşağıdadır; 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 dosyasına aşağıdaki gibi kayıt yapılacaktır. 32 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Otomatik resim değiştirme Örnek olarak resim formatında 3 adet elimizde bulunsun. Sayfaya bir adet image yerleştirmeniz gerekmektedir. Bir hücreye resim adı yazıldığında otomatik olarak Image yenilensin istiyoruz. Sayfada değişiklik olduğunda makro kodları yeniden çalıştırılmalıdır. 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 Bulunamıyor!" Image1.Picture = LoadPicture("D:\Yedek3\ex-makro\dosyayok.jpg") End If End Sub 33 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL A1 hücresine res1, res2, res3 yazarak Enter tuşuna basıldığında resim değişecektir. Resimler buradaki kodlara göre D:\Yedek3\ex-makro klasöründe bulunmaktadır. Değişiklik yaparak istediğiniz klasördeki resimleri görüntüleyebilirsiniz. Çalışma sayfasına kontrol eklemek Çalışma sayfasına kontrol(nesne) eklemek için şu adımları takip ediniz: Geliştirici sekmesine geçiniz. Denetimler grubundan ekle simgesini açınız. Eklemek istediğiniz kontrole tıklayınız. Sayfa üzerinde kontrolünüzü fareyle çizerek oluşturunuz. Boyutlarını, başlığını vs. değiştirmek için tasarım moduna geçmeniz gerekir. 34 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Örnek Çalışma Kayıt Al butonu hazırlayarak, giriş kutusu yardımıyla notları alalım. Hesapla butonu yardımıyla girilen vize ve finalin ortalamasını, harf notunu ve GEÇER/TEKRAR durumunu yazdıralım. Sub Kayıtyap() vize = InputBox("Vize notu ?") final = InputBox("Final notu ?") kac = InputBox("Kaçıncı satıra yazılacak ?") Cells(kac, 1).Value = vize Cells(kac, 2).Value = final End Sub Sub Düğme1_Tıklat() ' ' Düğme1_Tıklat Makro ' Makro abc tarafından 28.01.2002 tarihinde kaydedildi. kyt = InputBox("Kayıt Sayısı ?") 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 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL End Select If Cells(i, 3).Value > 59 Then Cells(i, 4).Value = "GEÇER" Else Cells(i, 4).Value = "Tekrar" End If Next i End Sub Kayıt al butonuna tıkladığınızda vize, final ve yazılacak satır numarası girilmesi gerekir. 36 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL Hesaplama yaptırmak için satır numarası girmeniz gerekiyor. Örneğin 4 gibi. 37 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL FONKSİYON HAZIRLAMA Bir Excel çalışma kitabında fonksiyon hazırlamak ve tüm çalışma kitaplarında çalıştırmak için XLA türünde kaydetmeniz gerekmektedir. Bu türde kaydedilen dosyalar ADDINS klasörüne kaydedilecektir. ADDINS (EKLENTİ) NEDİR? Eklenti demektir. Tanımlı fonksiyonlar bulunan özel tanımlanmış dosyalardır. Örneğin Öğrenci notlarını harf notuna dönüştürmek için fonksiyon yazılarak bu fonksiyon bütün çalışma kitaplarında kullanılabilir. EKLENTİLERİ KULLANIMA AÇMAK Eklentileri kullanıma açmak için Geliştirici sekmesinde bulunan Eklentiler simgesine tıklayınız ve kaydettiğiniz eklenti dosyanızı işaretleyiniz. FONKSİYON HAZIRLAMA Function KUPKOK(SAYI As Integer) KUPKOK = SAYI ^ (1 / 3) End Function Function Puan(Notu As Integer) Select Case Notu Case Is > 100: Puan = "Yanlış girilen not" Case Is >= 90: Puan = "AA" Case Is >= 85: Puan = "BA" Case Is >= 75: Puan = "BB" Case Is >= 70: Puan = "CB" Case Is >= 60: Puan = "CC" Case Is >= 55: Puan = "DC" Case Is >= 50: Puan = "DD" Case Is >= 40: Puan = "FD" Case Is >= 0: Puan = "FF" Case Else: Puan = " Yanlış girilen not " End Select End Function 38 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL EXCEL DOSYASI AÇILDIĞINDA FORM EKRANA GETİRME Excel dosyası açıldığında form ekrana getirmek için aşağıdaki gibi bir prosedürü kullanmalıyız. Private Sub Workbook_Open() UserForm1.Show End Sub EXCEL AÇILDIĞINDA OTOMATİK OLARAK DOSYA AÇMA Bir çalışma kitabının (Excel dosyasının) Excel programı açılınca otomatik olarak açılması için XLSTART klasörüne kaydedilmesi gerekir. Bu klasörün yolu şöyle olabilir; C:\Program Files\Microsoft Office\Office14\XLSTART MAKRO KODLARINA ŞİFRE KONULMASI Makro kodlarını korumak için şifre konulması istenebilir. Bunun için şu adımlar takip edilir; VBA penceresine geçilir. Tools menüsü açılır. VBAProject Properties satırı tıklanır. Protection sekmesine geçilir Lock Protect for viewing onaylanır. Password (Şifre) yazılır. Confirm Password (Tekrar Şifre) yazılır. Tamam tıklanarak çıkılır. 39 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL BİR PROSEDÜR İÇERİSİNDE BAŞKA PROSEDÜR ÇALIŞTIRMA Bir prosedür içerisinde başka prosedür çalıştırmak mümkündür. Bunun için sadece prosedür adı kullanılr. Prosedürler altprogram (Sub) veya fonksiyon(function) olabilir. Aşağıdaki örnekte hesap1 adlı alt programda 1. Sütunda 1-20 arası satırlara i değeri yazdırılıyor. Sonra hesap2 adlı altprogramda 1. Sütunda 1-20 arası satırlarda bulunan değerlerin karekökleri 2. Sütuna yazdırılıyor. Son olarak hesap isimli alt programda hesap1 ve hesap2 adlı altprogramlar çağrılıyor. Sub hesap() Sub hesap1() Sub hesap2() hesap1 For i = 1 To 20 For i = 1 To 20 hesap2 Cells(i, 1) = i Cells(i, 2) = Cells(i, 1) ^ (1 / 2) End Sub Next i Next i End Sub End Sub GRAFİK EKLEME KODU Sütun grafiği ekleme kodu aşağıdaki gibi yazılmalıdır. Sub graf2() ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlColumnClustered ActiveChart.SetSourceData Source:=Range("Sayfa1!$A$22:$B$27") End Sub Pasta grafiği ekleme kodu aşağıdaki gibi yazılmalıdır. Sub graf3() ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlPie ActiveChart.SetSourceData Source:=Range("Sayfa1!$A$22:$B$27") End Sub 40 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL X-Y Dağılım grafiği ekleme kodu aşağıdaki gibi yazılmalıdır. Sub graf1() ActiveSheet.Shapes.AddChart.Select % Grafik ekleniyor. ActiveChart.ChartType = xlXYScatterLines % Grafik türü belirtiliyor. ActiveChart.SetSourceData Source:=Range("Sayfa1!$A$1:$B$17") % Veri alanı belirleniyor. End Sub X-Y Dağılım Grafiği butonuna atanan makroyu çalıştırmak için tıklamak gerekmektedir. 41 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL 42 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL SAYFAYA BUTON EKLEME Geliştirici sekmesine geçiniz. Denetimler grubunda bulunan Ekle simgesini açınız. Burada Form denetimlerinden Düğme simgesini seçiniz. Sayfada istediğiniz yere düğmeyi çiziniz. 43 Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL BUTONA MAKRO ATAMA Düğme üzerinde sağ tuşa basınız. Makro Ata satırına tıklayınız. Kayıtlı olan bir makro seçiniz. Tamam butonuna tıklayınız. 44