• DİKKAT

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

Kapalı dosyadan veri çekme hatası

Katılım
25 Mart 2017
Mesajlar
177
Excel Vers. ve Dili
2013
merhabalar,

kapalı bir dosyadan veri çektiğimde dosya doğru ise, veriyi çekiyor.
ancak hatalı ise "gerekli bir veya daha fazla parametre için değer yok" uyarı verip debug'a düşüyor.
bunun yerine hata mesajı çıkabilir mi?
örneğin; hatalı dosya seçtiniz gibi.
şimdiden teşekkürler




dosya= "C:\Desktop\Dosya.xls"

With Sheets("sayfa1")
Set Baglanti = CreateObject("ADODB.Connection")
Baglanti.Open "provider=microsoft.ace.oledb.12.0;data source=" & dosya & ";extended properties=""excel 12.0;hdr=no"""
Set Rs = Baglanti.Execute("select f1,f2,f3,f4 from [" & dosya & "] where not isnull(f1)")
.Range("a" & 2)(1, 1).CopyFromRecordset Rs
End With
Set Baglanti = Nothing
 
Aşağıdaki şekilde deneyin.
Kod:
dosya = "C:\Desktop\Dosya.xls"
If Dir(dosya) = "" Then
    MsgBox "Hatalı dosya seçtiniz..."
    Exit Sub
Else
With Sheets("sayfa1")
    Set Baglanti = CreateObject("ADODB.Connection")
    Baglanti.Open "provider=microsoft.ace.oledb.12.0;data source=" & dosya & ";extended properties=""excel 12.0;hdr=no"""
    Set Rs = Baglanti.Execute("select f1,f2,f3,f4 from [" & dosya & "] where not isnull(f1)")
    .Range("a" & 2)(1, 1).CopyFromRecordset Rs
    End With
    Set Baglanti = Nothing
End If
 
maalesef çalışmadı.
farklı içerikte bir dosya seçtiğimde yine hata veriyor
 
Sayfa adı belirtmiyorsunuz. Sayfa adı olarak, dosya yolunu kullanıyorsunuz.
Farklı dosyayı nasıl seçiyorsunuz, dosya adı ve yolu sabit.
 
Baglanti.Open "provider=microsoft.ace.oledb.12.0;data source=" & dosya & ";extended properties=""excel 12.0;hdr=no"""
ile dosyayı açmış oldunuz. Ama alicimri belirttiği gibi aşağıdaki alanda sayfa ismini belirtmeniz gerekir.
Set Rs = Baglanti.Execute("select f1,f2,f3,f4 from [" & dosya & "] where not isnull(f1)")
 
Sayfa adını doğru girdim. Normalde çalışıyor
Ancak yüklediğim Excel sayfasında örneğin 4. Sütunda(D sütünü) hiç veri yoksa makro debuga düşüyor
 
Örnek dosya eklerseniz çözüm bulabiliriz.
 
