FILE DIALOGS

İÇİNDEKİLER

1- File Dialogs Nedir ?

    File Dialogs, dosya açma, kaydetme, taşıma gibi işlemleri yaparken işleme yöne verebilmemiz açısıdan bize yardımcı olmak için açılan pencerelerdir.  File Dialogs işlem yapılacak ilgili dosya veya dosyaları seçme işlemini, klasörler arasında dosyaların aranmasını ve bu gibi işlemleri rahatça yapabilmemize olanak verir. 

    Bu derse gelmeden önce excel ‘File Dialogs’ ifadesinin tanımladığı pencerelerin hangi pencereler olduğunu bilmiyorsanız farklı beklentilere sahip olabilirsiniz. Oysa file dialogs pencereleri bizim her zaman kullandığımız aşağıda görsellerini paylaştığım pencerelerden başka bir şey değildir. Kaydet, aç, farklı kaydet gibi işlemlerin hepsi aslında ‘File Dialogs’ pencereleri ile yönetilen işlemlerdir.

         Bir dosya açmak istediğimizde her zaman bu pencereden dosyamıza ulaşırız.

FileDialogs - FileOpen_Window

 Çalıştığımız dosyamızı kaydetmek için hedef klasörünü hep bu ekrandan tanımlarız.

FileDialogs - FileSave_Window

2- FileDialog Nedir?

    FileDialog ile File Dialogs çok karıştırılabilir iki kavram gibi dursa da aralarındaki farkı burada açıklayarak sizi bir karmaşadan uzak tutmak istiyorum.

    -‘File Dialogs’ ismi, dersin konusunun adı ve de yapacağımız dosya açma kaydetme gibi işlemler esnasında açılan pencerelerin hepsini ifade eden isimdir.

    FileDialog ise ‘Excel Kütüphanesi, Appliciation Sınıfına Ait Bir Özellik‘ olup dosya kaydetme, dosya açma, dosya seçme ve klasör seçme işlemlerine ait ‘Enumeration’ değerlerini alabilen bir özelliktir. Enumeration konusunu daha sonra göreceğiz ancak şu anda sadece ‘Enumeration’ı önceden hazırlanmış bir liste olarak düşünmeniz yeterli olacaktır. FileDialog özelliği de, FileDialog özelliği için hazırlanan bu liste içinde yer alan değerler dışında bir değer alamaz.  

     Altta yer alan görselde ‘enumeration’ yapısını görebiliyorsunuz. Siyah çerçeve ve içinde 3 adet çizgi sembolü, önüne geldiği ifadenin bir ‘Enumeration’ yani önceden tanımlı bir listenin elemanı olduğunu ifade eder.

File Dialogs - FileDialogProperty_Enumerations FileDialog özelliğinin alabileceği değerler, bahsettiğimz gibi bir liste yani Enumeration olarak görünmektedir. Burada;

Dosya Açmak İçin: msoFileOpen

Dosya Kaydetmemek İçin: msoDialogSaveAs

Dosya Seçmek: msoDialogFilePicker

Klasör Seçmek: msoFolderPicker 

Seçenekleri FileDialog tipi olarak seçilir. Aşağıda yer alan örnekte dosya açma seçeneği seçilmiştir.

3- Dosya Açmak _ File Dialogs / File Open (msoFileDialogOpen)

    İlk olarak dosya açma işlemini inceleyeceğiz. Bu kapsamda dosya açma işlemi konusunu 4 alt başlılk şeklinde hazırladık. 

    1) File Save penceresinin açılması,

    2) Kullanıcının yaptığı seçeneklerin aktfi hale getirilmesi

    3) File Dialogs File Open penceresinde görmek istediğimiz dosya tiplerinin filtrelenmesi

    4) Bir dosya seçip seçmediğinin kullanıcıya iletilmesi

3.1 - File Dialogs / File Open Penceresinin Ekrana Getirlmesi

    İlk aşama herhangi bir office uygulaması kullanırken, bir dosya açmak istediğimizde, File->Open sıralamasıyla açtığımız pencerenin makro ile açılması işlemidir.

