• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

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
520
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?
 
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.
 
Ü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
 
Örnek dosya eklerseniz çözüm üretilebilir. Kapalı dosyadan yapmak istiyorsunuz sanırım.
 
@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

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
 
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

  • Mesaj.JPG
    Mesaj.JPG
    22 KB · Görüntüleme: 7
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.
 
Geri
Üst