EXCEL VBA'DA FILESYSTEMOBJECT FONKSİYONU

 


FileSystemObject (FSO), bilgisayar dosya sistemimize erişmemize yardımcı olan bir VBA özelliğidir. Bunu kullanarak dosyaları ve klasörleri okuyabilir, düzenleyebilir ve silebiliriz. Ayrıca belirli bir klasörün var olup olmadığını kontrol edebilir, dosyaları bir klasörden diğerine kopyalayabilir ve FileSystemObject (FSO) ile birçok başka dosyayla ilgili görevi gerçekleştirebiliriz.

Excel kullanarak görevleri otomatikleştirmek için hücre aralıkları, çalışma sayfaları, çalışma kitapları ve diğer birçok nesneyle çalışırız. Ancak, harici dosyalara ve klasörlere erişmek için VBA güçlü bir araçtır.


ÖNEMLİ NOKTALAR


  • FileSystemObject, dosyalar, klasörler vb. gibi Excel dışındaki nesneleri ifade eder.
  • VBA FileSystemObject'i kullanarak sürücülere, klasörlere ve dosyalara erişebilir ve bunları değiştirebiliriz.
  • FileSystemObject, belirli bir sürücünün toplam alanını bulmamıza ve ayrıca sürücünün boş alanını bulmamıza yardımcı olur.
  • Bir klasörde döngüye girebilir ve klasördeki tüm dosya adlarını alabiliriz. VBA FileSystemObject'i kullanarak, dosyalara okuma/yazma da yapabilirsiniz.

Açıklama ve Kullanımlar

FileSystemObject (FSO), Excel dışındaki dosyalar ve klasörler gibi nesnelere erişmek için gereklidir. Örneğin, VBA FileSystemObject (FSO) kullanarak aşağıdaki nesnelerin hepsini inceleyebiliriz.

Sürücü (Drive): Sürücü, klasörler, alt klasörler ve dosyalar için erişmemiz gereken ilk nesnedir. FileSystemObject'i (FSO) kullanarak bir sürücünün var olup olmadığını, yolunu, türünü, boyutunu vb. kontrol edebiliriz.

Klasör (Folder): Bir klasör dosyaları kaydetmek için kullanılır. FileSystemObject'i (FSO) kullanarak klasörler oluşturabilir, belirli bir klasörün var olup olmadığını kontrol edebilir, bir klasörü değiştirebilir, silebilir ve bir konumdan diğerine kopyalayabiliriz.

Dosya (File): VBA FileSystemObject'i (FSO) kullanarak dosyalar oluşturabilir, belirli bir dosyanın var olup olmadığını kontrol edebilir, bir klasörden diğerine dosya oluşturabilir, değiştirebilir, silebilir ve kopyalayabiliriz.

Metin Akışı (Text Stream): textStream nesnesi metin dosyaları oluşturmanıza veya okumanıza olanak tanır.

FileSystemObject (FSO) ile gerçekleştirebileceğimiz bazı eylemler şunlardır:

  • VBA filesystemobject getfolder: Bu, istediğimiz klasörü kontrol etmemize yardımcı olacaktır.
  • VBA filesystemobject getfile: Bu, belirtilen dosyanın yolda mevcut olup olmadığını kontrol etmemize yardımcı olur.

Örneğin, bilgisayarımızda yeni bir klasör oluşturmak istiyorsak, Folder nesnesinin “Create Folder” metodunu kullanabiliriz. Aşağıdaki kod bir klasör oluşturacaktır.

Sub FSO_Example()
Dim MyFSO As FileSystemObject
MyFSO = New FileSystemObject
MyFSO.CreateFolder “C:\Users\Jeevan AY\Desktop\FSOTest”
End Sub

Bu kod masaüstünde “FSOTest” adında bir klasör oluşturacaktır. Kodu çalıştırdığımızda masaüstünde “FSOTest” adında bir klasör görebilirsiniz.

Örnek 2

FileSystemObject (FSO) Nasıl Etkinleştirilir?