Sub OpenFileDialogs_V0()
Dim fd As FileDialog '__________________________________1
Set fd = Application.FileDialog(msoFileDialogOpen) '____2
fd.Show '_______________________________________________3
End Sub

    1- File Dialog tipinde bir değişken atıyoruz. Bu sayede File Dialog ile ilgili bütün metot ve property yani özelliklere bu fd değişkeni sayesinde ulaşabileceğiz.

    2- Burada değişkenimize bir değer atıyoruz. Değişkenin alabileceği veri tipini FileDialog seçerek atanabilecek değer sayısı sadece 4 adet olarak sınırlandırılmış olmuştu. Bu seçeneklere üst kısımda ‘FileDialog Nedir?’ başlığında değinilmiştir. Sonuç olarak artık fd değişkenimize değer atanmıştır ve bu değer ise “DOSYA AÇMA PENCERESİ”‘dir. Yani fd herhangi bir değeri değil bir ‘File Dialogs’ penceresi ifade etmektedir. 

    3- fd değişkenine atanmış olan dosya açma penceresini görmek için “.Show” metodunu kullanıyoruz. Bu metot ile fd değişkeni tarafından tanımlanmış olan Open File penceresinin ekranda açılmasını sağlıyoruz.sağlıyoruz. 

File Dialogs - FileOpen_V0_Window    fd.Show metodunun kullanılmasıyla artık ekrana File Open dosyası solda yer alan görselde olduğu gibi geldi. 

     Bu aşamada File Open File Dialogs penceresi üzerinde yer alan tuşlar ve dosya uzantılarını kullanarak açmak istediğimiz dosyaya ulaşabilir ancak ‘OPEN’ tuşuna basarsak seçtiğimiz dosy açılmadan, pencere kapanacaktır.

    Bunun sebebi ise henüz eklemediğimiz ve bir sonraki alt başlıkta göreceğimiz tek satır bir koddur.

3.2 - File Dialogs / File Open Penceresinin Etkinleştirilmesi

    1.1 numaralı kısımda ‘File Open’ yani dosya ve klasöerler arasından bir dosya seçip açmamıza aracılık eden ‘File Dialogs’ penceresinin açılmasını sağlamıştık. Şimdi ise bu pencerelerde yapılan seçimlerin uygulanması için yazmamız gereken son satır kodunu Sub_Routine’e ekliyoruz.

Sub OpenFileDialogs_V0()
Dim fd As FileDialog '__________________________________1
Set fd = Application.FileDialog(msoFileDialogOpen) '____2
fd.Show '_______________________________________________3

fd.Execute'_____________________________________________4
End Sub

    1- File Dialog tipinde bir değişken atıyoruz. Bu sayede File Dialog ile ilgili bütün metot ve property yani özelliklere bu fd değişkeni sayesinde ulaşabileceğiz.

    2- Burada değişkenimize bir değer atıyoruz. Değişkenin alabileceği veri tipini FileDialog seçerek atanabilecek değer sayısı sadece 4 adet olarak sınırlandırılmış olmuştu. Bu seçeneklere üst kısımda ‘FileDialog Nedir?’ başlığında değinilmiştir. Sonuç olarak artık fd değişkenimize değer atanmıştır ve bu değer ise “DOSYA AÇMA PENCERESİ”‘dir. Yani fd herhangi bir değeri değil bir ‘File Dialogs’ penceresi ifade etmektedir. 

    3- fd değişkenine atanmış olan dosya açma penceresini görmek için “.Show” metodunu kullanıyoruz. Bu metot ile fd değişkeni tarafından tanımlanmış olan Open File penceresinin ekranda açılmasını sağlıyoruz.sağlıyoruz. 

    4 – İlk üç madde aynı olup sadece ek olarak fd.Execute kodu Sub_Routine’in alt kısmına eklenmiştir. Bu metot ile File Dialogs pencereleri üzerinde yapılan seçimlerin, yani kaydet, aç gibi tıkladığımız tuşlara ait komutların, uygulanması sağlanır.  Eğer bu metot bu koda eklenmezse yapılan seçimler uygulanmadan pencere kapatılır.

