Özellik ikonu

Kill

İndirme izni yok

Genel Bakış

Kill (Kill statement), belirtilen yol ve ada sahip dosyaları diskten siler. Tek bir dosyayı ya da * ve ? joker karakterleriyle birden çok dosyayı silebilir. Silinen dosyalar Geri Dönüşüm Kutusu'na gitmez, bu yüzden dikkatli kullanılmalıdır.

Söz dizimi​

Kill deyiminin söz dizimi çok basittir:
VBA
Kill pathname
  • pathname: Silinecek dosyanın adı ya da deseni; zorunludur. Sürücü ve klasör yolunu içerebilir. Yol verilmezse geçerli klasördeki dosya aranır. Dosya adında * (sıfır ya da daha fazla karakter) ve ? (tek karakter) joker karakterleri kullanılabilir.
Kill bir deyimdir ve değer döndürmez. Dosya silinemezse çalışma zamanı hatası oluşur; bu hatayı On Error ile yakalayabilirsiniz.

Joker karakterler ve davranış​

  • Tek dosya: Kill "C:\Rapor\Satis.xlsx" yalnızca o dosyayı siler.
  • Desen: Kill "C:\Rapor\*.tmp" klasördeki tüm .tmp dosyalarını siler. ? ise tek karakterin yerini tutar; örneğin Yedek?.bak ifadesi Yedek1.bak dosyasıyla eşleşir.
  • Klasörler: Kill klasör silmez. Boş bir klasörü silmek için RmDir deyimini kullanın.
  • Alt klasörler: Joker karakter yalnızca belirtilen klasördeki dosyalara uygulanır, alt klasörlere inmez.
  • Kalıcı silme: Dosya Geri Dönüşüm Kutusu'na taşınmaz ve geri alınamaz.

Sık görülen hatalar​

Kill çalışırken şu çalışma zamanı hataları oluşabilir:
  • 53 (File not found): Dosya bulunamadı. Joker desenle hiçbir dosya eşleşmezse de aynı hata oluşur.
  • 70 (Permission denied): Dosya başka bir uygulamada açıktır ya da erişim izniniz yoktur.
  • 75 (Path/File access error): Dosya salt okunur olabilir. Önce SetAttr ile özniteliği vbNormal yapın, sonra silin.
  • 76 (Path not found): Belirtilen klasör yolu yoktur.
Silmeden önce Dir işleviyle dosyanın varlığını denetlemek ya da On Error ile hatayı yönetmek iyi bir uygulamadır.

1. Tek dosyayı denetleyerek silme​

Sayfada silinmesi planlanan dosyalar listelenmiştir. Aşağıdaki kodu standart bir modüle yapıştırın. Makro, dosya varsa siler; yoksa hata vermeden çıkar. Kod diskte dosya sildiği için bu sayfada çalıştırılmaz.
VBA 14 satır
Option Explicit

Sub TekDosyaSil()
    Dim yol As String
    yol = "C:\Rapor\Gecici\onbellek.tmp"

    ' Dosya varsa sil, yoksa hiçbir şey yapma
    If Dir(yol) <> "" Then
        Kill yol
        MsgBox "Dosya silindi."
    Else
        MsgBox "Dosya bulunamadı."
    End If
End Sub
Kill
Formülünü incelemek için bir hücre seçin.
ABC
1DosyaKlasörNot
2onbellek.tmpC:\Rapor\Gecici\Silinecek
3Satis_Ocak.xlsxC:\Rapor\Korunacak
4Yedek_2023.bakC:\Rapor\Arsiv\Korunacak
Silinecek DosyalarExcelDepo v1.0.0
Makro yalnızca onbellek.tmp dosyasını hedefler. Dir boş metin döndürürse dosya yoktur ve Kill hiç çalıştırılmaz. Böylece 53 numaralı hata oluşmaz. Bu örnek diske dokunduğu için sayfada çalıştırılmamıştır.

2. Kill öncesi yol ve desen doğrulama​

Toplu silme yapmadan önce yolları sayfada hazırlayıp denetlemek güvenlidir. Aşağıdaki kodu standart bir modüle yapıştırın. Makro her satır için tam yolu D sütununa yazar ve E sütununa durumu belirtir. Bu makro hiçbir dosyayı silmez, yalnızca yol metnini oluşturur ve kontrol eder.
VBA 26 satır
Option Explicit

Sub YollariHazirla()
    Dim ws As Worksheet
    Dim i As Long
    Dim ad As String

    Set ws = ActiveSheet

    For i = 2 To 5
        ad = CStr(ws.Cells(i, 2).Value)

        If Len(ad) = 0 Then
            ' Dosya adı boşsa Kill çalıştırılmamalı
            ws.Cells(i, 5).Value = "Dosya adı eksik"
        Else
            ws.Cells(i, 4).Value = ws.Cells(i, 1).Value & ad & "." & ws.Cells(i, 3).Value
            ' Joker karakter içeren adlar birden çok dosyayı etkiler
            If InStr(ad, "*") > 0 Or InStr(ad, "?") > 0 Then
                ws.Cells(i, 5).Value = "Joker içeriyor"
            Else
                ws.Cells(i, 5).Value = "Hazır"
            End If
        End If
    Next i
