MESAJ KUTUSU
&
MESSAGE BOXES

İÇİNDEKİLER

1 - Mesaj Kutusu/MsgBox Nedir?

    Mesaj kutusu, excelde makro yazmaya tam olarak başladığımı hissettiren konu olmuştu benim için. Daha önceden genellikle uyarı şeklinde karşımza çıkan mesaj kutularının içerisine istediğim her şeyi yazdırabiliyor olmak daha önceden excelde deneyimlediğim bir şey değildi. Belki de excelde yeni bir şey yapabiliyor olmak mesaj kutuları konusunu, makroların elle tutulur şekli olarak düşünmemi sağladı.

    Mesaj kutusu, aslında adından da çıkarım yapacağınız ve daha önce de bir çok kez karşılaştığınız şekliyle, bizlere bazı uyarılar veren, bazen emin olup olmadığımızı sorgulayan veya excel için seçim yapmamızı sağlayan bir araç, ekranda açılan bir penceredir. 

Mesaj Kutusu Penceresi

 

    Örnekte de gördüğünüz gibi mesaj kutusu üzerindeki bütün yazıları ve sembolleri özelleştirebiliyoruz. Bu arada bu mesaj kutusu açıldığı zaman, biz bir seçeneğe tıklayana kadar veya pencereyi kapatana kadar excel başka bir işlem yapmamıza izin vermez.   

    Şimdi örneklerle mesaj kutusu konusunu işleyelim.

 

2 - Mesaj Kutusu ve Seçenekleri(Optional Arguments)

    Mesaj kutusunu makro kodumuz içerisinde nasıl etkinleştireceğimizi ve isteğe bağlı seçenekleri inceleyelim.

Mesaj Kutusu Basit Kod

Bu gördüğünüz kod ile mesaj kutusunu etkinleştiriyoruz. Ancak yukarıda gördüğünüz üzere zorunlu bir adet alan var. Bu alan prompt yani vermek istediğimiz mesajın ne olduğudur. Gördüğünüz gibi parantez içerisinde koyu renkle yazılmıştır ve bu yazım şekli, prompt’un zorunlu olduğunu bize anlatır. Şimdi prompt’u dolduralım ve mesaj kutusu üzerindeki etkisini görelim.

Mesaj Kutusu Selamlama    

Mesaj kutusunun prompt kısmı bir mesaj olduğu için her zaman prompt yerine yazacağımız şeyleri string fromatında yani tırnak içerisinde yazaraız. Gördüğünüz gibi mesaj kutusunun kullanımı çok basit. Şimdi isteğe bağlı olan seçeneklerin ne olduklarını öğrenelim.

prompt:                                                                                                                                                                                                                                                                       Verilmek istenen mesajdır. Uyarı olabilir, bir bilgi olabilir, saat ve tarih olabilir. Herhangi bir sayfadaki bir hücrenin değeri olabilir. Prompt en fazla 1024 karakterden oluşabilir. Tabi karakter sayısı bu kadar uzarsa mesajın, mesaj kutusu içerisine sığdırılması işini VBA Editor kendi istediği yerden alt satıra geçerek gerçekleştirir. Eğer belirli yerlerde alt satıra geçmeyi istersek bu işlemi de çok basit bir şekilde gerçekleştirebiliyoruz. Sonraki bölümde bu konu üzerinde detaylı bir şekilde duracağız.

Buttons:

İsteğe bağlıdır. Bu düğmeler seçenek ile mesaj kutusu üzerine farklı düğmeler ve uyarı sembolleri ekleyebiliriz. 

Mesaj Kutusu Tuş ve İşaret Ekleme

 Yukarıdaki örnekte de görüldüğü gibi hem “PROMPT” önüne yazılan mesajın türünü veya içeriğini tanımlayan semboller yerleştirebilirsiniz hem de farklı tuş kombinasyonlarını seçebilirsiniz. Buraya değer vermeden boş geçerseniz ise aşağıdaki gibi default mesaj kutusu oluşturmuş olursunuz.

Eğer MsgBox üzerine tıklayıp yardım tuşuna basarsanız(F1) bütün tuşları ve işlemlerini görebilirsiniz. Aşağıda gördüğünüz bütün tuşlar ve sembolleri tek tek deneyerek mesaj penceresi üzerinde yarattıkları farkları görebilirsiniz.

Mesaj Kutusu Tuşlar Listesi

 

