WORKBOOK YÖNETİMİ

    Excelde yaptığımız işlerimiz şimdiye kadar tek bir sayfa ve worksheet üzerinde gerçekleşmiş olsa da, gerçek hayatta genellikle karşımıza çıkacak olan uygulamalar, tümdengelim ya da tümevarım şeklinde olacaktır. Yani ya farklı kaynakları işleyerek işlemlerimizi tek bir yerde toplamaya çalışak, ya da elimizdeki verileri farklı worksheet hatta workbook’lara böleceğiz. Bu kapsamda, tek worksheet üzerindeki işlemlerimizde nasıl hücre seçimi başrol oynuyorsa, verilerin bulunduğu ortam sayısı arttığında yani işin içerisine farklı worksheet ve workbook’lar girdiği zaman da, elimizdeki başrol sayısı artar. Bu nedenle workbook’lar arasında geçiş yapabilmek, gerekirse yeni workbook açabilmek, kapalı olan workbook’ları açıp, açık olan workbook’ları da kapatabilmemiz için ‘Genel VBA-Macro’ bölümünde önemli bir yer tutan workbook yönetimi konusuna gerekli önemi vermeliyiz. Şimdiye kadar işlemiş olduğumuz hücre alan ve worksheet yönetimleri konularıyla, büyük oranda benzerlik gösteren workbook yönetimi konusunu, diğer konuların üzerine işlediğimiz için bu benzerliklerden maksimum düzeyde faydalanıyor olacaksınız. Bu kapsamda, Workbook yönetiminin diğer alan yönetimlerine nazaran sahip olduğu ufak farklılıklar, daha iyi anlaşılabilir olması açısından örneklerle açıklanmaya çalışılmıştır.

1- Yeni Workbook Açmak-Opening A Brand New Workbook

    Yeni workbook açma işlemi sadece workbook nesnesi ve bu nesneye bağlı .Add metodu kullanılarak gerçekleştirilebilen çok basit bir işlemdir. Kodu çalıştırdıktan sonra yeni workbook’unuz açılacaktır ve   açılan workbook otomatik olarak da Project Penceresine eklenecektir. Açılan workbook’un adı ise, kaç adet açık workbook varsa ondan sonraki rakam olacaktr. Yani halihazırda 3 adet açık workbook varsa yeni açılan workbook “Book4.xlsx” adıyla açılacaktır. 

2- Workbook'ları Etkin Hale Getirmek-Activating Workbooks

    Çalışma sayfalarını yönetmek konusunda üzerinde işlem yapmak istediğimiz sayfanın düzgün olarak belirlenmemesinin yol açabileceği tersliklerden bahsetmiştik. Workbook’lar işin içine girdiği zaman işler biraz daha sarpa sarıyor. Bu sefer istemediğimiz ve geri alamayacağımız bir işlemi başka bir workbook üzerinde gerçekleştirerek, çok daha farklı sorunlara yol açabiliriz. Bu nedenden dolayı eğer birden fazla workbook ile işlem gerçekleştiriyorsak, veri adresleri ve çıktıların nerede olacağını çok net bir şekilde, worksheet’lere ek olarak workbook adreslerini de koda aktararak, yapmamız gerekiyor. Bu kapsamda workbook’ları etki hale getiriyoruz. Bu işlemi hem workbook isimlerini kullaranarak hem de worksheetlerdeki gibi index yani sıra sayı numaralarını kullanarak gerçekleştirebiliyoruz. Burada seçim size kalmış. Ancak workbook sayısı arttıkça index ile etkin hale getirdiğmiz workbook’lar karışabilir. Bu sebepten benim tavsiyem mümkün olduğu kadar açıklayıcı şekilde workbook’lara isim vermeniz ve workbook seçimini de ona göre yapmanız.

    Ekteki resimde 2 adet workbook ve içinde 3 satır kod olan bir subroutine var. İlk önce açtığımız workbook’un adı “Workbook_Yonetimi.xlsm”, Workbooks.Add ile eklediğimiz workbook ismi ise yine Project penceresinden gördüğünüz üzere “Book1”. Resimin üzerine de yazdığım gibi her ne kadar adı Book1 olsa da sonradan eklendiği için index’i yani sıra numarası 2’dir. Subroutine’in 3. satırında workbook etkin hale getirirken kullandığımız rakam işte bu index rakamıdır.

    Diğer satırlarda gördüğünüz gibi artık workbook’u isimleriyle aktifleştiriyoruz. Burada dosya uzantısını da eklememiz gerekiyor. Ancak buradaki örnekte gördüğünüz gibi Book1 için bu uzantıyı excel istemiyor. Bunun sebebi ise bizim henüz “Book1″i kaydetmemiş olmamızdır. Eğer açmış olduğunuz workbooku kaydederseniz .xlsx uzantısının workbook adının sonuna eklendiğini görürsünüz. Bu konuda çok fazla bir şeyi ezberlemeye gerek yok. Eğer işlem yapacağınız workbook açıksa, Project penceresinde ismi nasıl görünüyorsa siz de atıfta bulunurken workbook adını o şekilde yazın. Bu şekilde herhangi bir sıkıntı yaşamazsınız. Ancak sonradan workbook’u kaydedip etmeyeceğinizi bilmenizde fayda var. Aksi halde ‘Run-Time’ hatasıyla karşılaşırsınız.

