VBA MsgBox, kullanıcıya basit bir mesaj göstermek için sıklıkla kullanılan basit bir açılır penceredir. MsgBox'ı iki şekilde kullanabiliriz:
- Kullanıcıya belirli bir eylem veya daha sonra ne yapması gerektiği hakkında bilgi vermek.
- Kullanıcıdan daha sonraki işlem için girdi almak istiyorsanız EVET, HAYIR veya İPTAL diyelim.
- VBA MsgBox, kullanıcılara mesajı göstermek ve aynı zamanda kullanıcılardan girdi almak için kullanılan bir açılır penceredir.
- VBA MsgBox, ihtiyaçlara göre mesajları, ikonları ve butonları özelleştirmemize olanak tanır.
- Değişkenin değerini mesaj kutusuna, mesaj kutusu değerini de değişkene atayabiliriz.
- VBA MsgBox, kullanıcıdan gelen yanıtı almamızı ve kullanıcının seçtiği seçeneğe göre ilerlememizi sağlar.
- vbDefaultButton kullanarak istediğimiz butonu varsayılan olarak vurgulayabiliriz.
Bir VBA MsgBox'ın Anatomisi
Anatomi bir bilim kelimesidir, ancak VBA mesaj kutusunun gövde yapısını açıklamak için bu kelimeyi kullanmamız gerekir.
VBA Mesaj Kutusunun yapısı aşağıdadır.

1. Başlık: Bu, mesaj kutusunun başlığını göstermek için kullanılır. Başlık, kullanıcının gereksinimine göre değiştirilebilir. Varsayılan olarak herhangi bir başlık vermediğimizden, bu örnekte uygulama adı, yani "Microsoft Excel" gösterilir.
2. İstem: Bu, kullanıcılara iletmemiz gereken mesajı görüntüleyen bölümdür. Mesajı gereksinimlerimize göre tasarlayabilir veya bazı veriler veya tablolar da gösterebiliriz.
3. Sembol: Bu, kullanıcılara iletmemiz gereken mesaja göre tasarlayabileceğimiz simgedir. Bu örnekte, Bilgi simgesini kullandık, bu şekilde kritik, önemli veya diğer birçok simge tasarlayabiliriz.
4. Düğme(ler): OK, aldığımız varsayılan düğmedir. OK düğmesine tıklarsak mesaj kutusu kaybolur . EVET veya HAYIR, İptal, Yoksay, Yeniden Dene vb. gibi kendi düğmelerimizi tasarlayabiliriz.
5. İptal Butonu: Bu ikona tıklayarak mesaj kutusunu kapatabiliriz.
VBA MsgBox Fonksiyonunun Sözdizimi
MsgBox'ın söz dizimi aşağıdaki gibidir –

İstem: Bu, MsgBox işlevinin zorunlu argümanıdır. Argümanda, son kullanıcılara iletmek istediğimiz mesajı tasarlayabiliriz. Mesaj kutusunun anatomisinde "Bugün nasılsınız?" verdiğimiz istemdir.
Mesajımızı 1024 karaktere kadar iletebiliriz. Bu argümanda değişkenlerin değerlerini de görüntüleyebiliriz ve ayrıca mesajı birden fazla satırda gösterebiliriz.
[Buttons]: Bu isteğe bağlı bir argümandır. Varsayılan olarak OK butonunu alacağız . Ancak OK & CANCEL , YES veya NO gibi butonlar tasarlayabiliriz , vb.
Bunun dışında Kritik , Bilgi ve Uyarı gibi mesaj simgelerini de görüntüleyebiliriz .
[Başlık]: Mesaj kutusuna vermemiz gereken başlığı tasarlayabiliriz. Mesaj kutusunun en üstünde başlığı alacağız. Bu isteğe bağlı bir argüman olduğundan, bu argümanı yoksayarsak varsayılan olarak uygulama adı Microsoft Excel'i alacağız.
[YardımDosyası]: Bu argümanı kullanarak kullanıcılar için yardım dosyasını belirtebiliriz. Bu, kullanıcının yardım düğmesine tıklayarak yardım dosyasını bulmasına yardımcı olacaktır. Bunu belirtirsek, [context] numarasını belirtmek zorunludur.
[Bağlam]: Bu sayısal bir ifadedir, yani ilgili yardım konusuna atanmış yardım bağlamı numarasıdır.
Not: [helpfile] ve [context] argümanlarını nadiren kullanırız , bu yüzden bunlar üzerinde çok durmayalım.
Mesaj kutusu fonksiyonunda sadece Prompt argümanı zorunludur, diğerleri zorunlu değildir.
Excel VBA MsgBox Düğme Sabitleri
Örnek 1 – Varsayılan Düğme Olarak Tamam
Öncelikle mesaj kutusunu sıfırdan tasarlayacağız.
Excel makrosuna bir isim vererek alt rutin prosedürünü başlatın .

