Özellik ikonu

Workbook.Save

İndirme izni yok

Genel Bakış

Workbook.Save (Workbook.Save method), bir çalışma kitabında yapılan değişiklikleri kitabın bağlı olduğu dosyaya kaydeden yöntemdir. Kullanıcı Dosya menüsünden Kaydet'i seçmiş gibi çalışır; adı, konumu ve dosya biçimi değişmez. Makro bir işi bitirdikten sonra sonucu kalıcı yapmak için kullanılır.

Söz dizimi​

Save yöntemi herhangi bir Workbook nesnesine uygulanır ve parametre almaz:
VBA 5 satır
ifade.Save

ThisWorkbook.Save
ActiveWorkbook.Save
Workbooks("Rapor.xlsx").Save
  • ifade: Bir Workbook nesnesini veren ifadedir. Zorunludur. ThisWorkbook kodun bulunduğu kitabı, ActiveWorkbook etkin kitabı, Workbooks(...) ise adı ya da sırası verilen kitabı belirtir.
  • Parametre: Yöntemin parametresi yoktur. Adı ya da biçimi değiştirmek için SaveAs kullanılır.
  • Dönüş değeri: Yöntem değer döndürmez; kaydetme başarısız olursa çalışma zamanı hatası oluşur.

Save, SaveAs ve SaveCopyAs farkı​

Save kitabı yalnızca bulunduğu dosyaya, aynı adla ve aynı biçimle yazar. SaveAs kitabı yeni bir ad, konum ya da biçimle kaydeder ve kitap artık bu yeni dosyaya bağlanır. SaveCopyAs ise açık kitabı etkilemeden bir kopya üretir.
  • Hiç kaydedilmemiş kitap: Yeni açılmış ve henüz bir dosyaya bağlanmamış kitapta Save kullanılırsa kitap varsayılan klasöre geçici adıyla (Kitap1.xlsx gibi) kaydedilir. Bunu istemiyorsanız önce kitabın Path özelliğinin boş olup olmadığını denetleyin.
  • Salt okunur kitap: ReadOnly özelliği True olan kitapta Save hata verir; bu durumda SaveAs ile başka bir ada kaydetmek gerekir.
  • Dosya biçimi: Makro içeren bir kitap .xlsm olarak açıldıysa Save onu aynı biçimde kaydeder. Makrosuz .xlsx dosyasında makro kodu kalıcı olmaz.

Saved özelliği ve olaylarla birlikte kullanım​

Kitabın Saved özelliği, son kayıttan beri değişiklik yapılıp yapılmadığını bildirir. Hücreye değer yazmak bu özelliği False yapar; Save çalıştığında True olur. Gereksiz kayıtları önlemek için şu kalıp yaygındır:
VBA
If Not ThisWorkbook.Saved Then ThisWorkbook.Save
Save çağrısı, kitabın BeforeSave olayını tetikler. Bu olayda Cancel True yapılırsa kayıt iptal edilir. Kaydetme sırasında kullanıcı onayı çıkmaması için çoğu durumda ek bir ayar gerekmez; yalnızca dosya biçimi uyarıları Application.DisplayAlerts ile ilgilidir.

1. Kaydetmeden önce değişiklik durumunu denetleme​

Aşağıdaki makro, her satırın tutarını hesaplar ve Saved özelliğine bakarak kitabın kaydedilmesi gerekip gerekmediğini E2 hücresine yazar. Kodu standart bir modüle yapıştırın. Bu örnekte kaydetme yapılmaz; yalnızca Save çağrısından önce kullanılan denetim gösterilir.
VBA 20 satır
Option Explicit

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

    Set ws = ActiveSheet

    ' Her satırda adet ile birim fiyatı çarp
    For i = 2 To 6
        ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value
    Next i

    ' Saved özelliği, son kayıttan beri değişiklik olup olmadığını bildirir
    If ThisWorkbook.Saved Then
        ws.Range("E2").Value = "Güncel"
    Else
        ws.Range("E2").Value = "Kaydedilmeli"
    End If
End Sub
Workbook.Save
Formülünü incelemek için bir hücre seçin.
ABCDE
1ÜrünAdetBirim FiyatTutarDurum
2Kalem12012,501.500,00Kaydedilmeli
3Defter4538,001.710,00
4Silgi3004,751.425,00
5Dosya8022,901.832,00
6Kağıt25145,003.625,00
SatışlarExcelDepo v1.0.0
Makro D sütununa tutarları yazar; örneğin ilk satırın tutarı 1.500,00 olur. Hücrelere değer yazıldığı için kitapta kaydedilmemiş değişiklik vardır ve E2 hücresinde "Kaydedilmeli" ifadesi görünür. Gerçek bir uygulamada bu denetimin ardından If Not ThisWorkbook.Saved Then ThisWorkbook.Save satırını kullanabilirsiniz.

2. Güvenli kaydetme yordamı​

Bu örnek, kaydetmeden önce kitabın salt okunur olup olmadığını ve bir dosyaya bağlı olup olmadığını denetler, olası hataları da yakalar. Kodu standart bir modüle yapıştırın. Kaydetme ve iletişim kutusu içerdiği için örnek çalıştırılmaz; Sub'ı Alt+F8 ile kendiniz çalıştırabilirsiniz.
VBA 23 satır
Option Explicit

Sub GuvenliKaydet()
    ' Salt okunur kitapta Save hata verir
    If ThisWorkbook.ReadOnly Then
        MsgBox "Kitap salt okunur, kaydedilemez.", vbExclamation
        Exit Sub
    End If

    ' Path boşsa kitap henüz bir dosyaya bağlı değildir
    If ThisWorkbook.Path = "" Then
        MsgBox "Kitap daha önce kaydedilmemiş. Önce SaveAs kullanın.", vbInformation
        Exit Sub
    End If

    On Error GoTo Hata
    ThisWorkbook.Save
    MsgBox "Kitap kaydedildi.", vbInformation
    Exit Sub

Hata:
    MsgBox "Kaydetme başarısız: " & Err.Description, vbCritical
End Sub
Workbook.Save
Formülünü incelemek için bir hücre seçin.
ABC
1ŞehirAySatış
2İstanbulOcak125.000,00
3AnkaraOcak84.000,00
4İzmirŞubat67.500,00
RaporExcelDepo v1.0.0
Makro çalıştırıldığında kitap salt okunursa ya da hiç kaydedilmemişse ilgili uyarı görünür ve işlem durur. Aksi halde kitap bulunduğu dosyaya kaydedilir ve bir onay iletisi gösterilir. Kaydetme sırasında bir sorun çıkarsa hata iletisi, Hata etiketindeki kod sayesinde kullanıcıya bildirilir.

3. Kitap kapanırken otomatik kaydetme​

Bu örnek, kitap kapatılırken kaydedilmemiş değişiklik varsa kullanıcıya sormadan kaydeder. Kodu ThisWorkbook kod modülüne yapıştırın (Visual Basic Düzenleyicisi'nde Project penceresinde ThisWorkbook'a çift tıklayın). Kapatma ve kaydetme içerdiği için örnek çalıştırılmaz.
VBA 9 satır
Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ' Kaydedilmemiş değişiklik varsa kitabı kaydet,
    ' böylece kapatırken "Kaydedilsin mi?" sorusu çıkmaz
    If Not Me.Saved Then
        Me.Save
    End If
End Sub
Workbook.Save
Formülünü incelemek için bir hücre seçin.
ABC
1PersonelDepartmanŞehir
2Ayşe YılmazMuhasebeAnkara
3Mehmet DemirSatışİzmir
4Zeynep Kayaİnsan KaynaklarıBursa
PersonelExcelDepo v1.0.0
Bu olay yordamı kitap her kapatıldığında çalışır. Kitapta kaydedilmemiş değişiklik varsa Save ile kaydedilir ve Excel kapanış sırasında ayrıca soru sormaz. Değişiklikleri atmak isteyen kullanıcılar için bu davranış sakıncalı olabilir; bu nedenle yalnızca otomatik kayıt istenen kitaplarda kullanın.

Kullanırken dikkat edin​

  • Geri dönüş yoktur: Save mevcut dosyanın üzerine yazar ve Geri Al ile eski haline döndürülemez. Önemli dosyalarda önce SaveCopyAs ile yedek almak iyi bir yöntemdir.
  • Yeni kitapta dikkatli olun: Hiç kaydedilmemiş bir kitapta Save kullanmak, kitabı beklemediğiniz bir klasöre ve adla kaydedebilir. Önce Path özelliğini denetleyin ya da SaveAs kullanın.
  • Dosya biçimi uyarısı: Makro içeren bir kitabı .xlsx olarak kaydederseniz kodlar kaybolur. Makro barındıran kitapları .xlsm ya da .xlsb biçiminde tutun.
  • Salt okunur ve kilitli dosyalar: Dosya salt okunur açıldıysa, başka bir kullanıcı tarafından kilitlenmişse veya diskte yazma izni yoksa Save hata verir. Kritik yordamlarda On Error ile hata yakalamayı unutmayın.
  • Kayıt sırasında olaylar: Save çağrısı kitabın BeforeSave olayını tetikler. Bu olayda başka bir Save çağırırsanız sonsuz döngüye girebilirsiniz; gerekirse önce Application.EnableEvents özelliğini False yapın ve işlem sonunda True'ya döndürün.
  • İlgili konular:
    • Workbook.SaveAs: Kitabı yeni bir ad ya da biçimle kaydeder.
    • Workbook.SaveCopyAs: Açık kitabı değiştirmeden kopyasını kaydeder.
    • Workbook.Saved: Kaydedilmemiş değişiklik olup olmadığını bildirir.
    • Workbook.Path ve Workbook.FullName: Kitabın klasörünü ve tam yolunu verir.
    • Workbook.ReadOnly: Kitabın salt okunur açılıp açılmadığını bildirir.
    • Workbook_BeforeSave olayı: Kayıttan hemen önce çalışır.
    • Workbook_BeforeClose olayı: Kitap kapanmadan önce çalışır.
    • Application.DisplayAlerts: Excel uyarı iletilerini açar ya da kapatır.
    • Workbooks.Close ve Workbook.Close: Kitabı kapatır; SaveChanges parametresi ile kayıt davranışını belirler.
Ö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
11
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst