Özellik ikonu

SaveAs

İndirme izni yok

Genel Bakış

SaveAs (Workbook.SaveAs yöntemi), bir çalışma kitabını yeni bir ad, konum ve dosya biçimiyle kaydeden yöntemdir. Arayüzdeki Dosya > Farklı Kaydet (File > Save As) komutunun VBA karşılığıdır. Parola koyma, yedek oluşturma ve CSV ya da eski sürüm biçimine dönüştürme gibi işlemler de bu yöntemle yapılır.

Söz dizimi​

Yöntem bir Workbook nesnesi üzerinde çalışır. Tüm bağımsız değişkenler isteğe bağlıdır, ancak kitap daha önce hiç kaydedilmediyse FileName vermeniz gerekir:
VBA
ifade.SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local)
Burada ifade, bir Workbook nesnesini veren ifadedir (ör. ThisWorkbook, ActiveWorkbook). Bağımsız değişkenler:
  • FileName: Kaydedilecek dosyanın adı; tam yol da verebilirsiniz. İsteğe bağlıdır; verilmezse kitabın geçerli adı kullanılır.
  • FileFormat: Dosya biçimi (xlOpenXMLWorkbook gibi XlFileFormat sabiti). İsteğe bağlıdır; verilmezse var olan bir dosyada kitabın son biçimi, yeni kitapta Excel'in varsayılan biçimi kullanılır.
  • Password: Dosyayı açmak için istenecek parola; büyük küçük harfe duyarlıdır, en çok 15 karakter. İsteğe bağlıdır.
  • WriteResPassword: Dosyaya yazma izni için istenecek parola. Parola girilmezse dosya salt okunur açılır. İsteğe bağlıdır.
  • ReadOnlyRecommended: True ise dosya açılırken salt okunur açma önerisi gösterilir. İsteğe bağlıdır; varsayılan False.
  • CreateBackup: True ise yedek dosya oluşturulur. İsteğe bağlıdır; varsayılan False.
  • AccessMode: xlNoChange (varsayılan), xlShared veya xlExclusive. İsteğe bağlıdır.
  • ConflictResolution: Paylaşılan kitapta çakışmaların nasıl çözüleceğini belirler: xlUserResolution, xlLocalSessionChanges veya xlOtherSessionChanges. İsteğe bağlıdır.
  • AddToMru: True ise dosya son kullanılan dosyalar listesine eklenir. İsteğe bağlıdır; varsayılan False.
  • TextCodepage: Excel'in Türkçe ve İngilizce sürümlerinde kullanılmaz; verilmesi gerekmez.
  • TextVisualLayout: Aynı şekilde kullanılmaz; verilmesi gerekmez.
  • Local: True ise dosya Excel'in dil ayarlarına göre (tablo başlıkları, sayı biçimleri) kaydedilir; False ise VBA'nın dil ayarı kullanılır. İsteğe bağlıdır; varsayılan False.
Yöntem bir değer döndürmez. Bağımsız değişkenleri sırayla yazmak yerine FileName:= gibi adlandırarak yazmanız kodu okunur kılar.

Sık kullanılan FileFormat sabitleri​

Dosya uzantısı biçimi belirlemez; biçimi FileFormat belirler. Aşağıdaki sabitler en çok kullanılanlardır:
  • xlOpenXMLWorkbook (51): Makrosuz Excel çalışma kitabı (.xlsx).
  • xlOpenXMLWorkbookMacroEnabled (52): Makro içerebilen çalışma kitabı (.xlsm).
  • xlExcel12 (50): İkili çalışma kitabı (.xlsb).
  • xlExcel8 (56): Excel 97-2003 çalışma kitabı (.xls).
  • xlOpenXMLTemplate (54): Excel şablonu (.xltx).
  • xlCSV (6): Virgül veya liste ayırıcısıyla ayrılmış metin (.csv); yalnız etkin sayfa kaydedilir.
  • xlCSVUTF8 (62): UTF-8 kodlamalı CSV; Excel 2016 ve sonrasında bulunur.
  • xlTextWindows (20): Sekmeyle ayrılmış metin (.txt).
Uzantı ile biçim uyuşmazsa (ör. .xlsx uzantılı dosyaya xlExcel8 verirseniz) dosya sonradan açılırken uyarı çıkar.

Çalışma biçimi ve ilgili yöntemlerden farkı​

SaveAs çalıştırıldığında açık kitabın adı yeni dosya adına dönüşür; yani bundan sonra Save yeni dosyaya kaydeder. Açık kitabı değiştirmeden bir kopya almak istiyorsanız SaveCopyAs yöntemini kullanın. Aynı adlı bir dosya varsa Excel üzerine yazma onayı sorar; makro içinde bu soruyu Application.DisplayAlerts = False ile kapatabilirsiniz, ancak sonra mutlaka True yapın. Yol geçersizse veya dosya başka bir kullanıcıda açıksa çalışma zamanı hatası oluşur; bu yüzden çağrıyı On Error ile sarmanız önerilir.