Gördüğünüz gibi ne information anlamına gelen mavi daire içerisindeki ‘i’ ne de bize seçme şansı veren ‘Yes-No-Cancel’ tuş kombinasyonu mesaj kutusu üzerindedir.

 Title:

Açılan mesaj kutusunun başlığıdır. 

Sub Ders_7_MsgBox_Buttons()

                       MsgBox “www.macronimbus.com web sitesi açıldı”, vbInformation + vbYesNoCancel, “Ders 7 Mesaj Kutuları”

End Sub

 

Eğer açılan mesaj kutusunun bir başlığı olmasını istersek “TITLE” argument’ini kullanıyoruz.

 

HelpFile ve Context:

    Bu iki argument birbirine bağlıdır.  helpfil, Dialog kutusunda context’e bağlı yardım dosyasını bulmak amacıyla tanımlanan ifadedir. Context ise uygun yardım başlığına yazar tarafından atanmış rakamsal bir numaradır. Eğer helpfile argument girilirse, context argument da girilmelidir.

 

3 -Mesajlarda Alt Satıra Geçmek ve '&' İşareti Kullanarak Cümlelerin Birleştirilmesi

Yine bir görsel üzerinde alt satıra geçme ve cümlelerin bağlanılmasını görelim kullanımı görelim.

Bu örnekte kişiye ait bilgilerin mesaj kutusunda gösterilmesi amacıyla prompt herhangi bir alt satıra geçme tercih edilmeden düz bir şekilde yazılıyor. Bunun sonucunda ise VBA Editor uygun gördüğü noktadan mesajı bölerek cümleye alt satırdan devam ediyor.

    Bu örnekte ise bütün bilgiler, karışıklığa neden vermeden düzgün okunabilmesi için alt alta yazdırılıyor. 

   Bir örnek daha verelim. 

   Sub Deneme()

           MsgBox “Merhaba” & vbNewLine & “Bugün Nasılsınız”

    End Sub

Gördüğünüz gibi alt satıra geçerken her iki cümleyi ilk önce tırnak işaretleriyle kapattık  sonrasında & işaretiyle diğer cümlenin bağlanacağı yeri işaretledik. Alt satıra  geçmek için vbNewLine kullandık. Son olarak da yine ‘&’ bağlama işareti kullanarak(concatenate), bağlamak istediğimiz tırnak işareti içinde yer alan diğer cümlenin, başını işaretledik. Bu şekilde yazım olarak 2 farklı cümle olarak gözüken 2 cümleyi tek bir cümle gibi mesaj kutusunda görülmesini sağladık. 

 

 

Vereceğimiz diğer örneklerde hem alt satıra geçme işlemini hem de cümleleri bağlama işlemlerini tekrardan işlemiş olacağız.

 

 

 

4 - Worksheet Üzerinden Verilerin Okunarak Mesaj Kutusunda Yazdırılması

    Bir üst bölümde cümlelerin nasıl birleştirildiğini ve alt satıra geçip mesajın devamının nasıl yazdırılabildiğini gördük.  Şimdi ise bu birleştirme işlemini worksheet üzerinde  yer alan hücreler ve hücrelere ait verileri birleştirerek daha geniş bir şekilde inceleyelim. Her nasıl worksheet üzerinde işlem yaparken hücrelere farklı tipte değerler atıyabiliyorsak, bu atadığımız değeri de mesaj kutusu aracılığıyla kullanıcıya iletebiliriz.

    Otomobil fiyatları tablosu verilerini kullanarak en ucuz ve en pahalı arabanın hangisi olduğunu mesaj kutusuyla araba satın almak isteyen müşterimize gösterelim. İlk önce tablomuzun görselini inceleyelim.

NOT:

    Bu arada bahsetmeyi unuttuğum bir nokta var. Biz VBA Editorde kod yazarken de bazen kodumuz çok uzun olabilir. Eğer çok uzun, tek satırlık kod yerine, okunması daha kolay olan alt alta kodlar yazmak isterseniz, ‘Space+AltÇizgi+Enter’ yaparsanız, alt satıra geçmiş olursunuz ve kodunuzu yazmaya devam edebilirsiniz.

    Tablomuzdaki araçların fiyatlarına baktığımız zaman, en pahalı arabamızın Mercedes’in E220 modeli, en ucuz arabamızın ise Fiat’ın Egea modeli olduğunu görüyoruz. Şimdi ilk başta kendi gördüğümüz bu fiyat değerini, marka ve modeli elle mesaj kutusuna hücrelerin değerlerini kullanarak yazdırmayı görelim.