End Sub
Kill
Formülünü incelemek için bir hücre seçin.
ABCDE
1KlasörDosyaUzantıTam YolDurum
2C:\Rapor\Satis_OcakxlsxC:\Rapor\Satis_Ocak.xlsxHazır
3C:\Rapor\Arsiv\Yedek_2023bakC:\Rapor\Arsiv\Yedek_2023.bakHazır
4C:\Rapor\Gecici\gecici*tmpC:\Rapor\Gecici\gecici*.tmpJoker içeriyor
5C:\Rapor\txtDosya adı eksik
Yol HazırlamaExcelDepo v1.0.0
İlk satır için tam yol C:\Rapor\Satis_Ocak.xlsx olarak oluşturulur ve durum Hazır olur. Üçüncü satırda dosya adında * bulunduğu için yol C:\Rapor\Gecici\gecici*.tmp biçimindedir ve durum Joker içeriyor olarak işaretlenir; böyle bir yol Kill ile birden çok dosyayı silebilir. Dosya adı boş olan son satırın durumu Dosya adı eksik olur ve bu satır için Kill çalıştırılmamalıdır.

3. Joker ile toplu silme ve hata yönetimi​

Bir klasördeki tüm .tmp dosyalarını silen ve olası hataları yöneten kodu standart bir modüle yapıştırın. Kod diskte dosya sildiği ve MsgBox kullandığı için bu sayfada çalıştırılmaz. Sayfadaki liste, makronun hedeflediği desenleri gösterir.
VBA 29 satır
Option Explicit

Sub GeciciDosyalariTemizle()
    Dim klasor As String
    klasor = "C:\Rapor\Gecici\"

    On Error GoTo Hata

    ' Salt okunur dosyalar için önce öznitelik normale çekilebilir:
    ' SetAttr klasor & "eski.tmp", vbNormal

    Kill klasor & "*.tmp"
    MsgBox "Geçici dosyalar silindi."
    Exit Sub

Hata:
    Select Case Err.Number
        Case 53
            MsgBox "Silinecek dosya bulunamadı."
        Case 70
            MsgBox "Dosya açık ya da erişim reddedildi."
        Case 75
            MsgBox "Dosya salt okunur olabilir."
        Case 76
            MsgBox "Klasör yolu bulunamadı."
        Case Else
            MsgBox "Hata " & Err.Number & ": " & Err.Description
    End Select
End Sub
Kill
Formülünü incelemek için bir hücre seçin.
AB
1DesenEtkilenen dosyalar
2C:\Rapor\Gecici\*.tmpTüm .tmp dosyaları
3C:\Rapor\Gecici\Yedek?.bakYedek1.bak, Yedek2.bak gibi
4C:\Rapor\Gecici\*.*Klasördeki tüm dosyalar
Toplu SilmeExcelDepo v1.0.0
Makro, klasördeki tüm .tmp dosyalarını tek komutla siler. Hiçbir dosya eşleşmezse 53 numaralı hata oluşur ve Hata etiketindeki Select Case bloğu kullanıcıya uygun iletiyi gösterir. Ne olursa olsun silinen dosyalar geri alınamaz; bu nedenle desenleri çalıştırmadan önce dikkatle kontrol edin.

Kullanırken dikkat edin​

  • Silme işlemi geri alınamaz: Kill ile silinen dosyalar Geri Dönüşüm Kutusu'na gitmez ve Excel'deki Geri Al ile döndürülemez. Özellikle *.* gibi geniş desenleri kullanmadan önce yolu bir değişkene alıp denetleyin ve gerekirse kullanıcıdan onay isteyin.
  • Açık dosya silinemez: Excel'de ya da başka bir programda açık olan dosyayı silmeye çalışırsanız 70 numaralı Permission denied hatası alırsınız. Açık bir çalışma kitabını silmek için önce kapatın.
  • Klasör silmez: Kill yalnızca dosyaları siler. Boş bir klasörü silmek için RmDir kullanılır; içinde dosya bulunan klasör için önce dosyalar Kill ile silinmelidir.
  • Salt okunur dosyalar: Salt okunur özniteliği olan dosya silinmeden önce SetAttr ile vbNormal değerine getirilmelidir; aksi halde hata oluşur.
  • Güvenlik ve test: Yeni bir silme makrosunu önce örnek bir klasörde deneyin. Gerçek verilerde çalıştırmadan önce yedek alın; desen yanlış yazılırsa istemediğiniz dosyalar silinebilir.
  • İlgili konular:
    • Dir: Dosyanın ya da klasörün varlığını denetler.
    • RmDir: Boş klasörü siler.
    • MkDir: Yeni klasör oluşturur.
    • SetAttr: Dosya özniteliklerini değiştirir.
    • FileCopy: Dosya kopyalar.
    • Name: Dosyayı yeniden adlandırır ya da taşır.
    • On Error: Çalışma zamanı hatalarını yönetir.
    • Err nesnesi: Hata numarasını ve açıklamasını verir.
    • FileSystemObject.DeleteFile: Dosya silmenin nesne tabanlı alternatifi.
Örneklerdeki makroların tamamı indirilebilir Excel dosyasındadır (.xlsm). Dosyayı açtıktan sonra makroları etkinleştirin, ardından Alt + F11 ile Visual Basic Düzenleyicisi'nde kodları inceleyebilir ve Alt + F8 ile çalıştırabilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
13
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst