MsgBox Nedir, Nasıl Kullanılabilir ?

Makro, formül vb.. şekilde bazı örneklerin paylaşılabileceği alan
Cevapla
Kullanıcı avatarı
ExcelVBA
Site Admin
Mesajlar: 10
Kayıt: Sal Haz 20, 2023 6:12 pm
Lokasyon: İstanbul
Web Sitesi: https://www.excelvba.net
Meslek: Yönetim Kurulu Başkanı (Özel Sektör)
Adınız:
Soyadınız:

MsgBox Nedir, Nasıl Kullanılabilir ?

Mesaj gönderen ExcelVBA »

Belki çoğu kullanıcı MsgBox işte daha ne olacak, bir mesaj verdiririz olur biter şeklinde bir yorum yapıyor olabilir. Biz bu nesne ile nelerin yapılabileceklerinin örneklerini verelim, belki bu tarz düşünenlere farklı ufuklar açmış oluruz. ;;_)

Msgbox bir uyarı, yönlendirme kutucuğudur. Üzerine yazılabilen mesajlar doğrultusunda kullanıcıyı işlemler sırasında ikaz etmek yahut yönlendirmek amacı ile kullanılabilir. Herhangi bir hata üretildiğinde kullanıcıyı hata konusunda uyarabilirsiniz. Koşulun durumuna bağlı olarak kullanıcıyı yeni yapılacak işlemler doğrultusunda seçenekler sunarak yönlendirebilirsiniz.

MsgBox Nesnesine ExcelVBA.Net ile Genel Bir Bakış

MsgBox VBA nesnesidir.

Kod blokları içerisinde :
VBA.Interaction.Msgbox ("1 - Verilecek mesaj", 2 - MsgBox Üzerinde Görüntülenmek İstenen Mesaj Kutusu Stilleri , "3 - Mesaj Kutusu Başlığı" , 4 - Yardım Dosyası, 5 - Yardım Dosya id numarası) şeklinde yapılanmıştır.

VBA uygulamalarında biz onu çoğunlukla ve kısaca ;
MsgBox "Mesajımız", Mesaj Kutusu Stili , "Mesaj Başlığımız" şeklinde kullanırız.

Şimdi açılımlarını inceleyelim.
1 - Yazılmak istenen mesaj:
Bu kısma kullanıcıyı yönlendirecek ya da uyaracak bir mesaj yazılabilir. Kullanıcı bu
mesaja göre ne yapacağını anlar. Opsiyonel değildir, MsgBox ifadesinden sonra kesinlikle bu birincil alana mesaj yazılmalıdır. Mesaj verilmek istenmiyorsa Msgbox "" ya da MsgBox empty ile mesajsız bir kutu gelmesi sağlanabilir. Ancak MsgBox kutusunun görüntülenmesinin bir esprisi kalmaz. Belki sadece mesaj kutusuna başlık ile ikaz etmek isteyen kullanıcılar olabilir, onların düşüncelerine yararlı olabilir. Fakat pek tasvif etmediğimiz bir durumdur. Yine de tercihe dayalıdır.
2 - Mesaj kutusu stilleri:
Kullanıcıyı mesajımız ile uyardığımızda ona seçenekler sunmamızı, ya da mesaj ile verilmek istenen ikaz türünün önem derecesini belli etmek için mesaj kutusunu şekillendirmemizi sağlar. Opsiyoneldir.

