PasteSpecial Yöntemi

Katılım
6 Mayıs 2008
Mesajlar
125
Excel Vers. ve Dili
Microsoft Excel 2007 Tr
Merhaba arkadaşlar,şöyle bir sorunum var.Sayfa kopyalarken aşağıdaki kodlarda sorun yaşıyorum:

Worksheets.Add.Move after:= worksheets(worksheets.count)
ActiveSheet.Name = Sheets("BORDRO").Range("H1").Value
Cells.Select
Selection.PasteSpecial Paste:=xlAll

Renkli olan kodlarda PasteSpecial yöntemi başarısız uyarısı veriyor ama after:=worksheets(worksheets.count) kodlarını kaldırınca bir sorun olmuyor ama bu sefer yeni sayfa sol tarafa ekleniyor.Bu sorunu nasıl çözebilirim acaba?Şimdiden teşekkür ederim.
 
Katılım
23 Eylül 2004
Mesajlar
1,754
Excel Vers. ve Dili
Excel 2010 TR
Sanırım işlem copy moduunu iptal ediyor ve copy olmayınca yapıştıracak bir şey bulamıyor oyuzden hata vaeriyor olabilir.
 
Katılım
6 Mayıs 2008
Mesajlar
125
Excel Vers. ve Dili
Microsoft Excel 2007 Tr
Sanırım işlem copy moduunu iptal ediyor ve copy olmayınca yapıştıracak bir şey bulamıyor oyuzden hata vaeriyor olabilir.
Merhaba Hüseyin Bey,copy komutu ondan önce var ama ben de hatayı bulamadım nedense.Kodların hepsini veriyorum belki o zaman daha iyi anlaşılabilir.


Kod:
Private Sub Workbook_Open()
Dim i As Integer

Application.ScreenUpdating = False
Bordro_İslemleri

If Sheets("BORDRO").Range("ı1").Value > 30 Then
MsgBox "LÜTFEN YENİ MAAŞ DÖNEMİNİ GİRİNİZ"

Hesaplamalar_Sayfada
Sheets("BORDRO").Cells.Select
Selection.Copy

Worksheets.Add
ActiveSheet.Name = Sheets("BORDRO").Range("H1").Value
Cells.Select
Selection.PasteSpecial Paste:=xlAll

Range("a1").Select
Sheets("BORDRO").Select
Range("h1").Value = DateAdd("m", 1, Range("h1"))
Maas_Donemi_Ayarla
For i = 5 To 45
Cells(i, "I").Value = 1
Next i

Hesaplamalar_Maas_Donemi
Application.CutCopyMode = False
Else
Hesaplamalar


End If
 
Katılım
6 Mayıs 2008
Mesajlar
125
Excel Vers. ve Dili
Microsoft Excel 2007 Tr
Ben örnek sayfayı da ekleyeyim bu arada.Eklediğim örnekte after:=worksheets(worksheets.count) kod satırı kaldırıldı.Yani hata vermiyor.Benim istediğim bu kod satırını ekleyince hata vermemesi.Bu arada dosyayı deneyebilmek için sistem tarihinin bugün 31.03.2011 yapılması lazım örnekteki kodlar ona göre çalışıyor.
 

Ekli dosyalar

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,471
Excel Vers. ve Dili
Office 2010 & 2013 tr
Merhaba,
Syn Huseyinkis'in söylediği doğru... Sayfa oluşturunca hafızadaki verileri siliyor. Kopyalama sırasında bir değişiklik yaparak bu sorunun önüne geçebilirsiniz. Kodu aşağıdaki gibi deneyiniz.
Kod:
Private Sub Workbook_Open()
Dim i As Integer

Application.ScreenUpdating = False
Bordro_İslemleri

If Sheets("BORDRO").Range("ı1").Value > 30 Then
MsgBox "LÜTFEN YENİ MAAŞ DÖNEMİNİ GİRİNİZ"

Hesaplamalar_Sayfada

Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Sheets("BORDRO").Range("H1").Value
[COLOR="DarkRed"]Sheets("BORDRO").Cells.Copy[/COLOR]
Cells.Select
Selection.PasteSpecial Paste:=xlAll

