Genel Bakış
Module (Modül), VBA kodunun (Sub, Function ve bildirimler) saklandığı kapsayıcıdır; her çalışma kitabının VBA projesi bir ya da daha fazla modülden oluşur. Kodu mantıklı gruplara bölmenizi, değişkenlerin ve yordamların görünürlüğünü (kapsamını) denetlemenizi ve aynı kodu farklı yerlerden çağırmanızı sağlar. Makro kaydettiğinizde Excel de kodu otomatik olarak bir standart modüle yazar.
Bir modül iki bölümden oluşur:
İki modülde aynı ada sahip Public yordam olması hata değildir, ancak modül adı olmadan çağrıda hangisinin çalışacağı belirsiz kalır; bu nedenle modül adıyla çağırın.
Makro her satır için KdvliTutar işlevini çağırır ve sonucu D sütununa yazar; Defter satırının KDV'li tutarı 306,00, Kalem satırınınki 285,00 olur. KDV_ORANI sabiti Private olduğundan başka modüller onu göremez; oranı değiştirmek için yalnız modülün en üstündeki satırı düzenlemeniz yeterlidir.
Defter ile DEFTER harf farkına rağmen eşleştiği için C2 hücresinde Eşit, Kalem ile kalem için C3 hücresinde Eşit yazar. Cetvel ile Makas gerçekten farklı olduğundan C5 hücresi Farklı değerini alır. Option Compare Text satırını silip makroyu yeniden çalıştırırsanız harf farkı olan satırlar Farklı çıkar.
Ekle yordamı her çağrıldığında mToplam değişkeni artar ve değeri çağrılar arasında korunur; bu yüzden C2 hücresinde 12.500, C3 hücresinde 22.300, son satırda ise 63.500 görünür. Aynı değişkeni yordamın içinde Dim ile tanımlasaydınız her çağrıda sıfırlanırdı. Değişken yalnız modül açık olduğu sürece değerini korur; kod sıfırlanırsa (End ya da derleme hatası) değer kaybolur, bu yüzden makro başında mToplam değişkenine 0 atanmıştır.
Modül nedir ve nerede bulunur
Modüller Visual Basic Düzenleyicisi'nde (VBE) görünür. Düzenleyiciyi açmak için Alt+F11 tuşlarını ya da Geliştirici > Visual Basic (Developer > Visual Basic) komutunu kullanın. Sol taraftaki Proje Penceresi'nde (Project Explorer) her çalışma kitabı için Microsoft Excel Nesneleri, Formlar ve Modüller klasörleri yer alır.Bir modül iki bölümden oluşur:
- Bildirim bölümü (Declarations): dosyanın en üstüdür; Option deyimleri, modül düzeyindeki değişkenler ve sabitler burada yazılır.
- Yordamlar: bildirim bölümünün altında yer alan Sub, Function ve Property yordamlarıdır.
Modül türleri
VBA'da beş tür modülle karşılaşırsınız:- Standart modül (Module): Ekle > Modül (Insert > Module) ile eklenir. Genel amaçlı makrolar, kullanıcı tanımlı işlevler ve ortak değişkenler burada tutulur. Bu sayfanın asıl konusu budur.
- Sınıf modülü (Class Module): Ekle > Sınıf Modülü (Insert > Class Module) ile eklenir; kendi nesne türlerinizi tanımlamak için kullanılır.
- Sayfa modülü: her çalışma sayfasına ait koddur; Worksheet_Change gibi sayfa olayları burada yazılır.
- ThisWorkbook modülü: çalışma kitabı olayları (Workbook_Open gibi) burada yazılır.
- UserForm modülü: bir kullanıcı formunun ve üzerindeki denetimlerin olay kodlarını içerir.
Kapsam, Option deyimleri ve çağırma
Bir modüldeki yordam ve değişkenlerin kim tarafından görülebileceğini Public ve Private anahtar sözcükleri belirler:- Public: projedeki tüm modüllerden erişilir. Yordamlarda hiçbir şey yazmazsanız varsayılan budur; Public makrolar Alt+F8 makro listesinde görünür.
- Private: yalnız aynı modülün içinden erişilir ve makro listesinde görünmez. Yardımcı yordamlar için uygundur.
- Dim (bildirim bölümünde): Private ile aynı etkiyi verir; değişken modüldeki tüm yordamlarca paylaşılır ve değeri yordamlar arasında korunur.
- Option Explicit: her değişkenin Dim ile bildirilmesini zorunlu kılar; yazım hatalarını derleme aşamasında yakalar.
- Option Compare Text: bu modüldeki metin karşılaştırmalarını büyük ve küçük harf ayrımı yapmadan gerçekleştirir. Varsayılan Option Compare Binary ayrım yapar.
- Option Private Module: modüldeki Public yordamları projenin dışına ve makro listesine kapatır.
- Option Base 1: dizilerin varsayılan alt sınırını 1 yapar.
VBA
2 satır
Call modHesap.TutarlariHesapla
modHesap.TutarlariHesapla
1. Private sabit ve yardımcı işlev kullanan standart modül
Sipariş listesinde adet ve birim fiyat var. KDV oranı modülün en üstünde Private Const olarak tutulur; hesabı Private Function yapar ve Public Sub sonucu D sütununa yazar. Kodu Ekle > Modül ile eklediğiniz standart modüle yapıştırın.
VBA
21 satır
Option Explicit
' Modül düzeyinde sabit: yalnız bu modülden görünür
Private Const KDV_ORANI As Double = 0.2
' Yardımcı işlev: makro listesinde görünmez
Private Function KdvliTutar(adet As Double, fiyat As Double) As Double
KdvliTutar = adet * fiyat * (1 + KDV_ORANI)
End Function
' Ana makro: Alt+F8 listesinde görünür
Public Sub TutarlariHesapla()
Dim ws As Worksheet
Dim son As Long, i As Long
Set ws = ActiveSheet
son = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To son
ws.Cells(i, 4).Value = KdvliTutar(CDbl(ws.Cells(i, 2).Value), CDbl(ws.Cells(i, 3).Value))
ws.Cells(i, 4).NumberFormat = "#,##0.00"
Next i
End Sub
Module
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Ürün | Adet | Birim Fiyat | KDV'li Tutar |
| 2 | Defter | 10 | 25,50 | 306,00 |
| 3 | Kalem | 50 | 4,75 | 285,00 |
| 4 | Silgi | 20 | 3,00 | 72,00 |
| 5 | Ataç | 100 | 1,20 | 144,00 |
| 6 | Dosya | 15 | 12,90 | 232,20 |
Sipariş ListesiExcelDepo v1.0.0
2. Option Compare Text ile harf duyarsız karşılaştırma
A ve B sütunlarındaki iki liste karşılaştırılır. Modülün başındaki Option Compare Text satırı, bu modüldeki = karşılaştırmasını büyük ve küçük harf ayrımı yapmayan hale getirir. Kodu standart bir modüle yapıştırın.
VBA
17 satır
Option Compare Text
Option Explicit
' Bu modüldeki metin karşılaştırmaları harf duyarsızdır
Public Sub KarsilastirYaz()
Dim ws As Worksheet
Dim son As Long, i As Long
Set ws = ActiveSheet
son = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To son
If ws.Cells(i, 1).Value = ws.Cells(i, 2).Value Then
ws.Cells(i, 3).Value = "Eşit"
Else
ws.Cells(i, 3).Value = "Farklı"
End If
Next i
End Sub
Module
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Kayıt 1 | Kayıt 2 | Sonuç |
| 2 | Defter | DEFTER | Eşit |
| 3 | Kalem | kalem | Eşit |
| 4 | Silgi | Silgi | Eşit |
| 5 | Cetvel | Makas | Farklı |
| 6 | Dosya | dOSYA | Eşit |
KarşılaştırmaExcelDepo v1.0.0
3. Modül düzeyi değişkenle yordamlar arası değer taşıma
Aylık satışların kümülatif toplamı hesaplanır. Toplam, bildirim bölümünde tanımlanan Private değişkende tutulur; Sub yordamları aynı değişkeni paylaşır. Kodu standart bir modüle yapıştırın.
VBA
22 satır
Option Explicit
' Modül düzeyinde değişken: modüldeki tüm yordamlar paylaşır
Private mToplam As Long
' Değişkene ekleme yapan yardımcı yordam
Private Sub Ekle(tutar As Long)
mToplam = mToplam + tutar
End Sub
Public Sub KumulatifYaz()
Dim ws As Worksheet
Dim son As Long, i As Long
Set ws = ActiveSheet
son = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
mToplam = 0 ' her çalıştırmada sıfırla
For i = 2 To son
Ekle CLng(ws.Cells(i, 2).Value)
ws.Cells(i, 3).Value = mToplam
ws.Cells(i, 3).NumberFormat = "#,##0"
Next i
End Sub
Module
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Ay | Satış | Kümülatif |
| 2 | Ocak | 12.500 | 12.500 |
| 3 | Şubat | 9.800 | 22.300 |
| 4 | Mart | 15.200 | 37.500 |
| 5 | Nisan | 11.300 | 48.800 |
| 6 | Mayıs | 14.700 | 63.500 |
Aylık SatışExcelDepo v1.0.0
Kullanırken dikkat edin
- Kodu doğru modüle yazın: Olay yordamları (Worksheet_Change, Workbook_Open) yalnızca ilgili sayfa ya da ThisWorkbook modülünde çalışır; standart modüle yazarsanız olay tetiklenmez. Genel makroları ise standart modüle yazın.
- Option Explicit alışkanlığı edinin: VBE'de Araçlar > Seçenekler > Değişkenleri Bildirmeyi Gerektir (Tools > Options > Require Variable Declaration) seçeneğini işaretlerseniz yeni her modülün başına Option Explicit otomatik eklenir. Yazım hatalarından kaynaklanan gizli hataları önler.
- Option deyimleri yordamdan önce gelir: Option Explicit, Option Compare Text gibi deyimler modülün en üstünde, ilk Sub ya da Function satırından önce yazılmalıdır. Aksi halde Geçersiz yordam içi (Invalid inside procedure) hatası alırsınız. Bu deyimler yalnız bulunduğu modülü etkiler.
- Private yordamlar makro listesinde görünmez: Private Sub ya da Option Private Module içindeki yordamlar Alt+F8 listesinde çıkmaz ve düğmeye atanamayabilir. Düğmeden çalıştıracağınız makroları Public bırakın, yardımcıları Private yapın.
- Modül adı ile yordam adı çakışmasın: Bir modüle verdiğiniz ad, içindeki yordamla ya da değişkenle aynı olmamalıdır; belirsiz başvuru hatalarına yol açar. Modül adlarında boşluk ve Türkçe karakter kullanmamak da güvenlidir.
- Modülleri dışa aktarma ve yedekleme: Modülü sağ tıklayıp Dosyayı Dışa Aktar (Export File) dersiniz; standart modüller .bas, sınıf modülleri .cls, formlar .frm uzantısıyla kaydedilir. Kodu başka bir kitaba taşımak için Dosya Al (Import File) kullanılır. Makro içerdiği için kitabı .xlsm olarak kaydetmeyi unutmayın; .xlsx biçimi modülleri saklamaz.
- İlgili konular:
- Sub ve Function yordamları
- Public, Private ve Dim bildirimleri
- Option Explicit ve Option Compare deyimleri
- Class Module (Sınıf Modülü)
- ThisWorkbook ve Worksheet nesneleri ile olay yordamları
- UserForm nesnesi
- Geliştirici sekmesi, Visual Basic Düzenleyicisi ve makro güvenliği ayarları