Dosya Ve Klasör Yönetimi

1- Dosya ve Klasör Yönetimi - Scripting Library FileSystemObject Nedir?

    Makro konusunu araştıran herkes, belirli bir düzen etrafında tekrarlanan cevaplar ile karşılaşır. Ilk olarak; “Excel ile yaptığımız işlemlerin, otomatik olarak, kendi kendini tekrarlayan şekilde gerçekleşebilmesini sağlayan küçük kodlara makro denir.” ve ikinci sırada da ‘Office’in kendi resmi sitesinde makrolar için “İstediğiniz zaman çalıştırabileceğiniz bir eylem veya eylemler kümesidir.” tanımı, araştırmalarınız sonucunda denk geleceğiniz tanımların en yaygın olanlarıdır. Makrolar ile ilgili biraz bilgi sahibi olan birine ‘Makro nedir?’ diye soracak olursak alacağımız cevaplar da, yukarıdaki cevaplar çevresinde alacaktır. 

     Şimdiye kadar makrolar ile ilgili çok temel bilgileri derslerimizde işledik. Bu sayfada işleyeceğimiz Dosya ve Klasör Yönetimi konusu ise diğer konulardan biraz farklı bir kapsama sahiptir. Dosya ve Klasör Yönetimi ile öğreneceklerimiz, daha önceden öğrendiğimiz konuların etki alanını genişletmemizi sağlamaya dönüktür. Şimdiye kadar bir veya birkaç workbook ve worksheet üzerinde gerçekleştiriyor olduğumuz çalışmalarımızı ‘Scripting’ kütüphanesi ve’FileSystemObject’ sayesinde, dosya ve de klasörler seviyesine taşıyabileceğiz. Yani artık yazdığımız kodun etki alanını tam anlamıyla bir sayfadan onlarca dosya ve klasöre genişletebileceğiz.

   Makroları dosya ve klasörler düzeyinde uygulayabildiğimiz an, makronun sağladığı marjinal faydayı da arttırmış olacağız. Her zamanki gibi örneklerle zenginleştireceğimiz Dosya ve Klasör Yönetimi dersi ile ilgili olarak, örnekleri birebir olarak uygulamanız bu konuda biraz daha anlama gücünüzü arttıracaktır. Çünkü yeni bir ‘Library’/kütüphane her zaman yeni nesneler, yeni metotlar ve yeni Properties demektir. Ve ilk başta kavraması az da olsa daha zorlu olabilir.  Ancak dikkatinizi verdiğiniz sürece örneklerle yine sıkıntısız bir ders süreci yaşayacaksınız. 

 

2- Scripting Library

    Yazdığımız makroların etki alanını genişletmek istersek üst paragrafta da bahsettiğimiz gibi ‘Scripting Library’ kullanmak zorundayız. Tam olarak konuya girmeden önce ‘Library’ yani kütüphane kavramını tekrar gözden geçirelim.  Kütüphaneler farklı amaçlar için hazırlanmış Enumerations(İleride İşleyeceğiz), Classes(Sınıflar), Sınıflara ait Properties, Methods ve Fonksiyonlardan oluşan bir dosyadır. Yani ‘KÜTÜPHANE’ dir. Bir kütüphaneye ait nesneleri kullanabilmek için, ilgili küthanenin referanslanması gereklidir. Yani kod yazılırken bu kütüphane ile bir bağlantı kurulmalıdır. Aksi durumda kütüphanede yer alan nesneleri yazdığımız kodlarda kullanamayız. 

    Dosya ve Klasör Yönetimi dersine Scripting kütüphanesi ile başlayalım.

 

2.1- Microsoft Scripting Runtime Library'in Referans Olarak Eklenmesi

Scripting Library kullanmak için aşağıdaki ilk önce;

    Tools—>References—> Açılan Listeden ‘Microsoft Scripting Runtime’ Kütüphanesinin yanındaki kutucuğa ‘Tik’ koyuyoruz. 

    Bu sayede bu kütüphane artık Referans olarak kullanılabilir hale gelecek ve ‘Uygun Referanslar’ olarak tanımlanacaktır. Bu arada liste biraz kalabalık olduğu için Scripting kütüphanesini gözden kaçırmanız kolay olabilir.

