Excelde Kod Yazmaya Giriş..

Unutmayın!

Makrolar genel olarak VBA penceresindeki modul nesnesinin sayfasına yazılır.

Ornek 1:
Makro ile yeni bir Calışma Sayfası oluşturmak ya da Calışma Kitabına yeni bir sayfa eklemek.

Yeni bir Excel calışma sayfası actığınızda ve eğer Excel 2000 kullanıyorsanız ve de varsayılan değerlerde herhangi bir değişiklik yapmadıysanız ekrana Şekil-1 deki gibi 3 adet sayfa gelecektir.


Şekil-1

Aşağıdaki kodu VBA�da actığınız bir modul sayfasına yazın ve calıştırın.

Sub SayfaEklemek()
Worksheets.Add
End Sub

Kodu calıştırdığınızda, Şekil-2 deki gibi Sayfa4 adlı yeni bir Calışma Sayfası�nın Calışma Kitabı�nıza eklendiğini goreceksiniz.


Şekil-2


kodu yazarken eğer dikkat ettiyseniz, Worksheets ifadesinden sonra �.� karakterini koyduğunuzda Şekil-3 deki gibi bir goruntu ile karşılaştınız.


Şekil-3

Visual Programlama dillerini bilenler, bir anda ekrana gelen bu liste kutusunun ne olduğunu bilirler. Bilmeyenler icin kısa bir acıklama yapmak zorundayız.

Siz VBA sayfasında bir kod yazarken, bazen nesnelerin ozelliklerini hatırlamayabilirsiniz. �Acaba, Worksheets nesnesinin ne gibi ozellikleri ya da metotları vardı?� sorusunun cevabını Visual Basic size bir liste halinde sunuyor. Siz, nesneyi yazdıktan sonra, o nesnenin ozelliğini yada metodunu belirlemek icin �.� karakterini koyduğunuzda ekrana Şekil-3'teki gibi ozellik/metot hatırlatma listesi gelecektir.

Butun ozellik/metotları gormek isterseniz, kod sayfasında herhangi bir yerde iken CTRL + SPACE tuşlarına birlikte basarsanız aynı liste kutusuna benzer bir listeyi ekranda goreceksiniz.

Şimdi orneğimize tekrar donelim.

Worksheet:
Calışma Sayfası
Worksheets:
Calışma Sayfaları
Add:
Ekle

Kodu kısaca acıklayalım.
�Worksheets.Add� yani �CalışmaSayfası.Ekle� manasına gelir.

Eğer dikkat ettiyseniz, yeni eklenen Sayfa4 adlı Calışma Sayfa�sının en sola yani Sayfa1�inde soluna eklenmiş olduğunu gorursunuz. Amacımız ise her yeni eklenen Calışma Sayfasının, en sağ taraftaki sayfanın sağına eklenmesi olsun. Sayfalarınıza goz atın, en sağda olan sayfanın Sayfa3 olduğunu goreceksiniz. O halde aşağıdaki kodu yazın.

Sub SayfaEklemek()
Worksheets.Add.Move After:=Worksheets("Sayfa3")
End Sub

Kodu calıştırdığınızda Şekil-4�u elde edeceksiniz.


Şekil-4


Hemen, aklınıza şu soru takıldı. �Kodu tekrar calıştırdığımızda bu defa yine Sayfa3�un sağ tarafına ve Sayfa5�in sol tarafına ekleniyor. Ama bizim istediğimiz ise her defasında yeni eklenen sayfa en sağ tarafa eklensin.�

Haklısınız. Biz burada adım adım ilerleyerek, onumuze cıkacak bir cok soruyu da cevaplamaya calışıyoruz. Yukarıdaki kodu acıkladıktan sonra, sorunumuzu cozeceğiz. Once yeni kelimelere goz atalım.

Move:
Taşı
After:
-den sonra

Kodu kısaca okuyalım.

Worksheets.Add.Move After:=Worksheets("Sayfa3")

