Dosya Yolu ve Range problemi

ynstcrt

Altın Üye
Katılım
21 Mart 2021
Mesajlar
75
Excel Vers. ve Dili
Office 2010 - Türkçe
Altın Üyelik Bitiş Tarihi
05-12-2024
Herkese iyi çalışmalar.
Amacım bir dosyadaki seçtiğim verileri kopyalayıp, istediğim başka bir dosyaya yapıştırıp, kaydetmekti. Bunu da araştıra araştıra biraz uzun bir yoldan yaptım sanırım. Çünkü Kod yazmaya yeni başladım. Yaptığım şeyi örnek dosyadaki veriler üzerinden anlatırsam benim için daha kolay olacak.

Örn; Yapıştırma Şablonu dosyası Filtrelenmiş sayfasında C4:C7 aralığındaki verileri kopyalayıp,
kapalı olan Ahmet.xlsx dosyasını açıp ( "Ahmet" değerini Yapıştırma Şablonu\ Filtrelenmiş sayfasında F3 hücresinden alarak )
Ahmet 'in içinde Mayıs sayfasını buldurtup ( "Mayıs" değerini de Yapıştırma Şablonu\ Filtrelenmiş sayfasında A8 hücresinden alarak ) ,
bu sayfada ( Yine Yapıştırma Şablonu\ Filtrelenmiş sayfasında A7 hücresinde yazılı olan değeri alarak ) 18.05.2021 yazılı sütunun altına, kopyaladığım verileri tek bir satıra yazdırıyorum.
Aynı işlemi sırasıyla C12:C15 , C20:C23 vs.. olarak C sütundaki bütün verileri alt alta satırlar halinde yazdırıp , Ahmet dosyasını kaydedip, dosyayı kapatıyorum.
Sonra bütün bu işlemi M3 hücresindeki "Mehmet" için yaptırıyorum. Tabii kopyalanacak verilerin bulunduğu sütun değişiyor "J" oluyor ve bu isimler yaklaşık 50 - 100 arasında olacak.

Fakat bunu yaparken aşağıdaki şu satır "Run_time Error 1004 Application-defined or object-defined error" hatası verdi.

'Workbooks(sablon).Sheets("Filtrelenmiş").Range(Cells(satkop, stnedt - 3), Cells(satkop + 3, stnedt - 3)).Copy

Bu satırın içindeki Range("C4:C7") yazdığımda hata vermeden çalışırken, değişken kullandığımda hep aynı hatayı aldım.
İnternetten araştırıp bir sürü yol denedim ama maalesef çözemedim. En sonunda aşağıdaki şekilde çalıştırmayı becerdim.

Workbooks(sablon).Sheets("Filtrelenmiş").Activate
Range(Cells(satkop, stnedt - 3), Cells(satkop + 3, stnedt - 3)).Copy

Ama tabii ki daha yavaş çalıştı. ScreenUpdating ' i kullanınca biraz fark etti ama isim sayıları artınca daha da yavaşlayacaktır sanırım.
Bir önceki satırda dosya yolu çalışırken neden bu satırda Activate etmem gerekti?

Muhtemelen kodları kulağı tersten gösterir gibi yazabildim, şüphesiz daha pratik birçok yöntem vardır ama sizden ricam yeni bir kod dizisi değil, biraz yavaşlasa da bu kodlar işimi görecektir. Alternatif çözümlerden çok şey öğreniyoruz kesinlikle ama öncelikle bu hatanın neden kaynaklandığını öğrenmek istiyorum. Çünkü bunun gibi onlarca farklı dosya ile uğraşıcam ve her seferinde burdan üstadların yazdığı kodlarla ilerlemek istemiyorum. Kendim yazmak istiyorum.
Yardımlarınız olursa şimdiden teşekkür ederim.
 

Ekli dosyalar

ynstcrt

Altın Üye
Katılım
21 Mart 2021
Mesajlar
75
Excel Vers. ve Dili
Office 2010 - Türkçe
Altın Üyelik Bitiş Tarihi
05-12-2024
Şu bilgiyi de ekleyim. Hata veren kodu başka bir sub içerisinde kullandığımda çalışıyor. Örneğin;

Sub range_deneme()
sablon = "Yapıştırma Şablonu.xlsm"
satkop = 4
stnedt = 6
Workbooks(sablon).Sheets("Filtrelenmiş").Range(Cells(satkop, stnedt - 3), Cells(satkop + 3, stnedt - 3)).Copy
End Sub
 

ynstcrt

Altın Üye
Katılım
21 Mart 2021
Mesajlar
75
Excel Vers. ve Dili
Office 2010 - Türkçe
Altın Üyelik Bitiş Tarihi
05-12-2024
Farkında olmadan çok zor bir soru mu sordum acaba?
 

ynstcrt

Altın Üye
Katılım
21 Mart 2021
Mesajlar
75
Excel Vers. ve Dili
Office 2010 - Türkçe
Altın Üyelik Bitiş Tarihi
05-12-2024
Mesajımı gören biri var mı?
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,779
Excel Vers. ve Dili
Microsoft 365 Tr-64
Deneyin lütfen
Workbooks(sablon).Sheets("Filtrelenmiş").Range(Workbooks(sablon).Sheets("Filtrelenmiş").Cells(satkop, stnedt - 3), Workbooks(sablon).Sheets("Filtrelenmiş").Cells(satkop + 3, stnedt - 3)).Copy
 

ynstcrt

Altın Üye
Katılım
21 Mart 2021
Mesajlar
75
Excel Vers. ve Dili
Office 2010 - Türkçe
Altın Üyelik Bitiş Tarihi
05-12-2024
Ömer bey öncelikle çok teşekkür ederim ilgilendiğiniz için. Çalışıyor verdiğiniz kod. Size zahmet benim yazdığım şekilde neden çalışmadığını da açıklayabilir misiniz? Örneğin;
Workbooks(sablon).Sheets("Filtrelenmiş").Range("C3:C7").Copy yazıldığında çalışıyor.
 
Üst