Dosya ve Klasor Yonetimi -RuntimeScriptingLibrary_AvailableReferences

 

2.2- Microsoft Scripting Runtime Library İçinde Bulunan Sınıflar, Metotlar, Özellikler ve Enumerations

    Sadece ‘Runtime Scripting Library’ e ait olan nesneleri görmek için ;

    View—>Object Browser—> Ve açılan pencerenin en üst sol köşesinde yer alan <All Libraries> seçeneğine tıklayarak, ‘Scripting’ kütüphanesini seçmeniz gereklidir. (Eğer ‘Scripting’ kütüphanesini göremezseniz, Tools—>References içerisinde yanlış kütüphanesi seçmişsiniz demektir.)

Dosya ve Klasor Yonetimi - RuntimeScriptingLibrary

 

    ‘Scripting’ seçtikten sonra sadece seçili küphanede tanımlı nesneleri görebiliyor olacaksınız. Sol tarafta ‘Classes’ sütununda sınıfları, sağ sütunda ise sınıflara tanımlı olan özellik, fonksiyon ve metodları görebilirsiniz.Hanigisinin metot hangisinin özellik olduğunu karıştıracak olursanız, üzerine tıklayın, sol alt köşede tıkladığınız nesnenin ne olduğu yazacaktır. 

3- Dosya ve Klasör Yönetimi - Scripting Library Kullanımı

    Şimdi bir kaç örnek ile konuyu daha anlaşılabilir bir hale getirelim. Dosya ve Klasör Yönetimi dersine FileSytemObject Sınıfı ile devam edelim.

3.1- FileSytemObject Sınıfı

    FileSystemObject sınıfı, içerisinde bizim dosya ve klasörlerle yapabileceğimiz işlemleri gerçekleştirmemize yarayan çok çok faydalı metotları barındırır. Aşağıdaki görselde FileSystemObject sınıfının altında bulunan metotları görebilirsiniz.

Dosya ve Klasör Yönetimi - Scripting_FileSystemObject# Gördüğünüz gibi kütüphanenin içinde yer alan sınıfın içerisinde onlarca metot yer alıyor.

#Bu sınıfta işlem yapmanın en büyük kolaylığı, metot isimlerinin tam olarak metotun ne yaptığını anlatıyor olmasıdır. Mesela ‘FileExists’ yani bir dosyanın varolup olmadığını sorgular, ‘DeleteFile’ dosyayı sil veya ‘CreateFolder’ dosya oluştur gibi. Aranızda ingilizce bilmeyenler varsa ‘İngilizce Öğrenmek İçin Nedenler’ listelerine bir ‘+’ daha koyabilir.

# CopyFile

#CreateFolder

#DeleteFile

#FileExists

gibi en fazla kullanacağınız düşündüğüm metotlarla ilgili şimdi birkaç örnek gerçekleştireceğiz. 

#Ancak ilk önemli olan konu Scripting.FileSystemObject sınıfına referans ile bağlantı kurmak ve bu sınıfa ait yeni bir değişken oluşturmaktır. Örneklerin içerisinde bu işlemlerin nasıl gerçekleştirildiğini de göreceğiz. 

 

 

 

3.1.1- Örnek 1 FileSystemObject CreateFolder Metodu

     CreateFolder metodu ile istediğimiz herhangi bir dosya veya klasör içerisine yeni bir dosya oluşturuyoruz.  