Range("a1").Select
Sheets("BORDRO").Select
Range("h1").Value = DateAdd("m", 1, Range("h1"))
Maas_Donemi_Ayarla
For i = 5 To 45
Cells(i, "I").Value = 1
Next i

Hesaplamalar_Maas_Donemi
Application.CutCopyMode = False
Else
Hesaplamalar
End If

MsgBox "TOPLAM MAAŞ ÖDEMELERİ " & Sheets("BORDRO").Range("N46") & " TL'dir"
MsgBox "TOPLAM " & WorksheetFunction.CountA(Sheets("BORDRO").Range("b5:b65536")) & " ADET PERSONEL VARDIR"
Application.ScreenUpdating = True
End Sub
 
Katılım
6 Mayıs 2008
Mesajlar
125
Excel Vers. ve Dili
Microsoft Excel 2007 Tr
Merhaba,
Syn Huseyinkis'in söylediği doğru... Sayfa oluşturunca hafızadaki verileri siliyor. Kopyalama sırasında bir değişiklik yaparak bu sorunun önüne geçebilirsiniz. Kodu aşağıdaki gibi deneyiniz.
Kod:
Private Sub Workbook_Open()
Dim i As Integer

Application.ScreenUpdating = False
Bordro_İslemleri

If Sheets("BORDRO").Range("ı1").Value > 30 Then
MsgBox "LÜTFEN YENİ MAAŞ DÖNEMİNİ GİRİNİZ"

Hesaplamalar_Sayfada

Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Sheets("BORDRO").Range("H1").Value
[COLOR="DarkRed"]Sheets("BORDRO").Cells.Copy[/COLOR]
Cells.Select
Selection.PasteSpecial Paste:=xlAll

Range("a1").Select
Sheets("BORDRO").Select
Range("h1").Value = DateAdd("m", 1, Range("h1"))
Maas_Donemi_Ayarla
For i = 5 To 45
Cells(i, "I").Value = 1
Next i

Hesaplamalar_Maas_Donemi
Application.CutCopyMode = False
Else
Hesaplamalar
End If

MsgBox "TOPLAM MAAŞ ÖDEMELERİ " & Sheets("BORDRO").Range("N46") & " TL'dir"
MsgBox "TOPLAM " & WorksheetFunction.CountA(Sheets("BORDRO").Range("b5:b65536")) & " ADET PERSONEL VARDIR"
Application.ScreenUpdating = True
End Sub
Teşekkür ederim Mustafa Bey,bu aklıma gelmemişti.Verdiğiniz kodlar ile tam istediğim gibi oluyor sağolun.Bu örnek ile ilgili birşey daha sormak istiyorum:BORDRO sayfasında formüller var ve ben personel ekledikçe aşağıya doğru satırlar uzayacak ama şöyle bir problem var: 46.satırda ben toplamları aldırıyorum kodlar ile ama yeni personel eklenince toplamların 47.satırda alınması lazım ama kodda 46.satıra göre yazıldığı için hata verecek.Bunu nasıl çözebilirim.range("h65536").end(xlup).row ile dolu satıra getirebiliriz biliyorum ama sonrasında formulü nasıl uygulayacağız?
 

leumruk

Uzman
Uzman
Katılım
15 Nisan 2007
Mesajlar
3,471
Excel Vers. ve Dili
Office 2010 & 2013 tr
Merhaba,
Sizin de belirttiğiniz gibi Son dolu satırı bulma yöntemiyle yapabilirsiniz. Yeni isim eklemek için satır ekliyor olmalısınız. Satır eklediğinizde formül kendiliğinden bir satır artacaktır. Sorun olmaması lazım.
Başaka bir alternatif: Tablonuz listelemeye uygun bir formatta. Veri>Liste Oluştur'dan tablonuzu liste formatına çevirin. Toplam kısmını listenin dışında bırakın. İsim ekleyeceğiniz zaman listenin sonuna geldiğinizde yeni isminiz için satır kendiliğinden görünecektir. İsmi eklediğinizde toplam satırınız bir sonraki satıra kayacaktır.
 
Üst