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 mali çözümlemeler için aranan bir ürün olmasını sağladıysa, Outlook’un birçok yönünü programlayabilmek de onun yaygınlaşmasını kolaylaştırdı. Yazılım üreticileri Outlook 2000 içindeki yeni yetenekleri kullanarak Outlook verilerini yedeklemek, giden mesajlardaki eklentileri otomatik olarak sıkıştırmak, Outlook’un başka kullanıcılar adına gönderilen  mesajlarını işlemek, diğer kullanıcıların Calendar klasörleri ile çalışabilmek ve posta kutusundaki öğeler ile ortak klasör öğeleri arasında senkronizasyon sağlamak üzere  çeşitli programlar yazdılar. Kullanıcılar VBA kodlarını kullanarak gelen mesajları işlediler, ilişkili öğeler yarattılar, özel yazıcı çıktıları hazırladılar ve Outlook’un giden mesajları ve anımsatıcıları işleme yöntemini özelleştirdiler. Outlook 2002’de yeni nesneler, özellikler ve yöntemler  eklenerek VBA genişletilşiyor. Bu yenilikleri de ileriki makalelerimizde ele alacağız.

            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ı. Eğer Word ya da Excel makrolarıyla çalıştıysanız bu düzenleyici size tanıdık gelecektir. Şekil 1’de görülen düzenleyiciyi açmak için Outlook’un menü çubuğundan Tools, Macro, Visual Basic Editor seçeneklerini seçin. Alt+F11’de basabilirsiniz.

            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.

            Eğer .bas uzantılı bir kod örneği indirirseniz bu kodu VBA’a almak için File, Import File şıklarını kullanabilirsiniz. Bu işlem sonucunda alınan kod Project1.Modules altında yeni bir modüle yerleştirilir.

            Eğer uygulama düzeyindeki olaylardan yararlanmak için bu kodun Outlook ile  gelen ThisOutlookSession modülünde çalışması isteniyorsa, kodu, Project1.Microsoft OutlookObjects altında bulacağınız ThisOutlookSession modülüne kopyalayabilirsiniz. ThisOutlookSession içinde yer alıp uygulama olaylarını kullanan makroların otomatik olarak çalışmasını garantilemek için    Outlook’u kapatıp açın.

            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. Eğer siz de ilişkili kodları bir modülde toplarsanız bu modülün içeriğini kolayca yedekleyebilirsiniz. Bunun için File, Export komutunu kullanarak kodu  .bas uzantılı bir dosyaya aktarabilirsiniz. 

 

Makrolarınızı diğer insanlarla paylaşmak isterseniz onlara bu .bas uzantılı dosyayı verebilirsiniz. Onlar da bu dosyayı kendi projelerine alabilirler. Eğer birisine tüm Outlook VBA kodunu vermek isterseniz ona sizin vbaproject.otm dosyasının tümünü verebilirsiniz. Bu dosyayı Outlook çalışmakta iken yedekleyemez ya da kopyalayamazsınız.

 

İ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. Eğer burada Digital Signature şıkkını görmüyorsanız bu seçeneği yüklemek için Office’i tekrar kurmalısınız. Daha fazla bilgi için, http://msdn

.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.