3.3 - File Dialogs / File Open Penceresine Filtre Ekleme

    İlk 2 alt başlıkta nasıl File Open Penceresinin açılacağını ve üzerindeki tuşların işlevsel hale getirileceğini gördük. Artık seçtiğimiz bir dosyayı ‘OPEN’ tuşuna basarak açmaya çalışabiliriz. Burada özellikle ‘çalışabiliriz’ diyorum çünkü VBA Editor sadece excel ile açılabilen dosyaları açacaktır. Muhtemelen herkesin klasör veya dosya yapısında farklı veri tipinde dosyalar mevcuttur. Word, access, text ve hatta çeşitli video formatlarının aynı klasörlerde tutulması çok da alışılmadık bir durum değildir. 

    Karışık veri formatlarında dosya yapılarının yaygın olduğu günümüzde excel formatı dışında dosyalar yanlışlıkla açılmaya çalışılınabilir. Bu durum da VBA Editor’un hata vermesine sebep olacaktır. Bu tip bir hatanın önüne geçebilmek ise çok kolaydır. Yapacağımız işlem ‘File Open’ penceresinde yalnızca excel uygulamasında açılabilecek verilerin görünmesini sağlamaktan başla birşey değildir.

     İlk olarak dosya seçme ve açma gibi işlemler esnasında uyguladığımız ancak belki de adına dikkat etmediğimiz filtreleme işlemini ve nasıl yaptığımızı görelim. Aşağıdaki görselde sağ alt kısımda yer alan ve üzerinde genelde ‘All Files(*.*)’ yazan açılır menüyü daha önceden bir çok kere görmüş ve kullanmışsınızdır. İşte bu menü, normal koşullarda açılan veya görmek istediğimiz formatları seçebileceğimiz formatları barındıran bir çeşit seçenekler listesidir. Buradan dosyada görünmesini istediğimiz verileri seçeriz ve belirli oranda kalabalık dosya yapısını daha kolay kullanılabilen bir şekle sokrarız. 

 

File Dialogs - Filters

     File Dialogs penceresinde açılan menü ile yaptığımız filteleme işlemini, makroların içerisine yazdığımız çok basit kodlar yardımıyla da gerçekleştirebiliriz. 

File Dialogs - FileOpen_AddFilter_Code

    1 – 2 – 9 – 10 ile numaralandırılmış satırlar 1.1 ve 1.2 numaralı alt başlıklarda açıklanmıştır.

    3 – fd değişkenini bir ‘FileDialog(Open File)’ olarak tanımladığımız anda ‘Open File’ penceresine ait filtreler ‘All Files’ olarak default ayarında açılır. Bu yüzden biz de kendimiz filtreleri belirlemeden önce ilk olarak default filtreleri ortadan kaldırırız. Burada yaptığımız işlem tam olarak varolan filtrelerin sıfırlanması işlemidir. Teknik olarak da; “File Dialog sınıfına ait ‘Filters’ özelliğinin temizlenmesidir.” 

     Bu noktadan sonra istediğimiz filtreleri .Add metodunu kullanarak ekleyebiliriz.

     NOT: “*” işareti konulduğu yerde bir takım yazılar olduğunu ifade eder.

    4 – Açılabilen dosya formatlarını filtrelerken dosyaların uzantılarını kullanıyoruz. Bu kod satırı ile eski yani 2007 öncesi excel dosyalarının görüntülenebilir olmasını sağlıyoruz. 

    5 – 2007 ve sonrası excel dosyalarının görüntülenebilmesini sağlar.

    6 – Makro içerebilen dosyaların görüntülü 

    7 – Bütün excel dosyalarının görüntülenebilmesini sağlar. Gördüğünüz gibi eski, yeni veya makro uyumlu dosyaların uzantıları bir bütün olarak bir birinden farklı olsa dahi, dosya adından sonraki uzantı daima ‘xl’ ile başlamaktadır.

    Burada “*.xl*” yazarak dosya adının ve xl’den sonra gelen yazı karakterlerinin önemsiz olduğu, uzantının xl ile başladığı sürece filtreden geçip de ‘File Open’ penceresinde görüntülenebilmesini sağlıyoruz.

    8 – Örnek olması amacıyla bütün excel dosya tiplerini filtre olarak ekledik. ‘File Open’ penceresinde görmüş olduğunuz 21 adet filtrenin yerine artık bizim girdiğimiz bu 4 adet filtre görüntülenebilecek. Biz de son olarak otomatik olarak bir filtreyi seçmek durumundayız. Bu kapsamda bütün excel dosyalarının görüntülenebilmesini sağlamak için yazdığımız bu 4 filtrenin sonuncusunu tercih ettiğimiz VBA Editor’de Sub_Routine içerisine bu kod ile bildiriyoruz.

    fd.FilterInex=4 

    Şimdi ‘File Open’ penceresinin son halini görelim. 

