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.
Burada ifade, bir Workbook nesnesini veren ifadedir (ör. ThisWorkbook, ActiveWorkbook). Bağımsız değişkenler:
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.
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.
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.
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:ifade.SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local)
- 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.
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).
Ç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.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Şehir | Ürün | Adet | Tutar |
| 2 | İstanbul | Dizüstü Bilgisayar | 12 | 18.600,00 |
| 3 | Ankara | Yazıcı | 8 | 6.400,00 |
| 4 | İzmir | Monitör | 15 | 9.750,00 |
Satış RaporuExcelDepo v1.0.0
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.| A | B | C | |
|---|---|---|---|
| 1 | Rapor Adı | Tarih | Dosya Adı |
| 2 | Aylık Satış | 2024-01-31 | Aylık_Satış_2024-01-31.xlsx |
| 3 | Stok/Envanter | 2024-02-29 | Stok-Envanter_2024-02-29.xlsx |
| 4 | Maaş: Ocak | 2024-03-15 | Maaş-_Ocak_2024-03-15.xlsx |
| 5 | Gider Özeti | 2024-04-30 | Gider_Özeti_2024-04-30.xlsx |
| 6 | Bütçe*Plan | 2024-05-31 | Bütçe-Plan_2024-05-31.xlsx |
| 7 | Müşteri Listesi | 2024-06-30 | Müşteri_Listesi_2024-06-30.xlsx |
Dosya AdlarıExcelDepo v1.0.0
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.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Biçim | Uzantı | Sabit Adı | Değer |
| 2 | Excel Çalışma Kitabı | .xlsx | xlOpenXMLWorkbook | 51 |
| 3 | Makro Etkin Çalışma Kitabı | .xlsm | xlOpenXMLWorkbookMacroEnabled | 52 |
| 4 | Excel 97-2003 Çalışma Kitabı | .xls | xlExcel8 | 56 |
| 5 | CSV (ayrılmış metin) | .csv | xlCSV | 6 |
| 6 | Excel Şablonu | .xltx | xlOpenXMLTemplate | 54 |
Biçim KodlarıExcelDepo v1.0.0
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.