FileSystemObject, sistemle bağlantılı klasörler ve dosyalarla çalışmak için kullanılır. Dosyalara, klasörlere, sürücüye ve metin akışlarına erişmek için kullanabiliriz. Yalnızca dosya, klasör ve metin dosyalarına erişmekle kalmaz, aynı zamanda oluşturabilir. Bu işlemler sistemin sabit diski ile sınırlı olmayıp dosyaya bağlı herhangi bir cihaz ile sınırlıdır. Bu, kalem sürücülere, cd rom'lara veya sanal olarak bağlı ağ sürücülerine erişebileceğiniz anlamına gelir.
VBA'da FileSystemObject kullanarak yapabileceğimiz işlemler şunlardır:
Metin dosyalarını oluşturmak, açmak, okumak, yazmak ve silmek için.
Klasör eklemek, değiştirmek ve silmek için.
Dosyalar ve klasörler arasında yineleme yapmak için.
Dosyaları veya klasörleri başka yerlere kopyalamak ve taşımak için.
Konumda bir dosya veya klasörün bulunup bulunmadığını kontrol etmek için
VBA'da FileSystemObject'e Nasıl Erişilir?
Dosya sistemi nesnesi, Microsoft Komut Dosyası Çalıştırma Zamanı Kitaplığı'nın bir parçasıdır. Bir FileSystemObject'e erişmek için, ona bağlanmamız veya bir referans eklememiz gerekir. Microsoft Komut Dosyası Çalışma Zamanı Kitaplığı veya Scrrun.dll.
Not: Scrrun.dll, TextStream Object kullanılarak dosyaların oluşturulmasını ve değiştirilmesini desteklediğinden, FileSystemObject ikili dosyaların çalışmasını desteklemez.
VBA'da FileSystemObject oluşturmak için iki yöntem vardır:
1: CreateObject yöntemini kullanarak FSO nesnesi oluşturma:
Bu yöntemi kullanarak önce bir değişken nesne türü tanımlıyoruz. Ardından, CreateObject kullanarak FSO nesnesinin referansını bu değişkene ayarlayın:
Sub LearnFso() 'Dim fso As Object nesne değişkenini oluşturma 'Nesne Oluşturma Yöntemini kullanarak FileSystemObject'i oluşturun Set fso = CreateObject("Scripting.FileSystemObject") Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR" ) Bitiş Alt
Bu yöntem dinamik ve aktarılabilir. Bu, kodu başka sistemlerle paylaşıyorsanız, bu kodun mükemmel şekilde çalışacağı anlamına gelir. Microsoft Runtime Scripting sürümünün hangi sürümüne sahip olduğunuz önemli olmayacaktır.
Tek dezavantajı, VBA tarafından sağlanan intellisense'i göremeyecek olmanızdır. FileSystemObject'in tüm özelliklerini ve yöntemlerini kullanmak için bilginize güvenmeniz gerekecek.
2: Microsoft Runtime Scripting'e Referans Ekleyerek FSO Nesnesi Oluşturma
new anahtar sözcüğünü kullanarak doğrudan VBA'da bir FileSystemObject oluşturabilirsiniz. Bunun için sisteminizdeki en son Microsoft Komut Dosyası Çalıştırma Zamanına bir referans eklemeniz gerekecektir.
Referans eklemek için araçlar menüsündeki referanslar seçeneğine gidin. Burada, Microsoft Komut Dosyası Çalıştırma Zamanı dll'sini bulun. Kontrol edin ve Tamam'ı tıklayın.
Artık FSO nesnesini oluşturmaya ve kullanmaya hazırsınız.
Sub LearnFso() Dim fso as new FileSystemObject Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR") End Sub
Veya
Sub LearnFso() Dim fso as FileSystemObject Set fso = New FileSystemObject Debug.Print fso.GetBaseName("E:\MTR\Feb'18 MTR") End Sub
Her ikisi de iyi çalışacaktır.
Bu yöntemin en büyük avantajı, VBA'nın zekasını görebileceksiniz. VBA size fso nesnesinin tüm özelliklerini ve yöntemlerini gösterecektir. Ayrıca ne tür değişkenleri kabul edeceğini ve ne tür bir değer döndüreceğini de söyleyecektir.
Bu kodu başka sistemlerle paylaşırsanız, araçlardan Scripting Runtime'a referans eklemelerini söylemeniz gerekir, aksi takdirde kullanıcı tanımlı türün tanımlanmadığı bir derleme hatası alırlar. Yani diğer programlama dillerini içe aktarmak gibidir.
FSO'nun bir anahtar kelime olmadığını unutmayın. Değişken adı olarak kullanabilirsiniz. Sadece filesystemobject'i fso olarak adlandırmak bir kuraldır. Bu yüzden bazı insanlar bunun bir anahtar kelime olduğunu karıştırıyor.
FSO nesneleri oluşturmanın her iki yönteminin de açıklarken bahsettiğim avantaj ve dezavantajları vardır. Bu yüzden ihtiyacınıza göre kullanın. Bu yazımda FileSystemObject oluşturmanın ikinci yöntemini kullanacağım.
Artık VBA'da bir FileSystemObject oluşturmayı bildiğimize göre, bu bilgiyi bazı anlamlı görevler yaparken kullanalım. Örneklere geçelim diyorum.
Örnek 1: Belirtilen Klasördeki Tüm Alt Klasörü Alın
Göreceğimiz ilk örnek, belirli bir klasörden alt klasör adlarını almaktır.
Sub LearnFso() ' ihtiyacımız olacak değişkenleri azaltıyor Dim fso As FileSystemObject ' Değişkeni FileSystemObject için Dim fdr As Folder ' Temel klasör için değişken Dim subfdr As Folder ' Alt klasörler için değişken Dim fdrpath As String ' taban yolunu depolamak için klasör 'Nesneleri başlatma fdrpath = "D:\Downloads" 'Klasörü bildirme Set fso = New FileSystemObject 'fso nesnesini oluşturma Set fdr = fso.GetFolder(fdrpath) ' Verilen klasörün klasör nesnesini oluşturma 'tüm öğeleri almak için döngü alt klasörlerin adı Her subfdr için fdr.SubFolders Debug.Print subfdr.Name Sonraki subfdr End Sub
Yukarıdaki kodu çalıştırdığınızda, elde ettiğiniz şey bu.
Evet! Bu benim indirme klasörüm. Buna konsantre olmayın.
Bu nasıl çalıştı?
Adımlarla anlayalım:
1: İhtiyacımız olacak değişkenleri belirlemek
Dim fso As FileSystemObject ' FileSystemObject için Değişken
Dim fdr As Folder ' Temel klasör için değişken
Dim subfdr As Folder ' Alt klasörler için değişken
Öncelikle bu örnekte ihtiyaç duyacağımız tüm değişkenleri tanımladık. İlk değişken elbette fso dosya sistemi nesnesi olarak. fdr ve subfdr değişkenleri klasör tipindedir. Doğrudan oluşturmak yerine bir dosya türü nesnesi oluşturmak için fso nesnesini kullanacağız. NS fdrpath is use değişkeni, tüm alt klasörlerini almak istediğimiz temel klasörün yolunu tutmak için kullanılır.
2: Nesneleri başlatma
fdrpath = "D:\İndirilenler" 'Klasörün bildirilmesi
Set fso = New FileSystemObject 'fso nesnesini oluşturma
Set fdr = fso.GetFolder(fdrpath) 'Verilen klasörün klasör nesnesini oluşturma
Bu adımda subfdr dışında bildirdiğimiz tüm nesneleri başlattık. fso nesnelerinin getFolder yöntemini kullanarak fdr dosya değişkenini başlattığımızı unutmayın.
FileSystemObject öğesinin GetFolder() yöntemi, bir klasör veya dizinin yolunu dize olarak alır ve dosya türü nesnesini döndürür.
3: klasör nesnesindeki tüm alt klasörlerin adını almak için döngü
fdr.SubFolders'daki her bir subfdr için
Debug.Print subfdr.Name
Sonraki alt dizin
Burada fdr dosya nesnesindeki her bir alt klasörde dolaşmak için bir for her döngü kullandık. Döngü için file nesnesinin SubFolders özelliğini kullandık.
Her alt klasörün adını almak için name özelliğini kullanırız. Ve yapılır.
Örnek 2: Bir Klasördeki Tüm Dosya yollarını ve Alt Klasörlerini Alın
Bir klasördeki ve alt klasöründeki tüm dosyaların tüm yollarını veya tam adlarını almak için örnek 1 koduna birkaç satır daha eklememiz gerekiyor.
Sub LearnFso() Dim fso As FileSystemObject Dim fdr As Klasör ' Temel klasör için değişken Dim subfdr As Folder ' Alt klasörler için değişken Dim fdrpath As String 'temel klasörün yolunu saklamak için Dim fl As File 'dosya nesnesini depolamak için fdrpath = "D:\downloads" Set fso = New FileSystemObject Set fdr = fso.GetFolder(fdrpath) 'döngüsü Her subfdr için fdr.SubFolders'da Her fl için subfdr.Files'da her dosyada döngü yapmak için Debug.Print fl.Path 'dosya adı alınıyor Sonraki fl Sonraki subfdr' ana klasörün dosyalarını almak için Her fl İçin fdr.Files Debug.Print fl.Path Sonraki fl End Sub
Folder.Files() yöntemi, bir alt klasördeki dosyaları döndüren yöntemdir. File.Path() yöntemi, dosyanın tam adresini döndürür.
Ana klasörün ve onun alt klasöründeki tüm dosyaları yinelemek için her birimizin bir iç döngüsü var.
Ana klasörün dosyalarını almak için başka bir döngü kullanıyoruz.
Örnek 3: Dosya Adlarını bir CSV dosyasına kaydedin.
Önceki örnekte, belirli klasörlerin dosya yollarının hemen pencereye nasıl yazdırılacağını öğrendik. Bu örnekte, bu yolları bir CSV dosyasına nasıl kaydedeceğimizi öğreneceğiz. Bunu yapmak için sadece koda birkaç satır eklememiz gerekiyor. Aşağıdaki kalın kod satırlarına bakın.
Sub LearnFso() Dim fso As FileSystemObject Dim fdr As Klasör ' Temel klasör için değişken Dim subfdr As Klasör ' Alt klasörler için değişken Dim fdrpath As String 'temel klasörün yolunu saklamak için Dim fl As File 'dosya nesnesini depolamak için Dim fileList As TextStream 'Bir metin akışı nesnesi fdrpath = "D:\downloads" Set fso = Yeni FileSystemObject Set fdr = fso.GetFolder(fdrpath) Set fileList = fso.CreateTextFile(fdrpath & "\File List in This Folder.csv", True, False) 'döngü tüm alt klasörlerin adını almak için Her subfdr İçin fdr.SubFolders İçin Her fl için subfdr.Files'da her dosyada döngü yapmak için fileList.Write fl.Path & "," Sonraki fl Sonraki subfdr ' ana klasörün dosyaları Her biri için fdr.Files dosyasında fileList.Write fl.Path & "," Sonraki fl fileList.Close End Sub
Burada FileStream türünde yeni bir nesne tanımladık. dosya listesi
Aşağıdaki satırı kullanarak filelist değişkenini bir filestream nesnesiyle başlattık.
fileList = fso.CreateTextFile(fdrpath & "\File List in This Folder.csv", True, False) ayarla
Bir FileStream nesnesi oluşturmak için FSO'nun CreateTextFile yöntemini kullanıyoruz. Bir metin dosyası oluşturur. Bu yöntem, tam yolu olan bir dosyanın adını kabul eder. İlk değişken bunu yapıyor. Bir csv dosyası oluşturmak için .csv uzantısını kullanıyoruz. İkinci değişken, üzerine yazmaya izin vermek için kullanılır. Üçüncü argüman, ikili dosya olmadığını beyan etmek için False olur.
Döngülerde, oluşturulan dosyadaki her dosya yolunu yazmak için debug.print'i filelist.Write yöntemiyle değiştiririz.
Evet arkadaşlar, FileSystemObject'i bu şekilde kullanabilirsiniz. FSO, sonraki makalelerde tartışacağımız daha birçok şey için kullanılabilir. FSO ile ilgili sorgunun bu makalesi hakkında herhangi bir şüpheniz varsa, aşağıdaki yorum bölümünde bana sorun.
Excel VBA UserForms'a Başlarken| Excel'de nasıl form oluşturulacağını, VBA araç kutusunun nasıl kullanılacağını, kullanıcı girdilerinin nasıl ele alınacağını ve son olarak kullanıcı girdilerinin nasıl saklanacağını anlatacağım. Bu konuları bir örnek ve adım adım kılavuz kullanarak inceleyeceğiz.
Excel'de VBA değişkenleri| VBA, Visual Basic for Applications anlamına gelir. Microsoft'tan bir programlama dilidir. MSExcel, MS-Word ve MS-Access gibi Microsoft Office uygulamalarıyla kullanılırken VBA değişkenleri belirli anahtar kelimelerdir.
Excel VBA Değişken Kapsamı| Tüm programlama dillerinde, tanımlanmış bir değişkene nereden erişilebileceğini tanımlayan değişken erişim belirteçlerine sahibiz. Excel VBA İstisna değildir. VBA'nın da kapsam belirleyicileri vardır.
ByRef ve ByVal Argümanları | Bir argüman farklı bir alt veya fonksiyona ByRef argümanı olarak iletildiğinde, gerçek değişkenin referansı gönderilir. Değişkenin kopyasında yapılan herhangi bir değişiklik orijinal argümana yansır.
Microsoft Excel'de VBA kullanarak onay istemleri olmadan sayfaları silin | VBA kullanarak sayfaları sildiğiniz için ne yaptığınızı biliyorsunuz. Excel'e bu uyarıyı göstermemesini ve lanet olası sayfayı silmesini söylemek istersiniz.
Microsoft Excel 2016'da VBA Kullanarak Yeni Çalışma Kitabı Ekleme ve Kaydetme| Bu kodda, önce bir çalışma kitabı nesnesine bir başvuru oluşturduk. Sonra onu yeni bir çalışma kitabı nesnesiyle başlattık. Bu yaklaşımın yararı, bu yeni çalışma kitabında işlemleri kolayca yapabilmenizdir. Kaydetme, kapatma, silme vb.
Excel VBA Durum Çubuğunda Bir Mesaj Görüntüle| Excel'deki durum çubuğu, kod izleyicisi olarak kullanılabilir. VBA kodunuz uzun olduğunda ve VBA'yı kullanarak birkaç görev yaptığınızda, ekranın titrediğini görmemek için genellikle ekran güncellemesini devre dışı bırakırsınız.
Microsoft Excel 2016'da VBA Kullanarak Uyarı Mesajlarını Kapatın| Bu kod yalnızca VBA uyarılarını devre dışı bırakmakla kalmaz, aynı zamanda kodun zaman verimliliğini de artırır. Nasıl olduğunu görelim.
Popüler Makaleler:
Verimliliğinizi Artıracak 50 Excel Kısayolu | Görevinizde daha hızlı olun. Bu 50 kısayol, Excel'de daha da hızlı çalışmanızı sağlayacaktır.
Excel'de DÜŞEYARA İşlevi | Bu, farklı aralıklardan ve sayfalardan değer aramak için kullanılan excel'in en çok kullanılan ve popüler işlevlerinden biridir.
Excel 2016'da EĞERSAY | Bu şaşırtıcı işlevi kullanarak değerleri koşullarla sayın. Belirli değerleri saymak için verilerinizi filtrelemeniz gerekmez. Gösterge tablonuzu hazırlamak için Countif işlevi gereklidir.
Excel'de SUMIF İşlevi Nasıl Kullanılır | Bu, başka bir gösterge panosu temel işlevidir. Bu, belirli koşullardaki değerleri özetlemenize yardımcı olur.