FileSystemObject (FSO) Excel VBA'da etkin değildir. Ancak, VBA FileSystemObject'e iki şekilde etkinleştirerek erişebiliriz. İlk olarak, Excel nesnesinin dışındaki dosya ve klasörlerle ilgileneceğimiz için, bu harici nesneleri, yani sürücüleri, klasörleri ve dosyaları tutan kütüphaneye referansı ayarlamalıyız.

Excel'de FileSystemObject'i (FSO) etkinleştirmenin birkaç yolu vardır.

  1. Microsoft Scripting Runtime Library'ye bir başvuru ayarlanıyor.
  2. VBA kodunun içerisinde kütüphaneye başvuran bir nesnenin oluşturulması.

Her iki yöntem de iyi çalışır. Ancak bu makale, yeni başlayanların anlaması için daha kolay olan Microsoft Scripting Runtime Library'ye referans vermeye odaklanacaktır.

Microsoft Scripting Runtime Library'ye Referans Ayarla

Referansı ayarlamadan önce bilgisayarınızda VBA FileSystemObject'in etkin olup olmadığını kontrol edin.

Bir değişken tanımlayın ve veri türünü FileSystemObject olarak ayarlamayı deneyin.

VBA FilesystemObject (veri türünü ayarla)

VBA FileSystemObject referansını ayarlamayı denediğimizde, onu IntelliSense listesinde görmüyoruz. Bu nedenle, bilgisayarınızda etkin değil. Ancak, FileSystemObject IntelliSense listesinde görünüyorsa etkindir.

FileSystemObject'i adım adım nasıl etkinleştireceğinizi aşağıda bulabilirsiniz.

Adım 1: ALT + F11 kısayol tuşuna basarak Visual Basic Editor penceresini açın . VBE penceresi açılacaktır.

Adım 2: Visual Basic Editor penceresinde “Araçlar” sekmesine tıklayın ve ardından “Başvurular”a tıklayın.

VBA FilesystemObject - Etkinleştir - Adım 1

Adım 3: Aşağıdaki “Referanslar – VBA Projesi” penceresi açılacaktır.

VBA FilesystemObject - Etkinleştir - Adım 3

Başvurular penceresinde aşağı kaydırın ve “Microsoft Scripting Runtime”ı seçin.

VBA FilesystemObject - Etkinleştir - Adım 3 - Çalışma Zamanı

Adım 4: “Tamam”a tıklayın. Artık bilgisayarınızdaki Dosya Sistemi Nesnesine erişebilirsiniz.

VBA FilesystemObject - Etkinleştir - Adım 4

VBA FileSystemObject nesnesine Visual Basic Editör penceremizden erişebiliriz.

VBA Kodunda FileSystemObject Örneği Oluşturma

İşin yapıldığından emin olmak için yalnızca FileSystemObject'i etkinleştirmek yeterli değildir; bunun yerine, kod içerisinde VBA FileSystemObject için bir örnek oluşturmalıyız.

FileSystemObject örneğini oluşturmak için aşağıdaki adımları izleyelim.

Adım 1: DIM ifadesini kullanarak bir değişken tanımlayın.

VBA FilesystemObject - Örnek - Adım 1

Adım 2: Değişkeni tanımladıktan sonra ona FileSystemObject veri türünü atayın.

VBA FilesystemObject - Örnek - Adım 2

Adım 3: Tanımlanan değişken bir nesne veri türünü tuttuğundan, nesneyi ona atamak için SET anahtar sözcüğünü kullanmalıyız.

SET anahtar sözcüğünü eşittir işaretiyle birlikte kullanın.

VBA FilesystemObject - Örnek - Adım 3

Adım 4: Bu, FileSystemObject örneği oluştururken en önemli adımdır.

SET anahtar sözcüğünde FileSystemObject'e aşağıdaki gibi yeni bir örnek atamamız gerekiyor.

VBA FilesystemObject - Örnek - Adım 4

FileSystemObject'in yeni bir örneğini oluşturacaktır. Şimdi "MyFSO" değişkeni referansını tutar. FileSystemObject'in tüm özelliklerine ve yöntemlerine onun aracılığıyla erişebiliriz.

