Kapalı Dosyalardan Veri Çekmek

YagizKc

Altın Üye
Katılım
10 Ekim 2020
Mesajlar
10
Excel Vers. ve Dili
Microsoft 365 TR 64 Bit
Merhaba,

2 tane kapalı kalacak veri dosyası var. Bunlar iki ayrı şirketin muhasebesel verileri.

Benim istediğimse ana excel dosyamda ilk sayfadaki hücreye, bu iki veri dosyasından herhangi birinin dosya ismini yazarak, ana dosyamdaki sayfaya o veri dosyalarını anında çekmek. bu şekilde istediğim gibi sadece bir hücredeki metni değiştirirerk iki ayrı dosyanın verileri arasında git-gel yapabilmek. ve bunu 3. bir dosyada yapmak.

Bunun için bilen kişilerin yardımına ihtiyacım var. Ne yazık ki macro bilmiyorum. Ama gerekli kodları sizlerden alabilirsem ben hangi hücrelerdeki verileri çekeceğini kodun üzerinde düzenleyebileceğimi düşünüyorum.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,016
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Alacağınız veri sayısı ne kadardır? Bir kaç hücre ile çok sayıda hücreden veri alınacaksa ise farklı kodlamalar önermek mümkün. Ayrıca veri alınacak dosyaların yapısı birebir aynı mıdır? Örnek dosyalar ekleyebilirseniz hızlı cevap alabilirsiniz.
 

YagizKc

Altın Üye
Katılım
10 Ekim 2020
Mesajlar
10
Excel Vers. ve Dili
Microsoft 365 TR 64 Bit
Alacağınız veri sayısı ne kadardır? Bir kaç hücre ile çok sayıda hücreden veri alınacaksa ise farklı kodlamalar önermek mümkün. Ayrıca veri alınacak dosyaların yapısı birebir aynı mıdır? Örnek dosyalar ekleyebilirseniz hızlı cevap alabilirsiniz.
Levent Bey,

ilgili dosyaları yükledim.

Ana Dosya kitabında "Ana Sayfa" içerisinde yeşil boyadığım "veriler" yazan hücredeki metin içeriğine göre, kapalı kalacak 2. excel kitabından veri çekecek. Bu kapalı kitap ismi neyse oradaki verileri çekecek. Mesela buraya yüklediğim ikinci kitabı "Veriler" diye adlandırdığım için "Ana Dosya" daki hücreye yine "Veriler" yazdım. 3. bir kitap ismi girdiğimde de oradaki verileri çekecek. Hedefim bu.

"Veriler" kitabında 2 sayfa mevcut. O iki sayfayı "Ana Dosya" kitabındaki benzer isimdeki iki ayrı sayfaya çekebilirsem ben önce "Bilgiler" sayfasına oradan veri çekeceğim, ardından da "Ana Sayfa"da bazı formüller oluşturacağım.

Ancak ilk paragrafta da söylediğim gibi "Ana Sayfa"daki kendi gireceğim değişkene göre veri çekmeyi çözemiyorum. "Veriler" gibi dosyalardan 100 adet excel kitabı, bir klasörün içinde bekleyecek ve "Ana Sayfa"mda hangisinden veri çekebileceğimi seçeceğim.
 

Ekli dosyalar

emrebengul

Altın Üye
Katılım
5 Aralık 2015
Mesajlar
289
Excel Vers. ve Dili
Excel Vers. ve Dili Ofis 2019 TR 32 Bit
dener misiniz?

Kod:
Option Explicit

Sub Düğme1_Tıkla()
    Dim WB As Workbook, WS As Worksheet, Target_File As Variant, Target_Sheet As Worksheet
   
    Set WB = ThisWorkbook
    Set WS = WB.Sheets("personel")
   
    Target_File = Application.GetOpenFilename(FileFilter:="Excel Dosyaları  (*.xls;*.xlsb;*.xlsx;*.xlsm),*.xls;*.xlsb;*.xlsx;*.xlsm", Title:="Lütfen bir dosya seçiniz...", MultiSelect:=False)

    If Target_File = Empty Then
        MsgBox "Lütfen önce dosya seçiniz!", vbExclamation
        Exit Sub
    End If
 
    Application.ScreenUpdating = False
 
    On Error Resume Next
    Set Target_File = Workbooks.Open(Target_File)
    Set Target_Sheet = Nothing
    Set Target_Sheet = Workbooks(Target_File.Name).Worksheets("buraya sayfa adı yazacak")
    On Error GoTo 0
 
    If Not Target_Sheet Is Nothing Then
        Target_Sheet.Cells.Copy WS.Range("A1")
        Target_File.Close 0
        WS.Select
        Application.ScreenUpdating = True
        MsgBox "Sayfadaki veriler kopyalanmıştır.", vbInformation
    Else
        Target_File.Close 0
        Application.ScreenUpdating = True
        MsgBox "Sayfa bulunamadı!", vbCritical
    End If

    Set Target_File = Nothing
    Set Target_Sheet = Nothing
    Set WB = Nothing
    Set WS = Nothing
