Genel Bakış
Visual Basic Düzenleyicisi (Visual Basic Editor, VBE), Excel ile birlikte gelen ve VBA kodunu yazmanızı, düzenlemenizi, çalıştırmanızı ve hata ayıklamanızı sağlayan ayrı bir penceredir. Makro kaydederek oluşturduğunuz kodlar da, elle yazdığınız yordamlar, işlevler, olay yordamları ve kullanıcı formları da burada saklanır. VBA ile çalışmanın ilk adımı bu pencereyi tanımaktır.
Geliştirici sekmesini göremiyorsanız Dosya > Seçenekler > Şeridi Özelleştir (File > Options > Customize Ribbon) yolunu izleyin ve sağdaki listede Geliştirici (Developer) kutusunu işaretleyin.
Bir sayfa sekmesine sağ tıklayıp Kodu Görüntüle (View Code) seçerseniz VBE doğrudan o sayfanın kod modülüyle açılır. Makro içeren dosyayı mutlaka Excel Makro İçerebilen Çalışma Kitabı (*.xlsm) türünde kaydedin; düz .xlsx dosyasında kodlar saklanmaz.
Son satır, bir makro yarıda kesildiğinde kapalı kalan olayları yeniden açmak için işe yarar.
Makro çalışınca Tutar sütunu dolar; örneğin Defter satırının tutarı D2 hücresinde 222,00, Ataş satırının tutarı D6 hücresinde 125,00 olarak görünür. Aynı satırlar Hemen Penceresi'nde de listelenir. Kodun başındaki Option Explicit sayesinde bir değişken adını yanlış yazarsanız VBE sizi hemen uyarır.
Örnekte B3 hücresindeki Kahve adedi değiştirilir ve bu değişiklik olay yordamını tetikler. Yalnızca değişen satırın Tutar hücresi hesaplanır; D3 hücresinde 960,00 değeri görünür, diğer satırlara dokunulmaz. Yordamın sayfa modülünde olması gerektiğine dikkat edin: aynı kodu standart modüle yapıştırırsanız olay hiç çalışmaz.
Her ayın durumu Durum sütununa yazılır: Ocak için D2 hücresinde Hedef aşıldı, Şubat için D3 hücresinde Hedefin altında, Mayıs için D6 hücresinde Hedefe ulaşıldı görünür. Bir satıra F9 ile kesme noktası koyarsanız kod orada durur ve değişkenlerin değerlerini inceleyebilirsiniz. Aynı modülde birden çok yordam ve işlev bulunabilir; F5 tuşu her zaman imlecin bulunduğu yordamı çalıştırır.
VBE'yi açma ve Geliştirici sekmesi
VBE'yi açmanın en hızlı yolu Excel penceresindeyken Alt+F11 tuşlarına basmaktır. Aynı tuşlar VBE açıkken sizi Excel'e geri döndürür. Şeritten açmak için Geliştirici > Kod > Visual Basic (Developer > Code > Visual Basic) komutunu kullanın.Geliştirici sekmesini göremiyorsanız Dosya > Seçenekler > Şeridi Özelleştir (File > Options > Customize Ribbon) yolunu izleyin ve sağdaki listede Geliştirici (Developer) kutusunu işaretleyin.
Bir sayfa sekmesine sağ tıklayıp Kodu Görüntüle (View Code) seçerseniz VBE doğrudan o sayfanın kod modülüyle açılır. Makro içeren dosyayı mutlaka Excel Makro İçerebilen Çalışma Kitabı (*.xlsm) türünde kaydedin; düz .xlsx dosyasında kodlar saklanmaz.
Başlıca pencereler
VBE'deki pencereler Görünüm (View) menüsünden açılıp kapatılır. En sık kullanılanlar şunlardır:- Proje Penceresi (Project Explorer, Ctrl+R): Açık çalışma kitaplarını ve içlerindeki sayfa, ThisWorkbook, modül, sınıf modülü ve UserForm öğelerini ağaç yapısında gösterir.
- Özellikler Penceresi (Properties Window, F4): Seçili öğenin özelliklerini listeler; örneğin bir modülün ya da sayfanın Name özelliğini buradan değiştirirsiniz.
- Kod Penceresi (Code Window, F7): Kodu yazdığınız alandır. Her modülün kendi kod penceresi vardır.
- Hemen Penceresi (Immediate Window, Ctrl+G): Tek satırlık komutları anında çalıştırmanızı ve Debug.Print çıktısını görmenizi sağlar.
- Yereller Penceresi (Locals Window): Çalışan yordamdaki değişkenlerin anlık değerlerini gösterir.
- İzleme Penceresi (Watch Window): Seçtiğiniz ifadelerin değerini kod ilerledikçe izlemenizi sağlar.
- Nesne Tarayıcısı (Object Browser, F2): Excel ve VBA kitaplıklarındaki nesneleri, özellikleri ve yöntemleri arayıp inceleyebileceğiniz kataloğdur.
VBA
3 satır
? Range("A1").Value
Range("A1").Value = 5
Application.EnableEvents = True
Modül türleri ve kodun yazılacağı yer
Kodun nereye yazılacağı, ne zaman çalışacağını belirler. Yeni öğe eklemek için Ekle (Insert) menüsünü kullanırsınız:- Standart modül (Module): Ekle > Modül (Insert > Module) ile eklenir. Genel Sub yordamları ve Function işlevleri burada yazılır; makro listesinde ve düğmelere atamada bu yordamlar görünür.
- Sayfa modülü: Her çalışma sayfasının kendi modülüdür. Worksheet_Change gibi o sayfaya ait olaylar buraya yazılır.
- ThisWorkbook modülü: Workbook_Open gibi çalışma kitabı olayları için kullanılır.
- Sınıf modülü (Class Module): Kendi nesne türlerinizi tanımlamak içindir.
- UserForm: Görsel olarak tasarladığınız iletişim kutularıdır; kendi kod modülü vardır.
Çalıştırma, hata ayıklama ve ayarlar
İmleç bir yordamın içindeyken F5 tuşu o yordamı çalıştırır. Kodu satır satır izlemek için aşağıdaki araçlar kullanılır:- F8 (Adım Adım, Step Into): Her basışta bir satır çalıştırır; satırın sonucunu Yereller ve Hemen pencerelerinde görebilirsiniz.
- Shift+F8 (Step Over): Çağrılan yordamı tek adımda geçer.
- Ctrl+Shift+F8 (Step Out): İçinde bulunulan yordamı bitirip çağıran yere döner.
- F9 (Kesme Noktası, Toggle Breakpoint): İmlecin bulunduğu satıra kesme noktası koyar; kod o satırda durur.
- Ctrl+Break: Çalışan kodu keser.
- Sıfırla (Reset): Durmuş ya da kesilmiş kodu tamamen sonlandırır.
1. Standart modül ve Hemen Penceresi
Excel'de Alt+F11 tuşlarıyla VBE'yi açın, Ekle > Modül ile yeni bir standart modül ekleyin ve aşağıdaki kodu yapıştırın. İmleci TutarHesapla yordamının içine koyup F5 tuşuna basın. Kod her satır için Adet ile Birim Fiyat'ı çarpıp Tutar sütununa yazar; aynı sonucu Hemen Penceresi'ne (Ctrl+G) de gönderir.
VBA
18 satır
Option Explicit
Sub TutarHesapla()
' Option Explicit nedeniyle tüm değişkenler bildirilmelidir
Dim ws As Worksheet
Dim son As Long
Dim i As Long
Set ws = ThisWorkbook.Worksheets("Satış Tutarı")
' A sütunundaki son dolu satırı bulur
son = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
For i = 2 To son
ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value
' Sonuç Hemen Penceresi'ne de yazılır (Ctrl+G)
Debug.Print ws.Cells(i, 1).Value & ": " & ws.Cells(i, 4).Value
Next i
End Sub
Visual Basic Düzenleyicisi
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Ürün | Adet | Birim Fiyat | Tutar |
| 2 | Defter | 12 | 18,50 | 222,00 |
| 3 | Kalem | 40 | 6,75 | 270,00 |
| 4 | Dosya | 25 | 12,00 | 300,00 |
| 5 | Silgi | 30 | 3,25 | 97,50 |
| 6 | Ataş | 50 | 2,50 | 125,00 |
Satış TutarıExcelDepo v1.0.0
2. Sayfa modülünde olay yordamı
Bu kod standart modüle değil, sayfanın kendi modülüne yazılır. VBE'de Proje Penceresi'nde ilgili sayfaya çift tıklayın (ya da sayfa sekmesine sağ tıklayıp Kodu Görüntüle deyin) ve aşağıdaki kodu yapıştırın. B veya C sütunundaki bir değer değiştiğinde aynı satırın Tutar hücresi otomatik hesaplanır.
VBA
19 satır
Private Sub Worksheet_Change(ByVal Target As Range)
Dim hucre As Range
Dim kesisim As Range
' Yalnız B2:C12 aralığındaki değişiklikler izlenir
Set kesisim = Intersect(Target, Me.Range("B2:C12"))
If kesisim Is Nothing Then Exit Sub
On Error GoTo Temizle
' Tutar yazılırken olayın yeniden tetiklenmesini engeller
Application.EnableEvents = False
For Each hucre In kesisim.Cells
Me.Cells(hucre.Row, 4).Value = Me.Cells(hucre.Row, 2).Value * Me.Cells(hucre.Row, 3).Value
Next hucre
Temizle:
' Hata olsa bile olaylar yeniden açılır
Application.EnableEvents = True
End Sub
Visual Basic Düzenleyicisi
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Ürün | Adet | Birim Fiyat | Tutar |
| 2 | Çay | 10 | 45,00 | |
| 3 | Kahve | 8 | 120,00 | 960,00 |
| 4 | Şeker | 20 | 32,50 | |
| 5 | Süt | 15 | 28,00 |
Sipariş TakibiExcelDepo v1.0.0
3. Adım adım izleme için iki yordam
Aşağıdaki kodu standart modüle yapıştırın. DurumGuncelle yordamı her ayın satışını hedefle karşılaştırması için DurumBul işlevini çağırır. İmleci DurumGuncelle içine koyup F8 tuşuyla satır satır ilerlerseniz, Görünüm > Yereller Penceresi içinde i ve sonuc değişkenlerinin nasıl değiştiğini görebilirsiniz. Doğrudan çalıştırmak için F5 yeterlidir.
VBA
25 satır
Option Explicit
Sub DurumGuncelle()
Dim ws As Worksheet
Dim i As Long
Dim sonuc As String
Set ws = ThisWorkbook.Worksheets("Aylık Hedef")
For i = 2 To 7
' F8 ile ilerleyerek değişkenleri Yereller penceresinde izleyin
sonuc = DurumBul(ws.Cells(i, 2).Value, ws.Cells(i, 3).Value)
ws.Cells(i, 4).Value = sonuc
Debug.Print ws.Cells(i, 1).Value & " - " & sonuc
Next i
End Sub
Function DurumBul(ByVal satis As Double, ByVal hedef As Double) As String
If satis > hedef Then
DurumBul = "Hedef aşıldı"
ElseIf satis = hedef Then
DurumBul = "Hedefe ulaşıldı"
Else
DurumBul = "Hedefin altında"
End If
End Function
Visual Basic Düzenleyicisi
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Ay | Satış | Hedef | Durum |
| 2 | Ocak | 125.000 | 120.000 | Hedef aşıldı |
| 3 | Şubat | 98.000 | 100.000 | Hedefin altında |
| 4 | Mart | 143.500 | 140.000 | Hedef aşıldı |
| 5 | Nisan | 110.000 | 115.000 | Hedefin altında |
| 6 | Mayıs | 150.000 | 150.000 | Hedefe ulaşıldı |
| 7 | Haziran | 87.500 | 90.000 | Hedefin altında |
Aylık HedefExcelDepo v1.0.0
Kullanırken dikkat edin
- Makro güvenliği: Makro içeren bir dosya açtığınızda Excel makroları varsayılan olarak devre dışı bırakabilir. Ayarlar Dosya > Seçenekler > Güven Merkezi > Güven Merkezi Ayarları > Makro Ayarları (File > Options > Trust Center > Trust Center Settings > Macro Settings) yolundadır. Kaynağını bilmediğiniz dosyalarda makroları etkinleştirmeyin.
- Dosya türü: Kodlarınızı içeren çalışma kitabını .xlsm olarak kaydetmezseniz kodlar kaybolur. Excel .xlsx olarak kaydederken sizi bu konuda uyarır; uyarıya Evet derseniz modüller silinir.
- Option Explicit alışkanlığı: Her modülün başına Option Explicit yazın ya da Seçenekler'den otomatik eklenmesini sağlayın. Böylece bildirilmemiş ve yanlış yazılmış değişkenler baştan yakalanır. Bu ayar var olan modüllere kendiliğinden eklenmez, yalnız yeni modüllere uygulanır.
- Olayları kapalı bırakmayın: Olay yordamında Application.EnableEvents özelliğini False yaptıktan sonra kod hata verip durursa olaylar kapalı kalır ve hiçbir olay çalışmaz. Yordamda hata yakalama kullanın; sorun yaşarsanız Hemen Penceresi'ne Application.EnableEvents = True yazıp Enter tuşuna basarak olayları yeniden açın.
- VBE'ye kodla erişme: Application.VBE ve VBProject nesneleriyle kod üzerinden modül eklemek ya da düzenlemek için Güven Merkezi'nde VBA proje nesne modeline erişime güven (Trust access to the VBA project object model) seçeneğinin açık olması gerekir. Bu seçenek güvenlik riski taşıdığından yalnızca gerçekten ihtiyaç duyduğunuzda açın.
- Proje koruması: VBE'de Araçlar > VBAProject Özellikleri > Koruma (Tools > VBAProject Properties > Protection) sekmesinden projeyi parolayla kilitleyebilirsiniz. Bu koruma kodu gelişigüzel görüntülemeye karşı bir önlemdir; kesin güvenlik sağlamaz. Parolayı unutursanız kodlara erişemezsiniz, bu yüzden yedek tutun.
- Hemen Penceresi sınırı: Hemen Penceresi sınırlı sayıda satır saklar; eski çıktılar yukarıdan silinir. Çok uzun çıktılar için sonuçları sayfaya yazmak daha güvenilirdir. Debug.Print çıktısı yalnızca geliştirme sırasında işe yarar, son kullanıcı bunu görmez.
- İlgili konular:
- Geliştirici sekmesi: Makro kaydetme, makro listesi ve VBE komutlarına şeritten erişim.
- Makro Kaydet (Record Macro): Yaptığınız işlemlerden otomatik VBA kodu üretir; kodu VBE'de inceleyerek öğrenebilirsiniz.
- Option Explicit: Değişken bildirimini zorunlu kılan modül düzeyi deyim.
- Sub ve Function: Yordam ve işlev tanımlama deyimleri.
- Debug.Print: Hemen Penceresi'ne çıktı yazan yöntem.
- Worksheet_Change ve Workbook_Open: Sayfa ve çalışma kitabı olayları.
- Application.EnableEvents: Olayları açıp kapatan özellik.
- UserForm: VBE'de tasarlanan kullanıcı formları.
- Kullanıcı tanımlı işlevler: Standart modülde yazıp hücrelerde kullanabileceğiniz özel işlevler; ayrıca ETOPLA ve TOPLA gibi yerleşik işlevlerle birlikte kullanılabilirler.