Bunu test etmek için değişken adını ve bir nokta girerek FileSystemObject'in özelliklerini ve yöntemlerini görebilirsiniz.

VBA FilesystemObject - Örnek - Adım 4 - Özellikler

VBA FileSystemObject örneğini oluşturmanın faydalarından biri, otomasyon görevini daha yönetilebilir hale getirmeye yardımcı olan IntelliSense listesinin gösterildiği yerdir.

Örnekler

Şimdi FileSystemObject kullanımına birkaç örnekle bakalım.

Örnek #1 – Toplam Sürücü Alanını Bulun

FileSystemObject'i kullanarak bilgisayarımızın sürücüsünün boyutunu bulabiliriz. Sonra, VBA kodu için aşağıda listelenen adımları izleyin.

Adım 1: Değişkeni tanımlayarak ve daha sonra VBA'daki SET ifadesini kullanarak FileSystemObject'i buna atayarak FileSystemObject'in bir örneğini oluşturun .

VBA FilesystemObject - Örnek 1 - Adım 1

Adım 2: Ardından başka bir değişken tanımlayın ve veri türünü “Drive” olarak atayın.

VBA FilesystemObject - Örnek 1 - Adım 2

Adım 3: Atanan veri türü “Drive” bir nesne veri türüdür; dolayısıyla, Drive nesnesini SET anahtar sözcüğünü kullanarak tanımlanan değişkene atamalıyız.

VBA FilesystemObject - Örnek 1 - Adım 3

Sürücüyü değişkene atarken FileSystemObject değişkeni olan “MyFSO” yu kullandık ve “C” sürücüsünü buna atamak için “GetDrive” metodunu kullandık.

Adım 4: Sürücünün boyutunu atamak için başka bir değişken tanımlayın.

VBA FilesystemObject - Örnek 1 - Adım 4

Adım 5: Şimdi, tanımlanan değişken için sürücü alanı atamalıyız. Sürücü değişkeni “MyDrive” FileSystemObject'in referansını tuttuğundan, sürücü alanını almak için bunu kullanabiliriz.

VBA FilesystemObject - Örnek 1 - Adım 5

MyDrive.TotalSize bize “C” sürücüsünün toplam alanını verir.

Adım 6: Toplam sürücü alanını bir mesaj kutusunda gösterin.

VBA FilesystemObject - Örnek 1 - Adım 6

“C” sürücüsündeki toplam disk alanını görmek için kodu çalıştırın.

VBA FilesystemObject - Örnek 1 - Adım 6 - yürütüldü

Elde edilen sonuç çok büyük bir sayıdır. Ancak bu belirsizdir çünkü "Bytes" cinsindendir ve GB'ye dönüştürülmesi gerekir.

Yukarıdaki sayıyı 1073741824'e (1 GB) bölerek "Bayt" cinsinden alanı GB'a dönüştürün.

VBA FilesystemObject - Örnek 1 - Adım 6 - Bölme
VBA FilesystemObject - Örnek 1 - Adım 6 - GB.jpg

Yani, “C” sürücüsünde toplam kullanılabilir alan 476 GB'tır. Bunu doğrulamak için bilgisayarımızın “C” sürücüsünü kontrol edebiliriz.

VBA FilesystemObject - Örnek 1 - Adım 6 - Sürücü

Referans olması açısından kodun tamamı aşağıdadır.

Sub FSO_FindDisk_Space()

'Create an instance of FileSystemObject
Dim MyFSO As FileSystemObject
Set MyFSO = New FileSystemObject

'Get the drive name to the variable
Dim MyDrive As Drive
Set MyDrive = MyFSO.GetDrive("C:")

'Get the total size of the drive
Dim MyDrive_Space As Double
MyDrive_Space = MyDrive.FreeSpace

'Convert and Show the drive space in GB
MsgBox (MyDrive_Space / 1073741824)

End Sub

Yukarıdaki kod bize verilen sürücünün toplam alanını gösteriyor; ayrıca aşağıdaki kodu kullanarak sürücünün boş alanını da bulabiliriz.