1. Kitabı parolalı .xlsx olarak kaydetme​

Aşağıdaki sayfada küçük bir satış tablosu var. Kodu standart bir modüle (Ekle > Modül) yapıştırın. Makro kitabı C:\Raporlar klasörüne parolalı bir .xlsx dosyası olarak kaydeder; klasörün önceden var olması gerekir. Dosya işlemi yaptığı için bu örnek sayfada çalıştırılmamıştır.
VBA 22 satır
Option Explicit

Sub RaporuKaydet()
    Dim yol As String
    yol = "C:\Raporlar\Satis_Raporu.xlsx"

    ' Üzerine yazma sorusunu geçici olarak kapat
    Application.DisplayAlerts = False
    On Error GoTo Hata

    ActiveWorkbook.SaveAs Filename:=yol, _
        FileFormat:=xlOpenXMLWorkbook, _
        Password:="Rapor2024", _
        CreateBackup:=False

    Application.DisplayAlerts = True
    Exit Sub

Hata:
    Application.DisplayAlerts = True
    MsgBox "Dosya kaydedilemedi: " & Err.Description, vbExclamation
End Sub
SaveAs
Formülünü incelemek için bir hücre seçin.
ABCD
1ŞehirÜrünAdetTutar
2İstanbulDizüstü Bilgisayar1218.600,00
3AnkaraYazıcı86.400,00
4İzmirMonitör159.750,00
Satış RaporuExcelDepo v1.0.0
Makro çalıştırıldığında kitap parolalı Satis_Raporu.xlsx dosyasına kaydedilir ve açık kitabın adı bu dosyanın adına dönüşür. Dosya açılırken Rapor2024 parolası sorulur. Hata olursa Hata etiketindeki kod DisplayAlerts ayarını eski haline getirir ve nedeni bir iletiyle bildirir. Kitabınız .xlsm ise bu işlemin makroları yeni dosyada barındırmayacağını unutmayın.

2. Kaydetmeden önce geçerli dosya adı üretme​