End Sub
 

YagizKc

Altın Üye
Katılım
10 Ekim 2020
Mesajlar
10
Excel Vers. ve Dili
Microsoft 365 TR 64 Bit
dener misiniz?

Kod:
Option Explicit

Sub Düğme1_Tıkla()
    Dim WB As Workbook, WS As Worksheet, Target_File As Variant, Target_Sheet As Worksheet
  
    Set WB = ThisWorkbook
    Set WS = WB.Sheets("personel")
  
    Target_File = Application.GetOpenFilename(FileFilter:="Excel Dosyaları  (*.xls;*.xlsb;*.xlsx;*.xlsm),*.xls;*.xlsb;*.xlsx;*.xlsm", Title:="Lütfen bir dosya seçiniz...", MultiSelect:=False)

    If Target_File = Empty Then
        MsgBox "Lütfen önce dosya seçiniz!", vbExclamation
        Exit Sub
    End If

    Application.ScreenUpdating = False

    On Error Resume Next
    Set Target_File = Workbooks.Open(Target_File)
    Set Target_Sheet = Nothing
    Set Target_Sheet = Workbooks(Target_File.Name).Worksheets("buraya sayfa adı yazacak")
    On Error GoTo 0

    If Not Target_Sheet Is Nothing Then
        Target_Sheet.Cells.Copy WS.Range("A1")
        Target_File.Close 0
        WS.Select
        Application.ScreenUpdating = True
        MsgBox "Sayfadaki veriler kopyalanmıştır.", vbInformation
    Else
        Target_File.Close 0
        Application.ScreenUpdating = True
        MsgBox "Sayfa bulunamadı!", vbCritical
    End If

    Set Target_File = Nothing
    Set Target_Sheet = Nothing
    Set WB = Nothing
    Set WS = Nothing
End Sub
oldu çok teşekkür ederim.

peki ayrı ayrı sayfaları çekmek için ayrı düğmeler atamak yerine tek düğmeyle koda yazdığım sayfaları çekmek nasıl olabilir?
 

emrebengul

Altın Üye
Katılım
5 Aralık 2015
Mesajlar
289
Excel Vers. ve Dili
Excel Vers. ve Dili Ofis 2019 TR 32 Bit
soruyu anlayamadım Yağız Bey :)
 

YagizKc

Altın Üye
Katılım
10 Ekim 2020
Mesajlar
10
Excel Vers. ve Dili
Microsoft 365 TR 64 Bit
soruyu anlayamadım Yağız Bey :)
Verdiğiniz kodla 1 dosyadaki verileri 1 düğmeye basarak çekiyorum. O dosyada 3 ayrı sayfa var ve 3 ayrı makro kodunu 3 ayrı düğmeye atayarak 3 ayrı sayfayı çekmeyi tek tek yapıyorum.

Tek düğmeye basarak 3 ayrı sayfayı tek seferde çekemez miyim yani.
 

emrebengul

Altın Üye
Katılım
5 Aralık 2015
Mesajlar
289
Excel Vers. ve Dili
Excel Vers. ve Dili Ofis 2019 TR 32 Bit
Kod:
Option Explicit

Sub Düğme1_Tıkla()
    Dim WB As Workbook, WS,UA,BH As Worksheet, Target_File As Variant, Target_Sheet As Worksheet
  
    Set WB = ThisWorkbook
    Set WS = WB.Sheets("SAYFA1")
    Set UA = WB.Sheets("SAYFA2")
   Set BH = WB.Sheets("SAYFA3")
    Target_File = Application.GetOpenFilename(FileFilter:="Excel Dosyaları  (*.xls;*.xlsb;*.xlsx;*.xlsm),*.xls;*.xlsb;*.xlsx;*.xlsm", Title:="Lütfen bir dosya seçiniz...", MultiSelect:=False)

    If Target_File = Empty Then
        MsgBox "Lütfen önce dosya seçiniz!", vbExclamation
        Exit Sub
    End If
 
    Application.ScreenUpdating = False
 
    On Error Resume Next
    Set Target_File = Workbooks.Open(Target_File)
    Set Target_Sheet = Nothing
    Set Target_Sheet = Workbooks(Target_File.Name).Worksheets("buraya sayfa adı yazacak")
    On Error GoTo 0
 
    If Not Target_Sheet Is Nothing Then
        Target_Sheet.Cells.Copy WS.Range("A1")
        Target_File.Close 0
        WS.Select
        Application.ScreenUpdating = True
        MsgBox "Sayfadaki veriler kopyalanmıştır.", vbInformation
    Else
        Target_File.Close 0
        Application.ScreenUpdating = True
        MsgBox "Sayfa bulunamadı!", vbCritical
    End If

    Set Target_File = Nothing
    Set Target_Sheet = Nothing
    Set WB = Nothing
    Set WS = Nothing
