Upload
dokiet
View
342
Download
17
Embed Size (px)
Citation preview
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
1
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 say-
fası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 yapa-
cağız. Form elemanları özelliklerini öğreneceğiz.
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
2
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 yapa-
rak da çalıştırmanız mümkündür. Türü Makro İçerebilen Excel Çalışma Kitabı
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
3
Örnek uygulama – İşçi Kazanç Tablosu
Bir firmadaki işçilerin çalıştığı gün sayısına göre kazancını hesaplayan bir makro ya-
zı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.
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
4
Form ve Form Bileşenleri
Program ara yüzü hazırlamak için formlara ihtiyaç vardır. Formlar üzerine çeşitli nes-
neler 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 ekleyebilir-
siniz. 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 pen-
ceresinden 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 özellik-
ler penceresinden belirleyip, yazı tipi ile büyüklüğünü, rengini ve görünümünü değiş-
tirmeniz mümkündür.
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
5
Properties
Özellikler anlamına gelen bu pencerede seçili olan form nesnesine ait özellikler ayarla-
nabilmektedir.
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
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
6
Private Sub CommandButton2_Click()
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
End Sub
Private Sub CommandButton3_Click()
UserForm2.Hide
End Sub
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
7
Form Özellikleri
Name : Form adı
BackColor : Form rengi
BorderStyle : Pencere kenarlığı stili
Caption : Pencere başlığı
Enabled : Kullanılabilirlik (True, False)
Font : Yazı tipi özellikleri
ForeColor : Metin rengi
Height : Form yüksekliği
Left : Formun ekranın sol kenardan uzaklığı
MouseIcon : Fare simgesi
MousePointer : Fare işaretçisi
Picture : Form yüzeyine resim ekleme
PictureAlignment : Form yüzeyine eklenen resmin hizalanması
PictureSizeMode : Form yüzeyine eklenen resmin boyutlandırma modu
PictureTiling : Form yüzeyine eklenen resmi döşeme (True, False)
ScrollBars : Kaydırma çubukları
StartUpPosition : Formun başlangıç pozisyonu
Top : Formun ekranın üst kenardan uzaklığı
WhatThisButton : Bu nedir butonu ekler (True, False)
Width : Formun genişliği
Zoom : Formu büyütme/küçültme yüzdesi
Açılır liste kutusu yapma
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
8
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.
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
9
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.
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
10
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.
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
11
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, Or-
taokul, 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
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
12
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:
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
13
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 me-
tin duruma uygun olarak değişiyor. Seçilen resim Image çerçevesinden büyük veya küçük olma-
sı durumunda stretch özelliği ile çerçeveye göre boyutlandırabilirsiniz.
Image1.PictureSizeMode=1- fmPictureSizeModeStretch gibi.
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
14
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. Mi-
nimum 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. Mi-
nimum 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ün-
deki 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ım-
layalım.
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
15
ScrollBar nesnesine tıklandıkça değer değişecektir. Bu değeri TextBox2 değeri olarak tanımlaya-
lı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.
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
16
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
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
17
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
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
18
Onay kutusunun her iki durumunu da kontrol etmek isterseniz kodlar aşağıdaki şekilde hazır-
lamalı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
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
19
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.
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
20
Ç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.
2 X 1 = 2
2 X 2 = 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
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
21
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.
2 X 1 = 2 3 X 1 = 3
2 X 2 = 4 3 X 2 = 6
2 X 3 = 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
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
22
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
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
23
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
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
24
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
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
25
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
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
26
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
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
27
Ç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
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
28
Ö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
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
29
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Can-
cel 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 me-
saj kutusunda gerekli mesaj ve-
rilmektedir.
Çalışma kitabı açıldığında bu
form otomatik olarak ekrana
getirilmektedir.
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
30
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şlem-
leri 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
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
31
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
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
32
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.
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
33
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
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
34
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 iste-
diğ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.
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
35
Ö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"
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
36
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.
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
37
Hesaplama yaptırmak için satır numarası girmeniz gerekiyor. Örneğin 4 gibi.
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
38
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 kitapla-
rı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
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
39
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 ko-
nulması istenebilir. Bunun için şu adımlar
takip edilir;
VBA penceresine geçilir.
Tools menüsü açılır.
VBAProject Properties satırı tık-
lanır.
Protection sekmesine geçilir
Lock Protect for viewing onayla-
nır.
Password (Şifre) yazılır.
Confirm Password (Tekrar Şifre)
yazılır.
Tamam tıklanarak çıkılır.
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
40
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() hesap1 hesap2 End Sub
Sub hesap1() For i = 1 To 20 Cells(i, 1) = i Next i End Sub
Sub hesap2() For i = 1 To 20 Cells(i, 2) = Cells(i, 1) ^ (1 / 2) Next i 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
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
41
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ı belirleni-
yor.
End Sub
X-Y Dağılım Grafiği butonuna atanan makroyu çalıştırmak için tıklamak gerekmektedir.
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
42
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
43
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.
Makro Programlama Dersleri – Öğr. Gör. Ramazan BAYKAL
44
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.