Özellik ikonu

SaveCopyAs

İndirme izni yok

Genel Bakış

SaveCopyAs (Workbook.SaveCopyAs), bir çalışma kitabının o anki halinin kopyasını belirtilen adla diske kaydeden yöntemdir. Açık kitabın adı, konumu ve kaydedilme durumu değişmez; bu nedenle yedek almak ve anlık görüntü saklamak için idealdir.

Söz dizimi​

Yöntem, bir Workbook nesnesi üzerinde çağrılır; ThisWorkbook, ActiveWorkbook ya da Workbooks("Ad.xlsx") gibi.
VBA 2 satır
ifade.SaveCopyAs(Filename)
ThisWorkbook.SaveCopyAs Filename:="C:\Yedek\Rapor_Yedek.xlsx"
  • ifade: Kopyası alınacak Workbook nesnesi; zorunludur.
  • Filename: Kopyanın yolunu ve dosya adını içeren metin. Belgelerde isteğe bağlı görünse de pratikte her zaman verin. Yol belirtmezseniz dosya geçerli klasöre kaydedilir; bu yüzden tam yol yazmanız önerilir.
Yöntem bir değer döndürmez. Kopya, kaynak kitapla aynı dosya biçiminde kaydedilir; biçimi değiştirmek için kullanılamaz.

SaveAs ve Save ile farkı​

Üç yöntemi karıştırmamak önemlidir:
  • Save: Açık kitabı kendi dosyasına kaydeder.
  • SaveAs: Açık kitabı yeni bir adla kaydeder ve kitap artık yeni dosyayı temsil eder; Excel başlık çubuğunda yeni ad görünür.
  • SaveCopyAs: Kopyayı diske yazar, ancak açık kitap eski dosyasına bağlı kalır. Kitabın Saved özelliği de bu işlemle değişmez.
Bu nedenle kullanıcı çalışmaya devam ederken arka planda yedek almak için SaveCopyAs kullanılır.

Dosya adı ve yolu oluşturma​

Yedek adlarını genellikle metin birleştirme ile üretirsiniz. Kitabın klasörü için ThisWorkbook.Path, tarih damgası için Format işlevi kullanılır. Örneğin Format(Now, "yyyymmdd_hhmmss") her yedeğe benzersiz bir ad verir ve eski yedeklerin ezilmesini önler.
Kitap hiç kaydedilmemişse Path boş döner; bu durumda önce kullanıcıdan bir konum alın ya da işlemi atlayın. Uzantıyı kaynak kitabın biçimiyle uyumlu tutun: .xlsx kitabın kopyasına .xlsx, makrolu kitabın kopyasına .xlsm verin.

1. Tarih damgalı yedek alma​

Satış listesi kitabının kopyasını, bugünün tarihini dosya adına ekleyerek aynı klasöre kaydetmek istiyorsunuz. Alt+F11 ile Visual Basic Düzenleyicisi'ni açın, Ekle > Modül (Insert > Module) ile standart bir modül ekleyip kodu yapıştırın. Makro dosya işlemi yaptığı için bu sayfada çalıştırılmaz.
VBA 20 satır
Option Explicit

Sub TarihliYedekAl()
    Dim klasor As String
    Dim uzanti As String
    Dim yedekAdi As String

    klasor = ThisWorkbook.Path
    If klasor = "" Then
        MsgBox "Kitap henüz kaydedilmemiş, yedek alınamaz."
        Exit Sub
    End If

    ' Uzantıyı kaynak kitaptan alıyoruz (xlsx, xlsm vb.)
    uzanti = Mid(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, "."))
    yedekAdi = klasor & "\Satis_" & Format(Date, "yyyymmdd") & uzanti

    ' Açık kitap değişmez, yalnızca kopya yazılır
    ThisWorkbook.SaveCopyAs Filename:=yedekAdi
End Sub
SaveCopyAs
Formülünü incelemek için bir hücre seçin.
ABC
1ÜrünAdetBirim Fiyat
2Kalem120Kalem_120_Yedek.xlsx
3Defter80Defter_80_Yedek.xlsx
4Dosya45Dosya_45_Yedek.xlsx
5__Yedek.xlsx
6__Yedek.xlsx
7__Yedek.xlsx
Satış ListesiExcelDepo v1.0.0
Makro çalıştırıldığında kitabın klasöründe Satis_ ile başlayan, bugünün tarihini taşıyan bir kopya oluşur. Siz açık kitapta çalışmaya aynı dosya üzerinden devam edersiniz.

2. Yedek klasörü ve hata denetimi​

Personel kitabının kopyasını, kitabın bulunduğu klasördeki Yedek alt klasörüne saat bilgisiyle kaydetmek istiyorsunuz. Klasör yoksa oluşturulur; hata olursa kullanıcı bilgilendirilir. Kodu standart bir modüle yapıştırın. Klasör ve dosya işlemleri içerdiğinden bu örnek çalıştırılmaz.
VBA 22 satır
Option Explicit