Sub FSO_FindDisk_Space()

'Create an instance of FileSystemObject
Dim MyFSO As FileSystemObject
Set MyFSO = New FileSystemObject

'Get the drive name to the variable
Dim MyDrive As Drive
Set MyDrive = MyFSO.GetDrive("C:")

'Get the total size of the drive
Dim MyDrive_Space As Double
MyDrive_Space = MyDrive.FreeSpace

'Convert and Show the drive space in GB
MsgBox (MyDrive_Space / 1073741824)

End Sub

Önceki ve bu kod arasındaki tek fark sarı vurgulanmış alandır. Burada “TotalSize” yerine “FreeSpace” kullandık. Bize C sürücüsünün boş alanını gösterecektir.

VBA FilesystemObject - Örnek 1 - Adım 6 - GB.jpg

Yani C sürücüsünün toplam boş alanı 262 GB'tır.

VBA FilesystemObject - Örnek 1 - Adım 6 - Sürücü

Örnek 2 – Klasörün Var Olup Olmadığını Kontrol Etme

FileSystemObject'i kullanarak, belirli bir klasörün var olup olmadığını kontrol edebiliriz. Dosyayı belirli bir klasörden almak için bilgisayarımızda belirli bir klasörün var olup olmadığını kontrol etmek önemlidir.

Örneğin aşağıdaki klasöre bakın.

Örnek 2

Masaüstümüzde “FSOTest” adında bir klasörümüz var. Aşağıdaki kodu kullanarak bu klasörün var olup olmadığını kontrol edelim.

Örnek 2 - Kod

Bu kodu çalıştırdığımızda bize bir mesaj kutusunda aşağıdaki sonucu verecektir.

VBA FilesystemObject - Örnek 2 - Çıktı

Masaüstümüzde “FSOTest” klasörü olduğundan “Verilen klasör verilen yolda bulunmaktadır.” sonucunu alıyoruz.

VBA FilesystemObject - Örnek 2 - Çıktı - mevcut değil

Eğer belirtilen klasör yolda yoksa aşağıdaki sonucu alacağız.

Örnek 3 – Dosyanın Var Olup Olmadığını Kontrol Etme

Klasörün var olup olmadığını kontrol ettikten sonraki adım klasörün içine girmek ve gerekli dosyanın var olup olmadığını kontrol etmektir. Bir dosyanın var olup olmadığını adını ve uzantısını kullanarak kontrol edebiliriz.

Kod önceki örneğe benziyor, sadece iki değişiklik yapıyoruz:

  1. Klasör adının ardından istediğiniz dosya adını şu şekilde yazın:

“C:\Users\User\Desktop\FSOTest\Sales Report 2023.xlsx”

“FSOTest” klasör adından sonra ters eğik çizgiyi ve ardından dosya adını, yani “Satış Raporu 2023.xlsx” girdik.

  • FolderExists metodu yerine “FileExists” metodunu seçmeliyiz.

Kodun tamamı şu şekildedir.

Sub FSO_File_Exists()
FileSystemObject'in bir örneğini oluşturun
Dim MyFSO As FileSystemObject
Set MyFSO = New FileSystemObject

'Assign the file name along with the path to the variable
Dim FolderName As String
FolderName = "C:\Users\User\Desktop\FSOTest\Sales Report 2023.xlsx"

'Use the "FileExists" method to check
If MyFSO.FileExists(FolderName) Then
    MsgBox "The given file exists in the given path"
Else
    MsgBox "The given file does not exist in the given path"
End If

End Sub

Yukarıdaki kodu çalıştırmadan önce klasör içerisinde dosyayı oluşturalım.

Örnek 3 - Klasör

Kodu çalıştırdığımızda aşağıdaki sonucu elde edeceğiz.

Örnek 3 - Çıktı

Belirtilen yolda bir dosya mevcut olduğundan, mesaj kutusu “Belirtilen dosya belirtilen yolda mevcuttur” mesajını gösterir.