Devamında ise otomatik olarak aynı işlemi nasıl yapabileceğinizi görelim.

Bir satıcı olarak, ilk önce en pahalı arabamızın hangisi olduğunu müşterimize mesaj kutusuyla nasıl gösterebiliriz onu görelim.

    Sol tarafta şimdiye kadar gördüğümüz, cümle birleştirme, alt satıra geçme, hücrelerin değerlerini cümle olarak kullanma ve kod yazarken bir alt satırdan nasıl devam ederiz konularının hepsini görebiliyoruz. Siz de aynı bu şekilde kendiniz mesaj kutularına arabaların fiyatları, donanımları, motor hacimleri v.b. bütün özelliklerinin olduğu mesaj kutuları hazırlayın. Mesaj kutuları çok basit bir konu olsa da bazen cümlelerin birleştirilmesi konusunda sıkıntılar yaşanabilir. Bu sıkıntıları en aza indirmek de her zaman olduğu gibi alıştırma yapmakla mümkündür. 

    Şimdi ise en ucuz arabamızı mesaj kutusu kullanarak müşterimize gösterelim.

    Bu örnekte hem elle yazdığımız cümleleri düzenledik hem de hücreleri değiştirdik. Bu değişiklikler sayesinde artık müşterimize en uygun fiyatlı arabayı da gösterebiliyoruz. Şimdi bu mesaj kutusunu oluştururken, kullanmak istediğimiz hüreleri nasıl seçtiğimizin üzerinden geçelim.

İlk olarak gözle tablomuzun fiyat sütununu taradık ve en yüksek ve en düşük fiyatları bulduk. Sonra ise kendi ürettiğimiz şablonlara yani 

1-“Listemizin en pahalı arabası …’in … Modelidir ve Fiyatı ise … TL’dir.”

2-“Listemizin en ucuz arabası …’ın … Modelidir ve Fiyatı ise … TL’dir.”

cümlesinin nokta nokta olan yerlerine, fiyatın bulunduğu satırdaki marka, model ve fiyat hücrelerinin değerlerini yine gözle tarayarak yazdık. Bu sayede sistediğimiz bütün veriler mesaj kutusunda görünür oldu. Peki elimizdeki tablonun çok ama çok uzun olduğunu düşünürsek ve gözle kontrol çok zor ise bu işi nasıl kolayca çözebiliriz?

    Şimdi vereceğim örnekte karşılaşmadığımız daha doğrusu işlemediğimiz bir takım konulara ait bilgiler kullanacağım. Bu konuların üzerinde çok fazla durmayacağım. Ancak çok değil bir kaç ders sonra bu yazdığım kodu çok net bir şekilde anlıyor olacaksınız. Şimdilik basit bir örnek olarak bu macroyu burada sizinle paylaşıyorum.

İlk önce otomatik olarak fiyattan giderek en pahalı arabamızı bulup mesaj kutusunu yazdıralım.

Şimdi de en ucuz arabanın otomatik bulunarak marka, model ve fiyatının mesaj kutusuna yazdırılmasını görelim.

    Görebileceğiniz gibi ortaya çıkan mesaj kutuları elle yazdırdığımız mesaj kutuları ile birebir aynı. Ancak burada biz hiçbir şey yapmadık. Her şeyi makro otomatik olarak halletti. Bu listeye isterseniz 1 isterseniz de 1000 adet araç ekleseniz de bu iki kod size saniyeler içerisinde hem en ucuz hem pahalı otomobili bulacak ve mesaj kutusu ile size bulduğu bilgileri iletecektir.

    Bu görselde iki kod arasındaki farkı görebilirsiniz. Mavi, kırmızı ve yeşil renkler eşdeğer hücreleri göstermekte. Mor kısımlarda henüz işlemediğimiz kısımı gösteriyor. Örneği bu gözle incelerseniz bence kendi kendinize ne kadar kolay çözebildiğinize şaşıracaksınız. Söylediğim gibi önümüzdeki derslerde mor ile gösterdiğimiz konuları çok detaylı bir şekilde öğreneceğiz. Çok küçük, birkaç satırlık farkın bize ne büyük kolaylıklar sağladığını umarım görebilmişsinizdir. Dediğim gibi macronun en kolay ve güzel örneklerinden birini işliyoruz. Umarım herhangi bir sıkıntı şimdiye kadar yaşamamışsınızdır. Eğer aklınıza takılan herhangi bir konu varsa tekrar belirtiyorum [email protected] adresine her türlü şeyi yazabilirsiniz.

