Özellik ikonu

MsgBox

İndirme izni yok

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.

Söz dizimi​

MsgBox işlevinin tam söz dizimi şöyledir:
VBA
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
Dönüş değerini bir değişkene atayıp If ya da Select Case deyimiyle denetleyin.

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
İ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.

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.
ABC
1SabitTıklanan düğmeDeğer
2vbOKTamam1
3vbCancelİptal2
4vbAbortDurdur3
5vbRetryYinele4
6vbIgnoreYoksay5
7vbYesEvet6
8vbNoHayır7
Dönüş DeğerleriExcelDepo v1.0.0
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.

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.
ABC
1ÜrünŞehirTutar
2Buzdolabıİzmir18.500,00
3Çamaşır MakinesiAnkara14.250,00
4FırınBursa9.800,00
5Süpürgeİstanbul4.300,00
6ÜtüAdana1.750,00
Satış ListesiExcelDepo v1.0.0
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.

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.
ABCDE
1SenaryoDüğmelerSimgeVarsayılanButtons değeri
2Silme onayıEvet/HayırSoruİkinci düğme292
3Kayıt uyarısıTamam/İptalÜnlemBirinci düğme49
4Kritik hataEvet/Hayır/İptalKritikÜçüncü düğme531
5Bilgi iletisiTamamBilgiBirinci düğme64
6Bağlantı hatasıYinele/İptalKritikBirinci düğme21
Düğme BirleşimiExcelDepo v1.0.0
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.

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.
Örneklerdeki makroların tamamı indirilebilir Excel dosyasındadır (.xlsm). Dosyayı açtıktan sonra makroları etkinleştirin, ardından Alt + F11 ile Visual Basic Düzenleyicisi'nde kodları inceleyebilir ve Alt + F8 ile çalıştırabilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
11
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst