Soru Farklı excel dosyalarından verileri çekip sayfalara yazma

serhank20

Altın Üye
Katılım
13 Nisan 2020
Mesajlar
25
Excel Vers. ve Dili
excel 2010 türkçe
Altın Üyelik Bitiş Tarihi
05-05-2025
Merhaba üstadlarim,
Çok arayıp çözümünü bulamadığım bi konuda yardımcı olmanızı isteyeceğim.

Ahmet, Mehmet, Zeynep, Burcu isimli kapalı ecxel dosyalarım var. Bu dosyalardaki A1:E20 arasındaki verileri çekip, Deneme isimli excel dosyasındaki Ahmet, Mehmet, Zeynep, Burcu isimli sayfaların A1:E20 arasına makro koduyla yazdırmak istiyorum. Hücreler boşsa boş kalsın istiyorum. Nasıl yapabilirim? Yardımcı olursanız çok sevinirim.
 

serhank20

Altın Üye
Katılım
13 Nisan 2020
Mesajlar
25
Excel Vers. ve Dili
excel 2010 türkçe
Altın Üyelik Bitiş Tarihi
05-05-2025
Excel konusunda uzman arkadaşlar yardımlarınızi bekliyorum
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,765
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Kapalı excel dosyalarındaki veri alınacak sayfanın ismi nedir?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,765
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Dosyalarınızın uzantısı nedir? (xlsx - xlsm)
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,765
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bütün dosyalarınız aynı klasör altında olduğunu varsaydım.

C++:
Option Explicit

Sub Veri_Al()
    Dim Baglanti As Object, Kayit_Seti As Object, Yol As String, Sutun As Byte
    Dim Dosya As String, Sayfa As String, Baslik As Object, Zaman As Double
    
    Zaman = Timer
    
    Set Baglanti = CreateObject("AdoDb.Connection")
    Set Kayit_Seti = CreateObject("AdoDb.Recordset")
    
    Yol = ThisWorkbook.Path & "\"
    
    Dosya = Dir(Yol & "*.xlsx")
    
    While Dosya <> ""
        If Dosya <> ThisWorkbook.Name Then
            Baglanti.Open "Provider=Microsoft.ACE.OleDb.12.0;Data Source=" & Yol & Dosya & _
            ";Extended Properties=""Excel 12.0;Hdr=Yes"""
            
            Kayit_Seti.Open "Select * From [Sayfa1$A1:E20]", Baglanti, 1, 3
            
            Sayfa = CStr(Replace(Dosya, "." & CreateObject("Scripting.FileSystemObject").GetExtensionName(Dosya), ""))
            
            With Sheets(Sayfa)
                .Range("A:E").Clear
                .Range("A1:E1").Font.Bold = True
                Sutun = 0
                If Kayit_Seti.RecordCount > 0 Then
                    .Range("A2").CopyFromRecordset Kayit_Seti
                    For Each Baslik In Kayit_Seti.Fields
                        Sutun = Sutun + 1
                        .Cells(1, Sutun) = Baslik.Name
                    Next
                    .Columns.AutoFit
                End If
            End With
        End If
        Kayit_Seti.Close
        Baglanti.Close
        Dosya = Dir
    Wend
    
    Set Kayit_Seti = Nothing
    Set Baglanti = Nothing
    
    MsgBox "İşleminiz tamamlanmıştır." & Chr(10) & Chr(10) & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
End Sub
 

serhank20

Altın Üye
Katılım
13 Nisan 2020
Mesajlar
25
Excel Vers. ve Dili
excel 2010 türkçe
Altın Üyelik Bitiş Tarihi
05-05-2025
Korhan hocam başarılı bir şekilde çekti ama 1. satırlarda hata var. Örneğin,

Ahmet'i

A

A1

C

C1

C2



Mehmet'i

C

A

C1

Sayfa1$A1:E20.D

Sayfa1$A1:E20.D



şeklinde çekti.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,765
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Örnek dosya paylaşınız.

Paylaşım sitelerine yükleyip link verebilirsiniz.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,765
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Veri dosyasını kast etmiştim.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,765
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bu şekilde deneyiniz.

C++:
Option Explicit

Sub Veri_Al()
    Dim Baglanti As Object, Kayit_Seti As Object, Yol As String
    Dim Dosya As String, Sayfa As String, Zaman As Double
    
    Zaman = Timer
    
    Set Baglanti = CreateObject("AdoDb.Connection")
    Set Kayit_Seti = CreateObject("AdoDb.Recordset")
    
    Yol = ThisWorkbook.Path & "\"
    
    Dosya = Dir(Yol & "*.xlsx")
    
    While Dosya <> ""
        If Dosya <> ThisWorkbook.Name Then
            Baglanti.Open "Provider=Microsoft.ACE.OleDb.12.0;Data Source=" & Yol & Dosya & _
            ";Extended Properties=""Excel 12.0;Hdr=No"""
            
            Kayit_Seti.Open "Select * From [Sayfa1$A1:E20]", Baglanti, 1, 3
            
            Sayfa = CStr(Replace(Dosya, "." & CreateObject("Scripting.FileSystemObject").GetExtensionName(Dosya), ""))
            
            With Sheets(Sayfa)
                .Range("A:E").Clear
                If Kayit_Seti.RecordCount > 0 Then
                    .Range("A1").CopyFromRecordset Kayit_Seti
                    .Columns.AutoFit
                End If
            End With
        End If
        Kayit_Seti.Close
        Baglanti.Close
        Dosya = Dir
    Wend
    
    Set Kayit_Seti = Nothing
    Set Baglanti = Nothing
    
    MsgBox "İşleminiz tamamlanmıştır." & Chr(10) & Chr(10) & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
End Sub
 

serhank20

Altın Üye
Katılım
13 Nisan 2020
Mesajlar
25
Excel Vers. ve Dili
excel 2010 türkçe
Altın Üyelik Bitiş Tarihi
05-05-2025
Korhan hocam çok teşekkür ediyorum. Şimdi oldu. Elinize, emeğinize sağlık. Kapalı dosyaları ana klasör içinde farklı bir klasöre taşımak istesem nereyi değiştirmem gerekiyor?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,765
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bu bölümü değiştirmelisiniz.

Yol = ThisWorkbook.Path & "\"
 

serhank20

Altın Üye
Katılım
13 Nisan 2020
Mesajlar
25
Excel Vers. ve Dili
excel 2010 türkçe
Altın Üyelik Bitiş Tarihi
05-05-2025
Korhan hocam bu formülü kendi sistemime uyarlamaya çalışıyorum. A1:E20 değilde rakamları B7:G26 şeklinde değiştirmek istesem yazdığınız formülde nereleri değiştirmem gerekiyor? Ben değiştirmeye çalıştım hata verdi.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,765
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Kod içinde bu adres zaten tek yerde geçiyor.

Hata durumunu bilemiyorum. Hata veren dosyalarınızı paylaşma durumunuz varsa inceleyebiliriz.
 

serhank20

Altın Üye
Katılım
13 Nisan 2020
Mesajlar
25
Excel Vers. ve Dili
excel 2010 türkçe
Altın Üyelik Bitiş Tarihi
05-05-2025
Kod içinde bu adres zaten tek yerde geçiyor.

Hata durumunu bilemiyorum. Hata veren dosyalarınızı paylaşma durumunuz varsa inceleyebiliriz.
Adreste bir sıkıntı yokmuş hocam. Dosya ve sayfa isimleri değiştiğinde nereleri değiştirmem gerekiyor?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,765
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Dosya adı değişmesi önemli değil. Ama sayfa adı önemli. Onu da aşağıdaki satırdan değiştirmelisiniz.

C++:
Kayit_Seti.Open "Select * From [Sayfa1$A1:E20]", Baglanti, 1, 3
 
Üst