Kodlarınızın
Kod:
Set Rs = Baglanti.Execute("select f1,f2,f3,f4 From
kısmını
Kod:
Set Rs = Baglanti.Execute("select* From
şeklinde değiştirerek deneyin.
 
Son düzenleme:
sayfa adı sayfa1 olduğu kabul edilmiştir.
isnull da çift tırnak kullanmayınız,iki tane tek tırnak kullanınız.
Kod:
Set Rs = Baglanti.Execute("select rs.Open "select*iif(isnull(([f1])),[B][COLOR="Red"]''[/COLOR][/B],([f1]))
,f2,f3,f4 from [[B][COLOR="Red"]Sayfa1$[/COLOR][/B]]
 
aliciri hocam,
sizin kodu denedim. sorun çıkmadı. Orion hocam sizin kodda, kod kırmızıya düştü.
alicimri hocam, sizin kodda yüklenen sayfa da ki tüm veri sütunları alıyor.2,3,4. sütun olsun şeklinde seçim yaptıramıyorum.
örnek dosyaları ekledim
şimdiden teşekkür ederim


https://www.dosyaupload.com/i3jk
 
Ben yine sadece 1,2,3,4. Sütunları yüklemek istiyorum. Eğer o sütunlar boş ise hataya düşmemesini yada hata olursa da merak kutusu çıksın istiyorum. Tabi bu mümkün ise
 
Dosyanızda kodlar çalışıyor. Hem hatalıdan hem de hatasızdan veri geliyor.

Kod:
Sub yukle()

dosya = Application.GetOpenFilename(FileFilter:="Microsoft Excel Workbooks, *.xls; *.xlsx", Title:="Open Workbook")

If dosya = "False" Then
        MsgBox "dosya Secilmedi!"
        Exit Sub
        
Else:
Range("A2:D65536").ClearContents
Set Katalog = CreateObject("ADOX.Catalog")
    Set Tablo = CreateObject("ADOX.Table")
    Katalog.ActiveConnection = "Provider=Microsoft.ace.OLEDB.12.0;Data Source=" & dosya & ";Extended Properties=""Excel 12.0;HDR=Yes"""
    dosyaad1 = Katalog.tables(0).Name 'Sayfa1'in adını bulma
Set Katalog = Nothing
Set Tablo = Nothing

    With Sheets("Program")
    Set Baglanti = CreateObject("ADODB.Connection")
    Baglanti.Open "provider=microsoft.ace.oledb.12.0;data source=" & dosya & ";extended properties=""excel 12.0;hdr=no"""
    Set Rs = Baglanti.Execute("select f1,f2,f3,f4 from [" & dosyaad1 & "] where not isnull(f1)")
    .Range("a" & 2)(1, 1).CopyFromRecordset Rs
    End With
Set Baglanti = Nothing

End If

End Sub
 
merhaba askm hocam
gönderdiğim dosya üzerinde denedim.
eğer dosyadaki gibi
Set Rs = Baglanti.Execute("select f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12 from [" & dosyaad1 & "] where not isnull(f1)")

denersek hatalı adındaki excel dosyasından veri alamıyor hataya düşüyor.
 
almak istediğiniz sütunları inputbox ile belirleyebilirsiniz. İnputbox'a F1, F3, F5 girip onaylayıp SQL kodlarına eklerseniz istediğiniz sonucu alırsınız.
 
Aşağıdaki kod soruna çözüm olabilir mi?
Kod:
Sub yukle()

dosya = Application.GetOpenFilename(FileFilter:="Microsoft Excel Workbooks, *.xls; *.xlsx", Title:="Open Workbook")

If dosya = "False" Then
        MsgBox "dosya Secilmedi!"
        Exit Sub
        
Else:

Set Katalog = CreateObject("ADOX.Catalog")
    Set Tablo = CreateObject("ADOX.Table")
    Katalog.ActiveConnection = "Provider=Microsoft.ace.OLEDB.12.0;Data Source=" & dosya & ";Extended Properties=""Excel 12.0;HDR=Yes"""
    dosyaad1 = Katalog.tables(0).Name 'Sayfa1'in adını bulma
    For i = 1 To Katalog.tables(dosyaad1).Columns.Count - 1
sutun = sutun & "F" & i + 1 & " "
Next
sutun = Replace(Trim(sutun), " ", ",")
Set Katalog = Nothing
Set Tablo = Nothing

    With Sheets("Program")
    Set Baglanti = CreateObject("ADODB.Connection")
    Baglanti.Open "provider=microsoft.ace.oledb.12.0;data source=" & dosya & ";extended properties=""excel 12.0;hdr=no"""
    Set Rs = Baglanti.Execute("select " & sutun & " from [" & dosyaad1 & "] where not isnull(f1)")
    .Range("a" & 2)(1, 1).CopyFromRecordset Rs
    End With
Set Baglanti = Nothing

End If

End Sub
 
Aşağıdaki kod daha doğru galiba
Kod:
Sub yukle()

dosya = Application.GetOpenFilename(FileFilter:="Microsoft Excel Workbooks, *.xls; *.xlsx", Title:="Open Workbook")

If dosya = "False" Then
        MsgBox "dosya Secilmedi!"
        Exit Sub
        
Else:

Set Katalog = CreateObject("ADOX.Catalog")
    Set Tablo = CreateObject("ADOX.Table")
    Katalog.ActiveConnection = "Provider=Microsoft.ace.OLEDB.12.0;Data Source=" & dosya & ";Extended Properties=""Excel 12.0;HDR=Yes"""
    dosyaad1 = Katalog.tables(0).Name 'Sayfa1'in adını bulma
      MsgBox Katalog.tables(dosyaad1).Rows.Count
  If Katalog.tables(dosyaad1).Columns.Count > 4 Then
  son = 3
  Else
  son = Katalog.tables(dosyaad1).Columns.Count - 1
  End If

    For i = 1 To son
sutun = sutun & "F" & i + 1 & " "
Next
sutun = Replace(Trim(sutun), " ", ",")
Set Katalog = Nothing
Set Tablo = Nothing

    With Sheets("Program")
    Set Baglanti = CreateObject("ADODB.Connection")
    Baglanti.Open "provider=microsoft.ace.oledb.12.0;data source=" & dosya & ";extended properties=""excel 12.0;hdr=no"""
    Set Rs = Baglanti.Execute("select " & sutun & " from [" & dosyaad1 & "] where not isnull(f1)")
    .Range("a" & 2)(1, 1).CopyFromRecordset Rs
    End With
Set Baglanti = Nothing

End If

End Sub
 
inputbox lı çözüm
Kod:
Sub yukle()

dosya = Application.GetOpenFilename(FileFilter:="Microsoft Excel Workbooks, *.xls; *.xlsx", Title:="Open Workbook")

If dosya = "False" Then
        MsgBox "dosya Secilmedi!"
        Exit Sub
        
Else:

Set Katalog = CreateObject("ADOX.Catalog")
    Set Tablo = CreateObject("ADOX.Table")
    Katalog.ActiveConnection = "Provider=Microsoft.ace.OLEDB.12.0;Data Source=" & dosya & ";Extended Properties=""Excel 12.0;HDR=Yes"""
    dosyaad1 = Katalog.tables(0).Name 'Sayfa1'in adını bulma
  son = Katalog.tables(dosyaad1).Columns.Count
  For i = 1 To son
  yaz = yaz & " " & "F" & i
  Next
  yaz = Replace(Trim(yaz), " ", ",")
Value = InputBox("Gerekli olmayan alanları siliniz.", , yaz)
Set Katalog = Nothing
Set Tablo = Nothing

    With Sheets("Program")
    Set Baglanti = CreateObject("ADODB.Connection")
    Baglanti.Open "provider=microsoft.ace.oledb.12.0;data source=" & dosya & ";extended properties=""excel 12.0;hdr=no"""
    Set Rs = Baglanti.Execute("select " & Value & " from [" & dosyaad1 & "] where not isnull(f1)")
    .Range("a" & 2)(1, 1).CopyFromRecordset Rs
    End With
Set Baglanti = Nothing

End If

End Sub
 
Alicimri hocam kodlarınız çok işime yaradı. Çok teşekkür ederim
Bir sorum olacaktı. Yüklenen dosyadaki sütun sayısını bulmak için aşağıdaki kodu kullanmışsınız.
Peki yüklenen dosyada, 3. Satırdaki ilk dolu sütununbulmak isteseydik bunu, bu yükleme metoduyla aşağıdaki gibi nasıl yapabilirdik?

Katalog.tables(dosyaad1).Columns.Count
 
Niye 3. Satır? veri alınacak sayfada bilgiler 2. satırdan başlıyor.
ADO ile bir sayfaya ulaşınca herhangi bir hücresinde veri olan ilk sütunu başlangıç kabul eder. Bu sütunun kaçıncı sütun olduğunu ADO ile tespit edilmez diye düşünüyorum.
 
Son düzenleme:
Anladım hocam. Destek ve yardımlarınız için çok teşekkür ederim
 
Geri
Üst