Yandaki kodu siz de bilgisayarınızda çalıştırdığınız zaman seçili olan sayfanın değiştiğini görebilirsiniz. Bu şekilde eğer bir workbook’tan bir veri kopyalayıp diğer bir workbook’a kaydetmek gibi bir işlem yapacak olursanız bu şekilde sayfalarınız aktifleştirerek işleminizi yapabilirsiniz. Tabi daha sonrasında sayfaları aktifleştirmeden de bu işlemleri gerçekleştireceğiz. Ancak o zaman kadar bu yöntem şekli işimizi fazlasıyla görecektir.

 

3- Kapalı Olan Bir Workbook'u Açmak-Opening An Existing Workbook

    Halihazırda bilgisayarımızda kayıtlı olan bir dosyayı açıp işlem yapmak için kullanmamız gereken metod, Workbooks Collection’a bağlı olan ‘.Open’ metodudur. Tek bir mecburi parametresi vardır. Bu parametreler ise dosya yolu ve açılmak istenen excel dosyasının adı ve uzantısıdır. Aşağıda .Open metodunu yazıp bir boşluk bıraktığınız anda liste halinde açılan bu metoda ait bütün zorunlu ve seçmeli parametreleri görebilirsiniz.

    Daha önceden de bahsettiğim gibi koyu renk ve parantez içerisinde yazılmış olan parametreler bizim doldurmakta zorunlu olduğumuz parametreler, köşeli parantez açık renkte yazılmış olan parametreler ise seçmeli olan yani ilk etapta yazmadığımızda kodun çalışmasını engellemeyen parametrelerdir. 

Filename As String parametresi, dosyanın tüm adresini ve dosya adını uzantısıyla beraber yazmamız gerektiğini ifade eder. Yani;

 

                                              Workbooks.Open “F:\macronimbus\Yazılar\6_DERS_Workbooks\Book1.xlsx”         

                                                                                                            VEYA

                                              Workbooks.Open “F:\macronimbus\Yazılar\6_DERS_Workbooks\Workbook_Yonetimi.xlsm”        gibi

 

Diğer parametreleri doldurmasak da bu workbook açılacaktır. 

     VBA Editor’ün çok faydalı ve kullanışlı bir Yardım Menüsü vardır. Diğer bütün parametrelerin ne görevi olduğunu öğrenmek isterseniz yapmanız gereken tek şey .Open metodunun üzerine tıklayıp ‘F1’ tuşuna basmaktır. Bu sayede yardım menüsü penceresi açılacaktır.

Her ne kadar FileName parametresi bu yardım ekranında ‘optional’ olarak gösterilmiş olsa da kesinlikle ‘required’ yani zorunlu gerekli bir parametredir. İngilizce bilgisi iyi olan arkadaşlar bu yardım penceresini okuyup incelesinler. İngilizcesi olmayanlar içinse çok kısa da olsa ben yakın anlamlarını buraya ekliyorum.

UpdateLinks: Açtığımız workboook başka workbook’lara referanslanmışsa bu referansların nasıl günecellenmesi gerekiği belirtilmelidir. Buraya 0 rakamı yazarsak workbook açıldığında bağlantılar(External References) güncellenmez, 3 rakamı yazarsak ise güncellenir.