yani, �Yeni Eklenen Calışma sayfasını Sayfa3�den sonraya taşı.�

Bu defa soruna koklu bir cozum getirelim. Aşağıdaki kodu yazın.

Sub SayfaEklemek()
Worksheets.Add.Move After:=Worksheets(Worksheets.Count)
End Sub

Kodu calıştırdığınızda Şekil-5�deki goruntuyu elde edeceksiniz.


Şekil-5

Count:
Saymak

Yukarıdaki kodun aynısı olmakla birlikte, burada Sayfa3 yerine Worksheets.Count ifadesi geldi.

Worksheets.Count ifadesi bize bir rakam dondurecektir. Cunku bu ifade ile aktif Calışma Kitabı�ndaki sayfalar sayılıyor. Bizim kodu calıştırmadan evvelki Calışma Sayfa�sı sayımız, 5 di. (Sayfa4, Sayfa1, Sayfa2, Sayfa3 ve Sayfa5) O halde yukarıdaki kod�da Worksheets.Count yerine �5� rakamı gelecektir. Siz kodu calıştırdığınızda, bilgisayar, once o an aktif olan sayfaları sayacak ve daha sonra da yeni eklenecek sayfayı, bu sayı kadar sağa taşıyacaktır.

Bizim Calışma Kitabı�mızda 5 sayfa olduğuna gore, yeni eklenecek olan sayfa, soldan sağa 6. sıraya yani en sağa yerleştirilecektir.

Ornek 2:
Calışma Sayfa�sının adını değiştirmek.

Excel, sizin eklediğiniz her sayfayı, yeni bir isim vermediğiniz surece sıra numarasına gore isimlendirir. Sayfa4, Sayfa5, Sayfa6 gibi. Ama bu isimler kullanıcı icin genellikle uygun değildir. Kullanıcı aradığını daha rahat bulabilmek icin sayfa isimlerini kendine gore değiştirir. Madem artık makro oğreniyoruz, o halde bu isimleri Calışma Sayfası daha eklenir eklenmez değiştirelim. Bunun icin once basit bir kod yazalım.

Sub SayfaAdi()
Worksheets.Add
ActiveSheet.Name = "Yeni"
End Sub

Kodu calıştırdığınızda Şekil-6�daki gibi bir goruntu elde edeceksiniz.


Şekil-6

ActiveSheet :
Aktif sayfa
Name :
İsim, Ad

İlk olarak Calışma Kitabımıza yeni bir Calışma Sayfası ekledik. Doğal olarak Excel�de buna yeni bir isim atadı. (Eğer yeni bir Calışma Kitabı acmışsanız, muhtemelen Sayfa4 olarak atandı). Daha sonra makronun ikinci satırına gecildi. Bu satırda da Aktif olan Calışma Sayfasına yeni bir isim verildi.

Hatırlatma!!!

Siz Calışma Kitabı�na yeni sayfa eklediğinizde, otomatik olarak o yeni sayfa aktif sayfa olacaktır.

Yukarıdaki kodda da bu olay goz onune alınarak, yeni eklenen sayfaya Excel otomatik olarak hangi adı atarsa atasın, biz bu sayfayı ActiveSeheet (Aktif sayfa) olarak bildiğimiz icin bu sayfanın adını değiştirdik.

Kodu, iki defa ust uste calıştırdığınızda, Şekil-7 deki hata mesajı ile karşılaşacaksınız.


Şekil-7

Belki de bazılarınız, �Ne diyor bu pencerede?� diye kızacaksınız. Kızmanıza gerek yok. Bir coğunuzun anladığı gibi, sizin zaten �Yeni� adında bir sayfanız mevcuttu. Kodu tekrar calıştırdığınızda, Excel Calışma Kitabı�nıza yeni bir sayfa eklendi ve bu eklenen sayfaya da �Yeni� adını vermeye calıştı. Oysa, bu isimde bir sayfayı daha once vermiştiniz. Bir calışma kitabında aynı isimden yeni bir sayfanın olması mumkun olmadığı icin Excel sizi uyardı ve Şekil 7 deki uyarı penceresini verdi.