File Dialogs - FileOpen_AddFilter_Preview

    Gördüğünüz gibi ‘File Dialogs – File Open’ penceresinde sadece excel ile açılabilen dosya görüntüleniyor. Ayrıca eklemiş olduğumuz filtreler dışında diğer filtreler de kullanıcıya sunulmuyor. Bu sayede kullanıcının yanlışlıkla farklı bir dosya tipi açarak, hata ile karşılaşılmasının da önüne geçilebiliyor. 

3.4 - File Dialogs / File Open Penceresi Kullanılırken Dosya Seçilip Seçilmediğinin Kullanıcıya Bildirilmesi

    Bu alt başlıkta kullanıcının herhangi bir dosya seçip seçmediğini basit bir şekilde kullanıcıya Msgbox kullanarak belirtiyoruz. Dosyanın seçilmiş olduğu bir işlemde, her şey normal bir şekilde devam edecektir. Ancak eğer kullanıcı dosyayı seçmediyse sadece dosyayı seçmediği bir mesaj olarak kendisine söylenecek ve Sub_Routine’den çıkılacaktır. Bu amaçla hazırlan kod ve açıklamasına aşağıda yer verilmiştir.

File Dialogs - FileOpen_V3_Code NOT: Diğer alt başlıklarda açıklanmış olan kod satırları tekrar açıklanmamıştır.

NOT 2: fd.Show() ile açılan ‘File Open’ penceresinden eğer bir dosya seçip ‘OPEN’ tuşuna basarsak, fd.Show ifadesi 1 değerini yani TRUE değerini alır, eeğr seçim yapılmazsa da 0 yani FALSE değerini alır. 

1 – İlk önce bir dosyanın seçilip seçilmediği durumları değerlendirmek amacıyla ‘BOOLEAN’ tipinde bir değişken tanımlıyoruz. 

2 – Burada ise tanımış olduğumuz DosyaSecildi değişkenini TRUE veya FALSE değerini atıyoruz. (bkz NOT 2)

3 – Dosyanın seçilmediği duruma göre If Koşul Bloğu vasıtasıyla bir adet koşullu durum oluşturuyoruz.

3.1 – DosyaSecildi = False olduğu durumda ekrana  MsgBox yardımıyla “Dosya      Seçmediniz” yazdırıyoruz.

    3.2 – Hemen ardından da Sub-Routine’den çıkıyoruz. Böylece fd.Execute komutunun çalışmamasını sağlıyoruz.

    3.3 – If Koşullu Durumdan çıkıyoruz. 

    “Böyle bir şeye gerek var mıydı?” diye düşünebilirsiniz. Bence faydalı ama çok da elzem olmayan bir mesaj. Ancak önemli olan burada fd.Show() komutunun bir değer döndürüyor olduğunu bilmeniz. Buna göre istediğiniz gibi bu bilgiyi değerlendirebilirsiniz.

 

NOT 1: Çoklu Dosya Seçimi

     Dosya açma işlemi ilk File Dialogs File Open ile birden fazla dosya için gerçekleştirilebilen bir işlemdir. Yani VBA Editor, birden fazla dosya seçtiğinizde, bütün seçilen dosyaların açılabilmesine izin vermektedir. Ancak bu durum değiştirilebilmekte olup, istenirse sadece tek bir dosya seçip açabilmek üzere tek satırlık bir kod Sub-Routine içerisine yazılabilir. Bu kod ise;

