Soru Yedekleme kodlarına sınırlama getirme

Katılım
29 Haziran 2018
Mesajlar
297
Excel Vers. ve Dili
2016 TÜRKÇE
Arkadaşlar merhaba ; Yine bu forumdan aldığım aşağıdaki kodlarla dosyamı kapatırken yedeğini alıyorum. Ancak zaman içinde bir çok yedek dosyam oldu. Benim sizlerden istediğim buna bir sınırlama getirmeniz. Şöyle ki;

Gün içinde bazen 3 - 4 defa yedek aldığım oluyor. Bu kodlara ilave yaparak son 3 günün en son alınan yedekleri kalacak, diğerleri silinecek bir ilave yapmanız. Şimdiden teşekkürler.

Kullandığım kod;

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Set ds = CreateObject("Scripting.FileSystemObject")
ThisWorkbook.Save
If ds.FolderExists("D:\YEDEKLER") = False Then
ds.CreateFolder "D:\YEDEKLER"
End If
If ThisWorkbook.Path = "D:\YEDEKLER" Then Exit Sub
If MsgBox("Dosyanın yedeğini almak istiyor musun?", vbInformation + vbYesNo, "DURUM") = vbYes Then
yol = "D:\YEDEKLER\" & Replace(Now, ":", "_") & "-" & ThisWorkbook.Name
ds.CopyFile ThisWorkbook.FullName, yol
End If
End Sub
 

TURKOLOG

Altın Üye
Katılım
13 Kasım 2008
Mesajlar
744
Excel Vers. ve Dili
2016 64 TR
Altın Üyelik Bitiş Tarihi
29-10-2026
Bunun yerine hedef olan yedek dosyasında tarih ve saat esas alinarak hep 10 dosyaya izin verse yeni yedek dosya alinacagi zaman en eski tarihli 11. Yedek silinse daha mı mantıklı olur acaba
 
Katılım
29 Haziran 2018
Mesajlar
297
Excel Vers. ve Dili
2016 TÜRKÇE
Elbette olabilir. Ancak ben ana dosya üzerindeki değişiklikleri gün sonu itibariyle görmek istiyorum. Bazen aynı gün içinde farklı saatlerde birden çok yedek alıyorum. Bunun için gün içindeki son alınan yedek o günün asıl dosyası oluyor. Ertesi günkü değişiklikler de bu dosya üzerinden oluyor. Yedek almaktaki maksadım son dosyada veya dosyalarda geri dönülmez bir bozulmada en az zararla kurtulmak. Saygılar.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,397
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bu işlem için yedekleme işleminde sadece tarihi kullanırsanız gün içinde sadece bir yedek alınmış olur. Bu şekilde sanki daha kontrollü bir yedekleme yapabilirsiniz.

Bu kodu deneyiniz. Son 3 güne ait yedekler hariç ilgili klasördeki ismi tarih ile başlayan tüm dosyalar silinecektir.

C++:
Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim FSO As Object, Yol As String, Klasor As Object
    Dim Dosya_Adi As String, Dosya As Object, Tarih As Date
    
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    ThisWorkbook.Save
    
    Yol = "C:\YEDEKLER"
    
    If FSO.FolderExists(Yol) = False Then
        FSO.CreateFolder Yol
    Else
        Set Klasor = FSO.GetFolder(Yol)
        
        For Each Dosya In Klasor.Files
            If Left(Dosya.Name, 1) <> "~" Then
                Tarih = Split(Dosya.Name, " ")(0)
                If Tarih < Date - 2 Then
                    Dosya.Delete
                End If
            End If
        Next
    End If
    
    If ThisWorkbook.Path = Yol Then Exit Sub
    
    If MsgBox("Dosyanın yedeğini almak istiyor musun?", vbInformation + vbYesNo, "DURUM") = vbYes Then
        Dosya_Adi = Yol & Application.PathSeparator & Replace(Now, ":", "_") & "-" & ThisWorkbook.Name
        FSO.CopyFile ThisWorkbook.FullName, Dosya_Adi
    End If

    Set Klasor = Nothing
    Set FSO = Nothing
End Sub
 
Katılım
18 Mayıs 2009
Mesajlar
1,184
Excel Vers. ve Dili
Excel 2016 Türkçe
Arkadaşlar merhaba ; Yine bu forumdan aldığım aşağıdaki kodlarla dosyamı kapatırken yedeğini alıyorum. Ancak zaman içinde bir çok yedek dosyam oldu. Benim sizlerden istediğim buna bir sınırlama getirmeniz. Şöyle ki;

Gün içinde bazen 3 - 4 defa yedek aldığım oluyor. Bu kodlara ilave yaparak son 3 günün en son alınan yedekleri kalacak, diğerleri silinecek bir ilave yapmanız. Şimdiden teşekkürler.

Kullandığım kod;

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Set ds = CreateObject("Scripting.FileSystemObject")
ThisWorkbook.Save
If ds.FolderExists("D:\YEDEKLER") = False Then
ds.CreateFolder "D:\YEDEKLER"
End If
If ThisWorkbook.Path = "D:\YEDEKLER" Then Exit Sub
If MsgBox("Dosyanın yedeğini almak istiyor musun?", vbInformation + vbYesNo, "DURUM") = vbYes Then
yol = "D:\YEDEKLER\" & Replace(Now, ":", "_") & "-" & ThisWorkbook.Name
ds.CopyFile ThisWorkbook.FullName, yol
End If
End Sub
Yedekleme kodları için teşekkürler
 
Katılım
29 Haziran 2018
Mesajlar
297
Excel Vers. ve Dili
2016 TÜRKÇE
Sayın Korhan Ayhan ilginize teşekkür ederim. Kodları deneyip sonucu bildireceğim inşallah. Sayın izcik işinize yaramasına sevindm.
 
Katılım
29 Haziran 2018
Mesajlar
297
Excel Vers. ve Dili
2016 TÜRKÇE
Sayın Korhan Ayhan verdiğiniz kodları denedim. Yedekleme işlemi tamam ama silme işlemi gerçekleşmedi. Şöyle ki; Verdiğiniz koddaki
Option Explicit satırı dosyada değişiklik yapınca Aşağıdaki kodların 1. satırını sarı yaptı, Option Explicit satırını sildim kodlar çalıştı.

Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, [V:V,AS:AS]) Is Nothing Then Exit Sub
Application.EnableEvents = False
If Target(1).Value = "" Then
Target.Offset(0, 1).MergeArea.ClearContents
Else
Target.Offset(0, 1) = Date
End If
Application.EnableEvents = True

End Sub

Benim dosyamda YEDEKLER klasörü E sürücüsünde olduğu için Yol = "C:\YEDEKLER" Satırını Yol = "E:\YEDEKLER" yaptım silme işi olmadı. Sonra
YEDEKLER klasörünü C ye taşıyıp kod satırını Yol = "C:\YEDEKLER" yaptım yine olmadı. Nerede hata yaptığımı bulamadım. Gerçek dosyamda YEDEKLER klasörü E sürücüsünde olacak. Saygılar.

 
Katılım
18 Mayıs 2009
Mesajlar
1,184
Excel Vers. ve Dili
Excel 2016 Türkçe
Mesajımı düzenledim.
Kodlarda düzeltme taleb etmiştim ama sonra yeni konu açacağım.
Teşekkürler
Yedekleme kodları güzel
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,397
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Option Explicit ifadesi tanımlamaları zorunlu kılar.

Kullanılmasında bir sakınca yoktur. Aksine ben tavsiye ederim.

Silme konusuna gelince ben işyeri bilgisayarımda denedim. D sürücüsüne silme işlemi yapamadım. Sanırım yetkilerle ilgili bir durum. Bu sebeple C sürücüsüne deneme yaptım. Olumlu sonuç alıp kodları foruma ekledim.

Sizde yetki sorunu yaşıyor olabilirsiniz.
 
Katılım
29 Haziran 2018
Mesajlar
297
Excel Vers. ve Dili
2016 TÜRKÇE
Sayın Korhan Ayhan ilginize teşekkür ederim. Sorunu aşmayı başaramadım. Zahmet verdim. Saygılar sunuyorum.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,397
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Dosyanızı inceledim.

Siz benim önerdiğim kodu sayfanın kod bölümüne uygulamışsınız.

Fakat kullanılan kod dosya (kitap) kodudur. Bu sebeple ThisWorkbook ya da BuÇalışmaKitabı bölümüne uygulamanız gerekir.

Sayfaya uyguladığınız kodu da silmeyi unutmayın.

Deneyip sonucu bildirirsiniz.
 
Katılım
29 Haziran 2018
Mesajlar
297
Excel Vers. ve Dili
2016 TÜRKÇE
Sayın Korhan Ayhan Son haliyle kod E sürücüsünde de çalıştı. Son üç güne ait tüm yedekleri bırakıp diğerlerini sildi. Gün içinde alınan son yedeği bırakıp daha eski saatlerde de alınan yedekler de silinebilir mi? Mesela ben bugün değişik saatlerde 4 yedek aldım. En son aldığım hariç diğer üçünü de silebilir miyiz acaba? Böylece elimde son üç günün son yedekleri kalmış olur. saygılar.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,397
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bu durumla ilgili size öneride bulunmuştum. YEDEK dosya adında sadece tarihi kullanırsanız her gün için tek yedek dosyanız oluşur. Bu şekilde benim önerdiğim kodu rahatlıkla kullanabilirsiniz.
 
Katılım
29 Haziran 2018
Mesajlar
297
Excel Vers. ve Dili
2016 TÜRKÇE
Sayın Korhan Ayhan Söylemek istediğinizi anladım. Her şey için teşekkürler. Sağolun.
 
Katılım
26 Nisan 2021
Mesajlar
178
Excel Vers. ve Dili
TR 2021
Altın Üyelik Bitiş Tarihi
27-04-2022
Korhan bey merhaba, saat olmadan sadece tarih ile yedek alma işleminde bu kodu nasıl düzenlemeliyiz ? Saygılarımla.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Set ds = CreateObject("Scripting.FileSystemObject")
ThisWorkbook.Save
If ds.FolderExists("D:\Asyo Yedek") = False Then
ds.CreateFolder "D:\Asyo Yedek"
End If
If ThisWorkbook.Path = "D:\Asyo Yedek" Then Exit Sub
If MsgBox("Dosyanın yedeğini almak istiyor musunuz?", vbInformation + vbYesNo, "DURUM") = vbYes Then
yol = "D:\Asyo Yedek\" & Replace(Now, ":", "_") & "-" & ThisWorkbook.Name
ds.CopyFile ThisWorkbook.FullName, yol
End If
End Sub
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,397
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba,

Şu bölümü; Replace(Now, ":", "_")

Aşağıdaki gibi değiştiriniz.

Replace(Date, "/", ".")
 
Katılım
26 Nisan 2021
Mesajlar
178
Excel Vers. ve Dili
TR 2021
Altın Üyelik Bitiş Tarihi
27-04-2022
Çok teşekkür ederim. Korhan bey
 
Üst