Dosya ve Klasör Yönetimi - CreateFolder

    Yazmış olduğumuz SubRoutine’i inceleyecek olursak;

    1_ İlk önce FileSystemObject sınıfına bir değişken atıyoruz. 

    2_Sonra da bu değişkeni yeni bir FileSystemObject nesnesi olarak tanımlıyoruz. Bu dakikadan sonra fso değişkenini kullanarak FileSystemObject sınıfına ait bütün metot ve özelliklere ulaşabileceğiz. 

    3_Bu aşamada tanımladığımız değişken olan; fso‘dan sonra nokta koyduğumuzda intellisense’de bütün metotları görebiliriz. Biz kullanıma açmış olduğumuz FileSystemObject metotlarından ‘CreateFolder’ metodunu yeni bir dosya oluşturmak için seçiyoruz. 

     NOT_1: Değişken ve referans tanımlarken kütüphanenin ismi olan ‘Scripting’ yazmasak da olur ancak yazmanız tavsiye edilir. 

    NOT_2: Subroutine içerisine fso değişkeni ile işimiz bittiği kısımda ‘Set fso = Nothing’ yazarak referans ile kurmuş olduğumuz bağlantının kopartılması, her ne kdar ‘End Sub’ ile de bu bağlantının sonlandırılacak olmasına rağme, faydalı bir alışkanlıktır. . 

    ‘CreateFolder’ metodu sadece bir adet zorunlu parametreye ihtiyaç duyar, o da yeni eklemek istediğiniz dosya için dosya yolu ve vermek istediğiniz isimdir. 

     Gördüğünüz gibi tırnak işareti içerisinde kalmış olan dosya yoluna ters slash ‘dan sonra istediğiniz ismi verebilirsiniz. Biz ‘\CreateFolder_Ornegi’ ismini verdik. Kodu çalıştırdıktan sonra yeni eklenen dosyayı da görselde sizinle paylaştık 

    Şimdi lütfen siz de kendi bilgisayarınızda bu basit işlemi gerçekleştirin. 

 

     CreateFolder metodu ile istediğimiz herhangi bir dosya veya klasör içerisine yeni bir dosya oluşturuyoruz.  

Dosya ve Klasör Yönetimi - CreateFolder

    Yazmış olduğumuz SubRoutine’i inceleyecek olursak;

    1_ İlk önce FileSystemObject sınıfına bir değişken atıyoruz. 

    2_Sonra da bu değişkeni yeni bir FileSystemObject nesnesi olarak tanımlıyoruz. Bu dakikadan sonra fso değişkenini kullanarak FileSystemObject sınıfına ait bütün metot ve özelliklere ulaşabileceğiz. 

    3_Bu aşamada tanımladığımız değişken olan; fso‘dan sonra nokta koyduğumuzda intellisense’de bütün metotları görebiliriz. Biz kullanıma açmış olduğumuz FileSystemObject metotlarından ‘CreateFolder’ metodunu yeni bir dosya oluşturmak için seçiyoruz. 

     NOT_1: Değişken ve referans tanımlarken kütüphanenin ismi olan ‘Scripting’ yazmasak da olur ancak yazmanız tavsiye edilir. 

    NOT_2: Subroutine içerisine fso değişkeni ile işimiz bittiği kısımda ‘Set fso = Nothing’ yazarak referans ile kurmuş olduğumuz bağlantının kopartılması, her ne kdar ‘End Sub’ ile de bu bağlantının sonlandırılacak olmasına rağme, faydalı bir alışkanlıktır. . 

    ‘CreateFolder’ metodu sadece bir adet zorunlu parametreye ihtiyaç duyar, o da yeni eklemek istediğiniz dosya için dosya yolu ve vermek istediğiniz isimdir. 

     Gördüğünüz gibi tırnak işareti içerisinde kalmış olan dosya yoluna ters slash ‘dan sonra istediğiniz ismi verebilirsiniz. Biz ‘\CreateFolder_Ornegi’ ismini verdik. Kodu çalıştırdıktan sonra yeni eklenen dosyayı da görselde sizinle paylaştık 

    Şimdi lütfen siz de kendi bilgisayarınızda bu basit işlemi gerçekleştirin. 

 

3.1.2- Örnek 2 FileSystemObject MoveFolder Metodu

     Yeni bir klasör oluşturduk, şimdi de bu klasörü başka bir dosya / klasörün içerisine taşıayalım. Bu sefer kullanacağımız metodumuz; ‘MoveFolder’. Bu metodun girilmesi gereken iki adet zorunlu parametresi vardır. İlk parametre Source: Yani taşınacak dosyanın dosya uzantısı. Diğer parametre ise Destination, yani hedef klasördür. 

     Hedef klasörü girerken eğer taşınılan klasörün adının aynı kalmasını istiyorsanız olduğu gibi bırakabilirsiniz. Ancak eğer yeni bir isimle kaydetmek isterseniz o zaman dosya yoluna ek olarak ters slash ve istediğiniz ismi yazmalısınız. Örnek: ‘\YeniIsim’ gibi. 

    Kullandığımız metot ne olursa olsun aradığımız dosyalar bulunamadığında, Sub-Routine hata verecektir. Bu nedenle dosyanın kaynak adresinde olup olmadığını kontrol etmek, ortaya çıkacak bir hatayı engellemeye yarayacaktır. Burada tekrar FileSystemObject referansımızı taşına fso değişkenini kullanarak, farklı bir metot olan ‘FileExists’ metodunu kullanıyoruz. 

    ‘FileExists’ metodunun görevi sadece girdiğiniz dosyanın varolup olmadığını kontrol etmektir. Be metodu, bir If koşullu durumu içinde kullanarak, dosya yoksa kullanıcıya bir mesaj iletilmesini de sağlıyoruz ve Sub-Routine’i durduracak olan hatanın önene geçmenin yanısıra, kullanıcıyı da bilgilendiriyoruz. Aşağıdaki görseli inceleyerek siz de aynı işlemi tekrarlayın. 