vbAbortRetryIgnore
Mesaj kutusu üzerinde Durdur , Yeniden Dene , Yoksay gibi üç buton çıkmasını sağlarız.
vbCritical
Mesaj kutusu üzerinde varsayılan bir Tamam butonu ile yanında ikaz durumunun kritikliğini ifade edebilmek için kırmızı bir çarpı işareti görünmesini sağlarız. En çok kullanılanlardan biridir.
vbExclamation
Mesaj kutusu üzerinde varsayılan bir Tamam butonu ile sarı bir üçgen - trafik işaretine benzer- icon ile ünlem işaret çıkmasını sağlarız. En çok kullanılanlardan biridir.
vbInformation
Mesaj kutusu üzerinden varsayılan bir Tamam butonu ile bir İ harf iconu ( information ) çıkmasını yani kullanıcıya oluşan durumun normal olduğunu, işlemin başarı ile geliştiğini iletmeyi sağlayabiliriz. En çok kullanılanlardan biridir.
vbMsgBoxRight
Mesaj kutusu üzerindeki mesajımızı sağa dayalı olarak gösterilmesini sağlarız.
vbMsgBoxRtlReading
Mesaj kutusunun üzerindeki kapat işaretinin ters tarafta( solda) çıkmasını sağlar. Görünen yüzü standart bir mesaj kutusunun dışında daha içe basık farklı bir biçimdedir.
vbMsgBoxHelpButton
Mesaj kutusu üzerinde Tamam ve Yardım adlarında iki buton görünmesini sağlarız.
vbOKCancel
Mesaj kutusu üzerinde Tamam ve İptal adlarında iki buton görünmesini sağlarız.
vbOKOnly
Mesaj kutusu üzerinde varsayılan bir Tamam tuşu görüntülemeyi sağlar. Bu ifade kullanılmadığında da mesaj kutusunun varsayılanı olarak bu tip otomatik kullanılır.
vbQuestion
mesaj kutusu üzerinden varsayılan bir Tamam tuşu çıkar ve yanında bir soru işareti iconu görüntülemeyi sağlarız. En çok kullanılanlardan biridir.
vbRetryCancel
Mesaj kutusu üzerinde Yeniden Dene ve İptal adlarında iki buton görüntülemeyi sağlarız.
vbSystemModal
Mesaj kutusu başlık satırını standart bir VB form nesnesine benzetmek için kullanılır. İstenirse mesaj kutusu başlık çubuğuna icon adapte edilebilir.
vbYesNo
Mesaj kutusu üzerinde Evet ve Hayır adlarında iki buton görüntülemeyi sağlarız. En çok kullanılanlardan biridir.
vbYesNoCancel
Mesaj kutusu üzerinde Evet Hayıt ve İptal adlarına üç buton görüntülememizi sağlar.

3 - Mesaj Kutusu Başlığı
Kullanıcıya gönderilen mesaj kutusunun başlık satırına konu ile alakalı bir başlık yazmamıza olanak veren bölüm özelliği. Opsiyoneldir.

4 - 5 Yardım Dosyası ve İçerik İd Nosu
Bu iki özellik bir arada kullanılması gerektiğinden tek başlıkta yazıyorum. Mesaj kutusu üzerinde görüntülenebilecek bir Yardım butonu ile bu özellikler kullanılabilir.
Oluşan bir hata karşısında kullanıcıya geniş kapsamlı bir yardım dosyası sunmak isteyenler için güzel bir özelliktir.
Aşağıdaki şekilde kullanılması için tanımlanabilir :

Kod: Tümünü seç

MsgBox "İşleminiz tamamlanamadı", vbMsgBoxHelpButton, "Uyarı !", "winhlp32.hlp",0
Bu kod parçasındaki izahatı şöyle yapabiliriz :- MsgBox ifadesi başlattığımıza göre bir mesaj kutusu görünecek.
- Mesaj kutusu içerisinde İşleminiz tamamlanamadı şeklinde bir uyarı mesajı yazacak.
- Görüntülenecek buton iki adet biri Tamam biri Yardım olacak.
- Kullanıcı yardım almak ister ise, winhlp32 yardım dosyasının 0 nolu indexi açılacak. İndex ile ilgili ayrıntıyı burada vermeyeceğiz. İndex içeriği yardım dosyası hazırlama aşamasında belirlenen bir id no ile olur.

Buralara kadar izahatlarımızı teorik olarak anlayabildiyseniz, şimdi biraz pratik yapalım. Verdiğimiz örneklere uygun bir kaç kod örneği ile işlemler yapalım.

Kod: Tümünü seç

Sub Mesaj()
MsgBox "Excel Versiyonunuz : " & Application.Version, vbInformation, "Bilgi"
End Sub
Excel versiyonumuzu sorgulayalım.

Kod: Tümünü seç

Sub mesaj1()
ver = Application.Version
MsgBox "Versiyonunuz numaranız : " & ver, vbInformation, "Bilgi Mesajıdır"
End Sub
Şimdi versiyonumuzun Excel 2007 olup olmadığını test edelim.
2007 ise işlemi yapmaya izinli olalım, değilse olmayalım.

