Klasör oluşturma ve bu klasör içine belgenin yedeğini kopyalama.

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,471
Excel Vers. ve Dili
Office 2010 & 2013 tr
Selamlar...
Excel dosyasında bir buton aracılığıyla belirtilen konumda (C/ProgramFiles) kendi belirleyeceğim bir isimde klasör oluşturmak istiyorum. Bu oluşturduğum klasörün içine de yine kendi belirleyeceğim isimde bir excel dosyası oluşturup belgemin içindeki bazı sayfaları kendi ismiyle yedeklemek istiyorum.
Böyle birşeyin mümkün olduğunu biliyorum; fakat yapamıyorum.
Bundan dolayı bu karışık işlemi uzmanlarımıza havale ediyorum.
Saygılar...

NOT: Bu söylediğim işlemler tek buton aracılığıyla olacak... Ayrıca İnputboxa gerek yok, kod içinde herhangi bir isim verseniz de kafi.
 
Katılım
17 Haziran 2006
Mesajlar
348
Excel Vers. ve Dili
2003 - TR / 2007 - TR
Aşağıdaki kod B2 hücresindeki isme göre sayfa yedeklemeyi yapmaktadır.
.... ve dosya ismi kısmını kendinize göre düzenleyiniz.
Sub sayfayedekle()
Dim i As String
If ActiveSheet.Range("b2").Value <> "" Then
i = ActiveSheet.Range("b2").Value
Sheets("Sayfa1").Select
Sheets("Sayfa1").Copy
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:= _
"C:\Documents and Settings\.........\Belgelerim\Dosya &#304;smi\" & i & ".xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
Workbooks(i & ".xls").Activate
ActiveWindow.View = xlPageBreakPreview
ActiveSheet.Protect "", DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveWorkbook.Save
ActiveWorkbook.Close
' ThisWorkbook.Close
Application.DisplayAlerts = True
Else: Exit Sub
End If
End Sub
 
Son düzenleme:

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,471
Excel Vers. ve Dili
Office 2010 & 2013 tr
Syn. htrk,
Dosyada uyguladım ama hata veriyor. Butona tıkladığımda belge Kitap1 adında yeni dosya oluşturuyor. Ayrıca belirttiğim konumda klasörü oluşturmuyor.
Ben düğmeye tıkladığımda yedekleme kendiliğinden olsun istiyorum. Karşıma hiçbirşey çıkmadan.
Sanırım dosyayı eklersem daha net anlaşılır:
 