ReadOnly: Boolean olarak doldurmamız gereken bir parametredir. Eğer ‘True’ yazarsak açılan workbook sadece okumamıza müsade edip workbook üzerinde herhangi bir değişiklik yapmamıza müsade etmez.

Format: Eğer bir text dosyası açıyorsak buraya text döküman içinde kullanılan ‘delimiter Character’i girmemiz gerekiyor. Delimiter Character, bir metin içerisindeki yazı dizilerinin bittiğini anlamamızı sağlayan karakterlerdir. Aynı .csv dosyları gibi. Bu dosyalarda diziler virgülle ayrılır. Zaten .csv(comma seperated values) virgülle ayrılmıs değerler dizini anlamına gelir. Burada biz bu parametreyi girmek istersek kendimiz belirlediğimiz bir karakter yazmıyoruz. Yine HELP penceresinin alt kısmında yer alan ‘REMARKS’ bölümünde karakterlerin rakamsal karşılıkları bulunmaktadır. Bu rakamları girerek VBA Editor’e ayraçları tanıtabiliyoruz.

1_Tab

2_Virgul

3-Boşluk

4-Noktalı Virgül

5-Hiç

6-Custom Character(Eğer bu seçeneği seçersek Delimeter parametresi olarak bir karakter girmemiz gerekir)

Editable:Eğer dosya excel 4.0 eklentisiyse, bu argument ‘True’ yazarak açıyoruz ki pencere görünür olsun.Eğer argument ‘False’ olur veya boş bırakılırsaeklenti gizli modda açılır ve görünür hale getirilemez. Bu seçmeli argument excel 5.0 ve üzeri için geçerli değildir.Eğer dosya bir excel Template yani şablonsa, ‘True’ yazarak açılan şablon üzerinde işlemlerimizi gerçekleştiririz, ama eğer şablon kullanılarak yeni bir Workbook açmak istiyorsak burada ‘False’ yazmamız gerekecektir. Bu seçmeli argument, normalde ‘False’ olarak dafault ayarındadır.

Notify: Eğer dosya read/write modunda açılamazsa, excel bu dosyayı uyarı listesine alır. Read-Only modunda açar ve kullanıcıyı uyarır. Bu seçenek default ayarlarında bu şekilde(‘True’) ayarlanmıştır. Ancak biz ‘False’ olarak değiştirirsek bu sefer uygun olmayan bütün dosyaların açılması iptal edilecektir.

AddToMru: Son kullanılan dosyalar listesinde bu workbook’un görülmesini istiyorsanız ‘True’ olarak giriş yapınız. Default değeri ‘False’dur.

Local: ‘True’ dosyaları Microsoft Excel diline dayılı kayıt eder. ‘False'(default değer) dosyaları VBA (Workbooks.Open eski xl5/95 VBA projesi olarak açılmadığı sürec, tipik olarak Amerikan İngilizcesidir) diline dayalı kayıt eder.

CorruptLoad: XlNormalLoad, XlRepairFile ve xlExtractData sabitlerinden biridir. Herhangi bir değer girilmediği sürece XlNormalLoad’tur ve herhangi bir kurtarma işlemine girişmez.

4- Açık Olan Workbook'u Kapatmak-Closing Open Workbooks

    Şimdiye kadar kodlama yazım kurallarını hemen hemen anladığınızı varsayıyorum. Henüz giriş bölümündeyiz bu sebeple hep aynı tip şeylerle uğraşıyoruz diyorsanız çok güzel. Çünkü  o zaman yazım kuralları artık çok tanıdık gelmeye başlamıştır. Burada da yaptığımız yine kod yazım kuralları doğrultusunda nesnemizi sabit tutarak metodumuzu değiştirmek.

    Workbook ve diğer nesneler için de geçerli olan ‘.Close’ metodunu kullanarak açık olan workbook’ları nasıl kapatılabileceğini göreceğiz. Ayrıca ‘.Close’ metoduna bağlı ‘Optional Arguments’leri de elimizden geldiğince sizlere tanıtmaya çalışacağız. Şimdi görselimiz üzerinden devam edelim.

    Görüldüğü gibi .Close metodunun da kendisine ait ‘Optional Parameters’ var. Burada [SaveChanges] parametresinin değerini ‘True’ olarak yazarsak yaptığımız değişiklikler kaydedilecektir. Eğer bu parametreyi doldurmazsak kod çalıştırıldıktan sonra ekranda bir uyarı pencereis açılacak ve kaydetmek isteyip istemediğimizi soracaktır.

 

5- Workbook Kaydetmek-Saving Workbooks

    Çalıştığımız workbook’u kaydetmek istersek eğer kullanmamız gereken metodlar .Save ve SaveAs metodlarıdır. Aşağıdaki görselde bu metodları ve metodlara bağlı ‘optional Arguments’ inceleyelim.

    Eğer daha önceden de kaydedilmiş bir dosyayı tekrar kaydetmek istiyorsak, yapmamız gereken .Save metodunu kullanmaktır. Burada excel herhangi bir uyarı vermeden dosyayı kaydedecektir.


    Eğer dosyayı ilk kez kaydediyorsak yine aynı şekilde kaydederiz ancak bu sefer dosya, VBA Editor’un en son kayıt işlemini gerçekleştirdiği adrese kopyalanır.

    Eğer dosya yolunu girmek ve de dosya formatını değiştirmek istiyorsak, yani macroların çalışabileceği bir dosya formatıyla kaydetmek istiyorsak o zaman .Save yerine .SaveAs metodunu kullanırız.

Görselde gördüğünüz gibi argumentler seçmelidir. Yani boş da bırakabilirsiniz. 

Burada dosyayı kaydetmek istediğimiz adresi, ismini ve formatını kendimiz belirleyelim.

 

Yukarı örnekte gördüğünüz üzere FileName argument yerine kaydetmek istediğimiz dosya yolunu, devamına kaydetmek istediğimiz adını ve FileFormat’a da hangi formatta kaydetmek istediğimizi giriyoruz. 

Burada SaveAs metoduna ait argumentları ve karşılıklarını öğrenmek için yine SaveAs üzerine gelip ‘F1’ tuşuna basıyoruz ve Yardım Penceresinin açılmasını sağlıyoruz. 

Yarım penceresi açıldıktan sonra ise kaydetmek istediğimiz formatın adını öğrenmek amacıyla, parametrelerden FileFormat’ın açıklamasında geçen xlFileFormat enumerations tıklayarak bütün önceden  tanımlanmış olan dosya tiplerini açıyoruz.

FileFormat argument yerine dosyamızı makrolara uygun formatta kaydetmek için yazmamız gereken kırmızı kutu ile işaretlemiş olduğumuz seçenektir. Biraz uzun bir ibare ama ne yazık ki başka bir seçeneğimiz şu aşamada yok. 

xlOpenXMLWorkbookMacroEnabled

    Bu bahsi geçen şekillerde dosyalarımızı istediğimiz adreslere ve istediğimiz formatta kaydedebiliyoruz. Bu konuda zamanı olan arkadaşların Yardım Penceresini incelemesini tavsiye ederim.

6- ThisWorkbook Kavramı - ThisWorkbook Concept

       VBA Editor ekranında Project penceresinde worksheetlerin altında ThisWorkbook diye bir sayfa daha vardır. Yazdığımız kodlar bu sayfada depolanır. 

    Birden çok workbookla çalışırken genellikle kodlarımızı sadece bir adet workbook içerisine yazarız. Bu durumda ise ThisWorkbook nesnesini koda yazdığımız zaman hangi workbook seçilmiş yani aktif olursa olsun, işlem kodun yazıldığı workbook için geçerli olacaktır. Yani eğer 5 adet açık workbook’umuz var ve biz de 5 sayılı workbook’tayız. Ve yazdığımız kod ise 1 numaralı workbook içinde olsun. Eğer ActiveWorkbook.Close yazarsak 5 numaralı workbook, ThisWorkbook.Close yazarsak ise 1 numaralı workbook kapanacaktır. Görselde Project penceresinde ThisWorkbook nesnesini görebilirsiniz.

Her zaman olduğu gibi bize herhangi bir konuyla ilgili yazmak isterseniz, [email protected] adresine elektronik posta gönderebilirsiniz.

Herkese İyi Çalışmalar.

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]