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