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.
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.
İ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.
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.
Söz dizimi
Kill deyiminin söz dizimi çok basittir: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.
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.
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.| A | B | C | |
|---|---|---|---|
| 1 | Dosya | Klasör | Not |
| 2 | onbellek.tmp | C:\Rapor\Gecici\ | Silinecek |
| 3 | Satis_Ocak.xlsx | C:\Rapor\ | Korunacak |
| 4 | Yedek_2023.bak | C:\Rapor\Arsiv\ | Korunacak |
Silinecek DosyalarExcelDepo v1.0.0
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.| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Klasör | Dosya | Uzantı | Tam Yol | Durum |
| 2 | C:\Rapor\ | Satis_Ocak | xlsx | C:\Rapor\Satis_Ocak.xlsx | Hazır |
| 3 | C:\Rapor\Arsiv\ | Yedek_2023 | bak | C:\Rapor\Arsiv\Yedek_2023.bak | Hazır |
| 4 | C:\Rapor\Gecici\ | gecici* | tmp | C:\Rapor\Gecici\gecici*.tmp | Joker içeriyor |
| 5 | C:\Rapor\ | txt | Dosya adı eksik |
Yol HazırlamaExcelDepo v1.0.0
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.| A | B | |
|---|---|---|
| 1 | Desen | Etkilenen dosyalar |
| 2 | C:\Rapor\Gecici\*.tmp | Tüm .tmp dosyaları |
| 3 | C:\Rapor\Gecici\Yedek?.bak | Yedek1.bak, Yedek2.bak gibi |
| 4 | C:\Rapor\Gecici\*.* | Klasördeki tüm dosyalar |
Toplu SilmeExcelDepo v1.0.0
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.