5 - Mesaj Kutusu Üzerindeki Tuşlara Görev Atanması

    Şimdiye mesaj kutuları dersimizde çoğunlukla mesaj yazdırma üzerinde durduk. Farklı örnekler vererek konunun daha iyi anlaşılmasını sağlamaya çalıştık. Şimdi ise tuşlar konusuna geçiyoruz.

    Tuşlar(‘Buttons’) optional argument’dan bahsederken hem durumu ifade etmekte size yardımcı olacak, mesajın önüne gelen sembollerden bahsettik, hem de VBA Editor’un bizim karar vermemizi istediği durumlarda veya bizim kullanıcının karar vermesini istediğimiz durumda kullanılan, mesaj kutusunun altında istediğimiz tuşların koyulmasından bahsettik. Bu tuşlar; ‘Yes’, ‘No’, ‘Ignore’, ‘Cancel’, ‘Abort’, ‘Retry’ ve ‘Ok’ tuşlarından biri veya üçü birden olabilir. Şimdi bu tuşların tanımına kodumuzun içinde yer alan MsgBox’a tıklayıp F1’e basarak açılan Help penceresinden bakalım. Aşağıda Help penceresinin ilgili kısmının göreselini ekledim.

 Bu gördüğünüz listede, sol tarafta tuşların isimleri, orta sütunda rakamsal değerleri ve sağ sütunda ise tanımları yer almaktadır. Hepinizin çok yakından tanıdığını düşündüğüm bu tuşları kullanarak mesaj kutusunu, kullanıcı ve VBA Editor arasında bir iletişim cihazı olarak kullanabiliriz. Bizim mesaj kutusuna eklediğimiz tuşlar ayarları(default) gereği sadece çık-kapat görevini yerine getirir. Yani VbYesNoCancel tuşlarını eklediğinizi varsayalım, hangi tuşa basarsanız basın, hepsi aynı şekilde tepki verecek ve açık olan mesaj kutusunu kapatacaktır. Eğer tuşların farklı işlevler yerine getirmelerini isterseniz basılan tuşu ilk önce bir değişkene atamalı sonrasında ise değişkenin aldığı değere göre yani basılan tuşa göre görev tanımlamalısınız. Sözel olarak biraz kafa karıştırmış olabilir ancak işleyeceğimiz örnekle aslında ne kadar basit bir işlem olduğunu göreceksiniz.  

    Şimdi bir tuşa basıldığı zaman hangi tuşa basıldığının VBA Editor tarafından bilinmesi için ilk önce basılan tuşun değerini alacak bir değişken tanımlamamız gerekiyor. Daha önce Bilgi Kırıntıları sayfamızda bahsettiğimiz değişken tiplerine ek olarak mesaj kutusu tuşlarının değerlerini taşıyacak değişkeni tanımlarken, mesaj kutularının kendisine ait yeni bir değişken veri tipi kullanmak durumundayız. Bu değişken veri tipi ise ‘vbMsgBoxResult’. Bu veri tipi sadece üst tablodaki Constant(Sonradan bu konuyuda işleyeceğiz. Şimdilik değişmez bir değer olarak aklınızda kalsın yeter. Sabite) veya eğer istersek ortadaki değerler sütunundaki değerleri alabiliyor. Şimdi İlk adım olarak değişkenimizi vbMsgBoxReturn veri tipinde tanımlayalım.

Sub MesajKutusuTuşlarInKullanımı()

    Dim Yanit as vbMsgBoxResult

