Soru Kapalı dosyayı açmadan veri çekmek

Tores333

Altın Üye
Katılım
26 Ocak 2017
Mesajlar
36
Excel Vers. ve Dili
Microsoft 365 EN 64 bit
Altın Üyelik Bitiş Tarihi
23-06-2025
Merhaba,

öncelikle mevcut örnekleri inceledim ancak kodların çoğu karışık geldiğinden uyarlamada sıkıntı yaşadım. bazı eski örnek dosyalarda sitede artık bulunmadığından sonuca ulaşamadım.
referans olması açısında tekrar konu açtım.

Ornek1 dosyasına, Ornek2 dosyasında veri aktarmak istiyorum. Bu dosyalar aynı ancak Ornek2 dosyası değişkendir.
Hedefim Ornek2 dosyasını hiç çalıştırmadan veri yansıtması yapabilmek.

Tesekkürler
 

Ekli dosyalar

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,190
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Aktarım yapılırken eski veriler duracak mı? Yoksa her seferinde sayfadaki eski veriler temizlenip yeni aktarım mı yapılacak?
 

Tores333

Altın Üye
Katılım
26 Ocak 2017
Mesajlar
36
Excel Vers. ve Dili
Microsoft 365 EN 64 bit
Altın Üyelik Bitiş Tarihi
23-06-2025
Aktarım yapılırken eski veriler duracak mı? Yoksa her seferinde sayfadaki eski veriler temizlenip yeni aktarım mı yapılacak?
Korhan Bey merhaba,

üzerine yazacak şekilde düşünebiliriz. bazı ihtiyaclarda üzerine bazılarında ise farklı dosyalardaki verileri birleştirme ihtiyacı oluyor ancak o kısmı halledebilirim sanırım.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,190
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Deneyiniz.

Kodu uyguladığınız dosyanızı "Makro İçerebilen Excel Dosyası" formatında kaydetmeyi unutmayınız.

C++:
Option Explicit

Sub Verileri_Aktar()
    Dim Dosya As Variant, S1 As Worksheet, Baglanti As Object
    Dim Sorgu As String, Kayit_Seti As Object, X As Integer, Zaman As Double
   
    Dosya = Application.GetOpenFilename(FileFilter:="Excel Çalışma Kitapları (*.xl*),*.xl*", _
            Title:="Lütfen Dosya Seçiniz...", MultiSelect:=False)

    Zaman = Timer
   
    If Dosya <> False Then
        Set Baglanti = CreateObject("AdoDb.Connection")
        Set Kayit_Seti = CreateObject("AdoDb.Recordset")
        Set S1 = Sheets("Rapor")
       
        S1.Cells.ClearContents
   
        If Dosya <> ThisWorkbook.FullName Then
            Baglanti.Open "Provider=Microsoft.Ace.OleDb.12.0;Data Source=" & _
            Dosya & ";Extended Properties=""Excel 12.0;Hdr=Yes"""
                       
            Sorgu = "Select * From [Veriler$]"
            Kayit_Seti.Open Sorgu, Baglanti, 1, 1
            If Kayit_Seti.RecordCount > 0 Then
                S1.Range("A2").CopyFromRecordset Kayit_Seti
                For X = 0 To Kayit_Seti.Fields.Count - 1
                    S1.Cells(1, X + 1) = Kayit_Seti.Fields(X).Name
                Next
                S1.Columns.AutoFit
            End If
            
            If Kayit_Seti.State <> 0 Then Kayit_Seti.Close
            If Baglanti.State <> 0 Then Baglanti.Close
        End If
   
        Set Kayit_Seti = Nothing
        Set Baglanti = Nothing
        Set S1 = Nothing
           
        MsgBox "Veri aktarımı tamamlanmıştır." & Chr(10) & Chr(10) & _
               "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
    Else
        MsgBox "Dosya seçimi yapmadığınız için işlemini iptal edilmiştir.", vbCritical
    End If
End Sub
 

Tores333

Altın Üye
Katılım
26 Ocak 2017
Mesajlar
36
Excel Vers. ve Dili
Microsoft 365 EN 64 bit
Altın Üyelik Bitiş Tarihi
23-06-2025
Deneyiniz.

Kodu uyguladığınız dosyanızı "Makro İçerebilen Excel Dosyası" formatında kaydetmeyi unutmayınız.

C++:
Option Explicit

