Çalışma Kitabını Farklı Kaydetme

Katılım
24 Temmuz 2019
Mesajlar
413
Excel Vers. ve Dili
EXCEL 2010 TÜRKÇE
Altın Üyelik Bitiş Tarihi
25-12-2023
Herkese iyi çalışmalar diliyorum.

Sayın @halit3 'ün forum içinde sorulan sorulardan birine cevap vermek üzere hazırlamış olduğu çok güzel bir kod var; onu kendi dosyama uyarlamak istiyorum. Bu kod sadece bir sayfayı kopya alarak farklı kaydediyor. Ben ise aynı format ve mantıkla çalışma dosyasını tümüyle farklı kaydetmek istiyorum. farklı kaydederken tüm VBA kodları ve düğmeleri silerek .xls veya .xlsx formatında kaydetmek istiyorum. Yardımcı olur musunuz?
Teşekkürler.
Kod:
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Private Declare Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long

Private Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type

Sub Mahsup_Farklı_Kaydet()

deger = "Maaş_Dosya_Deseni(" & Format(Date, "mmmm") & ")"
Sayfa_Adı = "Sheet1"
'-------------------------------

Dim bInfo As BROWSEINFO
Dim Path As String
Dim r As Long, x As Long, pos As Integer
msg = "Lütfen bir klasör seçiniz."
bInfo.pidlRoot = 0&
If IsMissing(msg) Then
bInfo.lpszTitle = "Lütfen bir klasör seçiniz."
Else
bInfo.lpszTitle = msg
End If
bInfo.ulFlags = &H1
x = SHBrowseForFolder(bInfo)
Path = Space$(512)
r = SHGetPathFromIDList(ByVal x, ByVal Path)
If r Then
pos = InStr(Path, Chr$(0))
Klasor = Left(Path, pos - 1)

Else
MsgBox "işlemi iptal ettiniz."
Exit Sub
End If


Dim FileExtStr As String
Dim FileFormatNum As Long

With Application
.ScreenUpdating = False
.EnableEvents = False
End With

Dim Sourcewb As Workbook
Set Sourcewb = ActiveWorkbook
Dim sayfa As Worksheet
For Each sayfa In Worksheets

If sayfa.Name = Sayfa_Adı Then

Dim ds, a
Set ds = CreateObject("Scripting.FileSystemObject")
a = ds.FileExists(Klasor & "\" & deger & ".xls")
If a = True Then
MsgBox "Bu isimde bir dosya var"
'Exit Sub
Else

sayfa.Copy

Dim wb As Workbook
Set wb = ActiveWorkbook

With wb
If Val(Application.Version) < 12 Then
FileExtStr = ".xls": FileFormatNum = -4143
Else

If Sourcewb.Name = .Name Then
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
MsgBox "Your answer is NO in the security dialog"
Exit Sub
Else
Select Case Sourcewb.FileFormat
Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
Case 52:
If .HasVBProject Then
FileExtStr = ".xlsm": FileFormatNum = 52
Else
FileExtStr = ".xlsx": FileFormatNum = 51
End If
Case 56: FileExtStr = ".xls": FileFormatNum = 56
Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
End Select
End If
End If
End With

With wb

If yer = vbYes Then
deger.DrawingObjects.Delete
For Each component In ActiveWorkbook.VBProject.VBComponents
If component.Type <> 100 Then
ActiveWorkbook.VBProject.VBComponents.Remove component
Else
Set modul = component.CodeModule
modul.DeleteLines 1, modul.CountOfLines
End If
Next
End If

.SaveAs Klasor & "\" & deger & FileExtStr, FileFormat:=FileFormatNum

.Close SaveChanges:=True
End With

With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End If
End If
Next

End Sub
Örnek Dosyam:
 

Ekli dosyalar

Son düzenleme:

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,307
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Makro kaydet yöntemini kullanarak farklı kaydet kodlarını elde edebilirsiniz. Sonrasında biraz düzenleme ile uyarlama yapabilirsiniz.
 
Katılım
24 Temmuz 2019
Mesajlar
413
Excel Vers. ve Dili
EXCEL 2010 TÜRKÇE
Altın Üyelik Bitiş Tarihi
25-12-2023
Makro kaydet yöntemini kullanarak farklı kaydet kodlarını elde edebilirsiniz. Sonrasında biraz düzenleme ile uyarlama yapabilirsiniz.
Sayın @Korhan Ayhan iyi günler dilerim. Evet dediğiniz gibi düşündüm yapmaya çalıştım ama kod çok sofistike olduğu için entegre edemedim.
Kod:
ActiveWorkbook.SaveAs Klasor & "\" & deger & FileExtStr, FileFormat:=FileFormatNum
kod satırını böyle yaptım fakat resimdeki gibi dosyadaki veri doğrulamadan dolayı hata verdi.
 

Ekli dosyalar

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,307
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Amacınız tam olarak dosyanın kaydetme konumu seçerek dosyayı farklı kaydetmek midir?

Farklı kaydedilen dosyanızın adı ne olacak?
 
Katılım
24 Temmuz 2019
Mesajlar
413
Excel Vers. ve Dili
EXCEL 2010 TÜRKÇE
Altın Üyelik Bitiş Tarihi
25-12-2023
Amacınız tam olarak dosyanın kaydetme konumu seçerek dosyayı farklı kaydetmek midir?

Farklı kaydedilen dosyanızın adı ne olacak?
Değerli üstadım.
1. Sorunun cevabı evet. Kaydedilecek dosya konumunu seçip farklı kaydetmek. Kayıtlı hali tüm kodlardan arındırılmış hali olacak.
2. Sorunun cevabı.
Dosya adı: Maaş_Dosya_Deseni&"-"& Format(Date, "mmmm") gibi olacak
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,307
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Deneyiniz.

C++:
Option Explicit

Sub Save_As_ActiveWorkbook()
    Dim Fso As Object, Target_File As Workbook, File_Folder As Object, File_Path As String, File_Name As String
  
    Set File_Folder = CreateObject("Shell.Application").BrowseForFolder(0, "Lütfen bir klasör seçin!", &H100)

    If File_Folder Is Nothing Then
        MsgBox "İşleme devam edebilmeniz için klasör seçmelisiniz!", vbCritical
        Exit Sub
    End If
  
    If File_Folder = "Desktop" Or File_Folder = "Masaüstü" Then
        File_Path = Environ("UserProfile") & "\" & File_Folder & "\"
    Else
        File_Path = File_Folder.Items.Item.Path & "\"
    End If
  
    File_Name = File_Path & "Maaş_Dosya_Deseni-" & Format(Date, "mmmm") & ".xlsx"

    Set Fso = VBA.CreateObject("Scripting.FileSystemObject")

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    ThisWorkbook.Save
    Fso.CopyFile ThisWorkbook.FullName, File_Path & "Temp_File." & Fso.GetExtensionName(ThisWorkbook.Name), True
    Set Target_File = Workbooks.Open(File_Path & "Temp_File." & Fso.GetExtensionName(ThisWorkbook.Name), False, False)
    On Error Resume Next
    ActiveSheet.DrawingObjects.Delete
    Target_File.SaveAs File_Name, 51
    ActiveWorkbook.Close
    Kill File_Path & "Temp_File." & Fso.GetExtensionName(ThisWorkbook.Name)
    On Error GoTo 0
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True

    Set Fso = Nothing

    MsgBox "Dosyanız aşağıdaki klasöre yedeklenmiştir." & vbCr & vbCr & _
           File_Name, vbInformation
End Sub
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,800
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Alternatif kod
Farklı kayıtı dosyanın yanına yapıyor.

Rich (BB code):
Sub deneme()

Dim fL As Object
Set fL = CreateObject("Scripting.FileSystemObject")
dosya = ThisWorkbook.FullName
dosya_adi = fL.GetBaseName(dosya)
uzanti = "." & fL.GetExtensionName(dosya)

If uzanti = ".xls" Then
If Val(Application.Version) >= 12 Then
FileFormatNum = 56
Else
FileFormatNum = -4143
End If

ElseIf uzanti = ".xlsm" Then
FileFormatNum = 52
ElseIf uzanti = ".xlsx" Then
FileFormatNum = 51
ElseIf uzanti = ".xlsb" Then
FileFormatNum = 50
ElseIf uzanti = ".txt" Then
FileFormatNum = -4143
ElseIf uzanti = ".csv" Then
FileFormatNum = 6
Else
FileFormatNum = 56
End If


ThisWorkbook.Worksheets.Select
ThisWorkbook.Worksheets.Copy

For Each Component In ActiveWorkbook.VBProject.VBComponents
If Component.Type <> 100 Then
ActiveWorkbook.VBProject.VBComponents.Remove Component

Else
Set modul = Component.CodeModule
modul.DeleteLines 1, modul.CountOfLines
End If
Next

Dim sayfa As Worksheet
For Each sayfa In Worksheets
sayfa.DrawingObjects.Delete
Next

dosya_adı = " Maaş_Dosya_Deseni-" & Format(Now, "dd_mm_yyyy_hh_nn_ss")
Kaynak = fL.GetParentFolderName(dosya) & "\"
ActiveWorkbook.SaveAs Kaynak & dosya_adı & uzanti, FileFormat:=FileFormatNum
ActiveWorkbook.Close SaveChanges:=False

MsgBox "işlem tamam"

End Sub
 
Katılım
24 Temmuz 2019
Mesajlar
413
Excel Vers. ve Dili
EXCEL 2010 TÜRKÇE
Altın Üyelik Bitiş Tarihi
25-12-2023
Deneyiniz.

C++:
Option Explicit

Sub Save_As_ActiveWorkbook()
    Dim Fso As Object, Target_File As Workbook, File_Folder As Object, File_Path As String, File_Name As String
  
    Set File_Folder = CreateObject("Shell.Application").BrowseForFolder(0, "Lütfen bir klasör seçin!", &H100)

    If File_Folder Is Nothing Then
        MsgBox "İşleme devam edebilmeniz için klasör seçmelisiniz!", vbCritical
        Exit Sub
    End If
  
    If File_Folder = "Desktop" Then
        File_Path = Environ("UserProfile") & "\" & File_Folder & "\"
    Else
        File_Path = File_Folder.Items.Item.Path & "\"
    End If
  
    File_Name = File_Path & "Maaş_Dosya_Deseni-" & Format(Date, "mmmm") & ".xlsx"

    Set Fso = VBA.CreateObject("Scripting.FileSystemObject")

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    ThisWorkbook.Save
    Fso.CopyFile ThisWorkbook.FullName, File_Path & "Temp_File." & Fso.GetExtensionName(ThisWorkbook.Name), True
    Set Target_File = Workbooks.Open(File_Path & "Temp_File." & Fso.GetExtensionName(ThisWorkbook.Name), False, False)
    On Error Resume Next
    ActiveSheet.DrawingObjects.Delete
    Target_File.SaveAs File_Name, 51
    ActiveWorkbook.Close
    Kill File_Path & "Temp_File." & Fso.GetExtensionName(ThisWorkbook.Name)
    On Error GoTo 0
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True

    Set Fso = Nothing

    MsgBox "Dosyanız aşağıdaki klasöre yedeklenmiştir." & vbCr & vbCr & _
           File_Name, vbInformation
End Sub
Korhan hocam
Kod:
        File_Path = File_Folder.Items.Item.Path & "\"
Bu satırda hata verdi
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,307
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Hangi klasörü seçtiniz?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,307
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Küçük bir düzeltme yaptım. Kodu tekrar deneyiniz.
 
Katılım
24 Temmuz 2019
Mesajlar
413
Excel Vers. ve Dili
EXCEL 2010 TÜRKÇE
Altın Üyelik Bitiş Tarihi
25-12-2023
Alternatif kod
Farklı kayıtı dosyanın yanına yapıyor.

Rich (BB code):
Sub deneme()

Dim fL As Object
Set fL = CreateObject("Scripting.FileSystemObject")
dosya = ThisWorkbook.FullName
dosya_adi = fL.GetBaseName(dosya)
uzanti = "." & fL.GetExtensionName(dosya)

If uzanti = ".xls" Then
If Val(Application.Version) >= 12 Then
FileFormatNum = 56
Else
FileFormatNum = -4143
End If

ElseIf uzanti = ".xlsm" Then
FileFormatNum = 52
ElseIf uzanti = ".xlsx" Then
FileFormatNum = 51
ElseIf uzanti = ".xlsb" Then
FileFormatNum = 50
ElseIf uzanti = ".txt" Then
FileFormatNum = -4143
ElseIf uzanti = ".csv" Then
FileFormatNum = 6
Else
FileFormatNum = 56
End If


ThisWorkbook.Worksheets.Select
ThisWorkbook.Worksheets.Copy

For Each Component In ActiveWorkbook.VBProject.VBComponents
If Component.Type <> 100 Then
ActiveWorkbook.VBProject.VBComponents.Remove Component

Else
Set modul = Component.CodeModule
modul.DeleteLines 1, modul.CountOfLines
End If
Next

Dim sayfa As Worksheet
For Each sayfa In Worksheets
sayfa.DrawingObjects.Delete
Next

dosya_adı = " Maaş_Dosya_Deseni-" & Format(Now, "dd_mm_yyyy_hh_nn_ss")
Kaynak = fL.GetParentFolderName(dosya) & "\"
ActiveWorkbook.SaveAs Kaynak & dosya_adı & uzanti, FileFormat:=FileFormatNum
ActiveWorkbook.Close SaveChanges:=False

MsgBox "işlem tamam"

End Sub
Halit Bey merhaba
Sizin kodda
şu satırda hata verdi.
Kod:
ThisWorkbook.Worksheets.Select
 
Katılım
24 Temmuz 2019
Mesajlar
413
Excel Vers. ve Dili
EXCEL 2010 TÜRKÇE
Altın Üyelik Bitiş Tarihi
25-12-2023
Küçük bir düzeltme yaptım. Kodu tekrar deneyiniz.
Değerli @Korhan Ayhan hocam masaüstüne kayıt etmek istediğimde
Dosya yolunu bulamıyor ve şu satırda hata veriyor
Kod:
    Fso.CopyFile ThisWorkbook.FullName, File_Path & "Temp_File." & Fso.GetExtensionName(ThisWorkbook.Name), True
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,307
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
İngilizce sürüm olan laptobumda denediğimde sorun yaşamadım. Ama şimdi Ofis 365 Türkçe sürüm olan pc de deniyorum. Bende hata alıyorum. Sanırım Türkçe karakterler sorun çıkarıyor.
 
Katılım
24 Temmuz 2019
Mesajlar
413
Excel Vers. ve Dili
EXCEL 2010 TÜRKÇE
Altın Üyelik Bitiş Tarihi
25-12-2023
Korhan Hocam bir tespitimi paylaşmak istiyorum izninizle
@halit3 Beyin Benim paylaştığım kodda bulunan
Kod:
sayfa.Copy
silip yerine Halit Beyin kendisinin paylaştığı ikinci koddaki
Kod:
ThisWorkbook.Worksheets.Copy
ile değiştirince tam istediğim gibi oldu. Şimdi farkettim.
Yoksa yanlış tespit mi?
 
Katılım
24 Temmuz 2019
Mesajlar
413
Excel Vers. ve Dili
EXCEL 2010 TÜRKÇE
Altın Üyelik Bitiş Tarihi
25-12-2023
Sizin yazdığınız kodun hata vermeyen halini paylaşırsanız çok minnettar olacağım. Sizin yazdığınız kodda benim gibi acemilerin mantık yürütmesi(ne nereye denk geliyor bunu anlamak bakımından) daha kolay gibi görünüyor. @Korhan Ayhan
 
Katılım
24 Temmuz 2019
Mesajlar
413
Excel Vers. ve Dili
EXCEL 2010 TÜRKÇE
Altın Üyelik Bitiş Tarihi
25-12-2023
Korhan Hocam bir tespitimi paylaşmak istiyorum izninizle
@halit3 Beyin Benim paylaştığım kodda bulunan
Kod:
sayfa.Copy
silip yerine Halit Beyin kendisinin paylaştığı ikinci koddaki
Kod:
ThisWorkbook.Worksheets.Copy
ile değiştirince tam istediğim gibi oldu. Şimdi farkettim.
Yoksa yanlış tespit mi?
Bu vesile ile @halit3 Bey'e çok teşekkür ederim.
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,800
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe

Kod benim dosyada çalışıyor.

işletim sistemi windows 10 64 bit excell versiyon ofis 2016 64 bit
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,307
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Şimdi önerdiğim kodu İngilizce sistemde denedim. Sorunsuz çalışıyor.

Siz kodu bir de F8 tuşu ile adım adım çalışıtırıp hata veren satırda kodun aldığı değerleri kontrol etmeyi deneyiniz.
 
Üst