MsgBox fonksiyonuna girin.

Mesaj kutusunun istem argümanı için mesajı çift tırnak içinde verin.

MsgBox fonksiyonunun diğer tüm argümanlarını yok sayarsak kod şu şekilde okunacaktır.
Kod:
Sub Mesaj_Kutusu()
MsgBox “Merhaba, Nasılsınız?”
End Sub
Bu kodu çalıştırdığımızda aşağıdaki mesaj kutusunu alacağız.

Gördüğümüz gibi varsayılan olarak OK butonunu aldık. MsgBox fonksiyonunun butonun argümanında vbOkOnly'yi de belirtebiliriz .
Örnek 2 – Tamam ve İPTAL Düğmesi
Mesaj kutusunda OK ve CANCEL butonlarını göstermek istiyorsak MsgBox fonksiyonunun Button argümanında vbOkCancel seçeneğini seçmemiz gerekiyor.

IntelliSense listesine ulaşmak için Ctrl + Space tuşlarına basın .

vbOKCancel seçeneğini seçtiğimizde aşağıdaki kod karşımıza çıkacak.
Sub Mesaj_Kutusu()
MsgBox “Merhaba, Nasılsınız?”, vbOKCancel
End Sub
Bu kodu çalıştırdığımızda aşağıdaki MsgBox'ı alacağız.

Örnek 3 – EVET veya HAYIR Düğmesi
Eğer EVET veya Hayır butonunu göstermek istiyorsak o zaman vbYesNo butonu seçeneğini seçmemiz gerekiyor.
Sub MsgBox_vbYESNO ()
MsgBox “Merhaba, Nasılsınız?”, vbYesNo
End Sub
Mesaj kutucuğuna aşağıdaki butonları alacağız.

Örnek 4 – EVET, HAYIR ve İPTAL Düğmesi
Evet, Hayır ve İptal butonlarını göstermek için vbYesNoCancel komutunu vermemiz gerekiyor.
Sub MsgBox_vbYESNOCANCEL ()
MsgBox “Merhaba, Nasılsınız?”, vbYesNoCancel
End Sub
Aşağıdaki mesaj kutusunu alacağız.

Örnek 5 – TEKRAR DENE ve İPTAL Düğmesi
Retry ve Cancel butonlarını göstermek için vbRetryCancel kullanmamız gerekiyor.
Sub MsgBox_vbRetryCancel ()
MsgBox “Merhaba, Nasılsınız?”, vbRetryCancel
End Sub
Aşağıdaki mesaj kutusunu alacağız.

Örnek #6 – ABORT, RETRY ve IGNORE Düğmeleri
Eğer Abort, Retry ve Ignore butonlarını göstermek istiyorsak vbAbortRetryIgnore'u kullanmamız gerekiyor.
Alt MsgBox_vbRetryCancel ()
MsgBox “Merhaba, Nasılsınız?”, vbRetryCancel
Alt Bitiş
Aşağıdaki mesaj kutusu görüntülenecektir.

Örnek 7 – Birden Fazla Düğmeyi Göster
Mesaj kutusunda birden fazla sabit buton gösterebiliriz. Örneğin, YES, NO'yu HELP butonuyla birlikte göstermek istiyorsak, aşağıdaki gibi bir kod yazmamız gerekir.
Sub MsgBox_vbRetryCancel()
MsgBox “Merhaba, Nasılsınız?”, vbYesNo + vbMsgBoxHelpButton
End Sub
Artı sembolünü ekleyerek iki adet sabit buton elde etmiş olduk.
Aşağıdaki mesaj kutusunu alacağız.

