• DİKKAT

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

ADO yönteminde Tanımlanmış Tablo ya da AD kullanmak

Excelde sayfa adlarından bazıları sadece sayısal ifade bunlarda hata veriyor sorunu çözemedim yardımcı olabilecek var mı

C++:
sheetNames = Array("kisiselbilgi", "ruhsatbilgi", "silahbilgi", "arsiv", 1, 2, 3, 4) ' Veri alınacak sayfa isimleri listesi
For i = LBound(sheetNames) To UBound(sheetNames)
    sheetName = sheetNames(i)

    If IsNumeric(sheetName) Then
        sheetName = "'" & sheetName & "'"
    End If

    sql = "SELECT * FROM [" & sheetName & "$E7:CA] WHERE [TC Kimlik No] = " & arananTC & " "

    rs.Open sql, cn, 3, 1

    lastRow = s1.Cells(s1.Rows.Count, "A").End(3).Row + 1

    For j = 0 To rs.Fields.Count - 1
        s1.Cells(lastRow, j + 1).Value = sheetName & " - " & rs.Fields(j).Name
    Next j

    s1.Range("A" & lastRow + 1).CopyFromRecordset rs
    rs.Close
Next i
 
Dış veri al özelliğini kullanarak Excel' in nümerik sayfa isimlerini nasıl aldığını bir kontrol edin. (Pratik olarak... )
 
Hocam şu şekilde görünüyor Name : "1" : String

yukarıda bu şekilde eklemiştim
If IsNumeric(sheetName) Then
sheetName = "'" & sheetName & "'"
End If
 
Demek ki, zaten "String" olarak alıyor...... O zaman, bahsettiğiniz "If - End If" bloğunu komple silip, deneyin...

.
 
Son düzenleme:
244480

Hocam döngü içersine girmeden bu hatayı verdi
 
Şuan kodlarım bu şekilde hata veriyor çalışan kodlardan da oldum :)
Hata açıklaması şu şekilde
rs.Open sql, cn, 3, 1 satırında
Hata -2147467259: Bağlanmış Microsoft Excel çalışma sayfanızı görüntülemek için yapılan bağlantı kesildi.

Kod:
sub test2()
Set rs = CreateObject("ADODB.Recordset")
Set cn = CreateObject("ADODB.Connection")
Set s1 = ThisWorkbook.Worksheets(testsayfa.Name)
s1.Cells.Clear
    'dosya konumu belirleme
    db_file = ThisWorkbook.Path & "\slhruhsat_data.xlsx"
    extName = "xlsx"
    If extName = "xlsx" Then ' Excel dosya uzantısı "xlsx" ise
        extType = " Xml" ' extType değişkenine " Xml" atanıyor
    ElseIf extName = "xlsb" Then ' Excel dosya uzantısı "xlsb" ise
        extType = "" ' extType değişkenine boş değer atanıyor
    ElseIf extName = "xlsm" Then ' Excel dosya uzantısı "xlsm" ise
        extType = " Macro" ' extType değişkenine " Macro" atanıyor
    Else ' Yukarıdaki şartlar sağlanmıyorsa
        Exit Sub ' Prosedürden çıkılıyor
    End If

    With cn
        .Provider = "Microsoft.ACE.OLEDB.12.0" ' Veritabanı sağlayıcısı olarak "Microsoft.ACE.OLEDB.12.0" atanıyor
        .Properties("Data Source") = db_file ' Veritabanının dosya yolu belirtiliyor
        .Properties("Extended Properties") = "Excel 12.0" & extType & ";HDR=YES" ' Bağlantı özellikleri belirtiliyor
        .Open ' Bağlantı açılıyor
    End With
    

arananTC = sh_Entry.Range("I7").Value
sheetNames = Array("kisiselbilgi", "ruhsatbilgi", "silahbilgi", "arsiv", "islemler", "adres", "ruhsatbilgiii", "ruhsatbilgii") ' Veri alınacak sayfa isimleri listesi

Dim sql As String

Dim i As Integer
'For i = LBound(sheetNames, 2) To UBound(sheetNames, 2)
For i = LBound(sheetNames) To UBound(sheetNames)
    sheetName = sheetNames(i)
    If IsNumeric(sheetName) Then
        sheetName = "'" & sheetName & "'"
    End If
    sql = "SELECT * FROM [" & sheetName & "$E7:CA] WHERE [TC Kimlik No] = " & arananTC & " "
    On Error Resume Next
    rs.Open sql, cn, 3, 1
    If Err.Number <> 0 Then
        MsgBox "Hata " & Err.Number & ": " & Err.Description
        Debug.Print "Hata " & Err.Number & ": " & Err.Description
    End If
    On Error GoTo 0
    
    lastRow = s1.Cells(s1.Rows.Count, "A").End(3).Row + 1

    For j = 0 To rs.Fields.Count - 1
        s1.Cells(lastRow, j + 1).Value = sheetName & " - " & rs.Fields(j).Name
    Next j

    s1.Range("A" & lastRow + 1).CopyFromRecordset rs
    rs.Close
Next i

End Sub
 
Demek ki, zaten "String" olarak alıyor...... O zaman, bahsettiğiniz "If - End If" bloğunu komple silip, deneyin...

.
Sildim düzeldi hocam ama dediğim gibi uyumadan önce denediğim kodlar çalışmadı sabah çalıştı anlamadım olay
 
Tablo olarak tanımlanmış aralığı ya da tanımlı AD ları, ADO sorgusunda kullanabiliyor muyuz?
"Select [Sütun1],[Sütun2] from [Sayfa1] Where [Sütun2]=5" gibi bir cümlede, Sayfa1 yerine Tablo ismini ve Sütunlar yerine tablonun alanlarını verebiliyor muyuz?
Örnek var mıdır?

conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=\\SERVER\K.......Excel$\FIYAT_SABLONU_XXXX.xlsm;" & "Extended Properties=""Excel 12.0 Macro;HDR=YES;IMEX=1"";" Örneğindeki gibi HDR=NO olarak kullanılırsa ADO alan(sütün) isimlerini F1,F2,F3... olarak isimlendiriyor,
"Select [F1],[F2] from [Sayfa1$] Where [F2]=5" şeklinde kullanabileceğinizi düşünüyorum. M.G.
 
@dandini ,

Soruda excelin EKLE menüsündeki TABLO olarak kullanılan nesnesinden bahsedilmiş. Sizin önerinizde tanımlı tablo tam olarak nereye eklenecek?
 
Amacını son dolu satıra göre işlem yapmak a ben şöyle kullanıyorum.

Önce

son=Sheets("Data").cells(Rows.Count,"A").End(3).row

İle son satır numarasını buluyorum.

Sonra da sorguda

From [Data$A1:M" & son & "]

Şeklinde adres belirtiyorum.
Hocam Data$A1:M" bu şekilde bıraksanız kendisi algılıyor
 
Geri
Üst