Adodb yöntemiyle veri çekme hatası

Katılım
18 Mart 2007
Mesajlar
171
Excel Vers. ve Dili
OFFICE 2016
Altın Üyelik Bitiş Tarihi
02-03-2024
Değerli arkadaşlar.
Mevcut çalışma kitabımdaki A10:A60 aralığında bulunan Kodların karşısına hedef çalışma kitabındaki sayfadan verileri çekeceğim. Klasik VLOOKUP mantığındaki gibi düşeyara(a10; \\Guneyler1\yedek paylaşim\DEPO OPERASYON\YEŞİLLİK KONTROL 2022.xlsx!S2:u200;2;0) gibi yapmak istiyorum ancak bunu kapalı excel dosyasını açmadan ado veritabanı mantığıyla yapmak istiyorum ama sürekli hata alıyorum. Hata mesajı : "Microsoft Acsess veritabanı altyapısı 'MALİYET$A10 : o60' nesnesini bulamadı. Nesnenin var olduğundan ve adını ve yolunun adını doğru yazdığınızdan emin olun. MALİYET$A10 : o6' yerel nesne değilse, ağ bağlantınızı deneyin veya sunucu yöneticisine başvurun" hatası veriyor. Sanırım MALİYET$A10 : o60' sayfasını hedef gösterdiğim bağlantı kurduğum sayfada bulmaya çalışıyor. Oysa ki MALİYET$A10 : o60' benim mevcut çalıştığım sayfamın stok kodlarının olduğu bölümdür. Inner join ile tabloları birleştirdim. Çünkü birleştirme yapmadan hiç olmadı. Nasıl bir yol izlemem gerekiyor. Yardımcı olabilirseniz çok memnun olurum.


1. Mevcut çalışma kitabındaki sayfamın adı "Maliyet" Ben bu sayfayı maliyet değişkenine kaynaksayfa değişkenine atamak istiyorum. "Maliyet" sayfamın içindeki A1 hücresini hedefsayfaadi = Format(ActiveSheet.Range("A1"), "dd.mm.yy") şeklinde bir değişken atamak istiyorum.

2. Kaynak sayfamdaki çalışma yapacağım hücre alanı kaynaksayfa.Range.("A10 : o60").value olacak ve kaynakhucre isimli bir değişkene tanımlayacağız.

3. "\\Guneyler1\yedek paylaşim\DEPO OPERASYON\YEŞİLLİK KONTROL 2022.xlsx adresinde hedef sayfam bulunmaktadır. Ben bu hedef sayfamı hedefsayfa isimli bir değişken atamak istiyorum.
4. Hedef sayfanın içindeki ulaşmak istediğim hücre alanı hedefsayfa.range("S2:u200").value olacak ve bunu hedefhucre diye bir değişkene tanımlamak istiyorum.
5. Dim cn As Object ve Dim rs As Object adında iki değişken tanımlayıp, cn = CreateObject("ADODB.Connection") ile hedefsayfaya bağlanmak istiyorum.
6. select [hedefsayfahedefhucre$].[KG-20],[hedefsayfahedefhucre$].[ADET-21] from [hedefsayfahedefhucre$], [kaynaksayfa&kaynakhucre$] where [kaynaksayfa&kaynakhucre$].[Kodu] = [hedefsayfahedefhucre$].[Kod] şeklinde bir sorgu yapmak istiyorum.
7. Copyfrom recordset olayına kaynaksayfa.range("m10") yapmak istiyorum.
8. Yalnız bu işlemleri yaparken [kaynaksayfa&kaynakhucre$] yani sadece A10:A60 için olacak. A61'e geçmeyecek. A60'da bitecek.
Özetle benim


Kod:
Dim kaynaksayfa As String, kaynakhucre As String, hedefsayfa As String, hedefhucre As String, hedef As String
Dim cn As Object, rs As Object


hedef = "C:\Users\Soner\Documents\GÜNEYLER\PROGRAMLAR\YEŞİLLİK PROGRAMI\çalışma\YEŞİLLİK KONTROL 2022.xlsx"
hedefsayfa = Format(ActiveSheet.Range("A1"), "dd.mm.yy")
hedefhucre = "S2:U200"
kaynaksayfa = "MALİYET"
kaynakhucre = "A10:O60"

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & hedef & ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"

sorgu = "SELECT M.[Adet], M.[KG], H.[ADET-21], H.[KG-20] " & _
        "FROM (([" & kaynaksayfa & "$" & kaynakhucre & "] AS K " & _
        "INNER JOIN [" & hedefsayfa & "$" & hedefhucre & "] AS H " & _
        "ON K.[Kodu] = H.[Kod]) " & _
        "INNER JOIN [MALİYET$A10:O60] AS M " & _
        "ON K.[Kodu] = M.[Kodu])"


rs.Open sorgu, cn
Range("M10").CopyFromRecordset rs

rs.Close
cn.Close
 
Üst