• DİKKAT !

    Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak Dosya Yükleme tamamen ücretsizdir.

Çözüldü VBA ADO SQL ile Kapalı Dosyadan Veri Alma (Hızlı Konsolidasyon)

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Durum
Konu Çözümlendiği İçin Kapatılmıştır.

alican241

Yeni Üye
Katılım
31 Ağu 2026
Mesajlar
3
Aldığı beğeni
1
Excel V
Office 2019 TR
Konu Sahibi
Windows 10 Google Chrome 152
Herkese merhaba, forumunuza yeni üye oldum. Değerli paylaşımlarınız için şimdiden teşekkür ederim.
Şirket bünyesinde her gün aynı formatta (ancak satır sayıları değişken) yaklaşık 50-60 farklı Excel dosyasından veri topluyorum. Mevcut Workbooks.Open yöntemi arka planda dosyaları tek tek açtığı için inanılmaz bir performans kaybına ve donmalara yol açıyor.
Araştırmalarım sonucunda en hızlı yöntemin ADO (ActiveX Data Objects) ve SQL mimarisi olduğunu öğrendim ancak döngüyü kurarken "Provider" ve "Connection" nesnelerinde sürekli hata (Runtime Error) alıyorum.
Yapmak istediğim tam olarak şu:
  1. Makro içeren ana dosyamın yanındaki "Raporlar" klasörünün içindeki tüm .xlsx dosyalarını tarayacak.
  2. Her dosyanın "Sayfa1" isimli sayfasındaki A2:G aralığındaki verileri (Başlıksız olarak) çekecek.
  3. Çekilen bu verileri ana dosyamdaki "Konsolide" sayfasına alt alta, veri kaybı olmadan ve dosyaları görsel olarak açmadan (kapalıyken) çok hızlı bir şekilde aktaracak.
Örnek şablon dosyamı ekte paylaşıyorum. Kod blokları konusunda destek olabilecek veya mantığı kurmamda yol gösterecek ileri düzey VBA uzmanı hocalarımın yardımını rica ederim.
Saygılarımla, iyi forumlar.
 
Çözüm
Merhaba,

Excelin yerleşik özelliklerinden Klasördeki Dosyaları Birleştir işlevi işinizi kolaylaştırabilir. Denemenizi öneririm.

Klasöre bağlantı kurduğu için yeni bir dosya geldiğinde YENİLE dediğinizde verileri dinamik olarak hızlı şekilde güncelleyecektir.
Windows 10 Google Chrome 152
Merhaba,

Excelin yerleşik özelliklerinden Klasördeki Dosyaları Birleştir işlevi işinizi kolaylaştırabilir. Denemenizi öneririm.

Klasöre bağlantı kurduğu için yeni bir dosya geldiğinde YENİLE dediğinizde verileri dinamik olarak hızlı şekilde güncelleyecektir.
 
Çözüm
Konu Sahibi
Windows 10 Google Chrome 152
Korhan AYHAN, Hocam harikasın, tam aradığım alternatif buydu işte
Aslında ADO/SQL kodlarıyla boğuşurken Power Query (Veri > Verileri Al > Dosyadan > Klasörden) yöntemi hiç aklıma gelmemişti. Sırf kod hatalarını çözmek için saatlerimi harcayacaktım. Bahsettiğin gibi yerleşik bir özellik kullanmak hem makro bağımlılığını azaltacak hem de her yeni dosya eklendiğinde tek tuşla "Yenile" demek işimi acayip hızlandıracak.
Fakat yine de merakımdan ve arşivimde bulunması açısından soruyorum; eğer bu klasördeki dosya birleştirme sihirbazı yerine illa ki VBA mimarisiyle (örneğin CreateObject("ADODB.Connection") üzerinden) gitmek isteseydik, aldığım o bağlantı (Provider) hatasını aşmak için örnek bir döngü kodu paylaşabilir miydin? En azından ADO mantığını da kavramış olurdum.
Değerli yönlendirmen ve hızlı cevabın için çok teşekkürler, emeğine sağlık
 
Windows 10 Google Chrome 152
Merhaba,

Forumda daha önce paylaşılan talebinize yakın kodlamalar bulunuyor. Onları da incelemenizi öneririm.

Ayrıca benim hazırladığım ekteki örnek uygulamada 2 farklı yöntem kullanılmıştır.

1. ADO yöntemi; (Bu yöntem zaten verilerle uğraşan kişilerin en çok tercih ettiği yöntemdir...)

Bu yöntemde yaptığım testlerde veri kaynağı olan dossyaların satır sayısı arttıkça sorgu süresi maalesef artıyor. Bende verileri blok blok alacak şekilde kodlama tasarladım. Bu şekilde excelin arka planda biraz daha rahat çalışmasını amaçladım.

2. İNDİS fonksiyonu yöntemi;

Ben işim gereği bu fonksiyonu çok kullanıyorum. Kapalı dosyalarda çalıştığı için kullanmayı tercih ettim. Görece hızlı sonuçlar veriyor.


Ekte ki Test klasöründe Raporlar isimli klasörde 100 adet 5.000 satırdan oluşan excel veri dosyası bulunuyor.

Bu kadar dosyanın sorgusu bende ADO ile 15 saniye / İNDİS ile 20 saniye civarında sürüyor.

ADO sorgusu 10.000 satırlık bloklar halinde sorgulama yapıyor. Bu değeri kod içinde düzenleyebilirsiniz.
İNDİS fonksiyonu ise 50.000 satırlık bloklar halinde sorgulama yapıyor. Bu değeri yine kod içinde düzenleyeblirsiniz.

Sorgulama adımlarını görsel olarak izlemeniz için excelin durum (Statusbar) çubuğunda dinamik bilgilendirme yapılmaktadır.

Veri sayısı tek sayfaya sığmıyorsa kod Konsolide_1, Konsolide_2 şeklinde birden fazla sayfada verileri listelemektedir.

Kullanmak isteyen üyelere faydalı olmasını dilerim.
 
Durum
Konu Çözümlendiği İçin Kapatılmıştır.
Geri
Üst