XLSM dosyayı Aynı Klasöre xlsx olarak kaydetme

Katılım
22 Eylül 2012
Mesajlar
1,060
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Merhaba,

Kullanmış olduğum bir VBA çalışmasının Veri adlı sayfasını aynı klasöre xlsx formatında kaydetmek istiyorum. Veri adlı excel sayfasında A1 hücresi Rapor başlığı, bu başlığı xlsx formatında kaydedilecek excel kitabının adı olarak belirleyerek kaydetmem gerekli. Bunu nasıl yapabilirim.

VBA dosyam haftalar itibari ile tanışarak kullanılacak ve bunun için ilgili vba çalışmasının olduğu klasöre diğer excelleri kaydetmek istiyorum.
 
Katılım
6 Mart 2024
Mesajlar
315
Excel Vers. ve Dili
2010 TR & 2016 TR
Merhaba
C++:
Option Explicit

Sub MakrosuzSayfaKaydet()
'Biolight 2024 - Eppur Si Muove

    ' Dosya adını saklayacak bir değişken tanımlanıyor.
    Dim DosyaAD As String

    ' MsgBox için başlık, stil, mesaj ve kullanıcı cevabını saklayacak değişkenler
    Dim KaydetTitle As String
    Dim KaydetStyle As Integer
    Dim KaydetMsg As String
    Dim KaydetSor As Variant

    ' "Veri" sayfası seçiliyor ve A1 hücresindeki veri dosya adı olarak alınıyor.
    Sheets("Veri").Select
    DosyaAD = Range("A1").Value
    
    ' Dosya isminde kabul edilmeyen karakterler boşluk ile değiştiriliyor.
    DosyaAD = Replace(DosyaAD, "\", " ")
    DosyaAD = Replace(DosyaAD, "/", " ")
    DosyaAD = Replace(DosyaAD, ":", " ")
    DosyaAD = Replace(DosyaAD, "*", " ")
    DosyaAD = Replace(DosyaAD, "?", " ")
    DosyaAD = Replace(DosyaAD, """", " ")
    DosyaAD = Replace(DosyaAD, "<", " ")
    DosyaAD = Replace(DosyaAD, ">", " ")
    DosyaAD = Replace(DosyaAD, "|", " ")
    
    ' Dosya yolunu ve adını içeren tam dosya yolu oluşturuluyor.
    DosyaAD = ThisWorkbook.Path & "\" & DosyaAD & ".xlsx"
    
    ' Ekran güncellemesi geçici olarak kapatılıyor ve uyarı mesajları devre dışı bırakılıyor.
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    ' Aynı isimde dosya olup olmadığını kontrol ediyor.
    KaydetTitle = "[ " & Dir(DosyaAD) & " ]" & " Dosya zaten var"
    KaydetStyle = vbYesNo + vbQuestion + vbDefaultButton2
    KaydetMsg = "[ " & Dir(DosyaAD) & " ]" & " adlı bir dosya zaten var !" & vbCrLf & vbCrLf & "Değiştirmek istermisiniz.?"
    
    If Dir(DosyaAD) <> "" Then
        
        ' Kullanıcıya mevcut dosyanın üzerine yazmak isteyip istemediği soruluyor.
        KaydetSor = MsgBox(KaydetMsg, KaydetStyle, KaydetTitle)
        
        If KaydetSor = vbYes Then
            ' Kullanıcı "Evet" derse, dosya mevcut olanın üzerine kaydediliyor.
            Sheets("Veri").Copy
            ActiveWorkbook.SaveAs Filename:=DosyaAD, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
            ActiveWorkbook.Close SaveChanges:=False
        Else
            ' Kullanıcı "Hayır" derse, işlem durduruluyor.
            MsgBox "Veriler Kayıt EDİLMEDİ...", vbInformation, "Veriler Kayıt Olmadı"
            Application.ScreenUpdating = True
            Application.DisplayAlerts = True
            Exit Sub
        End If
    
    Else
        ' Dosya mevcut değilse, yeni dosya olarak kaydediliyor.
        Sheets("Veri").Copy
        ActiveWorkbook.SaveAs Filename:=DosyaAD, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        ActiveWorkbook.Close SaveChanges:=False
    End If
    
    ' Ekran güncellemesi ve uyarı mesajları yeniden etkinleştiriliyor.
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    
End Sub
 
Katılım
6 Mart 2024
Mesajlar
315
Excel Vers. ve Dili
2010 TR & 2016 TR
Merhaba,
Kodlar çok kalabalık geldi gözüme.

Kodların ana fikri
C++:
Sub AnaFikir()
    Dim DosyaAD As String
    DosyaAD = ThisWorkbook.Path & "\" & Worksheets("Veri").Range("A1").Value & ".xlsx"
    Sheets("Veri").Copy
    ActiveWorkbook.SaveAs Filename:=DosyaAD, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    ActiveWorkbook.Close SaveChanges:=False
End Sub
 
Katılım
22 Eylül 2012
Mesajlar
1,060
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Merhaba,
Kodlar çok kalabalık geldi gözüme.

Kodların ana fikri
C++:
Sub AnaFikir()
    Dim DosyaAD As String
    DosyaAD = ThisWorkbook.Path & "\" & Worksheets("Veri").Range("A1").Value & ".xlsx"
    Sheets("Veri").Copy
    ActiveWorkbook.SaveAs Filename:=DosyaAD, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    ActiveWorkbook.Close SaveChanges:=False
End Sub

Merhaba,

Son kodlarınız benim için yeterli. Kısa ve basit. Destek için teşekkürler.
 
Katılım
22 Eylül 2012
Mesajlar
1,060
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Merhaba, daha önce açmış olduğum konu üzerinden devam etmek istedim. Daha önce sayın Biolightant ın yazdığı kod ile ismi belirli sayfayı kaydediyorum. Yeni bir çalışmamda makro içeren excel kitabını aynı klasör içine xlsx formatında tüm çalışma kitabını kaydetmem gerekli. Bunun için kodlarda ne gibi revize yapmak gerekiyor. Ve eğer mümkünse formüllerden arındırılmış, sadece değer olarak kaydetmem gerekli.


Aşağıdaki kodlar işimi görür sandım. Yanlış anlamadıysam kaydetme işlemi yapıyor, ancak xlsm dosyası kapatılmış, xlsx dosyası açık kalmış oluyor gibi. Ekranda görünen dosya xlsx formatındaki dosya.


Kod:
Dim DosyaAD As String
DosyaAD = ThisWorkbook.Path & "\" & Worksheets("Data").Range("K2").Value & "-" & Worksheets("Data").Range("K4").Value & " MASRAF FORMU" & ".xlsx"
    
  
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:=DosyaAD, _
    FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
  
    
    UserForm3.Show
 
Son düzenleme:
Katılım
6 Mart 2024
Mesajlar
315
Excel Vers. ve Dili
2010 TR & 2016 TR
excel kitabını aynı klasör içine xlsx formatında tüm çalışma kitabını kaydetmem gerekli.
formüllerden arındırılmış, sadece değer olarak kaydetmem gerekli.
Merhaba,
Bir ara @hamitalper benzer bir soru sormuştu ona tek sayfalık çözüm üretmiştim.
For Each ws In ThisWorkbook.Worksheets ile sizin istediğiniz gibi tüm sayfalara birden uygulanabilir

ama GTP-5 UsedRange hatırlatması yaptı ve daha hızlı çözümü üretti
C++:
Sub FormulsuzKitap_Hizli()
    Dim RaporYolAd As String
    Dim wbRapor As Workbook
    Dim ws As Worksheet
    
    RaporYolAd = ThisWorkbook.Path & "\Rapor.xlsx"
    
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    ' Tüm sayfaları yeni kitaba tek adımda kopyala
    ThisWorkbook.Sheets.Copy
    Set wbRapor = ActiveWorkbook
    
    ' Her sayfadaki formülleri değerlere çevir
    For Each ws In wbRapor.Sheets
        ws.UsedRange.Value = ws.UsedRange.Value
    Next ws
    
    ' Raporu kaydet ve kapat
    wbRapor.SaveAs Filename:=RaporYolAd, FileFormat:=xlOpenXMLWorkbook
    wbRapor.Close SaveChanges:=False
    
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    
    MsgBox "Tüm sayfalar formülsüz olarak '" & RaporYolAd & "' konumuna kaydedildi.", vbInformation, "Rapor OK"
End Sub
 
Katılım
22 Eylül 2012
Mesajlar
1,060
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Merhaba,
Bir ara @hamitalper benzer bir soru sormuştu ona tek sayfalık çözüm üretmiştim.
For Each ws In ThisWorkbook.Worksheets ile sizin istediğiniz gibi tüm sayfalara birden uygulanabilir

ama GTP-5 UsedRange hatırlatması yaptı ve daha hızlı çözümü üretti
C++:
Sub FormulsuzKitap_Hizli()
    Dim RaporYolAd As String
    Dim wbRapor As Workbook
    Dim ws As Worksheet
   
    RaporYolAd = ThisWorkbook.Path & "\Rapor.xlsx"
   
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
   
    ' Tüm sayfaları yeni kitaba tek adımda kopyala
    ThisWorkbook.Sheets.Copy
    Set wbRapor = ActiveWorkbook
   
    ' Her sayfadaki formülleri değerlere çevir
    For Each ws In wbRapor.Sheets
        ws.UsedRange.Value = ws.UsedRange.Value
    Next ws
   
    ' Raporu kaydet ve kapat
    wbRapor.SaveAs Filename:=RaporYolAd, FileFormat:=xlOpenXMLWorkbook
    wbRapor.Close SaveChanges:=False
   
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
   
    MsgBox "Tüm sayfalar formülsüz olarak '" & RaporYolAd & "' konumuna kaydedildi.", vbInformation, "Rapor OK"
End Sub

Teşekkürler,
 
Katılım
22 Eylül 2012
Mesajlar
1,060
Excel Vers. ve Dili
excel 2010

excel 2013
Altın Üyelik Bitiş Tarihi
06-08-2025
Merhaba,
Bir ara @hamitalper benzer bir soru sormuştu ona tek sayfalık çözüm üretmiştim.
For Each ws In ThisWorkbook.Worksheets ile sizin istediğiniz gibi tüm sayfalara birden uygulanabilir

ama GTP-5 UsedRange hatırlatması yaptı ve daha hızlı çözümü üretti
C++:
Sub FormulsuzKitap_Hizli()
    Dim RaporYolAd As String
    Dim wbRapor As Workbook
    Dim ws As Worksheet
   
    RaporYolAd = ThisWorkbook.Path & "\Rapor.xlsx"
   
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
   
    ' Tüm sayfaları yeni kitaba tek adımda kopyala
    ThisWorkbook.Sheets.Copy
    Set wbRapor = ActiveWorkbook
   
    ' Her sayfadaki formülleri değerlere çevir
    For Each ws In wbRapor.Sheets
        ws.UsedRange.Value = ws.UsedRange.Value
    Next ws
   
    ' Raporu kaydet ve kapat
    wbRapor.SaveAs Filename:=RaporYolAd, FileFormat:=xlOpenXMLWorkbook
    wbRapor.Close SaveChanges:=False
   
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
   
    MsgBox "Tüm sayfalar formülsüz olarak '" & RaporYolAd & "' konumuna kaydedildi.", vbInformation, "Rapor OK"
End Sub
Bu hali benim açımdan çok daha kullanışlı oldu, teşekkürler zahmetiniz için.
 
Üst