Dosya ve Klasör Yönetimi - MoveFolder

 

    If koşullu durumlarda kullandığımız dosya yolları çok uzun olduğu için alt alta yazmak zorunda kaldım, bu da kodun biraz karmaşık görünmesine sebep oldu.

 

 

NOT: IF koşullu durumunda uzun dosya yollarının kullanılmasından ortaya çıkan karmaşıklığı ve görüntü kirliliğini düzeltmek için bu adresileri birer değişkene atayabiliriz. 

Örnek olarak:

    Dim Kaynak  As String
Dim Hedef As String
Kaynak = "F:\macronimbus\Yazılar_FilesAndFolders(FileSystemObjects)\Ornekler\CreateFolder_Ornegi"
Hedef="F:\macronimbus\Yazılar_FilesAndFolders(FileSystemObjects)\Alistirma\Hedef\"

      Devamında da bu değişkenleri kod içerisinde kullanırız ve daha derli toplu bir görüntü elde ederiz. 

    If fso.FolderExists(Kaynak) Then
        fso.MoveFolder Kaynak, Hedef
    Else
        MsgBox "Taşımak istediğiniz dosya, girmiş olduğunuz adreste bulunmamaktadır!"
    End If

     Siz de taktir edersiniz ki kod bu şekilde çok daha düzgün görünüyor. Ben bu işlemi harici bir HDD üzerinde gerçekleştirdim ancak eğer masa üzerinde veya (UserProfile)kullanıcıya ait klasörlerde gerçekleştirecek olsaydık o zaman, Environ fonksiyonu ile görmüş olduğunuz kodu daha da kısaltabilirdik. 

     Örnek: Benim şuan kullandığım bilgisayarda kullanıcı adım “C:\Users\edagdelen.MyDomain” . Eğer masaüzerinde bir dosyada çalışmak isteseydim :

      “C:\Users\edagdelen.MyDomain\Desktop\macronimbus\Ders14\” gibi bir dosya üzerinde çalışıyor olacaktım. Yani bu dosya hedef ya da klasör dosyasından birisi olacaktı. Bu aşamada da bu dosya yolunu kısaltmak için Environ fonksiyonunu aşağıdaki gi kullanabildim ve  :

    Kaynak = Environ("Userprofile") & "\Desktop\macronimbus\Ders14\" 

     sonucuna ulaşırdım. Bu şekilde kendi kodunuzu düzenleyebilirsiniz. Çok da bir farkı yok diye düşünebilirsiniz, karar size ait. 

 

3.1.3- Örnek 3 FileSystemObject GetFile Metodu

    FileSystemObject.GetFile metodunu kullanarak Sctipting.File olarak tanımlanmış bir değişkene, bir dosyayı değer olarak atayabiliriz. Şimdi hemen örneğe geçelim ve bu karmaşık tanımı örnek ile anlamaya çalışalım.       

    Örneğimizde basit olarak, Scripting.File olarak tanımlanmış bir değişkene, FileSystemObject.GetFile ile değer atadıktan sonra, sahip olduğu bütün(Scripting.File sınıfına ait) özellikleri Debug.Pring ile Immediate Window üzerinden görüntüleyeceğiz. 

 

