Klasördeki tüm excel dosyalarının belirli hücre aralıklarını bir dosyada kopyalama

Katılım
27 Eylül 2010
Mesajlar
21
Excel Vers. ve Dili
Professional Plus 2010
Merhaba sayın üstatlar,

Benim için zor, sizin için ise çok kolay olacağını düşündüğüm bir soru.
Farklı konularda benzer sorular mevcut, ancak bu soru bulduğum 2 ayrı makronun birleşimi olduğu için yapamadım
Bir klasördeki tüm excel dosyalarının belirli bir aralığının (mesela A1-H24) alt alta bir dosyaya kopyalamasına ihtiyacım var.
Bu hücre aralığını makro başlamadan sorarak alırsa daha fonksiyonel olabilir.
Bu konu hakkındaki değerli yardımlarınızı arz ederim.

Saygılarımla
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,598
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Merhaba,

Excel' ler kaç sayfadan oluşuyor.
Excel dosyalarının sayfa isimleri aynı mı?
 
Son düzenleme:

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,598
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Dosya isimleri sayfa1 ve verileri çekeceğiniz excel dosyası aynı klasörde olması şartı ile aşağıdaki kodu kullanabilirsiniz.
Diğer şartlara göre kod revize edilebilir.

Kod:
Sub getir()

    Set con = VBA.CreateObject("adodb.Connection")
   Set cat = CreateObject("ADOX.Catalog")

'Set klasor = CreateObject("Shell.Application").BrowseForFolder(0, "Lütfen bir klasor seçin !", 1)
    Cells.ClearContents

    Dim bir As Object
    Set bir = CreateObject("scripting.filesystemobject")
    yol = ThisWorkbook.Path
    Set klasor = bir.getfolder(yol)
    For Each dosyalar In klasor.Files
    If Not dosyalar.Name Like "*xlsm*" Then
    If dosyalar.Name Like "*xls*" Then

con.Open "provider=microsoft.ace.oledb.12.0;data source=" & _
yol & "\" & dosyalar.Name & ";extended properties=""Excel 12.0;hdr=yes"""

cat.ActiveConnection = con
syf = Replace(cat.tables.Item(0).Name, "'", "")

sorgu = "select * from[" & syf & "A1:H20]"
Set rs = con.Execute(sorgu)
son = Cells(Rows.Count, "a").End(3).Row + 1
Range("A" & son).CopyFromRecordset rs
con.Close
        End If
        End If
    Next
End Sub
 
Son düzenleme:
Katılım
27 Eylül 2010
Mesajlar
21
Excel Vers. ve Dili
Professional Plus 2010
Erdem bey,
yazdığınız kod çalışıyor ancak kitlenme yaşadığım için sadece bi kaç sorum olacak
1-xlsx olmayan dosyalarda sorun olur mu, klasörde xlsx ve xls olan dosyalar var
2-sayfa adları aynı tüm dosyalarda, ancak arada boşluk var nasıl düzetlmem gerekir "xxx xxx" şeklinde mi yoksa "xxx_xxx" gibi mi?
3-klasördeki tüm dosyalar dediğimizde çalıştığımız dosyaya da işlem yapmıyor mu?
Yardımlarınız için şimdiden teşekkür ederim
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,598
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Merhaba,

Kodu güncelledim. xls ve xlsx uzantılı dosyalardaki verileri alacak. Sayda isimlerinde boşluk olması önemli değil.
 
Katılım
27 Eylül 2010
Mesajlar
21
Excel Vers. ve Dili
Professional Plus 2010
Erdem bey, kod harika hiçbir sorun yok,
bir sorum daha olsa zahmet olur mu acaba,
bundan sonra gelecek dosyalarda sayfa ismi şartını kaldırabilir miyiz?
mesela her dosyanın ilk sayfası yapabilir miyiz kodu?
yoksa illa bi isim gerekir mi?
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,598
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Merhaba,

Kodu güncelledim. Excel dosyalarının ilk sayfasını alacak.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,310
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
İlave bilgi:

Erdem Beyin ADO kullanımına alternatif olarak eğer DAO kullansaydık, kapalı dosyanın ilk sayfasından veri almak için "TableDefs" özelliğini kullanabilirdik...

Kod:
            Set DB = daoDBEngine.OpenDatabase(myFile, False, False, "Excel 8.0; HDR=Yes; IMEX=1;")
            myTable = DB.TableDefs(0).Name
            Set RS = DB.OpenRecordset("Select * from [" & myTable & "A1:H20]")
 
Katılım
27 Eylül 2010
Mesajlar
21
Excel Vers. ve Dili
Professional Plus 2010
Haluk bey,size de cevabınız için çok teşekkürler, farklı dosya tiplerinde çalışmak istersek DAO da işimize yarayabilir.

Erdem bey bu sefer böyle bir hata verdi, bir önceki kod gayet güzel çalışırken
https://ibb.co/mbkQxv6

farklı farklı dosyalarla denedim, hangisinin ilk sayfa adı neyse öyle hatada o dosya adını bulamadığını söyledi nedense.
hataya gittiğimde
Set rs = con.Execute(sorgu) satırını refere ediyor
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,598
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Merhaba,

Örnek dosyanızda sayfa adını alırken tek tırnak ekliyor.

Kodun aşağıdaki kısmını değiştirin. Mevcut kodu'da güncelledim.

Kod:
syf = Replace(cat.tables.Item(0).Name, "'", "")
 
Katılım
27 Eylül 2010
Mesajlar
21
Excel Vers. ve Dili
Professional Plus 2010
Erdem bey kusura bakmayın bugün dönüş yapamadım,
pazartesi işyerinde ilk iş test edip dönüş yapacağım
iyi haftasonları dilerim
 
Katılım
27 Eylül 2010
Mesajlar
21
Excel Vers. ve Dili
Professional Plus 2010
Erdem bey, elinize sağlık çok teşekkür ederim.
kod çok güzel çalışıyor.
Ben size bi jest yapmak istesem mümkün mü acaba?
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,598
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Cengaver bey,

Teşekkür etmeniz yeterli.

İyi çalışmalar.
 

m.ensar

Altın Üye
Katılım
5 Nisan 2016
Mesajlar
339
Excel Vers. ve Dili
office 10 türkçe
Altın Üyelik Bitiş Tarihi
25-10-2025
Erdem Hocam belki konu kapanmıştır ama yine de teşekkür ederim bu vermiş olduğun kod çok güzel günlerdir uğraştığım kitaplar arası veri aktarmayı bununla çözdüm. Allah razı olsun
 

m.ensar

Altın Üye
Katılım
5 Nisan 2016
Mesajlar
339
Excel Vers. ve Dili
office 10 türkçe
Altın Üyelik Bitiş Tarihi
25-10-2025
Üstadım Tek Sayfa lı kitaplarda problem yok ama çalışma kitabında sayfa 1 sayfa 2 sayfa 3 gibi sayfalar olduğun da kod SAYFA2 den veri çekiyor bunu sadece sayfa birden çekecek şekilde nasıl düzenleriz? yardımcı olabilir misin?
 
Üst