Bu şekilde artı işareti ekleyerek birden fazla buton gösterebiliriz.
Örnek 8 – Varsayılan Bir Düğme Ayarlama
Önceki tüm kodlara bakarsak, ilk butonun varsayılan buton olduğunu, yani ilk butonun vurgulandığını görüyoruz.
Örneğin aşağıdaki mesaj kutusuna bakın.

Önceki mesaj kutusunda, YES varsayılan düğmedir. Ancak, varsayılan düğmeyi 2 olarak ekleyerek bunu no olarak değiştirebiliriz.
Sub MsgBox_vbYESNO_Default ()
MsgBox “Merhaba, Nasılsınız?”, vbYesNo + vbDefaultButton2
End Sub
Yukarıdaki koda vbDefaultButton2 sabitini ekledik , yani mesaj kutusunun ikinci butonunu aşağıdaki gibi varsayılan yapacak.

Benzer şekilde, daha fazla butonumuz olduğunda, bunları varsayılan butonlar yapmak için varsayılan sabit 1, 2, 3 ve 4'ü kullanabiliriz.
Excel VBA MsgBox Simge Sabitleri
Örnek 1 – Bilgi Simgesini Göster
Düğmeleri göstermenin yanı sıra, ilettiğimiz mesajı belirtmek için simgeler de gösterebiliriz. Örneğin, kullanıcılara düğmelerle birlikte bilgi veriyorsak, vbInformation sabitini kullanmamız gerekir.
Sub MsgBox_vbInforamtion ()
MsgBox “Sonraki sayfaya yönlendirileceksiniz”, vbOKCancel + vbInformation
End Sub
Gördüğümüz gibi, OK ve Cancel butonlarına vbInformation sabitini ekledik . Aşağıdaki mesaj kutusunu alacağız.

Örnek 2 – Kritik Simge
Kritik ikonunu göstermek istiyorsak vbCritical sabitini kullanmamız gerekiyor.
Sub MsgBox_vbCritical()
MsgBox “Sonraki sayfaya yönlendirileceksiniz”, vbOKCancel + vbCritical
End Sub
Bu kritik simgesini gösterecektir.

Örnek 3 – Soru İşareti Simgesi
Soru işaretini simge olarak göstermek için vbQuestion sabitini kullanmamız gerekir .
Sub MsgBox_VbQuestion()
MsgBox “Devam etmek ister misiniz?”, vbYesNo + vbQuestion
End Sub
Bu soru işareti simgesini gösterecektir.

Örnek 4 – Ünlem Simgesi
Bir ünlem işaretini simge olarak göstermek için vbExclamation sabitini kullanmamız gerekir .
Sub MsgBox_vbExclamation()
MsgBox “Devam etmek ister misiniz?”, vbYesNo + vbExclamation
End Sub
Bu soru işareti simgesini gösterecektir.

MsgBox'ta Başlık ve İstemi Özelleştirme
VBA MsgBox varsayılan olarak herhangi bir başlık belirtmezsek uygulama adını Microsoft Excel olarak alır. Ancak, başlığı ihtiyaçlarımıza göre değiştirebiliriz.
Sub MsgBox_Title ()
MsgBox “Would you like to continue to the next stage?”, vbYesNo, “Stage 1 of 5”
End Sub
Bu, mesaj kutusunda başlığın aşağıdaki görüntüdeki gibi görüntülenmesini sağlayacaktır.

İki satır göster:
Mesajı birden fazla satırda göstermemiz gereken durumlar olabilir. Bunun için, vbNewLine'ı ve ampersand (&) sembolünü kullanarak iki satırlık mesajları birleştirmemiz gerekir.
Sub MsgBox_Title ()
MsgBox “Would you like to continue to the next stage?” & _
vbNewLine & “Press Yes to Proceed”, vbYesNo, “Stage 1 of 5”
End Sub
Aşağıdaki gibi bir mesaj gösterilecektir.

Mesajı ikinci satırda göstermek için ve (&) sembolünü kullandık ve ardından mesajı ikinci satıra itmek için vbNewLine'ı kullandık.
MsgBox Değerini Bir Değişkene Atama
Değişken değerini bir MsgBox'a atayabileceğimiz gibi, aynı zamanda mesaj kutusunun değerini de değişkene atayabiliriz.
Örneğin aşağıdaki koda bakın.
Sub MsgBox_Variable ()
Dim k As String
k = “Merhaba, Günaydın!!!”
MsgBox k
End Sub
Değişkeni string veri tipinde tanımladık.
Daha sonra değişkene Merhaba, Günaydın!!! değerini atadık.
Benzer şekilde MsgBox istemine k değişken adını girdik .
Artık MsgBox'ta k değişkenine verilen değer gösterilmelidir .

MsgBox Tarafından Verilen Değeri Değişkene Ata
Kullanıcıdan butonlar aracılığıyla seçenekleri seçmesi istendiğinde, kullanıcının girdisine göre belirli bir dizi eylem gerçekleştirebiliriz.
Örneğin, EVET'e tıkladıklarında A1 hücresine bir değer girmeleri için kullanıcıdan girdi almamız gerektiğini varsayalım, aksi takdirde herhangi bir değer girmemize gerek kalmayacak.
Aşağıdaki kod aynı şeyin gösterimidir.
Sub MsgBox_Variable_Input ()
Dim User_Input As String
User_Input = MsgBox(“A1 hücresine 'Merhaba' değerini girmek ister misiniz?”, vbYesNo)
Range(“A1”).Value = User_Input
End Sub
Burada User_Input değişkenini string veri tipinde tanımladık .
Daha sonra bu değişken için mesaj kutusunun verdiği değeri yani Evet veya Hayır değerini saklıyoruz.
Daha sonra değişken değerini A1 hücresine kaydediyoruz.
Bu kodu çalıştırdığımızda A1 hücresinde aşağıdaki sonucu alacağız.

EVET'e tıkladığımızda A1 hücresinde EVET değeri almamız gerekirken, bunun yerine 6 değerini aldık.
Bunun nedeni, vb sabitlerinin metin değerleri değil sayısal değerler döndürecek olmasıdır. Aşağıdaki tablo, döndürdükleri sabit ve sayısal değerleri göstermektedir.
| vb Sabit | Düğme Adı | Değer |
|---|---|---|
| vbOk | Tamam | 1 |
| vbCancel | İptal etmek | 2 |
| vbAbort | İptal etmek | 3 |
| vbYRetry | Tekrar dene | 4 |
| vbIgnore | Görmezden gelmek | 5 |
| vbYes | Evet | 6 |
| vbNo | HAYIR | 7 |
EVET'e tıkladığımızdan EVET yerine 6 değerini aldık.
Kullanıcı Girişine Dayalı Eylem Gerçekleştir: Aşağıdaki kod kullanıcıya A1 hücresine Hello değerini ne zaman girmesi gerektiğini soracaktır . Kullanıcıların isterlerse EVET'e, isterlerse HAYIR'a tıklamaları gerekmektedir .
Kullanıcının butondan yapacağı seçime göre A1 hücresine değer ekleme veya eklememe eylemini gerçekleştireceğiz.
Alt MsgBox_Variable_Input()
Dim User_Input As String
User_Input = MsgBox(“A1 hücresine 'Merhaba' değerini girmek ister misiniz?”, vbYesNo)
If User_Input = vbYes Then
Range(“A1”).Value = “Merhaba”
Else
MsgBox “Hayır veya iptal düğmesine tıkladınız”
End If
End Sub
Bu kodu çalıştırdığımızda aşağıdaki mesaj kutusunu alacağız.

EVET'e tıkladığımızda A1 hücresine Merhaba değerini alacağız .

HAYIR'a tıkladığımızda aşağıdaki mesaj kutusuyla karşılaşacağız.

Dikkat Edilmesi Gereken Önemli Noktalar
- MsgBox VBA'da bir fonksiyondur.
- VBA MsgBox'ta yalnızca Prompt argümanı zorunludur, diğerleri isteğe bağlı argümanlardır.
- Varsayılan olarak VBA MsgBox'ta OK sabit butonunu alacağız.
- MsgBox'a bir değer atadığımızda parantez içindeki değerleri vermemiz gerekiyor.
- Değişken veri tipi, mesaj kutusunun çıktısıyla aynı olmalıdır.
- İki veya daha fazla butonu, + sembolü ve hem butonları hem de ikonları birleştirerek birleştirebiliriz.
- VBA MsgBox butonları sonuç olarak sayısal değerler döndürecektir.