Kod: Tümünü seç

Sub mesaj2()
ver = Application.Version
If ver = "11.0" Then
MsgBox "Bu işlem için versiyonunuz uygun değil", vbCritical, "Uyarı"
Else
MsgBox "İşlemi yapabilirsiniz.", vbInformation, "Bilgilendirme"
End If
End Sub
Bu örnek kodlama önemlidir.
VBA uygulamalarında çokça kullanılır. Lüfen iyi analiz ediniz.
Şimdi versiyonumuzun Excel 2007 olması durumunda gelişecek olayları belirleyelim
+ birleşimi ile birden fazla mesaj kutusu tipi tanımlayabiliyoruz.

Kod: Tümünü seç

Sub mesaj3()
'**********************************
'******** www.ExcelVBA.Net ********
'********   Tarkan VURAL   ********
'********    17-11-2008    ********
'**********************************
ver = Application.Version
If ver = "11.0" Then
    If MsgBox("Versiyon uygun değil, yine de devam edilsin mi?", vbQuestion + vbYesNo) = vbYes Then
        'devam eden işlemlerinize uygun kodlamalar, biz mesaj verdirelim , anlaşılır olsun
        MsgBox "devam edildi"
    Else
        'vbno seçildiyse( hayır seçildiyse )
        Exit Sub
    End If
End If
End Sub
Çok satırlı mesaj verdirebiliriz.
Alt satıra geçmek için bir çok karakter ve komut kullanabiliriz.
vbnewline , vbcr , vbcrlf, chr(13), chr(10)
+ birleşimi ile bilgi mesaj iconuna ilave içe basık mesaj kutusu modeli tipi de ekledik.

Kod: Tümünü seç

Sub mesaj4()
MsgBox "Mesajımızın ilk satırı" & vbNewLine & _
    "Mesajımızın ikinci satırı" & vbCr & _
    "Mesajımızın üçüncü satırı" & vbCrLf & _
    "Mesajımızın dördüncü satırı" & Chr(13) & _
    "Mesajımızın beşinci satırı" & Chr(10), vbInformation + vbMsgBoxRtlReading, "Satır satır mesaj yazdıralım"
End Sub
Bu örnek de oldukça önemlidir. Lütfen notlarınıza alınız.
Üç butonlu bir modelde ( Evet, Hayır ve İptal ) her butonun görevlerini ayrı ayrı belirleyebiliriz.

Öncelikle değişken belirleyelim ve değişkenlerimizin tiplerini tanımlayalım

Kod: Tümünü seç

Sub mesaj5()
'**********************************
'******** www.ExcelVBA.Net ********
'********   Tarkan VURAL   ********
'********    17-11-2008    ********
'**********************************

Dim Mesaj As String
Dim Stil As VbMsgBoxStyle
Dim Baslik As String
Dim Cevap As VbMsgBoxResult
Dim yardim As String

'yardım dosyası için internetteki bir adrese de başvuru yaptırabiliriz
yardim = "http://www.excelvba.net"
'yardım butonu da ekleyelim, tam olsun :))
Stil = vbYesNoCancel + vbInformation + vbMsgBoxHelpButton
Baslik = "Bu mesajın başlık kısmıdır"
Mesaj = "Ne yazacağımı açıkçası bulamadım"
Mesaj = Mesaj & vbCr & "Bu şekilde idare edersiniz artık"
Mesaj = Mesaj & vbCr & vbCr & vbCr & "Evet : İdare edebiliriz "
Mesaj = Mesaj & vbCr & "Hayır : İdare edemeyiz "
Mesaj = Mesaj & vbCr & "İptal : Karar veremedim, sen en iyisi bu mesajı kapat" & vbCr & vbCr
Cevap = MsgBox(Mesaj, Stil, Baslik, yardim, 0)
' bunu if cevap = vbYes then gibi sorgulamalarla da yapabiliriz, ben case yolunu örnekliyorum
Select Case Cevap
    Case Is = vbYes
        'evet seçilmesi durumunda çalışacak kodlarınızı bu alana yazabilirsiniz.
        MsgBox "evet seçimi yapıldı"
    Case Is = vbNo
        'hayır seçilmesi durumunda çalışacak kodlarınızı bu alana yazabilirsiniz.
        MsgBox "hayır seçimi yapıldı"
    Case Is = vbCancel
    'iptal seçilmesi durumunda , yada mesaj kutusu çarpıdan kapatıldğı durumda
    'çalışacak kodlarınızı bu alana yazabilirsiniz.
        MsgBox "iptal seçimi yapıldı"
