Excel'de Kod Yazmaya Giriş

Konusunu Sadefan`da Görüntülemektesiniz!..

Excel'de Kod Yazmaya Giriş, konusunda bu İçerik Excel'de Kod Yazmaya Giriş hakkında en yeni bilgileri, yorumları ve detaylı paylaşımı keşfedin.

Excel'de Kod Yazmaya Giriş

- Sadefan.com | Excel'de Kod Yazmaya Giriş paylaşımı

Mert-Kaan

Forum Sahibi

Excel'de Kod Yazmaya Giriş

Excel'de Kod Yazmaya Giriş

Excel'de Kod Yazmaya Giriş

Excelde Kod Yazmaya Giriş..

Unutmayın!
Makrolar genel olarak VBA penceresindeki modül nesnesinin sayfasına yazılır.

Örnek 1: Makro ile yeni bir Çalışma Sayfası oluşturmak ya da Çalışma Kitabına yeni bir sayfa eklemek.

Yeni bir Excel çalışma sayfası açtığı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.

http://www.excel.gen.tr/images/pictures/Makaleler/mak_13_1.gif

Şekil-1

Aşağıdaki kodu VBAda açtığınız bir modül sayfasına yazın ve çalıştırın.

Sub SayfaEklemek()
Worksheets.Add
End Sub

Kodu çalıştırdığınızda, Şekil-2 deki gibi Sayfa4 adlı yeni bir Çalışma Sayfasının Çalışma Kitabınıza eklendiğini göreceksiniz.

http://www.excel.gen.tr/images/pictures/Makaleler/mak_13_2.gif

Şekil-2

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

http://www.excel.gen.tr/images/pictures/Makaleler/mak_13_3.gif

Şekil-3

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

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

Bütün özellik/metotları görmek isterseniz, kod sayfasında herhangi bir yerde iken CTRL + SPACE tuşlarına birlikte basarsanız aynı liste kutusuna benzer bir listeyi ekranda göreceksiniz.

Şimdi örneğimize tekrar dönelim.

Worksheet: Çalışma Sayfası
Worksheets: Çalışma Sayfaları
Add: Ekle

Kodu kısaca açıklayalım.
Worksheets.Add yani ÇalışmaSayfası.Ekle manasına gelir.

Eğer dikkat ettiyseniz, yeni eklenen Sayfa4 adlı Çalışma Sayfasının en sola yani Sayfa1 inde soluna eklenmiş olduğunu görürsünüz. Amacımız ise her yeni eklenen Çalışma Sayfasının, en sağ taraftaki sayfanın sağına eklenmesi olsun. Sayfalarınıza göz atın, en sağda olan sayfanın Sayfa3 olduğunu göreceksiniz. O halde aşağıdaki kodu yazın.

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

Kodu çalıştırdığınızda Şekil-4 ü elde edeceksiniz

http://www.excel.gen.tr/images/pictures/Makaleler/mak_13_4.gif

Şekil-4

Hemen, aklınıza şu soru takıldı. Kodu tekrar çalıştırdığımızda bu defa yine Sayfa3 ün 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, önümüze çıkacak bir çok soruyu da cevaplamaya çalışıyoruz. Yukarıdaki kodu açıkladıktan sonra, sorunumuzu çözeceğiz. Önce yeni kelimelere göz atalım.

Move: Taşı
After: -den sonra

Kodu kısaca okuyalım.

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

yani, Yeni Eklenen Çalışma sayfasını Sayfa3 den sonraya taşı.

Bu defa soruna köklü bir çözüm getirelim. Aşağıdaki kodu yazın.

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

Kodu çalıştırdığınızda Şekil-5 deki görüntüyü elde edeceksiniz.

http://www.excel.gen.tr/images/pictures/Makaleler/mak_13_5.gif

Şekil-5

Count: Saymak

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

Worksheets.Count ifadesi bize bir rakam döndürecektir. Çünkü bu ifade ile aktif Çalışma Kitabındaki sayfalar sayılıyor. Bizim kodu çalıştırmadan evvelki Çalışma Sayfası sayımız, 5 di. (Sayfa4, Sayfa1, Sayfa2, Sayfa3 ve Sayfa5) O halde yukarıdaki kodda Worksheets.Count yerine 5 rakamı gelecektir. Siz kodu çalıştırdığınızda, bilgisayar, önce o an aktif olan sayfaları sayacak ve daha sonra da yeni eklenecek sayfayı, bu sayı kadar sağa taşıyacaktır.

Bizim Çalışma Kitabımızda 5 sayfa olduğuna göre, yeni eklenecek olan sayfa, soldan sağa 6. sıraya yani en sağa yerleştirilecektir.

Örnek 2: Çalışma Sayfasının adını değiştirmek.

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

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

Kodu çalıştırdığınızda Şekil-6 daki gibi bir görüntü elde edeceksiniz.

http://www.excel.gen.tr/images/pictures/Makaleler/mak_13_6.gif

Şekil-6

ActiveSheet : Aktif sayfa
Name : İsim, Ad

İlk olarak Çalışma Kitabımıza yeni bir Çalışma Sayfası ekledik. Doğal olarak Excelde buna yeni bir isim atadı. (Eğer yeni bir Çalışma Kitabı açmışsanız, muhtemelen Sayfa4 olarak atandı). Daha sonra makronun ikinci satırına geçildi. Bu satırda da Aktif olan Çalışma Sayfasına yeni bir isim verildi.

Hatırlatma!!!
Siz Çalışma Kitabına yeni sayfa eklediğinizde, otomatik olarak o yeni sayfa aktif sayfa olacaktır.

Yukarıdaki kodda da bu olay göz önüne alınarak, yeni eklenen sayfaya Excel otomatik olarak hangi adı atarsa atasın, biz bu sayfayı ActiveSeheet (Aktif sayfa) olarak bildiğimiz için bu sayfanın adını değiştirdik.

Kodu, iki defa üst üste çalıştırdığınızda, Şekil-7 deki hata mesajı ile karşılaşacaksınız.

http://www.excel.gen.tr/images/pictures/Makaleler/mak_13_7.gif

Şekil-7

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

Bu penceredeki End düğmesine tıklarsanız, Makronun çalışması durdurulacaktır. (HATALAR hakkında detaylı bilgi almak için MAKROLAR, Excel 2000 ile Programlama adlı kitabımızdan HATA DENETİMİ bölümüne bakabilirsiniz.)

Hata penceresini kapatıp tekrar Excel Çalışma kitabına döndüğünüzde Şekil-8 deki gibi bir görüntü ile karşılaşacaksınız.

http://www.excel.gen.tr/images/pictures/Makaleler/mak_13_8.gif

Ş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 çalışma Kitabımızda varsayılan olarak 3 adet sayfamız vardı. SayfaAdi adlı makroyu çalış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 çalıştırdık ve Excel bize Sayfa 5 i ekledi. Bu yeni eklenen sayfanın adını Yeni olarak değiştirmek istedi. Çalışma Kitabında Yeni Adlı bir sayfa bulunduğu için HATA mesajı verdi. Dolayısı ile kodun çalışmasına son verildi. Ancak Sayfa5 Çalışma Kitabımızda kaldı. İşte Sayfa5 in macerası bu.

Unutmayın!
Eğer Excelde makro yazmak istiyorsanız ve bu olayları hatasız başarmak istiyorsanız yaptıklarımızı tek tek uygulayın ve görün. Çünkü programcılık sadece bilgi yüklenmekle gerçekleşmez. Eğer çok pratik yapmıyorsanız ve bu pratikler içerisinde bir çok hatalarla karşılaşmıyorsanız ve de bu hataları çözmek için saatlerinizi harcamıyorsanız asla iyi bir programcı olamazsınız. Şunu söylememiz yerinde olacaktır. Eğer Excel makroları ile program yazmaya başlayabilirseniz, diğer programlama dilleri size çok kolay gelecektir. Çünkü şu anda okuduğunuz satırlar Visual Basic dilinin Excele 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 üzere yazılmıştır. Şekil-7 deki hata mesajı ile karşılaşmamak için 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 Çalışma Kitabında kodu çalıştırdığınızda, Çalışma Kitabına Yeni adında bir sayfa eklenecektir. Kodu ikinci defa çalıştırdığınızda ise ekrana Şekil 9 daki gibi bir mesaj penceresi çıkacaktır.

Neler oldu?

For i = 1 To Worksheets.Count

Makro kodunu çalıştırdığınızda ilk olarak O anda çalışmakta olduğunuz, katapta bulunan bütün sayfaları tek tek denetlemek üzere bir For...Next döngüsü açtık.

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

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

İşte şartımız bu. Yani bilgisayar, bu iki satırda, Çalışma Kitabındaki bütün sayfaları kontrol etmeye başlayacak. Eğer, sayfalardan herhangi bir tanesinin adı, Yeni ise bir sonraki satırdaki kodu çalıştıracak.

MsgBox "Bu isimde bir sayfa bulundu"

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

http://www.excel.gen.tr/images/pictures/Makaleler/mak_13_9.gif

Şekil-9

Exit Sub

Bu kod çalıştığında, SayfaAdi makro kodu sonlanır. Kendinden sonraki hiçbir kod okunmaz ve makro durdurulur. Bunun nedenini anladınız sanırım. Ama ben yine de açıklayayım. Eğer bu satırı yazmasaydık. Kitapta Yeni adlı bir sayfa bulunduğu halde, tekrar aşağıdaki iki satır çalış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 açılacaktır.

Genelde, sayfaları isimlendirmede, kod içerisindeki Name özelliği bu şekilde kullanılmaz. Şimdi, size bu olayın nasıl kullanıldığını basit bir programlama örneği yaparak anlatmaya çalışacağım. Öncelikle Excel, Çalışma sayfasını Şekil-10'daki gibi düzenleyin.

http://www.excel.gen.tr/images/pictures/Makaleler/mak_13_10.gif

Şekil-10

C2 hücresine Müşteri firmanın unvanını, C3 hücresine Müşteri firmanın yetkili kişisinin adını, C4 hücresine de Müşteri firmanın Telefonunu gireceğiz. Daha sonra, KAYDET düğmesine tıklayacağız ve Excel bize C2 hücresindeki firma adına ait bir çalışma sayfası açacak.

Öncelikle, çalışma kitabınızda bulunan sayfaları silin ve sadece Şekil-10'da görülen sayfa kalsın ve bu sayfanın da adını AnaSayfa olarak değiştirin. Şekil-11.

http://www.excel.gen.tr/images/pictures/Makaleler/mak_13_11.gif

Şekil-11

Modül sayfasına aşağıdaki kodu yazın ve çalıştırın.

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

Bu yazdığınız kodu, AnaSayfada bulunan kaydet düğmesine atayın. Bunu yazmak için aşağıdaki adımları takip edin.

Fare ile Kaydet düğmesi üzerine gelin ve sağ fare tuşuna tıklayın

Açılan menüden Makro Ata komutunu seçin.

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

Makro Adı kutusunda makronuzun ismi görününce Tamam düğmesine tıklayın.

SayfaAdi makrosunu KAYDET düğmesine atamış oldunuz.

Şimdi, C2 hücresine herhangi bir şey yazmadan, Kaydet düğ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, AnaSayfanın C2 hücresinden alınacaktı. Oysa yukarıda C2 hücresine herhangi bir şey yazmadık. Excelde sayfa adı olarak boşluğu kabul etmediği için bu uyarı penceresini aldık. Şimdi buna bir önlem yazalım ve Makromuzu tekrar çalış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 AnaSaydadaki C2 hücresi boş ise makroyu sonlandır. Siz isterseniz bir mesaj satırı ekleyebilirsiniz.

Şimdi C2 hücresine Müşteri firmasının adını yazın ve KAYDET düğmesine tıklayın. Şekil-12

http://www.excel.gen.tr/images/pictures/Makaleler/mak_13_12.gif

Şekil-12

Son olarak kodu aşağıdaki gibi düzenleyin.

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 örnekte, her müşteri adına yeni bir sayfa nasıl açılır bunu öğrendik. Şimdi de var olan bir sayfayı nasıl makro komutu ile sileriz bunu öğrenelim.

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

Yukarıdaki makroyu çalıştırdığınızda Sayfa1 Çalışma Kitabınızdan silinecektir.

Unutmayın!!!
Eğer Çalışma Kitabınızda Sayfa1 adında Çalışma Sayfası yoksa 9 numaralı hata mesajını alacaksınız.

Varolan bir Çalışma sayfasını silmek için makroyu çalıştırdığınızda, silinmesi gereken sayfa silinmeden önce Şekil-13'teki gibi bir uyarı penceresi ekrana gelir.

http://www.excel.gen.tr/images/pictures/Makaleler/mak_13_13.gif

Şekil-13

Bu Excelin size bir uyarısıdır. Yukarıdaki gibi bir makroyu her çalış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 açıklayalım.

Application.DisplayAlerts = False

Satırı ile Excelin sayfa silme uyarısını kaldırdık. Daha sonra aynı özelliği True olarak değiştirdik ve eski haline getirdik. Çünkü, sadece bu makroda bu uyarıyı almak istemediğinizi düşündük. Bu özelliği False yaptığınızda Excel bunu otomatik olarak tekrar True yapmayacağı için, makronun sonunda işimiz bittiğinde bu özelliği True yaptık.

Bir adım daha ilerleyelim ve yukarıda yaptığımız, program örneğine bu kodu ekleyelim. Bunun için de, SİL düğmesini, KAYDET düğmesinin altına ekledik. SayfaSil makrosunu da aşağıdaki gibi düzenledik.

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
 
Excel'de Kod Yazmaya Giriş işletim sistemleri hakkında detaylar, Excel'de Kod Yazmaya Giriş ile kullanıcılar sorularına yanıt bulabilir.
Geri
Üst