Dosya ve Klasör Yönetimi - RuntimeScriptingLibrary_GetFile

    Yukarıda örnekte, diğer örneklerden farklı olarak mavi kutu içine alınmış kısım ve o kutunun altında yer alan kodlar eklenmiştir. Burada yaptığımız işlem;

    1-‘Dosya’ isminde bir değişkenin tipini ‘Scripting’ kütüphanesinin ‘File’ sınıfı olarak belirttik,

    2- Dosya değişkenine ‘FileSystemObject’ sınıfına ait GetFile metodu ile (Kaynak & “\DD_1.xlsm”) dosyasını değer olarak atadık.

    Bu sayede Scripting kütüphanesi altında yer alan, File sınıfına ait bütün özellik ve metotları Dosya değişkeni üzerinden görebilir ve kullanabilir hale geldik.Dosya ve Klasör Yönetimi - Scripting_File

    # Yukarıdaki görselde, ‘Object Browser’ ekranında Scripting kütüphanesi, File sınıfına ait Properties ve metotları görebilirsiniz. 

    # Dosya değişkenine atanmış olan [Set Dosya= fso.GetFile(Kaynak & “\DD_1.xlsm”)] excel dosyasının artık ObjectBrowser’da gördüğümüz özelliklerini sorgulayabileceğiz.

    Bu özelliklere erişmek için sadece Dosya’değişkeninin ardından nokta koymamız yeterli olacaktır. IntelliSense açılacak ve bütün metot ve özellikleri liste halinde bize sunacaktır.

      Bu özellikleri herhangi bir yere yazdırmak yerine ‘Immediate Window’ aracılığıyla görüntüleyebiliyoruz. Bunun için daha önceki bölümlerde de kullandığımız ‘Debug.Print’ kullanıyoruz.

—-Debug.Print Dosya.Name 

gibi. Zaten bir çok örnek üstte yer alan görselde yazılmış ve çıktılar da ‘Immediate Window’ ile sizinle paylaşılmıştır. 

Debug.Print Dosya.Path
Debug.Print Dosya.DateCreated
Debug.Print Dosya.Drive
Debug.Print Dosya.ParentFolder
Debug.Print Dosya.Name
Debug.Print Dosya.ShortName
Debug.Print Dosya.Size
Debug.Print Dosya.Type
Debug.Print Dosya.Attributes

    Gördüğünüz gibi Dosya Yolu, Dosyanın Yaratıldığı Tarih, Dosyanın bulunduğu sürücü, Dosya Adı vb bütün özelliklere erişebiliyoruz. Bu özellikleri bu kalıp şekliyle istediğimiz her türlü kod içerisinde de kullanabiliriz. 

 

3.2-Dosya ve Klasör Yönetimi - Klasör Yapısı Seviyesinde Yapabileceğimiz İşlemler

    Dosya ve Klasör Yönetimi dersimizde, dosya konusunda biraz yol aldığımızı düşünüyorum. Artık excelwokbook’ları otomatik olarak açtığımız ve workbook adı verdiğimiz klasörlere, dosyaları kopyalayıp taşıyabilir ve eğer istersek oluşturulan dosyaları oluşturma tarihine göre bile sıralayabiliriz. Aslına bakarsanız, FileSystemObject içerisinde yer alan metotları çok zorlanmadan çalıştırabileceğinizi düşünüyorum. Eğer sıkıntı duyduğunuz bir nokta olursa her zaman e-posta ile bana ulaşabilir veya metotu yazıp üzerine gelerek ‘F1’ tuşuna basarak yardım sayfasını açabilirisiniz. 

     Şimdi çalışmalarımızı dosya seviyesinden klasör seviyesine çıkartmanın zamanı geldi. Bu sayede bir klasör içerisinde yer alan bütün dosyalar üzerinde işlem yapabileceğiz. Yani konunun ilk paragrafında bahsettiğimiz, makromuzun etki alanını tek bir dosyadan bütün bir klasöre genişletebileceğiz. Bu bölümde konuyu tamamiyle hazırlanmış olduğumuz örnekler üzerinden işleyeceğiz. İlk örneğimizle derse başlayalım .

 

3.2.1- Örnek 4 FileSystemObject GetFile Metodu

     Bu örnekte bir klasör içerisinde yer alan sadece excel dosyalarını açıyoruz, sonrasında Sheet1.Range(“A1”)’e Tarih ve Kullanıcı adını yazdırıp, sonra bütün workbookları kapatıyoruz. 