fd.AllowMultiSelect=False

olup kod içinde aşağıdaki gibi yerleştirilir.

Dile Dialogs - FileOpen_AllowMultiSelect

 

4- Dosya Kaydetmek _ File Dialogs / File Save (msoFileDialogSave)

    File Dialogs pencerelerini kullandığımız diğer bir işlem de; ‘Save As‘, yani dosyayı farklı kaydetme işlemidir. Bu sefer seçtiğimiz hedeften bir dosya açmak yerine, seçtiğimiz hedefe bir dosya kaydedeceğiz. 

     Kullanımı ‘File Open’ File Dialogs penceresi ile çok benzerdir. Aralarındaki en büyük fark ‘Save As’ penceresinde işlem yaparken, farklı kaydetmek istediğiniz dosya için bir isim girmeniz gerekmesidir. Onun dışında kaydedilecek dosya veya klasör seçme işlemleri aynıdır. 

     Şimdi yine Sub_Routine üzerinden adım adım yazdığımız kodu inceleyelim. 

4.1 - File Dialogs / File Save Penceresi

    File Save penceresi ile dosyamızı farklı kaydetmek istediğimiz yeri seçiyor adını giriyor ve kaydet diyoruz. Şimdi il başta kodu ve açılan FileDialog’u görelim.

File Dialogs - FileSave_Code_V0

 

1, 2 ve 4 numaralı maddeleri daha önceki bölümlerde derinlemesine açıklamış olduğumuz için burada tekra açıklamıyoruz. 

3 Numaralı satır bizim için önemli olan satırdır. Burada FileDialog olarak tanımlanmış olan fd değişkenin artık Save penceresi değer olarak atanıyor. Önceki bölümde yani dosya açma işleminin gerçekleştirilmiş olduğu kısımda fd değişkenine msoFileDialogOpen değieri olarak atanmıştı. Yani dosya çamya çalıştığımızda açılan pencere atanmıştı. Şimdi ise bir dosya kaydedeceğimiz zaman açılan pencere fd değişkenine değer olarak atanıyor. Yani referanslanıyor. msFileDialogSaveAs penceresi olarak tanımlanan değişken sonradan . Show ve .Execute metotları kullanılarak önce ekranda görünmesi sağlanıyor sonrasında ise seçilen dosya ve verilen ismin çalışması sağlanıyor. 

 

File Dialogs - FileSave_Window2# Üstte yer alan kodun çalışmasıyla beraber sağda gördüğünüz bu pencere açılacaktır. 

#Bu pencereye iki adet parametre girmeniz gerekmektedir. 

-Girmeniz gereken ilk parametre dosya uzantısıdır. Bu işlemi File Dialogs penceresinde klasör ve dosya seçerek gerçekleştirirsiniz.

-İkinci parametre ise dosyanızın hangi isimle kaydedileceğidir. Dosya isminizi ‘File Name’ olarak  adlandırılmış olan boşluğa girmeniz gerekiyor. Bazı durumlarda bu alanda üzerinde çalışıyor olduğunuz workbook adını görebilirsiniz. O pozisyonda ise aynı dosya üzerine çalışma yapıyorsanız, aynı isimde bir dosya olduğuna dair uyarı alırsınız. 

-Üçüncü bir parametremiz daha var aslında. Her ne kadar bu parametre zorunlu bir parametre olmayıp, type listesinde yer alan filtrelerin birinci sırada olanı otomatik olarak seçilecek olsa da, arada sırada burayı da değiştirmeniz gerekecektir.

    En basit haliyle File Save File Dialog’unu bu şekilde kullanabiliyorsunuz. 

    Bu pencereyi eğer isterseniz biraz daha kullanıcı dostu hale getirebilirsiniz.

NOT 2: File Dialogs-Save File Filtreler Listesi

     Dosyamızın kaydedilmesini istediğimiz formatların hepsi alt alta bir liste halinde Save As Type açılır listesinde yer almaktadır. Bahsettiğimiz gibi eğer burada bir seçim yapmazsanız, listenin en üst sırasında yer alan .xlsx dosya tipi seçilmiş olacak ve kaydetmeye çalıştığınız dosya o formatta kaydedilecektir. Liste;