Sub YedekKlasorunaKaydet()
    Dim yedekKlasor As String
    Dim uzanti As String
    Dim hedef As String

    If ThisWorkbook.Path = "" Then Exit Sub
    On Error GoTo Hata

    yedekKlasor = ThisWorkbook.Path & "\Yedek"
    If Dir(yedekKlasor, vbDirectory) = "" Then MkDir yedekKlasor

    uzanti = Mid(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, "."))
    hedef = yedekKlasor & "\Personel_" & Format(Now, "yyyymmdd_hhmmss") & uzanti

    ThisWorkbook.SaveCopyAs hedef
    Exit Sub

Hata:
    MsgBox "Yedek alınamadı: " & Err.Description
End Sub
SaveCopyAs
Formülünü incelemek için bir hücre seçin.
ABC
1PersonelBölümMaaş
2Ayşe YılmazMuhasebe32.500,00
3Mehmet DemirSatış28.750,00
4Zeynep Kayaİnsan Kaynakları30.100,00
PersonelExcelDepo v1.0.0
Her çalıştırmada Yedek klasöründe saniyesine kadar farklı adlı yeni bir kopya oluşur; eski yedekler ezilmez. Kaydetme sırasında bir sorun çıkarsa On Error ile hata iletisi gösterilir.

3. Yedek dosya adlarını hazırlama​

Şube ve ay bilgilerinden her şube için yedek dosya adı üretmek istiyorsunuz. Bu makro diske yazmaz, yalnızca SaveCopyAs için kullanılacak adları C sütununa üretir. Kodu standart bir modüle yapıştırın.
VBA 13 satır
Option Explicit

Sub YedekAdlariniHazirla()
    Dim ws As Worksheet
    Dim i As Long

    Set ws = ThisWorkbook.Worksheets(1)

    ' 2. satırdan 7. satıra kadar sonlu döngü
    For i = 2 To 7
        ws.Cells(i, 3).Value = ws.Cells(i, 1).Value & "_" & ws.Cells(i, 2).Value & "_Yedek.xlsx"
    Next i
End Sub
SaveCopyAs
Formülünü incelemek için bir hücre seçin.
ABC
1ŞubeAyYedek Dosya Adı
2AnkaraOcak
3İzmirŞubat
4BursaMart
5AdanaNisan
6TrabzonMayıs
7KonyaHaziran
Yedek PlanıExcelDepo v1.0.0
Makro her satırda şube ve ay adını birleştirerek C sütununa yazılacak adı hazırlar. Bu sayfadaki tabloda C2 hücresi ve C3 hücresi boştur; üretilen adlar tabloda gösterilmez. Makroyu kendi kitabınızda çalıştırdığınızda oluşan adları ThisWorkbook.SaveCopyAs çağrısında klasör yoluyla birleştirerek dosya adı olarak kullanabilirsiniz.

Kullanırken dikkat edin​

  • Uzantı ve biçim uyumu: SaveCopyAs dosya biçimini değiştirmez. .xlsm kitabın kopyasına .xlsx uzantısı vermek, Excel'in açamayacağı ya da uyarı verecek bir dosya üretir. Uzantıyı kaynak kitabın adından alın.
  • Aynı adlı dosya: Hedefte aynı adlı bir dosya varsa yeni kopya onun yerine yazılabilir. Eski yedekleri korumak istiyorsanız ada tarih ve saat ekleyin.
  • Kaynak dosyanın üzerine yazmayın: Kopyanın adı, açık kitabın kendi yoluyla aynı olamaz; bu durumda hata alırsınız. Ayrıca hedef dosya başka bir yerde açıksa kaydetme başarısız olur.
  • Kaydedilmemiş kitap: Hiç kaydedilmemiş bir kitapta Path boş döner ve yol boş kalan ad geçerli klasöre yazılır. Önce yolun boş olup olmadığını denetleyin.
  • Saved özelliği değişmez: Kopya aldıktan sonra açık kitap hala değişmiş sayılabilir. Kitabın kendi dosyasına kaydedildiğini varsaymayın; asıl dosya için Save yöntemini kullanın.
  • İlgili konular:
    • Workbook.SaveAs: Kitabı yeni adla kaydeder ve kitabı yeni dosyaya bağlar.
    • Workbook.Save: Kitabı kendi dosyasına kaydeder.
    • Workbook.Saved: Kitabın kaydedilmemiş değişiklik içerip içermediğini gösterir.
    • Workbook_BeforeSave: Kaydetmeden önce çalışan olay.
    • Application.DisplayAlerts: Uyarı iletilerini açar ya da kapatır.
    • ThisWorkbook.Path: Kitabın bulunduğu klasör yolu.
    • Format işlevi: Tarihi dosya adına uygun metne çevirir.
    • Dir ve MkDir: Klasör denetimi ve oluşturma.
Ö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