Bu penceredeki �End� duğmesine tıklarsanız, Makronun calışması durdurulacaktır. (HATALAR hakkında detaylı bilgi almak icin �MAKROLAR, Excel 2000 ile Programlama� adlı kitabımızdan HATA DENETİMİ bolumune bakabilirsiniz.)

Hata penceresini kapatıp tekrar Excel Calışma kitabına donduğunuzde Şekil-8 deki gibi bir goruntu ile karşılaşacaksınız.


Şekil-8

Şimdi, Sayfa5�in nereden geldiğini yorumlayalım. (Kod yazmak, Mantık ve Yorumlama ile alakalıdır. Olan olayları yorumlayabiliyorsanız yada yazılan kodu okuyabiliyorsanız, iyi bir programcı olmaya adaysınız demektir.)

Bizim calışma Kitabımızda varsayılan olarak 3 adet sayfamız vardı. �SayfaAdi� adlı makroyu calıştırdık ve Sayfa4 adında yeni bir sayfa eklendi. Sonra da bu sayfanın adı, �Yeni� olarak değiştirildi. Daha sonra �SayfaAdi� makrosunu tekrar calıştırdık ve Excel bize Sayfa5�i ekledi. Bu yeni eklenen sayfanın adını �Yeni� olarak değiştirmek istedi. Calışma Kitabında �Yeni� Adlı bir sayfa bulunduğu icin HATA mesajı verdi. Dolayısı ile kodun calışmasına son verildi. Ancak Sayfa5 Calışma Kitabı�mızda kaldı. İşte Sayfa5�in macerası bu.

Unutmayın!

Eğer Excel�de makro yazmak istiyorsanız ve bu olayları hatasız başarmak istiyorsanız yaptıklarımızı tek tek uygulayın ve gorun. Cunku programcılık sadece bilgi yuklenmekle gercekleşmez. Eğer cok pratik yapmıyorsanız ve bu pratikler icerisinde bir cok hatalarla karşılaşmıyorsanız ve de bu hataları cozmek icin saatlerinizi harcamıyorsanız asla iyi bir programcı olamazsınız. Şunu soylememiz yerinde olacaktır. Eğer Excel makroları ile program yazmaya başlayabilirseniz, diğer programlama dilleri size cok kolay gelecektir. Cunku şu anda okuduğunuz satırlar Visual Basic dilinin Excel�e uyarlanmış şeklidir. Sanırım ne demek istediğimi anladınız.

Bundan sonra uygulayacağımız adımlar, tamamen sizin Excel�de programcılık mantığınızı geliştirmek uzere yazılmıştır. Şekil-7�deki hata mesajı ile karşılaşmamak icin kendimiz bir denetim yapacağız. Aşağıdaki kodu yazın.

Sub SayfaAdi()
For i = 1 To Worksheets.Count
If Worksheets(i).Name = "Yeni" Then
MsgBox "Bu isimde bir sayfa bulundu"
Exit Sub
End If
Next i
Worksheets.Add
ActiveSheet.Name = "Yeni"
End Sub

Yeni bir Calışma Kitabı�nda kodu calıştırdığınızda, Calışma Kitabı�na �Yeni� adında bir sayfa eklenecektir. Kodu ikinci defa calıştırdığınızda ise ekrana Şekil 9 daki gibi bir mesaj penceresi cıkacaktır.

Neler oldu?


For i = 1 To Worksheets.Count

Makro kodunu calıştırdığınızda ilk olarak O anda calışmakta olduğunuz, katapta bulunan butun sayfaları tek tek denetlemek uzere bir For...Next dongusu actık.

If Worksheets(i).Name = "Yeni" Then

İkinci satırda ise bir şart ileri surduk. Şartımız şu: Eğer �i� numaralı sayfanın adı �Yeni� ise.