İlk olarak bu işlemleri gerçekleştireceğimiz, Klasöre bir göz atalım .

Klasor

    Gördüğünüz gibi klasör içerisinde excel dosyalarına ek olarak .docx, .txt ve başka bir dosya daha var. Buradaki amaç farklı dosyaların birlikte olduğu bir klasör içerisinde sadece excel dosyaları üzerinde çalışabilen bir kod hazırlamaktı.

    Şimdi her zaman yaptığımız gibi kodu satır satır açıklamaya çalışalım.

Dosya ve Klasör Yönetimi - Scripting_Folder_Code

    Bu örnekle gerçekleştirmek istediğimiz işlem; Bir klasör içinde yer alan, bütün dosyalar arasından sadece excel dosyalarını açıp, Sheet1.Range(“a1”) içerisine tarih ve kullanıcı adını yazdırmak, yapılan değişiklikleri kaydederek de açtığımız bütün excel dosyalarını kapatmaktır. Şimdi detaylı incelemeye geçelim;

    1 ) Sub-Routine’e ‘fso’ değişkeninin tipini tanımlayarak başlıyoruz. Artık fso değişkeni ‘Scripting.FileSystemObject’ sınıfına ait bir referans alabilecek durumdadır. 

    2 ) Tanımlamış olduğumuz fso değişkenini ‘Scripting.FileSystemObject’ sınıfı olarak olarak tanımlıyoruz.

    3 ) Kaynak isimli bir değişkeni ‘String’ veri tipinde tanımlıyoruz.

    4 ) Hedef isimli bir değişkeni ‘String’ veri tipinde tanımlıyoruz.

    5 ) Kaynak değişkenine değer olarak bir klasörün adresini atıyoruz.

    6 ) Hedef değişkenine değer olarak bir dosyanın adresini atıyoruz.

    8 ) Dosya isminde ‘Scripting.File’ tipinde bir değişken tanımlıyoruz. Artık herhangi bir dosya(file) bu değişkene atanabilir.

    9 ) Klasor isminde ‘Scripting.Folder’ tipinde bir değişken tanımlıyoruz. Artık herhangi bir klasor(folder) bu değişkene atanabilir.

    10 ) Açılan workbooklar kapatılırken ‘Yapılan Değişiklikleri Kaydetmek İstiyor musunuz?” gibi bir MsgBox belirir ve bizden yes, no ve cancel gibi bir seçeneği tıklamamızı ister. Bu uyarı mesajını bu yazdığımız kod ile geçici olarak yani bu Sub-Routine’in sonuna kadar kapatmış oluyoruz.

    11 ) Burada basit bir ‘For Each’ döngüsü kullanarak klasör içerisindeki bütün dosyaları geziniyoruz. Aynı kodda olduğu gibi Klasör içerisindeki her dosya için, For Each döngüsünün içinde yazan kodlar uygulanacaktır.

    12 ) Bu noktada If koşullu durumları kullanarak sadece excel dosyalarının açılmasını sağlıyoruz. Şimdi buraya biraz açalım. 

    If Left(fso.GetExtensionName(Dosya.Name), 2) = "xl" Then

    Kullandığımız metotların tek tek üzerinden gidelim

    ‘Dosya’ değişkeni ile kullandığımız .Name metodunu görmüştük. Bize dosyanın tüm adını verir. Sayfanın üst kısmında bir örnekte işlemiştik. Görmediğimiz;

    fso.GetFileExtensionName(); burada FileSystemObject sınıfı içerisindeki GetFileExtension metodu ile metodun, parantezleri içerisine yazdığımız dosyanın sadece uzantısını çekip alıyoruz. Yani eğer sonucu bir Uznt değişkenine atayacak olsak şöyle bir sonuç ile karşılaşırız;

     Dosya=”F:\macronimbus\Yazılar\18_FilesAndFolders(FileSystemObjects)\Alistirma\KayNak\DD_1.xlsm”

     Dosya_2=”F:\macronimbus\Yazılar\18_FilesAndFolders(FileSystemObjects)\Alistirma\KayNak\Kırtasiye.txt”

     Uznt=fso.GetFileExtensionName(Dosya.Name)

    Uznt.Value=”xlsm”

    Uznt_2=fso.GetFileExtensionName(Dosya_2.Name)

    Uznt_2.Value=”txt”

    Yani elde edeceğimiz sonuç tamamiyle String formatında “txt”, “docx”, “xls”, “xlsx”, “xlsm” tipinde olacaktır. Bu noktadan sonra ise Left metodu işin içine giriyor.

    Left(String,Length As Long) olarak Left metodunun 2 adet parametresi vadır. Burada String olarak biz “fso.GetFileExtensionName(Dosya.Name)” ifadesini girdik. 

    Lenght As Long parametresi ise girdiğimiz string’in soldan kaç basamağını, harfini almak istiyorsak rakam olarak girdiğimiz parametredir. Biz burada bu parametrenin ye yerine ise 2 girdik. Sebebi ise Excel dosyalarını açmak istiyoruz ve excel dosyalarının uzantıları 3 veya 4 harften((“xls”, “xlsx”, “xlsm”) oluşur. Ama ilk iki harf her zaman “xl” dir. 

    Yani buradaki if koşullu durumunda bizim yapılmasını istediğimiz şey basitçe; 

    “Eğer Klasör içerisinde yer alan dosyanın uzantısının soldan 2 harfi “xl” ise alttaki işlemleri gerçekleştir.(Yani Return True)”‘tir.

     Bu If koşullu durum bloğu sayesinde bir dosya demeti içinden sadece excel olanları seçtik.

     13 ) Worksheet ve Workbook Yönetimi Sayfamızda workbook’ların nasıl açıldığı, kapatıldığı ve kaydedildiği gibi işlemleri işlemiştik. Hatırlamayanlar aşağıdaki tuşlar yardımıyla ilgili sayfalarda bilgilerini tazeleyebilirler.

    If filtresinden geçen excel dosyalarını ilk önce bu kod satırı ile açıyoruz. Açmak için de Workbooks.Open metodunu kullanıyoruz. Bu metot için girmemiz gereken parametre ise Dosyanın adı dahil bütün dosya yoludur. Bu uzantıya ise .Path metodu kullanarak ulaşıyoruz. 

    Workbooks.Open Dosya.Path

 

     Bir For Each döngüsünde olduğumuz için Dosya değişkeni sırayla her bir dosyayı değer olarak alacağı için, bütün dosya yolları Workbooks.Open metodu ile açılacaktır.

 

    14 ) Buradaki kod yardımıyla da Dosya değişkeninin nitelediği bütün dosyaların isimleri kullanarak birer birer içlerindeki Sheet(1).Range(“a1”) hücresine, Now & Environ(“Username”) ile tarih ve kullanıcı ismi yazdırıyoruz. 

    15 ) If bloğu içerisine geçebilen excel dosyalarını da son olarak kapatıyoruz ve değişiklikleri kaydediyoruz. 

    16 ) If bloğunu kapatan komut

    17 )  For Each döngüsünü kapatan komut

    18 )  Son olarak da Uyarıları tekrar açıyoruz ve Sub-Routine bir sonraki satırda da son buluyor. 

 

     Artık klasör içerisinde yer alan bütün excel dosylarının sheet1.range(“a1”) hücrelerinde tarih ve kullanıcı adı yazıldı. 

 

DD_4

 

    Biz burada örnek olması amacıyla  sadece tek bir hücre için basit bir işlem gerçekleştirdik. Peki siz kendiniz ne yapabilirsiz?

-Sayfalara tek tek format verebilirsiniz,

-Sayfalarda yer alan tablolardaki en yüksek değerleri bulup özet bir tabloya yazabilirisiniz.(Bu esnada WorksheetFunctions.Max() metodunu kullanabilirsiniz)

-Açtığınız sayfalarda bir tablonun en alt sağ köşesindeki toplam değerini kopyalayıp özet tablo içerisine yazdırabilirsiniz,

-Açılan dosyalarda ve hatta sayfalarda belirli ürün ismiyle arama yaparak satış fiyatını veya miktarını bulabilir ve sonra canınız ne istiyorsa onu yapabilirsiniz,

    Tamamiyle neler yapabileceğiniz size kalmış durumda.

 

 

 

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 Önerileriniz İçin;

[email protected]