End Select
End Sub
Bu kodlama da farklı bir bakış açısından başka bir örnek.

Kod: Tümünü seç

Sub mesaj6()
'**********************************
'******** www.ExcelVBA.Net ********
'********   Tarkan VURAL   ********
'********    17-11-2008    ********
'**********************************
i = 1: a = 1
10 i = InputBox("Lütfen şifreyi giriniz", "Şifre Girişi")
If i <> 1 Then
    If a <> 3 Then
        MsgBox "Hatalı giriş" & vbNewLine & "Lütfen şifrenizi giriniz", vbCritical, "Tanımsız Kullanıcı"
            a = a + 1
                GoTo 10
    Else
        MsgBox "3 kez şifre giriş denemesi başarısız olmuştur." & vbCr & _
            "Bu programı kullanma yetkiniz yoktur.", vbExclamation, "Program Kapatılacak"
    '3 kez hatalı şifre girişinde programınızdan çıkılmasını sağlayabilirsiniz
    'yanlış olma durumunda istediğiniz kodlamayı buraya yazabilirsiniz.
        End
    End If
Else
    MsgBox "Şifreyi doğru girdiniz, şimdi programınız açılacaktır." _
        , vbInformation, "Başarılı Giriş Gerçekleşti"
    'doğru girişte, devam eden işlemleriniz için gerekli kodlamayı buraya yazabilirsiniz.
End If
End Sub
Kullanıcı avatarı
ExcelVBA
Site Admin
Mesajlar: 10
Kayıt: Sal Haz 20, 2023 6:12 pm
Lokasyon: İstanbul
Web Sitesi: https://www.excelvba.net
Meslek: Yönetim Kurulu Başkanı (Özel Sektör)
Adınız:
Soyadınız:

Re: MsgBox Nedir, Nasıl Kullanılabilir ?

Mesaj gönderen ExcelVBA »

MsgBox Düğmelerini Özelleştirme

Kod: Tümünü seç

Option Explicit

' Import
Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long

Private Declare Function SetDlgItemText Lib "user32" _
Alias "SetDlgItemTextA" _
(ByVal hDlg As Long, _
ByVal nIDDlgItem As Long, _
ByVal lpString As String) As Long

Private Declare Function SetWindowsHookEx Lib "user32" _
Alias "SetWindowsHookExA" _
(ByVal idHook As Long, _
ByVal lpfn As Long, _
ByVal hmod As Long, _
ByVal dwThreadId As Long) As Long

Private Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long

' Handle to the Hook procedure
Private hHook As Long

' Hook type
Private Const WH_CBT = 5
Private Const HCBT_ACTIVATE = 5

' Constants
Public Const IDOK = 1
Public Const IDCANCEL = 2
Public Const IDABORT = 3
Public Const IDRETRY = 4
Public Const IDIGNORE = 5
Public Const IDYES = 6
Public Const IDNO = 7

Public Sub MsgBoxSmile()
' Set Hook
hHook = SetWindowsHookEx(WH_CBT, AddressOf MsgBoxHookProc, 0, GetCurrentThreadId)

' Run MessageBox
'MsgBox "Smiling Message Box", vbYesNo, "Message Box Hooking"

If MsgBox("Seç bakalım?", vbQuestion + vbYesNo, "Özel düğmeli mesaj kutusu") = vbNo Then
MsgBox " :-( tıklandı."
Else
MsgBox " :-) tıklandı."
End If
End Sub

Private Function MsgBoxHookProc(ByVal lMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long

If lMsg = HCBT_ACTIVATE Then
SetDlgItemText wParam, IDYES, ":-)"
SetDlgItemText wParam, IDNO, ":-("

' Release the Hook
UnhookWindowsHookEx hHook
End If

MsgBoxHookProc = False
End Function
Cevapla