İşte şartımız bu. Yani bilgisayar, bu iki satırda, Calışma Kitabı�ndaki butun sayfaları kontrol etmeye başlayacak. Eğer, sayfalardan herhangi bir tanesinin adı, �Yeni� ise bir sonraki satırdaki kodu calıştıracak.

MsgBox "Bu isimde bir sayfa bulundu"

Bu satıra gelindiğinde, Şekil-9 ekrana gelecek. Siz �Tamam� duğmesine tıklayana kadar bu şekil ekranda durur ve Excel sayfaları uzerinde herhangi bir işlem yapamazsınız. Tamam duğmesine tıkladığınızda, Mesaj penceresi kapanır ve bir sonraki satır calışır.


Şekil-9

Exit Sub

Bu kod calıştığında, �SayfaAdi� makro kodu sonlanır. Kendinden sonraki hicbir kod okunmaz ve makro durdurulur. Bunun nedenini anladınız sanırım. Ama ben yine de acıklayayım. Eğer bu satırı yazmasaydık. Kitapta �Yeni� adlı bir sayfa bulunduğu halde, tekrar aşağıdaki iki satır calışacak ve hata penceresi ile karşılaşılacaktı.

Worksheets.Add
ActiveSheet.Name = "Yeni"

Eğer, kitabımızda �Yeni� adlı bir sayfa yoksa For ile başlayan ve Next ile biten satırlar arasında herhangi bir işlem yapılmayacak ve sadece yukarıdaki iki satır dikkate alınarak �Yeni� adında bir sayfa acılacaktır.

Genelde, sayfaları isimlendirmede, kod icerisindeki Name ozelliği bu şekilde kullanılmaz. Şimdi, size bu olayın nasıl kullanıldığını basit bir programlama orneği yaparak anlatmaya calışacağım. Oncelikle Excel, Calışma sayfasını Şekil-10'daki gibi duzenleyin.


Şekil-10


C2 hucresine Muşteri firmanın unvanını, C3 hucresine Muşteri firmanın yetkili kişisinin adını, C4 hucresine de Muşteri firmanın Telefonunu gireceğiz. Daha sonra, KAYDET duğmesine tıklayacağız ve Excel bize C2 hucresindeki firma adına ait bir calışma sayfası acacak.

Oncelikle, calışma kitabınızda bulunan sayfaları silin ve sadece Şekil-10'da gorulen sayfa kalsın ve bu sayfanın da adını �AnaSayfa� olarak değiştirin. Şekil-11.


Şekil-11


Modul sayfasına aşağıdaki kodu yazın ve calıştırın.

Sub SayfaAdi()
Worksheets.Add
ActiveSheet.Name = Worksheets("AnaSayfa").Range("C2").Value
End Sub

Bu yazdığınız kodu, AnaSayfa�da bulunan kaydet duğmesine atayın. Bunu yazmak icin aşağıdaki adımları takip edin.

Fare ile �Kaydet� duğmesi uzerine gelin ve sağ fare tuşuna tıklayın

Acılan menuden �Makro Ata� komutunu secin.

�Makro Ata� penceresi ekrana gelecektir. Bu pencereden sizin yazdığınız Makro adını fare ile tıklayın.

Makro Adı kutusunda makronuzun ismi gorununce �Tamam� duğmesine tıklayın.

�SayfaAdi� makrosunu �KAYDET� duğmesine atamış oldunuz.

Şimdi, C2 hucresine herhangi bir şey yazmadan, �Kaydet� duğmesine bir defa tıklayın. 1004 numaralı hata mesajı ile karşılaşacaksınız. Bu hata mesajının anlamı şu: �Tanımlanmamış uygulama ve tanımlanmamış nesne hatası�

Sanırım bunun nedenini hemen anladınız. Yazılan makroda sayfa ismi, AnaSayfa�nın C2 hucresinden alınacaktı. Oysa yukarıda C2 hucresine herhangi bir şey yazmadık. Excel�de sayfa adı olarak boşluğu kabul etmediği icin bu uyarı penceresini aldık. Şimdi buna bir onlem yazalım ve Makromuzu tekrar calıştıralım.

