Outlook Makroları için VBA’in Temelleri
Murat Yıldırımoğlu, Windows 2000 Magazine dergisinden
çeviri
2000 Ocağından bu yana, Microsoft Outlook 2000’e yönelik pratik Visual Basic for Applications (VBA) kodları içeren yazılarım bayağı mesafe katetti: Otomatik mesaj işleme, tarihler ve görevler, alıcıları işleme ve daha birçok konu ele alındı. Şu sıralar bazı okuyucular daha yeni yeni Outlook VBA’i kullanmaya başladıklarını belirttiler. Bu yüzden bu ay bazı temel konuları ele alacağım.
Önce biraz tarihçe: Outlook 2000, içinden VBA makroları yazmanıza ve bunları program içinden çalıştırabilmenize izin veren ilk Outlook sürümü. Outlook 97 ve Outlook 98’i VBA ile denetleyebilmek için bir başka ortamda, örneğin, Word ya da Excel içinde, bir makro yazmanız ve makroyu o program içinden çalıştırmanız gerekiyordu. Outlook 97 ve 98’de uygulama düzeyinde olaylar içerilmiyordu. Bu yüzden Outlook’u çalıştırırken, bir mesaj gönderirken ve klasörler arasında geçiş yaparken çalışacak kodları yazamıyordunuz. Outlook 98’de özelleştirilebilen bir araç çubuğu bulunuyorsa da yazdığınız kodu bağlayabileceğiniz ve bu çubuk üzerine yerleşecek bir düğme yaratamıyordunuz.
Bu yüzden Outlook 2000, bu programı kendilerine
göre özelleştirmek isteyen bilgili kullanıcılar, yöneticiler ve program geliştiriciler için gerçek bir
devrim oldu. Excel’e bir makro
dilinin eklenmesi nasıl onun
Eğer Outlook’un programlanabilirliği sizin için olumsuz anlamlar taşıyorsa Outlook’la ilişkili virüslerin VBA’i değil VBScript’i kullandığını belirtmeliyiz. VBScript güvenli bir programlama dili değil. VBScript kodlarını sayısal imzayla imzalayamazsınız ama VBA projelerinizi sayısal olarak imzalayabilirsiniz ve makro güvenliğini yalnızca imzalı kodları çalıştıracak şekilde ayarlayabilirsiniz. Bu makalenin sonunda VBA kodunu nasıl güvenli hale getirebileceğinizi göstereceğim.
VBA Düzenleme Programı (Editor)
Outlook’un VBA düzenleyicisi diğer Microsoft Office programlarında
bulunanların aynısı.
VBA for Word ya da Excel ile VBA for Outlook arasındaki en temel fark Outlook’takinde bir makro kaydedicisinin bulunmamasıdır. Kodu baştan sona siz yazmalısınız. Neyse ki birçok Web sitesinde ve tartışma forumlarında kendi uygulamalarınıza aktarabileceğiniz çok sayıda kod örneği bulunmaktadır. http://www.slipstick.com/dev/vb.htm adresinde Outlook VBA koduna ilişkin çok sayıda link ve diğer kaynaklara ilişkin bilgi bulunduruyorum. Önceki sayılarda yer alan Outlook VBA yazılarımdaki kodları Windows 2000 Magazine’in Web sitesinden indirebilirsiniz.
Bir menü çubuğu
düğmesinden çalışmasını planladığınız yeni bir makro yazıyorsanız
ya da böyle
bir makroyu bir yerlerden kopyalamışsanız bunu ya ThisOutlookSession modulüne kopyalayabilir ya da Insert, Module şıklarını kullanarak yarattığınız yeni bir modüle yerleştirebilirsiniz.
Ben modülleri içeriklerine
göre sınıflandırıyorum.
Bu şekilde örneğin,
görev öğeleriyle ilgili kodları bir modülde, klasörlerle
ilgili kodları başka bir klasörde
bulabiliyorum.
Makrolarınızı diğer insanlarla paylaşmak isterseniz onlara bu .bas uzantılı dosyayı verebilirsiniz. Onlar da bu dosyayı kendi projelerine
alabilirler.
İstek Üzerine Kod
Outlok VBA’yi kullanarak işi çeşit kod yazabilirsiniz. Bir kod çeşiti otomatik olarak ThisOutlookSession modülü içinden çalışır. Bu çeşit kod örneklerini benim önceki makalelerimde çokça bulabilirsiniz. Diğer kod çeşidi ise araç çubuğuna eklenen bir düğme ile çalıştırılan kodlardır. Bu tür kodları Alt+F8’e basıp Macros diyalog kutusundan ilgili makroyu seçerek de çalıştırabilirsiniz.
Yazdığınız kodların hepsi bir araç çubuğu düğmesi yapılamaz. Bir makroyu araç çubuğundan ya da Macros diyalog kutusundan çalıştırabilmeniz için kodunuz aşağıdaki koşulları sağlamalıdır:
· Makro bir işlev değil bir altyordam olmalıdır.
· Makro, Public tipinde bir altyordam olmalıdır. (Public ya da Private olarak özellikle belirtmediğiniz altyordamlar için Public varsayılan değerdir.)
· Makronun argümanları bulunmamalıdır.
Örneğin, aşağıdaki yordam bir araç çubuğu makrosu olarak çalışabilir:
Sub HelloWorld()
MsgBox “Hello World!”
End Sub
Ama şunlar bu şekilde çalışamaz:
Private Sub HelloWorld()
MsgBox “Hello World!”
End Sub
Public Sub Hello(strWho)
MsgBox “Hello “ & strWho
End Sub
Public Function Hello()
strWho = _
InputBox(“Say hi to whom?”)
MsgBox “Hello “ & strWho
Hello = strWho
End Sub
Araç çubuğuna bir makro eklemek için Outlook menü çubuğundan View, Toolbars, Customize’ı seçin. Customize diyalog kutusundaki Commands sekmesinde, Categories listesinden Macros’u seçin. Sağ tarafta bir makro listesi göreceksiniz. İistediğiniz makroyu araç çubuğuna ya da Outlook menüsüne kopyalabilirsiniz. Yeni yarattığınız araç çubuğu düğmesine sağ tıklayın ve adını, düğme şeklini ve diğer özelliklerini istediğiniz gibi değiştirin.
Güvenlik Düzeyini Ayarlama
Bir miktar VBA kodu yazdıktan sonra Outlook’u başlatırken güvenlik ayarlarınız yüzünden makroların çalıştırılamadığını söyleyen bir mesaj alabilirsiniz. Bu mesaj makroları yetkilendirmenizi de isteyebilir. Outlook’un makro güvenlik düzeyi ne tür bir mesaj alacağınızı belirler. Güvenlik düzeyini Şekil 2’de görülen Security diyalog kutusundan değiştirebilirsiniz. Buraya geçmek için ana Outlook menüsünden Tools, Macro, Security şıklarını seçin.
Eğer High (yüksek) güvenlik düzeyini isterseniz projenizi sayısal olarak imzalamanız gerekir; aynen bir epostayı sayısal
olarak imzaladığınız gibi. Office 2000 içinde selfcert.exe adında bir program bulunur. Bu
program yardımı ile projelerinizi imzalayabileceğiniz
bir sertifika sahibi
olursunuz. Her sertifikanın
bir sertifika yetkili organı tarafından imzalanması gerekir. Ama bu sertifika kendisi
tarafından imzalanmıştır. Bu sertifika
yardımı ile herhangi bir VBA projesini imzalayabilirsiniz.
Bu sertifika ile projenizi imzalamak için VBA Editor içindeyken
Tools, Digital Signature şıklarını seçin.
.microsoft.com/library/techart/oldigitalsignature.htm adresinden “How to Prevent the VBA Macro Security Warning in Microsoft Outlook 2000” (Microsoft Outlook 2000 İçinde VBA Makro Güvenlik Uyarısının Çıkmasını Engelleme) başlıklı yazıya bakınız. Microsoft, o yazıda, bu sertifikayı yetkilendiren herhangi bir Sertifika Yetkilisi (Certificate Authority; CA) bulunmadığı için bizi uyarıyor ve yalnızca kişisel projelerimizi bu şekilde imzalamamızı istiyor.