Katılım
17 Haziran 2006
Mesajlar
348
Excel Vers. ve Dili
2003 - TR / 2007 - TR
Merhaba...
"C:\TestYedek" Klas&#246;r&#252;n&#252; kendiniz olu&#351;turun ve kodu &#231;al&#305;&#351;t&#305;r&#305;n. Sizin d&#252;zenledi&#287;iniz koda g&#246;re test edildi, &#231;al&#305;&#351;&#305;yor...
Ya da Kodu &#351;u &#351;ekilde de&#287;i&#351;tiriniz..
Kod:
Sub sayfayedekle()
    Dim i As String
    On Error Resume Next
    Application.ScreenUpdating = False
    MkDir ("C:\" & "TestYedek")
    If ActiveSheet.Range("h2").Value <> "" Then
    i = ActiveSheet.Range("h2").Value
    Sheets("Sayfa1").Select
    Sheets("Sayfa1").Copy
    ActiveWorkbook.SaveAs Filename:= _
    "C:\TestYedek\" & i & ".xls", _
    FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
    CreateBackup:=False
    Workbooks(i & ".xls").Activate
    ActiveWindow.View = xlPageBreakPreview
    ActiveSheet.Shapes("Button 11").Select
    Selection.Delete
    ActiveSheet.Shapes("A Grubu").Select
    Selection.Delete
    ActiveWindow.View = xlNormalView
    ActiveWorkbook.Save
    ActiveWorkbook.Close
    ' ThisWorkbook.Close
    Application.ScreenUpdating = True
    Else: Exit Sub
    End If
End Sub
 
Son düzenleme:

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,471
Excel Vers. ve Dili
Office 2010 & 2013 tr
Tamamd&#305;r. &#350;imdi oldu. &#214;ncelikle te&#351;ekk&#252;r ederim. Fakat kodlar&#305; yerle&#351;tirince yeni ihtiya&#231;lar ortaya &#231;&#305;kt&#305;. &#350;u an akl&#305;ma gelenleri maddelendiriyorum. &#304;lgilenirseniz sevinirim.
1-Butona t&#305;klad&#305;&#287;&#305;mda aynen bu kodlarda oldu&#287;u gibi klas&#246;r olu&#351;sun ve i&#231;inde excel dosyas&#305; olu&#351;sun.(Bu tamam.)
2- Ard&#305;ndan yeni i&#351;lem yapt&#305;&#287;&#305;mda eskisini silsin ve yenisini kaydetsin veya "Bu isimde bir dosya var, yenisiyle de&#287;i&#351;tirmek istiyor musunuz" &#351;eklindeki sorgu ekran&#305; gelmeden yeni yede&#287;i kaydetsin.
3- Birden fazla sayfan&#305;n yede&#287;ini ayn&#305; anda alamaz m&#305;y&#305;z?
4- Son olarak yede&#287;ini ald&#305;&#287;&#305;m&#305;z sayfalar&#305;, tekrar bir buton arac&#305;l&#305;&#287;&#305;yla anadosyam&#305;za ayn&#305; isimle &#231;a&#287;&#305;rabilir miyiz? Eski sayfay&#305; silip yerine yedeklemi&#351; oldu&#287;umuz yeni sayfay&#305; getirecek.
 

Korhan Ayhan

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

A&#351;a&#287;&#305;daki kodu denermisiniz. Yede&#287;ini almak istedi&#287;iniz sayfalar&#305; se&#231;ip makroyu &#231;al&#305;&#351;t&#305;r&#305;n. Her sayfay&#305; kendi ismiyle ayr&#305; birer kitap olarak "C:\YEDEK" klas&#246;r&#252;ne kay&#305;t edecektir.

Kod:
Sub Yedek_Al()
    On Error Resume Next
    
    Dim Fso As Object, Sayfa As Object
    Dim Dosya_Yolu As String, Dosya_Ad&#305; As String
    
    Dosya_Yolu = "C:\YEDEK"
    
    Set Fso = CreateObject("Scripting.FileSystemObject")
    
    If Not Fso.FolderExists(Dosya_Yolu) Then
    Fso.CreateFolder (Dosya_Yolu)
    End If
    
    For Each Sayfa In ActiveWindow.SelectedSheets
    Sheets(Sayfa.Name).Copy
    Dosya_Ad&#305; = Sayfa.Name & ".xls"
    ActiveWorkbook.SaveAs Filename:=Dosya_Yolu & Application.PathSeparator & Dosya_Ad&#305;
    ActiveWorkbook.Close 0
    Next
    Sheets(1).Select
    
    Set Fso = Nothing
End Sub
 

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,471
Excel Vers. ve Dili
Office 2010 & 2013 tr
Syn. Korhan Hocam,
Sayfa isimlerini kod i&#231;ine yazarak bu i&#351;lemi yapamaz m&#305;y&#305;z? &#199;&#252;nk&#252; yede&#287;i al&#305;nacak sayfalar de&#287;i&#351;meyecek.
Bir de geri &#231;a&#287;&#305;rma &#351;ans&#305;m&#305;z yok mu?
&#304;&#351;lem yapmadan &#246;nce yedek klas&#246;r&#252; silinip, yeni yede&#287;i kaydetme &#351;ans&#305;m&#305;z var m&#305;? Uyar&#305; ekran&#305;n&#305;n gelmemesi i&#231;in?
Sayg&#305;lar.
 

Korhan Ayhan

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

Sayfa isimleri olarak ne verilecek?

Ayr&#305;ca yedeklenen sayfay&#305; geri &#231;a&#287;&#305;rd&#305;&#287;&#305;n&#305;zda e&#287;er eski sayfa ile ba&#351;ka sayfalar aras&#305;nda ba&#287;lant&#305;l&#305; form&#252;ller varsa s&#305;k&#305;nt&#305; yaratacakt&#305;r.
 
Katılım
17 Haziran 2006
Mesajlar
348
Excel Vers. ve Dili
2003 - TR / 2007 - TR
5. Mesaj&#305;n&#305;z 1 ve 2. sorunun cevab&#305; olarak kodu a&#351;a&#287;&#305;daki gibi de&#287;i&#351;tiriniz. Ayn&#305; sayfa varsa sormadan &#252;zerine kaydediyor. (Alternatif)
Kod:
Sub sayfayedekle()
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
    End With
    Dim i As String
    On Error Resume Next
    MkDir ("C:\" & "TestYedek")
    If ActiveSheet.Range("h2").Value <> "" Then
    i = ActiveSheet.Range("h2").Value
    Sheets("Sayfa1").Select
    Sheets("Sayfa1").Copy
    ActiveWorkbook.SaveAs Filename:= _
    "C:\TestYedek\" & i & ".xls", _
    FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
    CreateBackup:=False
    Workbooks(i & ".xls").Activate
    ActiveWindow.View = xlPageBreakPreview
    ActiveSheet.Shapes("Button 11").Select
    Selection.Delete
    ActiveSheet.Shapes("A Grubu").Select
    Selection.Delete
    ActiveWindow.View = xlNormalView
    ActiveWorkbook.Save
    ActiveWorkbook.Close
    ' ThisWorkbook.Close
    Else: Exit Sub
    End If
    With Application
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With
    MsgBox "Kaydedildi...", vbInformation
End Sub
 
Katılım
17 Haziran 2006
Mesajlar
348
Excel Vers. ve Dili
2003 - TR / 2007 - TR
Korhan bey, sizin yazm&#305;&#351; oldu&#287;unuz kod i&#231;inde; sayfa ad&#305; ve dosya ad&#305;n&#305; [B2] den almas&#305; i&#231;in nas&#305;l bir de&#287;i&#351;iklik yap&#305;lmal&#305;d&#305;r.

A&#351;a&#287;&#305;daki ilavelerle hallettim te&#351;ekk&#252;rler..
Kod:
    Dim i As String
        i = ActiveSheet.Range("B2").Value
    Dosya_Ad&#305; = i & ".xls"
 
Son düzenleme:

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,471
Excel Vers. ve Dili
Office 2010 & 2013 tr
Syn. Htrk,
&#199;ok te&#351;ekk&#252;r ederim. Geri &#231;a&#287;&#305;rmay&#305; da elbette halledecek arkada&#351;&#305;m&#305;z &#231;&#305;kacakt&#305;r.
Sayg&#305;lar...
 

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,471
Excel Vers. ve Dili
Office 2010 & 2013 tr
Selamlar,

Sayfa isimleri olarak ne verilecek?

Ayrıca yedeklenen sayfayı geri çağırdığınızda eğer eski sayfa ile başka sayfalar arasında bağlantılı formüller varsa sıkıntı yaratacaktır.
Sayfa isimleri "Veri, Veri2, Veri3, Veri4, CVP, CVP2, CVP3, CVP4" toplam sekiz sayfa.
Bu belirttiğim sayfalarda bir tane bile formül yok. Yani sıkıntı yok. Değiştirilebilir.
Fakat bunların dışında bir Ana sayfam bir de "Kriter" isimli bir sayfam var. Bunlarda hiçbir değişiklik olmaması gerekiyor. Tüm işlemler bu belirttiğim iki sayfa üzerinde gerçekleşiyor. Diğerleri verilerin kaydedildiği bölüm. Silindiği zaman problem oluşturmaz.
Saygılar...
 

Korhan Ayhan

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

Ekteki &#246;rnek dosyay&#305; incelermisiniz. Kendi dosyan&#305;za uyarlarken &#214;RNEK yazan k&#305;s&#305;mlar&#305; kendi dosya ad&#305;n&#305;zla de&#287;i&#351;tirmeyi unutmay&#305;n.
 
Son düzenleme:

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,471
Excel Vers. ve Dili
Office 2010 & 2013 tr
Syn. Korhan hocam,
&#199;ok te&#351;ekk&#252;r ederim, gayet g&#252;zel olmu&#351;.
Kodlarla ilgili birka&#231; sorum olacak, Klas&#246;r&#252; her defas&#305;nda yeniden mi olu&#351;turuyor; yoksa makroyu ilk &#231;al&#305;&#351;t&#305;rd&#305;&#287;&#305;m&#305;zda klas&#246;r&#252; olu&#351;turup, sonraki i&#351;lemlerde yeniden klas&#246;r olu&#351;turmay&#305;p olu&#351;turulmu&#351; klas&#246;r i&#231;ine i&#351;lem mi yap&#305;yor?
Ayn&#305; soru klas&#246;r i&#231;indeki dosya i&#231;inde ge&#231;erli. Eski dosyay&#305; silip yenisini mi kopyal&#305;yor; yoksa makro ilk &#231;al&#305;&#351;t&#305;&#287;&#305;nda dosyay&#305; olu&#351;turup, di&#287;er i&#351;lemleri bu dosya i&#231;inde de&#287;i&#351;iklikler yaparak m&#305; ger&#231;ekle&#351;tiriyor?
Son olarak, kodlarda b&#252;y&#252;k bir de&#287;i&#351;iklik gerektirmeyecekse yedekleri toplu halde &#231;a&#287;&#305;rma se&#231;ene&#287;i de ekleyebilr miyiz? Tek tek &#231;a&#287;&#305;rma i&#351;lemi kalacak.
Tekrar te&#351;ekk&#252;r ederim.
Sayg&#305;lar...
 

Korhan Ayhan

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

İlk sorunuz;

Kodu ilk çalıştıdığınızda eğer C diski içinde YEDEK isimli klasör yoksa otomatik olarak oluşturur. Sonraki işlemlerde tekrar tekrar klasör oluşturulmamaktadır.

İkinci sorunuz;

Dosyaları ise YEDEK klasörü içinde daha önce kaydedilmiş aynı isimli dosya varsa direk üzerine kaydeder. Eğer dosya ilk kez yedekleniyorsa yeni dosya oluşturup kaydeder.

Üçüncü sorunuz;

Üstteki mesajımdaki dosyayı güncelledim. Tüm sayfaları yedekten geri alma özelliğide eklenmiştir. İncelermisiniz.
 
Katılım
17 Haziran 2006
Mesajlar
348
Excel Vers. ve Dili
2003 - TR / 2007 - TR
Selamlar, Korhan bey &#231;al&#305;&#351;man&#305;z m&#252;kemmel olmu&#351;. Ellerinize sa&#287;l&#305;k...
Ayn&#305; konu ile ilgili bir sorum olacak.
Dosya ad&#305;n&#305;n "DATA" oldu&#287;unun d&#252;&#351;&#252;n&#252;rsek, kaydederken "DATA" isimli sayfa varsa, "DATA (1)", "DATA (2)" &#351;eklinde kaydetmesini nas&#305;l sa&#287;layabiliriz. Te&#351;ekk&#252;rler...
Birde makroyu F12 tu&#351;una nas&#305;l ba&#287;l&#305;yorsunuz. (F12) tu&#351;unu anlad&#305;m..
 
Son düzenleme:

Korhan Ayhan

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

Sn. htrk,

Burada dosyay&#305; yedeklemiyoruz i&#231;indeki sayfalar&#305; yedekliyoruz. Dedi&#287;iniz &#351;ekilde sayfalar yada dosyalar yedeklenebilir tabiki. Fakat buradaki ama&#231; nedir?
 
Katılım
17 Haziran 2006
Mesajlar
348
Excel Vers. ve Dili
2003 - TR / 2007 - TR
Selam,

Dosya de&#287;il yanl&#305;&#351; anlatt&#305;m, sayfa yedeklemek i&#231;in, teklif haz&#305;rl&#305;yorum ve kaydediyorum, ayn&#305; ki&#351;i ad&#305;na g&#246;re teklif varsa Ali ise Ali (1) olarak kaydetmesidir.

Not: Benim koduma g&#246;re de olabilir. &#304;smi (B2) den al&#305;yorum
 

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,471
Excel Vers. ve Dili
Office 2010 & 2013 tr
Syn. Korhan hocam,
Çok teşekkür ederim. Kodlar tam istediğim gibi.
Saygılar...
 

Korhan Ayhan

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

Sn. htrk,

&#214;rnek olarak eklemi&#351; oldu&#287;um dosyadaki YEDEK_AL kodunu a&#351;a&#287;&#305;daki &#351;ekilde de&#287;i&#351;tirip denermisiniz.

Kod:
Sub YEDEK_AL()
    On Error Resume Next
    Dim Fso As Object
    Dim Dosya_Yolu As String, Dosya_Ad&#305; As String, Sayfa_Ad&#305; As String
    Dim Sayfalar()
    Dim X As Long, Ek As Integer
    Dosya_Yolu = "C:\YEDEK"
    Sayfalar = Array("Veri", "Veri2", "Veri3", "Veri4", "CVP", "CVP2", "CVP3", "CVP4")
    Ek = 1
    Set Fso = CreateObject("Scripting.FileSystemObject")
    
    If Not Fso.FolderExists(Dosya_Yolu) Then
    Fso.CreateFolder (Dosya_Yolu)
    End If
    
    Application.ScreenUpdating = False
    For X = 0 To UBound(Sayfalar)
    Sayfa_Ad&#305; = Evaluate("=UPPER(""" & Sayfalar(X) & """)")
    If SAYFA(Sayfa_Ad&#305;) Then
    Sheets(Sayfalar(X)).Copy
    Dosya_Ad&#305; = Sayfa_Ad&#305; & ".xls"
    
    If Dir(Dosya_Yolu & Application.PathSeparator & Dosya_Ad&#305;, vbNormal) = "" Then
    ActiveWorkbook.SaveCopyAs Filename:=Dosya_Yolu & Application.PathSeparator & Dosya_Ad&#305;
    ActiveWorkbook.Close 0
    GoTo Son
    End If
Devam:
    If Dir(Dosya_Yolu & Application.PathSeparator & Sayfa_Ad&#305; & " " & Ek & ".xls", vbNormal) = "" Then
    ActiveWorkbook.SaveCopyAs Filename:=Dosya_Yolu & Application.PathSeparator & Sayfa_Ad&#305; & " " & Ek & ".xls"
    ActiveWorkbook.Close 0
    Else
    Ek = Ek + 1
    GoTo Devam
    End If
    End If
Son:
    Next
    Sheets(1).Select
    Application.ScreenUpdating = True
    Set Fso = Nothing
    MsgBox "Yedekleme i&#351;lemi tamamlanm&#305;&#351;t&#305;r.", vbInformation
End Sub
 
Son düzenleme:
Üst