Sub SayfaAdi()
If Worksheets("AnaSayfa").Range("C2").Value = "" Then Exit Sub
Worksheets.Add
ActiveSheet.Name = Worksheets("AnaSayfa").Range("C2").Value
End Sub

İlk satıra IF..THEN koşulunu ekledik. Yani şunu dedik: �Eğer AnaSayda�daki C2 hucresi boş ise makroyu sonlandır.� Siz isterseniz bir mesaj satırı ekleyebilirsiniz.

Şimdi C2 hucresine Muşteri firmasının adını yazın ve KAYDET duğmesine tıklayın. Şekil-12


Şekil-12


Son olarak kodu aşağıdaki gibi duzenleyin.

Sub SayfaAdi()
Dim i As Integer
If Worksheets("AnaSayfa").Range("C2").Value = "" Then Exit Sub
For i = 1 To Worksheets.Count
If Worksheets(i).Name = Worksheets("AnaSayfa").Range("C2").Value
Then
MsgBox "Bu isimde bir sayfa bulundu"
Exit Sub
End If
Next i
Worksheets.Add
ActiveSheet.Name = Worksheets("AnaSayfa").Range("C2").Value
End Sub

Yapmış olduğumuz bu basit ornekte, her muşteri adına yeni bir sayfa nasıl acılır bunu oğrendik. Şimdi de var olan bir sayfayı nasıl makro komutu ile sileriz bunu oğrenelim.

Sub SayfaSil()
Sheets("Sayfa1").Delete
End Sub

Yukarıdaki makroyu calıştırdığınızda �Sayfa1� Calışma Kitabı�nızdan silinecektir.

Unutmayın!!!

Eğer Calışma Kitabı�nızda Sayfa1 adında Calışma Sayfası yoksa 9 numaralı hata mesajını alacaksınız.

Varolan bir Calışma sayfasını silmek icin makroyu calıştırdığınızda, silinmesi gereken sayfa silinmeden once Şekil-13'teki gibi bir uyarı penceresi ekrana gelir.


Şekil-13


Bu Excel�in size bir uyarısıdır. Yukarıdaki gibi bir makroyu her calıştırdığınızda istisnasız olarak bu mesajı alacaksınız. Ama siz illa ki bu mesajı almak istemiyorsanız, kodu aşağıdaki gibi değiştirin.

Sub SayfaSil()
Application.DisplayAlerts = False
Sheets("Sayfa1").Delete
Application.DisplayAlerts = True
End Sub

Ne oldu diye merak edenlere hemen acıklayalım.

Application.DisplayAlerts = False

Satırı ile Excel�in sayfa silme uyarısını kaldırdık. Daha sonra aynı ozelliği True olarak değiştirdik ve eski haline getirdik. Cunku, sadece bu makroda bu uyarıyı almak istemediğinizi duşunduk. Bu ozelliği False yaptığınızda Excel bunu otomatik olarak tekrar True yapmayacağı icin, makronun sonunda işimiz bittiğinde bu ozelliği True yaptık.

Bir adım daha ilerleyelim ve yukarıda yaptığımız, program orneğine bu kodu ekleyelim. Bunun icin de, SİL duğmesini, KAYDET duğmesinin altına ekledik. �SayfaSil� makrosunu da aşağıdaki gibi duzenledik.

Sub SayfaSil()
If Range("C2").Value = "" Then Exit Sub
For i = 1 To Worksheets.Count
If Worksheets(i).Name Worksheets("AnaSayfa").Range("C2").Value Then
MsgBox "Bu isimde bir sayfa bulunamadı"
Exit Sub
End If
Next i
Application.DisplayAlerts = False
Sheets(Range("C2").Value).Delete
Application.DisplayAlerts = True
End Sub

Makalenin Orjinal Yeri
__________________