File Dialogs - SaveAsTypeList

    Gördüğünüz bu listede yer alan formatlarda dosyanızı kaydedebilirsiniz. Ve eğer isterseniz kodunuzun içinde dosyanızı hangi formatta kaydedeceğinizi, bu listedeki type’ların sıra numarasını kullanarak gerçekleştirebilirsiniz. Örnek olarak Excel 97-2003 Workbook(.xls) formatında kaydedecekseniz sıra numarası olarak yukarıdan saydığımızda bulduğumuz 4 rakamını kullanarak, bu kaydetme tipini seçtiğiniz belirtebilirsiniz. Tam olarak kullanımını görmek için 2.1.1 numaralı bölümde yer alan örneğe göz atmak isteyebilirsiniz.

 

4 .1 .1- File Dialogs / File Save Penceresi Parametrelerini Otomatik Olarak Makro İçinde Belirlemek

    Hemen üstte yer alan 2.1 numaralı bölümde kaydedilecek dosya, dosya ismi ve kaydedilecek dosyanın tipi parametrelerinden bahsetmiştik. Bu bölümde de bu parametrelerin Sub-Routine yazarken nasıl belirlenebileceğini göreceğiz. Çok basit olarak sadece 2 satır fazla kod ile yapabileceğiniz bu ayarlamalar, File Dialogs pencerenizin kullanımını kolaylaştıracaktır. Her zaman yaptığımız gibi kodumuzu inceleyerek derse devam edelim;

File Dialogs - FileSave_Code_V1    #2.1 numaralı bölümde paylaştığımız Sub-Routine’e sadece 2 satır kod ekleyerek güncellediğimiz bu kod ile  artık parametreleri önceden belirlemiş durumdayız. 

     #3 numaralı satır ile bir taşla 2 kuş vuruyoruz. Hem dosya yolunu giriyor hem de dosyaya vermek istediğimiz ismi girmiş oluyoruz. 

    File Dialogs’ a ait InitialFileName özelliğini kullanarak File Save File Dialog’un, dosyamızı kaydetmek istediğimiz dosya olarak açılmasını sağlıyoruz. Ve sonuna da istediğimiz adı giriyoruz. 

       Bu işlemi tam olarak bir birinden ayırırsak;

Environ(“UserProfile”) ile elde ettiğimiz kullanıcı profiline Desktop ekleyerek dosyanın kaydedileceği yeri belirtiyoruz. Sonrasın ise ThisWorkbook özelliğine ait .Name özelliğini kullanarak da çalışmakta olduumuz workbook’un adının aynı şekilde gelmesini sağlıyoruz. Eğer isterseniz ” ThisWorkbook.Name” yerine “Kaptanın Seyir Defteri” bile yazdırabilirisiniz. Veya vermek istrediğiniz ismi çalıştığınız workbook içindeki worksheetlerin ismini alacak bir değişken kullanabilirsiniz. Bu şekilde her worksheet’i bir workbook dosya olacak şekilde farklı kaydetmiş olursunuz.  

    # 4 numaralı maddede ise NOT dosyayı seçmek istediğimiz dosya formatını seçiyoruz. Bunu yine çok basit bir şekilde FilterIndex özelliğini kullanarak yapıyoruz. Burada fd.FilterIndex=2 yazdık. Bu da şu demektir. Filtre/Format listesinde yukarıdan 2.sırada hangi format tipi varsa o formatta kayıt edilir. Not kısmında bütün listeyi görebilirsiniz. Hangi formatta dosyanızı kayıt etmek istiyorsanız, sadece sıra numarasını yazmanız yeterlidir. Bu kodu çalıştırırsanız da File Dialogs pencereniz aşağıdaki gibi açılacaktır.

File Dialogs - FileSave_Window_V1

 

    Kodların etki ettiği parametreleri bu görselde net bir şekilde görebilirsiniz.

 

    Her ne kadar File Picker ve Folder Picker FileDialog özelliğine ait birer değer olsalar da bu ders kapsamına alınmamışlardır. İ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]