End Sub

    Sonrasında ise mesaj kutumuzu vermek istediğimiz mesajı, mesajın içeriğini ifade eden sembolü ve kullanmak istediğimiz tuşları, başlığı ekleyerek oluşturalım. Örneğimizde, size normalde telefonla gelen bir kampanya bilgisinin, biz televizyonda indirim kampanyası olarak düşünüdük, sanki mesaj kutuları yoluyla sizinle iletildiği bir senaryo oluşturduk. Bu kapsamda ilk önce ekranınızda kampanyadan faydalanmak isteyip istemediğiniz size soruluyor. ‘Yes’ tuşuna basarsanız “Harika! Hemen Satış Temsilcimize Bağlıyorum”, ‘No’ tuşuna basarsanız “Zaman Ayırdığınız İçin Teşekkür Ederiz.” ve ‘Cancel’ tuşuna basarsanız da “Peki, Sizi Tekrar Aramayacağız:(” yazan 3 farklı mesaj kutusu sizi karşılayacak. Çünkü biliyorsunuz normalde hepsinin ilk ayarı mesaj kutusunu kapatmaya yönelik. Şimdi bu mesaj kutusunun içeriğini oluşturan kodu ekleyelim. Ve bu koddan gelecek olan yanıtı beklediğimiz için ve kullanacağımız için kodumuzu tanımlamış olduğumuz ‘Yanit’ değişkenine eşitleyelim. Böylelikle bizim tıkladığımız ‘Yes’, ‘No’ ve ‘Cancel’ artık ‘Yanit’ değişkeninde tutulacak. Biz de tuttuğu değeri öğrenerek, farklı işlemleri etikinleştirebileceğiz.

Sub MesajKutusuTuşlarInKullanımı()

    Dim Yanit as vbMsgBoxResult

    Yanit = MsgBox(“Merhaba, Tv’lerde İndirim Kampanyasından” & vbNewLine & _

    “Faydalanmak İster Miydiniz?”, vbQuestion + vbYesNoCancel, “Televizyon Kampanyası”)

End Sub

    Şimdi artık hangi tuşa bastıysak o tuşun değeri değişkenimize atanmış durumda. Artık bazı koşullar oluşturarak Yes, No ve Cancel tuşlarından hangisine basıldığına göre karşılık verebiliriz. Burada yapacağımız işlem yukarıda da yazdığım gibi verdiğimiz yanıta göre farklı farklı mesaj kutularının açılmasıydı. Bu işlemi ne yazık ki görmediğimiz bir konu olan ‘if’ yani koşullandırma ile yapacağım. Burada yazım kurallarına şimdi çok dikkat etmenize gerek yok. Esasıyla bileminiz gereken tek şey, eğer Yanit ‘Yes’ ise şunu yap, ‘No’ ise şunu yap ‘Cancel’ ise şunu yap şeklinde VBA Editor’e görev verebiliyoruz olmamız. Yakın derslerden biri olan Koşullandırma konusunu zaman geldiğinde çok detaylı bir şekilde işleyeceğiz. 

MesajKutusuTuşlarInKullanımı()

    Dim Yanit as vbMsgBoxResult

    Yanit = MsgBox(“Merhaba, Tv’lerde İndirim Kampanyasından” & vbNewLine & _

    “Faydalanmak İster Miydiniz?”, vbQuestion + vbYesNoCancel, “Televizyon Kampanyası”)

    If Yanit = vbYes Then

            MsgBox “Harika! Hemen Satış Temsilcimize Bağlıyorum”

        ElseIf Yanit = vbNo Then

            MsgBox “Zaman Ayırdığınız İçin Teşekkür Ederiz.”

        ElseIf Yanit = vbCancel Then

            MsgBox “Peki, Sizi Tekrar Aramayacağız:(“

    End If

End Sub

    Bu şekilde kodu tamamlamış olduk. Daha düzgün göründüğü için şimdi de VBA Editor görüntüsünü ekliyorum. Subroutine ilk çalıştırdığınızda karşınıza bu mesaj kutusu çıkacak ve size kampanyaya katılıp katılmak istemediğinizi soracak.

Eğer Yanit=vbYes then, yani Yes tuşuna bastıysanız bu mesaj kutusu açılacak.

Eğer Yanit=vbNo then, yani No tuşuna bastıysanız bu mesaj kutusu açılacak.

Eğer Yanit=vbCancel then, yani Cancel tuşuna bastıysanız bu mesaj kutusu açılacak.

 

    Görüldüğü gibi excelde mesaj kutuları çok kullanışlı bir özelliktir. Hem çok işe yararlar hem de yazdığınız makronun daha profesyonel görünmesinde katkı sağlarlar. Daha ileri bölümlerde yine msaj kutularını farklı yerlerde kullanacağız. Bu sayede bu aşamada öğrendiğiniz temel bilgilerin üzerine yeni bilgiler de eklemiş olacaksınız.

Diğer Derslerde Görüşmek Üzere.

 

 

Dünya Çapında Araştırmacılara Ait Çalışmaları Okumak İsterseniz https://www.researchgate.net/profile/Ender_Dagdelen adresini Ziyaret Edebilirsiniz. Ana Sayfaya Dönmek İsterseniz De Aşağıdaki Tuşu Tıklayınız.

Herkese İyi Çalışmalar…

Soru ve Öneriler İçin;

[email protected]