Belirtilen dosyaya ulaşılamıyorsa, “Belirtilen dosya belirtilen yolda bulunmuyor.” mesajı görüntülenecektir.

Örnek 4 – Klasördeki Tüm Dosyaların Listesini Alın

Bir klasörde dolaşıp tüm dosya adlarını alabiliriz. Örneğin, aşağıdaki klasöre ve içindeki dosyalara bakın.

Örnek 4

Klasörde dört dosyamız var. Bu dört dosyadan bir PowerPoint dosyamız ve üç Excel dosyamız var.

Amaç, tüm dosyaların adlarını hücrelerde yakalamak ve depolamaktır. Örneğin, aşağıdaki kod tüm dosyaların adlarını hücrelere alacaktır.

Sub FSO_File_List()
'FileSystemObject örneği oluştur
Dim MyFSO As FileSystemObject
Set MyFSO = New FileSystemObject
'Klasör adını ve yolunu değişkene ata
Dim FolderName As Folder
Set FolderName = MyFSO.GetFolder(“C:\Users\User\Desktop\FSOTest”)
'Bir değişken tanımla ve FILE veri türünü ata
Dim MyFile As File
'Hücrede depolanacak bir değişken tanımla
Dim k As Integer
'Hücre adresini ikinci satırdan başlat
k = 2
'Döngüleri kullanarak tüm dosyalar arasında dolaş
For Each MyFile In FolderName.Files
Cells(k, 1).Value = MyFile.Name
k = k + 1
Next MyFile
End Sub

Aşağıdaki gibi tüm dosya adlarını listeleyecektir.

Örnek 4 - Çıktı

Dikkat Edilmesi Gereken Önemli Noktalar

  • Excel'de FileSystemObject varsayılan olarak etkin değildir.
  • VBA FileSystemObject nesneleri ifade ettiğinden, SET anahtar sözcüğünü kullanarak nesnenin bir örneğini oluşturmamız gerekir.
  • Verilen yol bilgisayarda mevcut değilse FileSystemObject “Yol bulunamadı” hatası verir.
Yol bulunamadı
  • Dosyadan bahsederken uzantısını da belirtmemiz gerekir, çünkü aynı dosya adı farklı uzantılara sahip iki veya daha fazla dosyaya verilebilir.


1. VBA'da Scripting.FileSystemObject nasıl kullanılır?

Bildiğimiz gibi, FileSystemObject Excel VBA'da etkin değildir; referansı manuel olarak ve kod aracılığıyla ayarlayabiliriz.

Referansı FileSystemObject'e ayarlamak için aşağıdaki kodu kullanabiliriz.

Sub Scripting()
    Dim MyFSO As Object
    Set MyFSO = CreateObject(“Scripting.FileSystemObject”)
End Sub


Nesne referansını manuel olarak ayarlama sürecini ortadan kaldıracaktır.

2. VB Script'te FileSystemObject sınıfının Drive nesnesine neden ihtiyaç vardır?

Sistemin sürücüsünü ifade etmek için bir değişkene Sürücü veri türü atamak önemlidir.

3. VBA'da Createobject scripting FileSystemObject nedir?

CreateObject, FileSystemObject örneğini açıkça (yani FileSystemObject'e manuel olarak referans ayarlamadan) oluşturmaya yarayan bir yöntemdir.

4. VBA FileSystemObject neden çalışmıyor?

VBA FileSystemObject aşağıdaki nedenlerden dolayı çalışmayacaktır:

 Verilen yol bulunamazsa, çalışmayacaktır.
 Verilen yol gerekli olandan farklıysa, hata verecektir. Küçük bir boşluk veya nokta bile yolu yanlış yapacaktır.
 FileSystemObject'i manuel olarak etkinleştirirseniz ve dosya, FileSystemObject'in etkinleştirilmediği başka bir sistemde açılırsa, çalışmayacaktır.

Yorum Gönder

DT KARİYER KPSS Dünyasına Hoş Geldiniz
Sevgili dostum nasıl yardımcı olabilirim?
Bu alana yazınız...