Dosya kapat ve sil

muratgunay48

Altın Üye
Katılım
10 Şubat 2010
Mesajlar
1,359
Excel Vers. ve Dili
Office 365 - Türkçe (64 bit)
Altın Üyelik Bitiş Tarihi
31-01-2026
Arkadaşlar, sayın hocalarım. Dün iş yükümü oldukça hafifletecek bir dosya siz değerli hocalarımın sayesinde tamamlandı.
Ancak son anda hata veriyor. Hata derken, seçili alanı kopyalıyor ancak linkleri yapıştırmıyor. Bu elzem.
Bunun dosyayı kapattıktan yapıştırdığı için olduğunu fark ettim. Yani "EK" adlı dosya açık kalırsa sorun olmuyor.
Şöyle düşündüm, işlemler bitecek en son satıra

Kod:
Sub kapat_sil()
Workbooks.Close "C:\Users\muratgunay48\Desktop\TEST\EK.xls"
Kill "C:\Users\muratgunay48\Desktop\TEST\EK.xls"
End Sub
Eklersem olur. Ama kodum hata verdi. Hatam nedir? Yardımcı olabilir misiniz?
Teşekkür ederim. Saygılarımla.
 

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
847
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
işlem bittikten sonra EK.xls dosyasını kapatıp silmek istiyorsunuz. Ancak Workbooks.Close ifadeniz yanlış kullanılmış, çünkü bu metot bu şekilde bir dosya yolu almaz. Doğru yaklaşım, dosyayı nesne olarak tanımlayıp o nesneyi kapatmaktır.

Kod:
Sub kapat_sil()
    Dim wb As Workbook
    Dim dosyaYolu As String
    dosyaYolu = "C:\Users\muratgunay48\Desktop\TEST\EK.xls"   
  
    On Error Resume Next
    Set wb = Workbooks("EK.xls")
    On Error GoTo 0

    If Not wb Is Nothing Then       
        wb.Close SaveChanges:=False
    End If   
    
    On Error Resume Next
    Kill dosyaYolu
    If Err.Number <> 0 Then
        MsgBox "Dosya silinemedi. Hata: " & Err.Description
    Else
        MsgBox "Dosya başarıyla kapatıldı ve silindi."
    End If
    On Error GoTo 0
End Sub
Workbooks.Close tek başına kullanılmaz. Önce dosyayı bir Workbook nesnesine atamak gerekir.
Kill komutu dosya açıkken çalışmaz, mutlaka kapatılmış olması gerekir.
On Error Resume Next ile hataları geçici olarak bastırıyoruz, ancak işlem sonrası mutlaka On Error GoTo 0 ile normal hata işleme sistemine dönüyoruz.

dENERMİSİNİZ
 

muratgunay48

Altın Üye
Katılım
10 Şubat 2010
Mesajlar
1,359
Excel Vers. ve Dili
Office 365 - Türkçe (64 bit)
Altın Üyelik Bitiş Tarihi
31-01-2026
işlem bittikten sonra EK.xls dosyasını kapatıp silmek istiyorsunuz. Ancak Workbooks.Close ifadeniz yanlış kullanılmış, çünkü bu metot bu şekilde bir dosya yolu almaz. Doğru yaklaşım, dosyayı nesne olarak tanımlayıp o nesneyi kapatmaktır.

Kod:
Sub kapat_sil()
    Dim wb As Workbook
    Dim dosyaYolu As String
    dosyaYolu = "C:\Users\muratgunay48\Desktop\TEST\EK.xls" 

    On Error Resume Next
    Set wb = Workbooks("EK.xls")
    On Error GoTo 0

    If Not wb Is Nothing Then     
        wb.Close SaveChanges:=False
    End If 
  
    On Error Resume Next
    Kill dosyaYolu
    If Err.Number <> 0 Then
        MsgBox "Dosya silinemedi. Hata: " & Err.Description
    Else
        MsgBox "Dosya başarıyla kapatıldı ve silindi."
    End If
    On Error GoTo 0
End Sub
Workbooks.Close tek başına kullanılmaz. Önce dosyayı bir Workbook nesnesine atamak gerekir.
Kill komutu dosya açıkken çalışmaz, mutlaka kapatılmış olması gerekir.
On Error Resume Next ile hataları geçici olarak bastırıyoruz, ancak işlem sonrası mutlaka On Error GoTo 0 ile normal hata işleme sistemine dönüyoruz.

dENERMİSİNİZ
Hocam çok teşekkür ederim.
Hocam peki sadece kapatmak olsa. Kaydederek ya da kaydetmeden.
 

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
847
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
Kaydederek kapatmak isterseniz: wb.Close SaveChanges:=True
Kaydetmeden kapatmak isterseniz (şu anki haliyle bu yapılıyor): wb.Close SaveChanges:=False

Dosyayı Excel açıkları arasında arıyor (Workbooks("EK.xls")),
Bulursa kaydetmeden kapatıyor (SaveChanges:=False),
Ardından Kill komutuyla dosyayı siliyor.

Kaydetmek isterseniz tek yapmanız gereken wb.Close SaveChanges:=True olarak değiştirmek.
 

muratgunay48

Altın Üye
Katılım
10 Şubat 2010
Mesajlar
1,359
Excel Vers. ve Dili
Office 365 - Türkçe (64 bit)
Altın Üyelik Bitiş Tarihi
31-01-2026
Kaydederek kapatmak isterseniz: wb.Close SaveChanges:=True
Kaydetmeden kapatmak isterseniz (şu anki haliyle bu yapılıyor): wb.Close SaveChanges:=False

Dosyayı Excel açıkları arasında arıyor (Workbooks("EK.xls")),
Bulursa kaydetmeden kapatıyor (SaveChanges:=False),
Ardından Kill komutuyla dosyayı siliyor.

Kaydetmek isterseniz tek yapmanız gereken wb.Close SaveChanges:=True olarak değiştirmek.
Anladım hocam.
Kill dosyaYolu komutunu yazmazsak sadece dosyayı kapatır, doğru mu anladım?
 

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
847
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
Evet, Kill komutunu yazmazsanız, dosya sadece kapatılır ama silinmez. Silinmesini istiyorsanız Kill komutunu ayrıca yazmanız gerekir.
 

muratgunay48

Altın Üye
Katılım
10 Şubat 2010
Mesajlar
1,359
Excel Vers. ve Dili
Office 365 - Türkçe (64 bit)
Altın Üyelik Bitiş Tarihi
31-01-2026
Evet, Kill komutunu yazmazsanız, dosya sadece kapatılır ama silinmez. Silinmesini istiyorsanız Kill komutunu ayrıca yazmanız gerekir.
Çok teşekkür ederim hocam. Sayenizde her gün biraz daha geliştiriyorum kendimi. Sağ olun. Var olun.
 
Üst