• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Makro İle Sayfa Çoğaltma

Katılım
21 Eylül 2011
Mesajlar
115
Excel Vers. ve Dili
Office 365 - İngilizce
Merhaba,

Ana tablomu yaptığım bir excel sayfam var. Makro ile bu sayfayı çoğaltmak istiyorum.

Çoğaltılan sayfaların adlarını da benim belirlediğim hücrelerden alacak. Yani ben A1 hücresine 01.08.2015'ten başlayıp A31 hücresine kadar 31.08.2015 olacak şekilde alt alta yazıyorum. Makro çalıştığında bu aralıktaki kadar sayfa açıp, sayfa adlarını da buradan alacak. Bunu yapan bir makro buldum ama sayfa çoğaltma değil boş sayfa ekleme yapıyor.

Sayfa çoğaltma kodu da buldum ama o da sayfa adlarını 1,2,3,4,.. diye adlandırıyor.

Sadece sayfa ekleme kodunu "Add" yerine "Copy" olarak değiştirdiğim zaman hata veriyor. Nasıl yapacağımı bir türlü bulamadım. Yardımcı olursanız çok sevinirim. Kullandığım kodlar aşağıdaki gibidir.

Sayfa ekleme kodum bu. Benim yazdığım hücre aralığındaki verilere göre sayfaları adlandırarak ekliyor ama boş sayfa ekliyor.
Kod:
Sub CreateWorksheets(Names_Of_Sheets As Range)
Dim No_Of_Sheets_to_be_Added As Integer
Dim Sheet_Name As String
Dim i As Integer
No_Of_Sheets_to_be_Added = Names_Of_Sheets.Rows.Count
For i = 1 To No_Of_Sheets_to_be_Added
Sheet_Name = Names_Of_Sheets.Cells(i, 1).Value
If (Sheet_Exists(Sheet_Name) = False) And (Sheet_Name <> "") Then
Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = Sheet_Name
End If
Next i
End Sub

Sub Düğme3_Tıklat()
Call CreateWorksheets(Sheets("Ana").Range("X1:X31"))
End Sub

Bu kod ile sayfanın kopyasını çoğaltabiliyorum ama bu da 1,2,3,4... diye adlandırıyor sayfa adlarını...
Kod:
Sub cogalt()
For a = 1 To 31
Sheets("Ana").Copy After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = a
Next
End Sub

Üstteki kodu boş değil de sayfayı kopyalayacak şekilde nasıl değiştirebilirim...
 
Son kodunuzu aşağıdaki gibi değiştirip deneyin.

Kod:
Sub cogalt()
For a = 1 To 31
Sheets("Ana").Copy After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = Sheets("Ana").Cells(a, "X")
Next
End Sub
 
Korhan Bey,

Çok teşekkür ederim. Dün akşamdan beri uğraşıyorum.
 

Ekli dosyalar

Ayrıca ilk eklediğiniz mesajınızdaki gibi fonksiyon olarak kullanmak isterseniz aşağıdaki gibi deneyebilirsiniz.

Kod:
Sub Sayfa_Kopyala(Sayfalar As Range)
    For Each Sayfa In Sayfalar
        If Not Sayfa_Kontrol(Sayfa.Text) Then
            Sheets("Ana").Copy After:=Worksheets(Worksheets.Count)
            ActiveSheet.Name = Replace(Sayfa.Text, "/", ".")
        End If
    Next
End Sub

Function Sayfa_Kontrol(Sayfa_Adi As String) As Boolean
    On Error Resume Next
    Sayfa_Kontrol = Worksheets(CStr(Sayfa_Adi)).Name <> ""
End Function

Sub Makro()
    Call Sayfa_Kopyala(Sheets("Ana").Range("X1:X31"))
End Sub
 
Merhaba;
Eki deneyin. Sayfa isimlerini ve şablon olarak çoğaltacağınız sayfa adını kendinize göre düzenleyin.
İyi çalışmalar.

Link:
http://s3.dosya.tc/server4/yfvtk5/Allback-sablon_ile_sayfa_olusturma.zip.html

Not: Korhan Bey'in çözümünü görmeden yazdım. Alternatif olsun.

Sn. muygun,

Örnek dosyanızı indirdim.
İlginize çok teşekkür ederim.

Silme butonu yapmak aklıma gelmemişti her seferinde mouse ile sayfaları seçip siliyordum. O da çok işime yarayacak.

Teşekkürler

Korhan Bey,

Kodu son hali ile değiştirdim. Aynı kayıtların oluşma ihtimali yok ama yine de ne olur olmaz, fonksiyon ile bunu da kontrol altına almış olduk.

Benim şöyle bir sorunum var. Bilgisayarımda tarih formatının ayracı "/" işareti ile ama excel sayfa isimlerinde "/" kullanmama izin vermiyor.

Sn. muygun'un dosyasını indirdiğimde de aynı sorunu yaşadım. Makro çalıştığında "/" işareti yüzünden hata veriyor ve sayfaları oluşturmuyor. Ben de mecburen Bul/Değiştir ile tüm "/" işaretlerini "nokta" ile değiştiriyorum. Ben şimdi dosyamı başka bilgisayarda çalıştırmak istediğimde bu sefer "nokta" yüzünden hata verir mi? ya da sayfa adlarında "/" kullanmak mümkün değil mi?
 
Son düzenleme:
Sayfa isimlerinde bazı karakterler kullanılamıyor. "/" işareti de bunlardan birisidir.
 
#5 nolu mesajımdaki koda küçük bir ekleme yaptım. Tarih verisinde "/" işareti varsa otomatik noktaya çevirecektir.
 
Geri
Üst