EXCEL VBA'DA DELETE FILE [DOSYA SİLME]

 

VBA Dosya Silme, belirli klasör yollarından dosyaları silme işlemidir. VBA'da dosyaları silmenin iki farklı yolu vardır, yani birincisi Kill Yöntemi ve ikincisi "FileSystemObject" ile. Bu makalede, bir klasördeki dosyaları silmek için KILL yönteminden özel olarak bahsedeceğiz.


"Kill" yöntemi, belirli bir klasörden bir dosyayı siler. Herhangi bir dosyayı silmek, klasörden birden fazla dosyayı silmek, tüm klasörü silmek ve bunun gibi birçok şeyi yapmak gibi çeşitli eylemler gerçekleştirebiliriz.

Örneğin aşağıdaki VBA koduna bakın .

VBA Dosya Silme - Tanım Örneği

Bu kod masaüstündeki “Satış Raporu(Sales Report).xlsx” dosyasını ve “Power BI Kullanım Örnekleri” klasörünü silecektir.


ÖNEMLİ NOKTALAR


  • VBA Klasörden dosya silmek VBA KILL metodunu kullanarak mümkündür.
  • KILL metodu belirtilen dosya adını belirtilen dosya klasörü konumundan siler.
  • Joker karakter olan yıldız işaretini (*) kullanarak aynı dosya uzantısına sahip tüm dosyaları silebiliriz.
  • Excel dosyalarının tümünü, dosya uzantısını ve dosya adının başına ve dosya uzantısından sonra joker karakter (*) koyarak silebiliriz.
  • “.txt” dosya uzantısını kullanarak tüm metin dosyalarını silebiliriz.

VBA Kodu Kullanarak Dosyalar Nasıl Silinir?

VBA'da dosyaları silmek için KILL komutunu kullanırız. VBA'da görevleri otomatikleştirmek için çok sayıda ara dosya oluşturur ve bunları belirli klasörlere kaydederiz. Projenin sonunda bu dosyaları silmeliyiz.

Bu nedenle, projenin sonunda dosyaların silinmesini otomatikleştirmek gerekir. Örneklere geçmeden önce, size KILL yöntemi sözdizimini gösterelim.

Aşağıda VBA'da KILL metodunun sözdizimi yer almaktadır.

KILL (PathName)

PathName: KILL metodu sadece bir argümana ihtiyaç duyar, yani silinecek dosyanın yolu.

KILL metodunun path kısmına yıldız işareti (*) ve soru işareti (?) gibi joker karakterler ekleyebiliriz.

  • Yıldız işareti (*): Bu, herhangi sayıda dize uzunluğunu eşleştirmek için kullanılacaktır.
  • Soru İşareti (?): Bu, yalnızca tek bir karakteri eşleştirmek için kullanışlıdır.

Şimdi VBA'da klasördeki dosyayı silme adımlarına bakalım.

VBA Kodu Kullanılarak Dosyalar Nasıl Silinir - Temel Örnek

Bu klasörden “Sales Report 2017.xlsx” adlı dosyayı silelim. Aşağıda listelenen adımları takip edin.

  1. Makroya bir isim vererek Visual Basic Düzenleyicisi penceresinde bir alt prosedür oluşturun.


    Temel Örnek - Adım 1

  2. Alt prosedüre KILL komutunu girin.


    Temel Örnek - Adım 2

  3. KILL komutu için dosya klasör yolunu girin. Klasör yolunu almak için klasörün içine girin.


    Temel Örnek - Adım 3

  4. Adres çubuğuna tıklayın. Klasör yolunu mavi renkle vurgulayacaktır. Klasör yolunu oradan kopyalayın.


    Temel Örnek - Adım 4

  5. Visual Basic Editor penceresine geri dönün ve kopyaladığınız yolu KILL komutunun içine yapıştırın ve yapıştırdığınız bağlantıyı çift tırnak içine alın.


    Temel Örnek - Adım 5

  6. Dosya konum yolunu kopyaladıktan sonra ters eğik çizgi giriyoruz ve silinecek dosya adını, dosya uzantısıyla birlikte giriyoruz.


    VBA Kodu Kullanarak Dosyalar Nasıl Silinir - Temel Örnek - Adım 6a

    Gördüğünüz gibi, çift tırnak işaretlerinin içine ters eğik çizgi ve uzantılı dosya adını girdik. Şimdi, F5 kısayol tuşuna basarak kodu çalıştırın. Belirtilen hedefteki dosyayı silecektir.


Örnekler

VBA dosya silme yönteminin pratik uygulamalarda kullanımına dair bazı örneklere bakalım.

Örnek 1 – VBA Kodunu Kullanarak Bir Klasördeki Dosyaları Silmek İçin Kill Yöntemi

Görüldüğü gibi, KILL VBA'da bir klasörden dosyaları silmek için yaygın olarak kullanılır. Önceki örnekteki aynı klasörü ele alalım.

Excel'de VBA Dosya Silme - Örnek 1

Bu klasörden dosyalardan birini, yani “Satış Raporu 2015.xlsx” dosyasını silmemiz gerektiğini varsayalım.

Örnek 1 - 1

Aşağıdaki kodu kullanarak dosyayı bu klasörden silebiliriz.

KILL metodunun içerisinde silinecek dosyanın yolunu ve ismini kullandık.

Dosya adını girerken yaptığımız bir şey de uzantıyı girmekti çünkü KILL metoduna dosya hakkında bilgi vermek önemlidir, özellikle de aynı ada sahip iki veya daha fazla dosya olduğunda. Bu nedenle, dosya uzantısı onları farklılaştırır.

Kodu çalıştırın. Belirtilen dosyayı belirtilen klasör konumundan silecektir.

Örnek 2 – Tüm Excel Dosyalarını Sil

Bazen bir klasördeki tüm Excel dosyalarını silmemiz gerekebilir. Bunu yapmak için bir yöntemimiz var. Burada da önceki iki örnekteki aynı klasörü ele alalım.

Excel'de VBA Dosya Silme - Örnek 2

Toplamda yedi dosyamız var ve bunların 5'i Excel dosyamız. Hepsinden kurtulmalıyız. 5 Excel dosyamız olduğu için beş farklı satır kod yazamayız; bunun yerine herhangi bir sayıda karakterle eşleşmesi için joker karakter yıldız işareti (*) kullanacağız.

Öncelikle klasör yolunu kopyalayın.

Örnek 2 - 1

Klasör yolunu girdikten sonra dosya adlarını girmeden önce ters eğik çizgiyi (\) birleştirmeliyiz.

Örnek 2 - 2

Sonra, dosya adlarını girmeliyiz. Bunu yapmak için, dosya uzantısını takip eden yıldız işaretini (*) kullanırız.

VBA Excel'de Dosya Silme - Örnek 2 - 3

Burada, joker karakter (*) dosya uzantısı “.xlsx” öncesindeki herhangi bir sayıda karakterle eşleşecektir  .

Temel olarak, “.xlsx” dosya uzantısına sahip tüm dosya adlarıyla eşleşecektir  .

Bu kodu çalıştırdığımızda,  “.xlsx” dosya uzantılı tüm Excel dosyaları silinecektir.

Örnek 2 - 4

Ancak yine de Excel dosyalarından birini, yani “Satış Raporu 2016.xlsm” dosyasını görebiliyoruz.

Bunun sebebi dosyanın uzantısının  “.xlsx” değil  “.xlsm” olmasıdır .  Joker karakter (*) dosya adıyla eşleşmiş olmasına rağmen, verdiğimiz dosya uzantısı  “.xlsx” dir  dolayısıyla KILL metodu bunu silme işleminde dikkate almayacaktır.

Her türlü Excel dosyasını silmek için joker karakterini (*) aşağıdaki gibi eklememiz gerekmektedir.

VBA Excel'de Dosya Silme - Örnek 2 - 5

İlk joker karakter (*) dosya adıyla eşleşecek ve ikinci joker karakter ise  “.xl.” sözcüklerinden sonraki dosya uzantısıyla eşleşecektir.

Tüm Excel dosya uzantıları “.xl” ile başlayacaktır; dolayısıyla belirtilen klasörden tüm Excel dosyalarının silinmesini sağlayacaktır.

Örnek 3 – Yalnızca Tüm Klasörü Sil

Bir klasördeki dosyaları silmek bu şekilde yapılır. Peki ya klasörün kendisini tamamen silmek? VBA delete file metodunda klasörün tamamını silmek mümkün değildir. Ancak RmDir metodunu kullanabiliriz .

RmDir'in sözdizimi KILL metoduna benzer .

VBA Excel'de Dosya Silme - Örnek 3 - 1

Klasör yolunu çift tırnak işareti içinde vermeli ve ters eğik çizgiyi (\) birleştirmeliyiz. Önceki örneklerdeki aynı klasörü alalım.

VBA Excel'de Dosya Silme - Örnek 3

Bilgisayarımızdan “Files Folder” klasörünü silmemiz gerektiğini varsayalım. Kodu şu şekilde oluşturuyoruz:

Örnek 3 - 2

Kodu çalıştıralım ve ne olacağını görelim.

VBA Excel'de Dosya Silme - Örnek 3 - 3

Çalışma zamanı hatası '75' Yol / Dosya erişim hatası aldık.