End Sub
Olarak deneyin lütfen
 

YagizKc

Altın Üye
Katılım
10 Ekim 2020
Mesajlar
10
Excel Vers. ve Dili
Microsoft 365 TR 64 Bit
Kod:
Option Explicit

Sub Düğme1_Tıkla()
    Dim WB As Workbook, WS,UA,BH As Worksheet, Target_File As Variant, Target_Sheet As Worksheet
 
    Set WB = ThisWorkbook
    Set WS = WB.Sheets("SAYFA1")
    Set UA = WB.Sheets("SAYFA2")
   Set BH = WB.Sheets("SAYFA3")
    Target_File = Application.GetOpenFilename(FileFilter:="Excel Dosyaları  (*.xls;*.xlsb;*.xlsx;*.xlsm),*.xls;*.xlsb;*.xlsx;*.xlsm", Title:="Lütfen bir dosya seçiniz...", MultiSelect:=False)

    If Target_File = Empty Then
        MsgBox "Lütfen önce dosya seçiniz!", vbExclamation
        Exit Sub
    End If

    Application.ScreenUpdating = False

    On Error Resume Next
    Set Target_File = Workbooks.Open(Target_File)
    Set Target_Sheet = Nothing
    Set Target_Sheet = Workbooks(Target_File.Name).Worksheets("buraya sayfa adı yazacak")
    On Error GoTo 0

    If Not Target_Sheet Is Nothing Then
        Target_Sheet.Cells.Copy WS.Range("A1")
        Target_File.Close 0
        WS.Select
        Application.ScreenUpdating = True
        MsgBox "Sayfadaki veriler kopyalanmıştır.", vbInformation
    Else
        Target_File.Close 0
        Application.ScreenUpdating = True
        MsgBox "Sayfa bulunamadı!", vbCritical
    End If

    Set Target_File = Nothing
    Set Target_Sheet = Nothing
    Set WB = Nothing
    Set WS = Nothing
End Sub
Olarak deneyin lütfen
Emre Bey,

Çekeceğim 3 ayrı sayfanın da isimleri farklı.

"
Set WS = WB.Sheets("SAYFA1")
Set UA = WB.Sheets("SAYFA2")
Set BH = WB.Sheets("SAYFA3")
"

kısmında hangi sayfalara çekeceğini ayrı ayrı yazacağım. ancak hangi sayfalardan çekeceğim kısmı;

"
Set Target_Sheet = Workbooks(Target_File.Name).Worksheets("buraya sayfa adı yazacak")
"

burada tek sayfa yazarsam olmayacak. buraya da 3 ayrı sayfa verisini nasıl yazabiliriz?
 

Erkan Akayay

Altın Üye
Katılım
8 Aralık 2006
Mesajlar
56
Excel Vers. ve Dili
Ofis 365 TR 32 Bit
Veri sayfasında 2 sayfa gördüm. ADO ile veri alma üzerine bir kod yazdım. İnceleyiniz.
Bilanço ve gelir tablosu sayfaları içinde veriler silindi.
Ana sayfadaki butonu çalıştırınca bu 2 sayfaya veriler gelecek.
 

Ekli dosyalar

YagizKc

Altın Üye
Katılım
10 Ekim 2020
Mesajlar
10
Excel Vers. ve Dili
Microsoft 365 TR 64 Bit
Veri sayfasında 2 sayfa gördüm. ADO ile veri alma üzerine bir kod yazdım. İnceleyiniz.
Bilanço ve gelir tablosu sayfaları içinde veriler silindi.
Ana sayfadaki butonu çalıştırınca bu 2 sayfaya veriler gelecek.
Hepinize çok teşekkür ederim, çalışmam tamamlandı. Kendi dosyama uyarladım.

Erkan Bey, bu makroda sadece dosya seçme penceresi geldikten sonra iptal'e basınca hata veriyor, Emre Bey'in makrsoundaki gibi uyarı mesajı çıkmıyor. ama çok da sorun değil.
 
Üst