Genel Bakış
MsgBox (İleti Kutusu), VBA'da kullanıcıya bir ileti göstermek ve gerekirse Evet, Hayır, Tamam, İptal gibi düğmelerle onay almak için kullanılan işlevdir. Kutu kapatılana kadar makro bekler; işlev tıklanan düğmeyi sayısal bir değerle döndürür, böylece makronun akışını kullanıcının yanıtına göre yönlendirebilirsiniz.
İsimli bağımsız değişkenler de kullanılabilir; örneğin Prompt:=, Buttons:= ve Title:= yazarak sırayı karıştırmadan değer verebilirsiniz.
Makro çalışınca Tamam için 1, Evet için 6, Hayır için 7 değeri yazılır. Kodunuzda 1, 6 ya da 7 gibi sayılar yerine bu sabitleri kullanırsanız kodun okunması çok kolaylaşır.
Makro çalıştırıldığında önce Evet ve Hayır düğmeli, soru simgeli bir onay kutusu açılır. Varsayılan düğme Hayır olduğundan Enter tuşu veriyi silmez. Evet seçilirse veriler temizlenir ve bilgi kutusu görünür; Hayır seçilirse veriler korunur ve iptal iletisi gösterilir. Bu kutuda İptal düğmesi bulunmadığından pencere kapatma düğmesi etkisizdir; kutu yalnız Evet ya da Hayır ile kapanır. Bu örnekte kutu açıldığı için sonuç sayfada otomatik gösterilmemiştir.
Silme onayı için 292, kayıt uyarısı için 49, kritik hata için 531 değeri bulunur. Bu sayıları doğrudan yazmak yerine sabitlerin toplamını kullanmak, hangi düğme, simge ve varsayılanın seçildiğini koddan okunur kılar.
Söz dizimi
MsgBox işlevinin tam söz dizimi şöyledir:MsgBox(Prompt, [Buttons], [Title], [HelpFile], [Context]) As VbMsgBoxResult
- Prompt: Kutuda görünecek ileti metnidir; zorunludur. Yaklaşık 1024 karakterle sınırlıdır. Satır atlamak için vbCrLf (ya da vbNewLine), sekme boşluğu için vbTab kullanılır.
- Buttons: Düğme, simge, varsayılan düğme ve kutu davranışını belirleyen sayısal ifadedir; isteğe bağlıdır, varsayılanı vbOKOnly (0) değeridir. Birden çok sabit + işaretiyle toplanır.
- Title: Başlık çubuğundaki metindir; isteğe bağlıdır. Verilmezse uygulama adı (Microsoft Excel) görünür.
- HelpFile: Kutuya bağlanacak yardım dosyasının adıdır; isteğe bağlıdır. Belirtilmişse Context de verilmelidir.
- Context: Yardım dosyasındaki konunun numarasıdır; isteğe bağlıdır ve HelpFile ile birlikte kullanılır.
Düğme ve simge sabitleri
Buttons bağımsız değişkeninde gruplardan birer sabit seçip toplayabilirsiniz:- Düğme grubu: vbOKOnly (0) yalnız Tamam; vbOKCancel (1) Tamam ve İptal; vbAbortRetryIgnore (2) Durdur, Yinele, Yoksay; vbYesNoCancel (3) Evet, Hayır, İptal; vbYesNo (4) Evet ve Hayır; vbRetryCancel (5) Yinele ve İptal.
- Simge grubu: vbCritical (16) kritik hata; vbQuestion (32) soru işareti; vbExclamation (48) uyarı ünlemi; vbInformation (64) bilgi simgesi.
- Varsayılan düğme: vbDefaultButton1 (0) birinci, vbDefaultButton2 (256) ikinci, vbDefaultButton3 (512) üçüncü, vbDefaultButton4 (768) dördüncü düğme.
- Kipler: vbApplicationModal (0) yalnız Excel uygulamasını kilitler; vbSystemModal (4096) kutu kapanana kadar tüm uygulamaları bekletir.
- Ek seçenekler: vbMsgBoxHelpButton (16384) Yardım düğmesi ekler; vbMsgBoxSetForeground (65536) kutuyu ön plana getirir; vbMsgBoxRight (524288) metni sağa yaslar; vbMsgBoxRtlReading (1048576) metni sağdan sola okuma düzeninde gösterir.
Dönüş değeri
MsgBox, kullanıcının tıkladığı düğmeye göre aşağıdaki sabitlerden birini döndürür:- vbOK (1): Tamam düğmesi
- vbCancel (2): İptal düğmesi; Esc tuşuna basılması ve pencere kapatma düğmesi de bu değeri verir
- vbAbort (3): Durdur düğmesi
- vbRetry (4): Yinele düğmesi
- vbIgnore (5): Yoksay düğmesi
- vbYes (6): Evet düğmesi
- vbNo (7): Hayır düğmesi
Parantezli ve parantezsiz kullanım
Yalnız ileti göstermek istiyorsanız parantez kullanmadan yazabilirsiniz. Dönüş değerini bir değişkene atayacak ya da koşulda kullanacaksanız bağımsız değişkenleri mutlaka parantez içine almanız gerekir:
VBA
5 satır
MsgBox "İşlem tamamlandı", vbInformation, "Bilgi"
yanit = MsgBox("Devam edilsin mi?", vbYesNo + vbQuestion, "Onay")
If MsgBox("Kaydedilsin mi?", vbYesNo) = vbYes Then
' Evet seçildi
End If
1. Dönüş değeri sabitlerinin sayısal karşılıkları
Aşağıdaki sayfada MsgBox işlevinin döndürebileceği sabitler listelenmiştir. Makro, her sabitin sayısal değerini C sütununa yazar. Kodu standart bir modüle yapıştırın ve çalıştırın.
VBA
15 satır
Option Explicit
Sub DonusDegerleriniYaz()
Dim ws As Worksheet
Set ws = ActiveSheet
' Her sabitin sayısal değerini C sütununa yazar
ws.Range("C2").Value = vbOK
ws.Range("C3").Value = vbCancel
ws.Range("C4").Value = vbAbort
ws.Range("C5").Value = vbRetry
ws.Range("C6").Value = vbIgnore
ws.Range("C7").Value = vbYes
ws.Range("C8").Value = vbNo
End Sub
MsgBox
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Sabit | Tıklanan düğme | Değer |
| 2 | vbOK | Tamam | 1 |
| 3 | vbCancel | İptal | 2 |
| 4 | vbAbort | Durdur | 3 |
| 5 | vbRetry | Yinele | 4 |
| 6 | vbIgnore | Yoksay | 5 |
| 7 | vbYes | Evet | 6 |
| 8 | vbNo | Hayır | 7 |
Dönüş DeğerleriExcelDepo v1.0.0
2. Evet ve Hayır ile onay alma
Bu örnekte kullanıcıya, A2:C6 aralığındaki satış verilerinin silinip silinmeyeceği sorulur. Kodu standart bir modüle yapıştırın. Varsayılan düğme Hayır olduğundan Enter tuşuna yanlışlıkla basılırsa veri silinmez.
VBA
19 satır
Option Explicit
Sub VerileriTemizle()
Dim yanit As VbMsgBoxResult
Dim ws As Worksheet
Set ws = ActiveSheet
' Satır atlamak için vbCrLf kullanılır
yanit = MsgBox("A2:C6 aralığındaki veriler silinecek." & vbCrLf & _
"Devam etmek istiyor musunuz?", _
vbYesNo + vbQuestion + vbDefaultButton2, "Verileri Temizle")
If yanit = vbYes Then
ws.Range("A2:C6").ClearContents
MsgBox "Veriler temizlendi.", vbInformation, "Bilgi"
Else
MsgBox "İşlem iptal edildi.", vbExclamation, "Bilgi"
End If
End Sub
MsgBox
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Ürün | Şehir | Tutar |
| 2 | Buzdolabı | İzmir | 18.500,00 |
| 3 | Çamaşır Makinesi | Ankara | 14.250,00 |
| 4 | Fırın | Bursa | 9.800,00 |
| 5 | Süpürge | İstanbul | 4.300,00 |
| 6 | Ütü | Adana | 1.750,00 |
Satış ListesiExcelDepo v1.0.0
3. Buttons değerini sabitlerle oluşturma
Her senaryoda düğme, simge ve varsayılan düğme sabitleri toplanarak tek bir Buttons değeri elde edilir. Makro bu toplamları E sütununa yazar. Kodu standart bir modüle yapıştırın.
VBA
17 satır
Option Explicit
Sub ButtonsDegeriniHesapla()
Dim ws As Worksheet
Set ws = ActiveSheet
' Silme onayı: Evet/Hayır + Soru + İkinci düğme
ws.Range("E2").Value = vbYesNo + vbQuestion + vbDefaultButton2
' Kayıt uyarısı: Tamam/İptal + Ünlem
ws.Range("E3").Value = vbOKCancel + vbExclamation
' Kritik hata: Evet/Hayır/İptal + Kritik + Üçüncü düğme
ws.Range("E4").Value = vbYesNoCancel + vbCritical + vbDefaultButton3
' Bilgi iletisi: yalnız Tamam + Bilgi
ws.Range("E5").Value = vbOKOnly + vbInformation
' Bağlantı hatası: Yinele/İptal + Kritik
ws.Range("E6").Value = vbRetryCancel + vbCritical
End Sub
MsgBox
Formülünü incelemek için bir hücre seçin.| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Senaryo | Düğmeler | Simge | Varsayılan | Buttons değeri |
| 2 | Silme onayı | Evet/Hayır | Soru | İkinci düğme | 292 |
| 3 | Kayıt uyarısı | Tamam/İptal | Ünlem | Birinci düğme | 49 |
| 4 | Kritik hata | Evet/Hayır/İptal | Kritik | Üçüncü düğme | 531 |
| 5 | Bilgi iletisi | Tamam | Bilgi | Birinci düğme | 64 |
| 6 | Bağlantı hatası | Yinele/İptal | Kritik | Birinci düğme | 21 |
Düğme BirleşimiExcelDepo v1.0.0
Kullanırken dikkat edin
- Parantez kuralı: Dönüş değerini kullanacaksanız bağımsız değişkenleri parantez içine alın. Parantezsiz yazılan bir satırda sonucu değişkene atamaya çalışırsanız derleme hatası alırsınız.
- Makro kutu kapanana kadar durur: MsgBox gösterildiği sürece kod bekler. Kullanıcı yokken çalışan ya da zamanlanmış makrolarda ileti kutusu kullanırsanız makro sonsuza dek bekleyebilir. Toplu işlemlerde her satır için kutu açmak yerine tek özet ileti göstermeyi tercih edin.
- Uzun metin ve satır atlama: İleti metni yaklaşık 1024 karakterle sınırlıdır; fazlası kesilir. Satır atlamak için metne vbCrLf ekleyin. Çok uzun ya da tablo benzeri çıktılar için UserForm kullanmak daha uygundur.
- Sabit ile sayıyı karıştırmayın: Aynı gruptan iki sabiti toplamayın; örneğin vbYesNo ile vbOKCancel toplanırsa beklenmeyen bir düğme kümesi çıkar. Her gruptan (düğme, simge, varsayılan düğme, kip) en fazla bir sabit seçin.
- İptal ve Esc davranışı: Kutuda İptal düğmesi yoksa ve yalnız Tamam varsa Esc tuşu Tamam gibi davranır. Evet ve Hayır düğmeli bir kutuda ise pencere kapatma düğmesi etkisizdir; İptal düğmesi bulunan kutularda Esc, İptal anlamına gelir.
- İsteğe bağlı bağımsız değişkenler: Başlığı atlamak için Title parametresini boş bırakırsanız Excel varsayılan olarak uygulama adını gösterir. Her kutuya anlamlı bir başlık yazmak kullanıcının hangi işlemden söz edildiğini anlamasını kolaylaştırır.
- İlgili konular: InputBox işlevi, Application.InputBox yöntemi, UserForm nesnesi, Debug.Print deyimi, Application.DisplayAlerts özelliği, Application.StatusBar özelliği, Select Case deyimi, If...Then...Else deyimi, EĞER işlevi, BİRLEŞTİR işlevi.