Bunun nedeni,  RmDir  fonksiyonunun yalnızca boş klasörleri silmesidir. “Files Folders” klasörünün içinde bazı dosyalar veya alt klasörler olduğundan,  RmDir  fonksiyonu bunları silemez.

Bu nedenle, tüm klasörü silmeden önce klasörü boşaltmalıyız. Bunu yapmak için, tüm dosyaları silmek için aşağıdaki kodu kullanırız.

Örnek 3 - 4

Şimdi, dosya adları ve uzantılar için joker karakter (*) kullandık. Bunun nedeni, tüm dosyaları silmemiz gerektiğidir; bu nedenle, tüm dosya adları ve uzantılarıyla eşleşmesi için bir joker karakter sağlıyoruz.

Aşağıdaki satıra, tüm klasörü silmek için RmDir  fonksiyon kodunu ekleyebiliriz  .

VBA Excel'de Dosya Silme - Örnek 3 - 5

Artık RmDir fonksiyonunda belirtilen klasörün tamamı silinecektir .

Not: VBA RmDir  fonksiyonu kullanılarak silinecek klasör için ters eğik çizgi (\) eklenmesi zorunludur  .

Örnek 4 – Klasördeki Tüm Metin Dosyalarını Silin

Klasörden Excel dosyalarını sildiğimiz gibi, benzer şekilde tüm metin dosyalarını da silebiliriz. Örneğin, aşağıdaki klasör resmine bakın.

Excel VBA Dosya Silme - Örnek 4

Excel dosyalarımız var, PDF dosyalarımız var ve metin dosyalarımız var. Şimdi, yalnızca metin dosyalarını seçmenin yolunu belirlememiz gerekiyor.

VBA'nın metin dosyasını tanımlamasının ve bilmesini sağlamanın bir yolu dosya uzantısıdır. Metin dosyalarının dosya uzantısı ".txt"dir.

Tüm metin dosyalarını tek seferde silmek için, metin dosyası uzantısıyla birlikte joker karakter yıldız işaretini (*) kullanabiliriz.

Aşağıdaki kod tüm metin dosyalarını silecektir.

Örnek 4 - 1

Bu kodu çalıştırdığımızda, klasördeki tüm metin dosyaları silinecektir. Aşağıdaki görüntü aynı sonucun bir örneğidir.

Excel VBA Dosya Silme - Örnek 4 - 2

Örnek #5 – Salt Okunur Dosyaları Sil

VBA Delete files, salt okunur dosyalar için geçerli değildir çünkü KILL yöntemi salt okunur dosyaları silmeye çalıştığımızda VBA delete file permission denied hatası alacaktır. Bu nedenle, iki başka VBA fonksiyonunu kullanmalıyız , yani, VBA Dir$ ve VBA SetAttr.

Aşağıdaki kod sadece salt okunur dosyaları silecektir.

Excel VBA Dosya Silme - Örnek 5

Artık belirtilen klasör konumundan salt okunur tüm dosyalar silinecektir.

Not:  VBA SetAttr fonksiyonunda birden fazla seçeneğimiz olabilir ve bu yöntemlerden biri de VBA'nın dosyayı dizinden silme komutudur. Kullanabileceğimiz komut vbDirectory'dir.

Dikkat Edilmesi Gereken Önemli Noktalar

  • VBA KILL yöntemi salt okunur dosyaları silmez.
  • Belirtilen klasör konumu bulunamazsa, '53' Dosya Bulunamadı Çalışma zamanı hatası alırız.
  • Joker karakter yıldız işareti (*) herhangi sayıda karakterle eşleşecektir.
  • KILL metodu sadece belirtilen uzantıya sahip dosyaları siler.

1. VBA'da joker karakterli dosyalar nasıl silinir?

VBA'da joker karakterler yıldız işareti (*) ve soru işareti (?) ile dosyaları silebiliriz. Örneğin, aşağıdaki kod tüm uzantılara sahip tüm excel dosyalarını silecektir.
KILL "Complete folder location path\*.xl*"

2. VBA dosya silme özelliği neden çalışmıyor?

VBA dosya silme, verilen dosya veya dosya konum yolu doğru değilse çalışmayacaktır. Aşağıdaki hatayı verecektir.

Excel VBA Dosya Silme - SSS 2

3. VBA kullanarak var olmayan bir dosyayı silmeye çalışırsam ne olur?

Mevcut olmayan bir dosyayı silmeye çalıştığımızda 53′ Dosya bulunamadı çalışma zamanı hatası alırız.

4. VBA kullanarak belirli bir dosya uzantısına sahip bir dosyayı silmek mümkün müdür?

Evet, belirli bir dosya uzantısına sahip bir dosyayı silmek mümkündür. Örneğin, “.xlsx” dosya uzantısı, belirtilen dosya uzantısına sahip tüm Excel dosyalarını silecektir.



Yorum Gönder

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