Sub Verileri_Aktar()
    Dim Dosya As Variant, S1 As Worksheet, Baglanti As Object
    Dim Sorgu As String, Kayit_Seti As Object, X As Integer, Zaman As Double
  
    Dosya = Application.GetOpenFilename(FileFilter:="Excel Çalışma Kitapları (*.xl*),*.xl*", _
            Title:="Lütfen Dosya Seçiniz...", MultiSelect:=False)

    Zaman = Timer
  
    If Dosya <> False Then
        Set Baglanti = CreateObject("AdoDb.Connection")
        Set Kayit_Seti = CreateObject("AdoDb.Recordset")
        Set S1 = Sheets("Rapor")
      
        S1.Cells.ClearContents
  
        If Dosya <> ThisWorkbook.FullName Then
            Baglanti.Open "Provider=Microsoft.Ace.OleDb.12.0;Data Source=" & _
            Dosya & ";Extended Properties=""Excel 12.0;Hdr=Yes"""
                      
            Sorgu = "Select * From [Veriler$]"
            Kayit_Seti.Open Sorgu, Baglanti, 1, 1
            If Kayit_Seti.RecordCount > 0 Then
                S1.Range("A2").CopyFromRecordset Kayit_Seti
                For X = 0 To Kayit_Seti.Fields.Count - 1
                    S1.Cells(1, X + 1) = Kayit_Seti.Fields(X).Name
                Next
                S1.Columns.AutoFit
            End If
           
            If Kayit_Seti.State <> 0 Then Kayit_Seti.Close
            If Baglanti.State <> 0 Then Baglanti.Close
        End If
  
        Set Kayit_Seti = Nothing
        Set Baglanti = Nothing
        Set S1 = Nothing
          
        MsgBox "Veri aktarımı tamamlanmıştır." & Chr(10) & Chr(10) & _
               "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
    Else
        MsgBox "Dosya seçimi yapmadığınız için işlemini iptal edilmiştir.", vbCritical
    End If
End Sub
Korhan Bey, teşekkür ederim.
benim veri cekecegim dosyalar sabit dizinde ve sabit isimli oldugundan veri cekecegimiz dosyayı secmeden veri alabileceğimiz bir yöntem var mıdır? Ornek2 dosyasındaki veriler değişken ancak günde 1 defa güncellendiği için ham data olarak kullanılmaktadır.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,190
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Deneyiniz.

Dosya = "C:\Belgelerim\Örnek.xlsx" bölümünü istediğiniz gibi düzenleyip kullanabilirsiniz.

C++:
Option Explicit

Sub Verileri_Aktar()
    Dim Dosya As String, S1 As Worksheet, Baglanti As Object
    Dim Sorgu As String, Kayit_Seti As Object, X As Integer, Zaman As Double
  
    Dosya = "C:\Belgelerim\Örnek.xlsx"

    Zaman = Timer
  
    If Dir(Dosya) <> "" Then
        Set Baglanti = CreateObject("AdoDb.Connection")
        Set Kayit_Seti = CreateObject("AdoDb.Recordset")
        Set S1 = Sheets("Rapor")
      
        S1.Cells.ClearContents
  
        If Dosya <> ThisWorkbook.FullName Then
            Baglanti.Open "Provider=Microsoft.Ace.OleDb.12.0;Data Source=" & _
            Dosya & ";Extended Properties=""Excel 12.0;Hdr=Yes"""
                      
            Sorgu = "Select * From [Veriler$]"
            Kayit_Seti.Open Sorgu, Baglanti, 1, 1
            If Kayit_Seti.RecordCount > 0 Then
                S1.Range("A2").CopyFromRecordset Kayit_Seti
                For X = 0 To Kayit_Seti.Fields.Count - 1
                    S1.Cells(1, X + 1) = Kayit_Seti.Fields(X).Name
                Next
                S1.Columns.AutoFit
            End If
           
            If Kayit_Seti.State <> 0 Then Kayit_Seti.Close
            If Baglanti.State <> 0 Then Baglanti.Close
        End If
  
        Set Kayit_Seti = Nothing
        Set Baglanti = Nothing
        Set S1 = Nothing
          
        MsgBox "Veri aktarımı tamamlanmıştır." & Chr(10) & Chr(10) & _
               "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
    Else
        MsgBox "Veri alınacak dosya bulunamadı!", vbCritical
    End If
End Sub
 

Tores333

Altın Üye
Katılım
26 Ocak 2017
Mesajlar
36
Excel Vers. ve Dili
Microsoft 365 EN 64 bit
Altın Üyelik Bitiş Tarihi
23-06-2025
Korhan Bey , Teşekkür ederim.

sutunların ilk satırı boş ise F1,F2,F3 yazısı atıyor.

bunun dışında tüm sekmeyi olduğu gibi kopyalamak yerine spesifik hücre yada belirli bir aralığı kopyalamak istersek? kopyalanacak hücre kodunu ve yapıstırılacak yeri modifiye edebileceğimiz alanları belirtebilirseniz sevinirim.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,190
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Aşağıdaki satırı değiştirip deneyiniz.

Sorgu = "Select * From [Veriler$]"


Örnek;

Sorgu = "Select * From [Veriler$A5:Z100]"

Tabi bu durumda kod içinde geçen Hdr=Yes yazan bölümünde Hdr=No olarak düzeltmelisiniz.
 

Tores333

Altın Üye
Katılım
26 Ocak 2017
Mesajlar
36
Excel Vers. ve Dili
Microsoft 365 EN 64 bit
Altın Üyelik Bitiş Tarihi
23-06-2025
Aşağıdaki satırı değiştirip deneyiniz.

Sorgu = "Select * From [Veriler$]"


Örnek;

Sorgu = "Select * From [Veriler$A5:Z100]"

Tabi bu durumda kod içinde geçen Hdr=Yes yazan bölümünde Hdr=No olarak düzeltmelisiniz.
Korhan Bey,

F1,F2F3,... yazı sorununu "- 1" i 2 yaptığımda çözüldü. başka yere etkisi var mı emin degilim :)

++
For X = 0 To Kayit_Seti.Fields.Count - 2
++

A5:Z100 gibi aralık verdigimde çalışıyor. teşekkür ederim.


referans olması acısından sadece tek bir hücre seçilmek istenirse yazım formatı aşagıdaki gibi oluyor. hücre ismini tek yazdıgımda çalışmadı.

Sorgu = "Select * From [Veriler$A5:A5]"
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,190
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba,

ADO işleminde sütun indisleri 0'dan başlar. bu sebeple -1 kullanıyoruz. -2 yaptığınızda nasıl sonuç aldınız? Sonuç olarak hücrelerde ne gördünüz?

ADO veritabanı sorgulama aracıdır. Bu sebeple belli kuralları var. Nasıl özet tablo yaparken belli kurallara uyuyorsak bunda da aynı şekilde belli kurallara uymak durumundasınız. ADO kullanacaksanız birleştirilmiş hücre kullanmamanızı öneriyoruz.

Tek hücreden veri almak için dediğiniz şekilde yazım şekli uygundur.
 

Tores333

Altın Üye
Katılım
26 Ocak 2017
Mesajlar
36
Excel Vers. ve Dili
Microsoft 365 EN 64 bit
Altın Üyelik Bitiş Tarihi
23-06-2025
Merhaba,

ADO işleminde sütun indisleri 0'dan başlar. bu sebeple -1 kullanıyoruz. -2 yaptığınızda nasıl sonuç aldınız? Sonuç olarak hücrelerde ne gördünüz?

ADO veritabanı sorgulama aracıdır. Bu sebeple belli kuralları var. Nasıl özet tablo yaparken belli kurallara uyuyorsak bunda da aynı şekilde belli kurallara uymak durumundasınız. ADO kullanacaksanız birleştirilmiş hücre kullanmamanızı öneriyoruz.

Tek hücreden veri almak için dediğiniz şekilde yazım şekli uygundur.
Korhan Bey,

henuz kendi dosyamda kullanmadım ama örnek dosyalarda kodun nasıl çalıştığını anlayabilmek için denemeler yaptım.

Siz deyince tekrar baktım ama şimdi farklı durumvar.
öncelikle B2 hücresini nedense kopyalamamaya basladı.
F1,f2 ... konusunu örnek dosyalarda deneyin demek istedigimi anlayacaksınız. bu arada şunu fark ettim. kopyalayacagım aralık A1:G8 diyelim. -1 dediğim yeri sectigim aralıgın 8 satır oldugunu düşünürsek -7 yaptıgımda sadece F1 , -6 yaparsam F1 ve F2 atıyor. eger satırdan büyük rakam girersem yani -9 F atmıyor.
 

Ekli dosyalar

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,190
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
"F" dediğimiz ifadeler sütun başlıkları (Fields) anlamına gelmektedir. İhtiyacınız yoksa kullanmayabilirsiniz.

Genellikle tablolarda sütun başlıkları olacağını düşünerek ben eklemiştim. Dediğim gibi ihtiyaç yoksa kullanmayabilirsiniz.

Ek olarak yine tekrar etmekte fayda görüyorum. Bu sefer büyük harfle kalın puntoyla yazacağım.

ADO VERİTABANI UYGULAMALARINDA EFEKTİF OLARAK KULLANILMAKTADIR.

Bildiğiniz gibi veritabanları düzgün veri girişi mantığıyla çalışırlar. Boş sütunlar boş satırlar çoğu zaman söz konusu değildir. Ayrıca ADO veri çekerken ilk 10 satıra bakar. Buna göre sütun yapısını (sayı ya da metin) belirler.

Sizin VERİLER sayfanızda bu durum söz konusu değil. Bu durumda sorunlarla karşılaşmanız muhtemeldir.

Bu sebeple ADO yerine farklı yöntemleri tercih etmenizde fayda var.
 
Üst