Önceden oluşturulmuş bir çalışma kitabını kapatma işleminin mesaj kutusundan gelen sonuca göre yapıldığı VBA kodu alternatifidir.
Option Explicit
'--------------------------------------------------
'Parametre Listesi
'uygulamayiKapat: Çalışma kitabı kapatıldıktan
'sonra Microsoft Excel uygulamasının da
'kapatılıp kapatılmayacağını belirlemeye yarıyor.
'--------------------------------------------------
Sub CalismaKitabiniMesajKutusuIleKapat(Optional uygulamayiKapat As Boolean = True)
'--------------------------------------------------
'Değişkenler
'--------------------------------------------------
Dim mesajMetni As String
Dim ayirmaMetni As String
Dim calismaKitabi As Workbook
Dim sonuc As Variant
'--------------------------------------------------
'Atamalar
'--------------------------------------------------
Set calismaKitabi = ActiveWorkbook
ayirmaMetni = Application.WorksheetFunction.Rept("-", 80)
mesajMetni = ayirmaMetni & vbCrLf _
& calismaKitabi.Name & vbCrLf & ayirmaMetni & vbCrLf & vbCrLf _
& "Dosya kapatılacak. Dosyanın kaydedilmesini istiyor musunuz?"
sonuc = MsgBox(mesajMetni, vbYesNoCancel, "Çıkış İşlemi")
Application.DisplayAlerts = False
'--------------------------------------------------
'Çalışma kitabını mesajla kapat.
'--------------------------------------------------
If (sonuc = vbYes) Then
ActiveWorkbook.Save
End If
'--------------------------------------------------
'Microsoft Excel uygulamasını kapat.
'--------------------------------------------------
If (sonuc = vbYes Or sonuc = vbNo) Then
If (uygulamayiKapat = False) Then
ActiveWorkbook.Close
Else
Application.Quit
End If
End If
End Sub
'--------------------------------------------------
'Parametresiz Kullanım Örneği
'--------------------------------------------------
Sub OrnekKullanim1()
CalismaKitabiniMesajKutusuIleKapat
End Sub
'--------------------------------------------------
'Parametreli Kullanım Örneği
'--------------------------------------------------
Sub OrnekKullanim2()
CalismaKitabiniMesajKutusuIleKapat "False"
End Sub
Option Explicit
'--------------------------------------------------
'Parametre Listesi
'uygulamayiKapat: Çalışma kitabı kapatıldıktan
'sonra Microsoft Excel uygulamasının da
'kapatılıp kapatılmayacağını belirlemeye yarıyor.
'
'Parametrenin öntanımlı bir değeri var. İstenirse
'parametreye değer vermeden de kullanım
'yapılabiliyor.
'--------------------------------------------------
Sub CalismaKitabiniMesajKutusuIleKapat(Optional uygulamayiKapat As Boolean = True)
'--------------------------------------------------
'Mesaj kutusunda gösterilecek metni
'bu değişkene atıyoruz.
'--------------------------------------------------
Dim mesajMetni As String
'--------------------------------------------------
'Mesaj metninin daha düzenli olabilmesini sağlamak
'için kullanılan bir değişken. Kod ile doğrudan
'bir alakası yok. Metin kalabalığını azaltmak
'amacıyla kullanılıyor.
'--------------------------------------------------
Dim ayirmaMetni As String
'--------------------------------------------------
'Kapatılacak çalışma kitabının atandığı değişken.
'--------------------------------------------------
Dim calismaKitabi As Workbook
'--------------------------------------------------
'Oluşturulacak mesaj kutusundan gelecek sonucun
'saklandığı değişken. Bu sonuca göre kapatma
'işlemi yapılacak.
'--------------------------------------------------
Dim sonuc As Variant
'--------------------------------------------------
'Kapatılacak çalışma kitabını değişkene ata.
'--------------------------------------------------
Set calismaKitabi = ActiveWorkbook
'--------------------------------------------------
'Mesaj kutusunda kullanılacak metni daha
'düzenli bir şekilde göstermek için metni tire
'karakterlerinden oluşan bir metin grubuyla
'ayıracağız.
'--------------------------------------------------
ayirmaMetni = Application.WorksheetFunction.Rept("-", 80)
'--------------------------------------------------
'Mesaj metnini oluştur ve değişkene aktar.
'--------------------------------------------------
mesajMetni = ayirmaMetni & vbCrLf _
& calismaKitabi.Name & vbCrLf & ayirmaMetni & vbCrLf & vbCrLf _
& "Dosya kapatılacak. Dosyanın kaydedilmesini istiyor musunuz?"
'--------------------------------------------------
'Mesaj kutusunu oluştur ve kullanıcının mesaj
'kutusundaki butonlardan birine tıklayarak
'oluşturacağı sayı değerini bir değişkene aktar.
'Burada "sonuc" isimli değişkene atama yapılıyor.
'--------------------------------------------------
sonuc = MsgBox(mesajMetni, vbYesNoCancel, "Çıkış İşlemi")
'--------------------------------------------------
'Microsoft Excel uygulaması tarafından
'çıkarılan uyarı pencerelerini gösterme.
'--------------------------------------------------
Application.DisplayAlerts = False
'--------------------------------------------------
'Çalışma kitabını mesajla kapat.
'--------------------------------------------------
If (sonuc = vbYes) Then
'--------------------------------------------------
'Eğer kayıt işlemine onay verilmişse
'çalışma kitabını kaydet.
'--------------------------------------------------
ActiveWorkbook.Save
End If
'--------------------------------------------------
'Yes, No ve Cancel (Evet, Hayır, İptal) olmak
'üzere üç butonlu olarak düzenlediğimiz mesaj
'kutusunda üç durum var:
'
'Yes Tuşu: Çalışma kitabını kaydet.
'No Tuşu: Çalışma kitabını kaydetme.
'Cancel Tuşu: Hiçbir şey yapma.
'
'Yes ve No tuşlarında çalışma kitabı kesin
'kapatılacak. Gel gelelim Cancel tuşunda
'bu işlemin olmaması lazım. Çünkü kodun
'bu kısmına gelindiğinde eğer bir kontrol
'yapılmazsa bütün tuşlar için Microsoft Excel
'uygulaması kapatılmaya çalışılıyor ve bu da
'istenmeyen durumlara sebebiyet verebiliyor.
'Bu sebepten dolayı Microsoft Excel uygulamasının
'kapatılması işlemini vbYes ve vbNo sonuçlarıyla
'sınırlayarak işlem yapıyoruz.
'--------------------------------------------------
If (sonuc = vbYes Or sonuc = vbNo) Then
'--------------------------------------------------
'Sub yordamın parametresinden gelen sonuca göre
'işlem yap. Eğer değer False ise uygulamayı
'kapatma, True ise kapat.
'--------------------------------------------------
If (uygulamayiKapat = False) Then
ActiveWorkbook.Close
Else
Application.Quit
End If
End If
End Sub
'--------------------------------------------------
'Parametresiz Kullanım Örneği
'--------------------------------------------------
Sub OrnekKullanim1()
CalismaKitabiniMesajKutusuIleKapat
End Sub
'--------------------------------------------------
'Parametreli Kullanım Örneği
'--------------------------------------------------
Sub OrnekKullanim2()
CalismaKitabiniMesajKutusuIleKapat "False"
End Sub