Dosya adında kullanılamayan karakterler (\ / : * ? " < > |) SaveAs işleminin hata vermesine yol açar. Bu örnek, rapor adı ve tarihten güvenli bir dosya adı üretip C sütununa yazar; adı daha sonra SaveAs içinde FileName olarak kullanabilirsiniz. Kodu standart bir modüle yapıştırın. Kaydetme yapmadığı için örnek çalıştırılabilir.
VBA 24 satır
Option Explicit

Sub DosyaAdiOlustur()
    Dim ws As Worksheet
    Dim s As Long
    Dim ad As String
    Dim k As Variant

    Set ws = ActiveSheet

    For s = 2 To 7
        ' Rapor adı ile tarihi birleştir
        ad = ws.Cells(s, 1).Value & "_" & Format(ws.Cells(s, 2).Value, "yyyy-mm-dd")

        ' Yasak karakterleri tireyle değiştir
        For Each k In Array("\", "/", ":", "*", "?", """", "<", ">", "|")
            ad = Replace(ad, k, "-")
        Next k

        ' Boşlukları alt çizgiyle değiştir ve uzantıyı ekle
        ad = Replace(ad, " ", "_")
        ws.Cells(s, 3).Value = ad & ".xlsx"
    Next s
End Sub
SaveAs
Formülünü incelemek için bir hücre seçin.
ABC
1Rapor AdıTarihDosya Adı
2Aylık Satış2024-01-31Aylık_Satış_2024-01-31.xlsx
3Stok/Envanter2024-02-29Stok-Envanter_2024-02-29.xlsx
4Maaş: Ocak2024-03-15Maaş-_Ocak_2024-03-15.xlsx
5Gider Özeti2024-04-30Gider_Özeti_2024-04-30.xlsx
6Bütçe*Plan2024-05-31Bütçe-Plan_2024-05-31.xlsx
7Müşteri Listesi2024-06-30Müşteri_Listesi_2024-06-30.xlsx
Dosya AdlarıExcelDepo v1.0.0
Makro her satırdaki rapor adını ve tarihi birleştirir, yasak karakterleri tireyle, boşlukları alt çizgiyle değiştirir. İlk satırın dosya adı Aylık_Satış_2024-01-31.xlsx, ikinci satırınki Stok-Envanter_2024-02-29.xlsx, üçüncü satırınki Maaş-_Ocak_2024-03-15.xlsx olur. Bu adları ActiveWorkbook.SaveAs Filename:= bağımsız değişkenine yol ile birleştirerek verebilirsiniz.

3. FileFormat sabitlerinin değerlerini listeleme​

FileFormat bağımsız değişkenine sabit adı da sayı da verebilirsiniz. Bu örnek, sık kullanılan biçimlerin sayısal değerlerini D sütununa yazar; böylece hangi sabitin hangi sayıya karşılık geldiğini görürsünüz. Kodu standart bir modüle yapıştırıp çalıştırın; dosya kaydetmez.
VBA 13 satır
Option Explicit

Sub BicimKodlariniYaz()
    Dim ws As Worksheet
    Set ws = ActiveSheet

    ' Her sabitin sayısal değerini D sütununa yaz
    ws.Range("D2").Value = xlOpenXMLWorkbook
    ws.Range("D3").Value = xlOpenXMLWorkbookMacroEnabled
    ws.Range("D4").Value = xlExcel8
    ws.Range("D5").Value = xlCSV
    ws.Range("D6").Value = xlOpenXMLTemplate
End Sub
SaveAs
Formülünü incelemek için bir hücre seçin.
ABCD
1BiçimUzantıSabit AdıDeğer
2Excel Çalışma Kitabı.xlsxxlOpenXMLWorkbook51
3Makro Etkin Çalışma Kitabı.xlsmxlOpenXMLWorkbookMacroEnabled52
4Excel 97-2003 Çalışma Kitabı.xlsxlExcel856
5CSV (ayrılmış metin).csvxlCSV6
6Excel Şablonu.xltxxlOpenXMLTemplate54
Biçim KodlarıExcelDepo v1.0.0
Makro, sabitlerin sayısal karşılıklarını D sütununa yazar: xlOpenXMLWorkbook için 51, xlOpenXMLWorkbookMacroEnabled için 52, xlExcel8 için 56, xlCSV için 6, xlOpenXMLTemplate için 54. SaveAs çağrısında FileFormat:=xlOpenXMLWorkbook yazmakla bu sayıyı yazmak aynı sonucu verir, ancak sabit adı kodu çok daha okunur yapar.

Kullanırken dikkat edin​

  • Uzantıyı biçimle uyumlu verin: FileName içinde uzantıyı yazmasanız bile Excel biçime uygun uzantıyı ekler; ancak uzantıyı kendiniz yazıyorsanız FileFormat ile uyumlu olmasına dikkat edin. Uyumsuz kayıt, dosyanın açılırken uyarı vermesine ya da açılmamasına yol açar.
  • Makrolu kitabı xlsx olarak kaydetmeyin: xlOpenXMLWorkbook biçimi VBA kodunu saklamaz. Makro içeren bir kitabı bu biçimle kaydederseniz kodlar yeni dosyada bulunmaz. Makroları korumak için xlOpenXMLWorkbookMacroEnabled (.xlsm) kullanın.
  • Üzerine yazma ve DisplayAlerts: Aynı adlı dosya varsa Excel onay sorar. Application.DisplayAlerts = False yazarsanız soru sorulmadan dosyanın üzerine yazılır; bu ayarı işlem bitince, hata durumunda bile, tekrar True yapmayı unutmayın.
  • Parola sınırları: Password ve WriteResPassword büyük küçük harfe duyarlıdır ve parola en çok 15 karakter olabilir. Parolayı kodun içine düz metin olarak yazmak güvenlik açısından zayıftır; kodu paylaşacaksanız bunu göz önünde bulundurun.
  • Orijinal kitap yeni ada geçer: SaveAs sonrasında açık kitap yeni dosyaya bağlanır. Etkin kitabı değiştirmeden yedek almak istiyorsanız SaveCopyAs yöntemini tercih edin. Kitabın tam yolu gereken durumlarda kullanıcıya SaveAs yerine GetSaveAsFilename ile dosya adı seçtirebilirsiniz.
  • CSV kaydederken: xlCSV biçiminde yalnız etkin sayfa kaydedilir ve biçimlendirme, formüller kaybolur; yalnız değerler yazılır. Türkçe karakterler bozuluyorsa Excel 2016 ve sonrasında xlCSVUTF8 (62) kullanmayı deneyin.
  • İlgili konular:
    • Save: Kitabı mevcut adıyla kaydeder.
    • SaveCopyAs: Açık kitabı değiştirmeden kopyasını kaydeder.
    • Workbooks.Open: Kayıtlı bir dosyayı açar.
    • Workbooks.Add: Yeni bir çalışma kitabı oluşturur.
    • Application.DisplayAlerts: Excel uyarılarını açar ya da kapatır.
    • Application.GetSaveAsFilename: Kullanıcıya dosya adı seçtirir.
    • ExportAsFixedFormat: Kitabı ya da sayfayı PDF olarak dışa aktarır.
    • Close: Kitabı kaydederek ya da kaydetmeden kapatır.
    • On Error: Kaydetme sırasındaki hataları yakalamak için kullanılır.
Ö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
10
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst