Soru Düşeyara (VBA ile Dış Kaynaktan)

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
515
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Değerli üstadlar;

Excel içinde düşeyara gerek formülle, gerek makro ile yapabilmekteyim. Merak ettiğim VBA yolu ile "Hedef Excel" e "Kaynak Excel" den düşeyara ile veri çektirebilir miyiz?
 

muratboz06

Destek Ekibi
Destek Ekibi
Katılım
23 Mart 2017
Mesajlar
552
Excel Vers. ve Dili
Office365 TR
VBA ya gerek yok.
İki excel dosyasınıda açın. Hedef Excel dosyasında düşeyara formülü ile ilgili değişkenleri girdiğimiz formül kutucuğunda Tablo Dizisi alanını tıklayın, daha sonra Kaynak Excel dosyasında istediğiniz sayfa, alanı vb. seçiniz.
 

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
515
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Üstadım belirttiğim gibi formül dışı çözüm arıyorum. Yoksa bu söylediğini formülle zaten yazıyoruz. VBA çözüm gerekli bana
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,596
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Örnek dosya eklerseniz çözüm üretilebilir. Kapalı dosyadan yapmak istiyorsunuz sanırım.
 

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
515
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
@Erdem_34 Üstadım ekledim. Çalışmamı yansıtan muadil örnektir. Hedef excele Plaka kodunu yazarak kaynak excelden şehir getirmesini sağlamaya çalışıyor olacağız. Birde dosya aynı klasör içinde olmayacak. Ağ üzeriden alacak. Orasını ben uyarlarım sorun değil.
Aslında Kaynak dosya zaman zaman açık olabiliyor. Salt okunurda sorunlar olduğunu biliyorum. Bilmem çözümü olur mu?
Koca internette buna dair örnek bulamadım açıkcası. İnşallah formumuza kazanımı olur.
ADO olayı olursa ona da varım.
 

Ekli dosyalar

Erdem Akdemir

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

Aşağıdaki kodu deneyiniz.
Her 2 dosyanın ilk satırına A1 hücresine Plaka , B1 hücresine Şehir yazınız.
WB2 = "kaynak dosya" kısmını kaynak dosyanın nesne adı ile değiştiriniz.

Kod:
Sub demememe()

Set con = VBA.CreateObject("adodb.Connection")

    WB1 = ActiveWorkbook.FullName
    WB2 = "kaynak dosya"
            
    strConnection = _
        "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "User ID=Admin;" & _
        "Data Source='" & ActiveWorkbook.FullName & "';" & _
        "Extended Properties=""Excel 12.0;hdr=yes"""

    sorgu = _
        "Select t2.[şehir] from [" & WB1 & "].[hedef$] as t1 " & _
        "left join " & _
        "[" & WB2 & "].[Plakalar$] as t2 " & _
        "on t1.[plaka] = t2.[plaka]"

con.Open strConnection

Set rs = con.Execute(sorgu)

Range("B2").CopyFromRecordset rs

End Sub
 

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
2,945
Excel Vers. ve Dili
Office 2013 İngilizce
Merhaba

"left join" operatörü ile belirli bir kritere göre eşlenen verileri getirmek için yukarıda kodu aşağıdaki denediğim zaman;
Burada Kaynak dosyasının kapalı olması gerekmiyor mu?

Kod:
Sub demememe()
Dim myPath  As String

Set con = VBA.CreateObject("adodb.Connection")

myPath = ActiveWorkbook.Path
    WB1 = ActiveWorkbook.FullName
    WB2 = myPath & "\Kaynak.xlsm"
            
    strConnection = _
        "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "User ID=Admin;" & _
        "Data Source='" & ActiveWorkbook.FullName & "';" & _
        "Extended Properties=""Excel 12.0;hdr=yes"""

    sorgu = _
        "Select t2.[şehir] from [" & WB1 & "].[hedef$] as t1 " & _
        "left join " & _
        "[" & WB2 & "].[Plakalar$] as t2 " & _
        "on t1.[plaka] = t2.[plaka]"

con.Open strConnection

Set rs = con.Execute(sorgu)

Range("B2").CopyFromRecordset rs

End Sub
Teşekkürler,
iyi pazarlar.
 

Ekli dosyalar

tamer42

Destek Ekibi
Destek Ekibi
Katılım
11 Mart 2005
Mesajlar
2,945
Excel Vers. ve Dili
Office 2013 İngilizce
Merhaba
iki tablo arasında "plaka" bilgilerine göre eşlenen "şehir" verileri getirmek için "left join" operatörü ile aşağıdaki kodu kullanıyoruz.

Bu kodda 2. tabloda ( Kaynak.xlsm) bulunamayan plakaların listesini almak için kodu nasıl düzenlemeliyiz?

başka bir deyişle COUNTIF ile aratıldığında 0 sonucunu verenler....

Kod:
Sub xLeftJoin()
Dim myPath  As String

Set con = VBA.CreateObject("adodb.Connection")

myPath = ActiveWorkbook.Path
    WB1 = ActiveWorkbook.FullName
    WB2 = myPath & "\Kaynak.xlsm"
            
    strConnection = _
        "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "User ID=Admin;" & _
        "Data Source='" & ActiveWorkbook.FullName & "';" & _
        "Extended Properties=""Excel 12.0;hdr=yes"""

    sorgu = _
        "Select t2.[şehir] from [" & WB1 & "].[hedef$] as t1 " & _
        "left join " & _
        "[" & WB2 & "].[Plakalar$] as t2 " & _
        "on t1.[plaka] = t2.[plaka]"

con.Open strConnection

Set RS = con.Execute(sorgu)

Range("B2").CopyFromRecordset RS

End Sub
Teşekkürler,
iyi çalışmalar.
 
Üst