• DİKKAT

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

Soru Ado ile kapalı excel son satır no ve adres bulma

  • Konbuyu başlatan Konbuyu başlatan FERAZ
  • Başlangıç tarihi Başlangıç tarihi
Katılım
5 Kasım 2006
Mesajlar
603
Excel Vers. ve Dili
TÜRKCE Excel 2021 32bit
Merhaba.

Ekteki Ado ile son satir no exceli açıp butona tıklayınca kapali excelin A sütunundaki son dolu hücrenin adresi ve son satır numarası nasıl bulunur.

Alttaki kod son dolunun değerini buluyor adresi ve satır numarası lazım bana.


C#:
Private Sub CommandButton1_Click()
    
    Dim con As Object, rs As Object
    Dim sql As String
 
    Set con = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")
    con.Open = "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\kapali.xlsx" & _
                                        ";Extended Properties=""Excel 12.0;HDR=No;Imex=1;"""
                                        

    On Error Resume Next

    sql = "Select Last(F1) FROM [Sayfa1$A2:A65536]"
    Set rs = con.Execute(sql)

    MsgBox rs.Fields(0)

 
    con.Close
    Set con = Nothing
    Set rs = Nothing

End Sub
 
İnceleyiniz.

 
Ekli dosyadaki kodlar ADO ile hazırlanmış olup, 1. mesaja eklemiş olduğunuz kapalı dosyadaki A sütununda son dolu hücrenin satır numarasını verir, ancak; A1 hücresinde mutlaka başlık olmalıdır...

.
 

Ekli dosyalar

Son düzenleme:
İnceleyiniz.

Zaten bu konuyu ben açmıştım.
Ordaki konuda arananın satır nosu bulunuyordu.O kodları uyarlayamadığım için konu açtım.
 
Ekli dosyadaki kodlar ADO ile hazırlanmış olup, 1. mesaja eklemiş olduğunuz kapalı dosyadaki A sütununda son dolu hücrenin satır numarasını verir, ancak; A1 hücresinde mutlaka başlık olmalıdır...

.
Ah Haluk hocam hep aynı Altın üye değilim diye yazıyorum :)
 
İyi de .... siz niye halen üye olmadınız ? Söyleyin bir tanıdığınıza, sizin yerinize üyelik ücretini göndersin Hüseyin Beye.

.
 
Yok hocam kalsın.Bir zamanlar düşünmüştüm altın üyeliği sonra gereksiz gördüm yanlış anlamayın.Yani hobi için öğreniyorum ticari felan üye olsam iki katınıda öderdim yada dediğiniz gibi dostlar aracılığıyla öderdim.
Bu forumda harici link olayında dosya paylaşıldığı için konu açmıştım.Neyse kınu silinebilir heralde dahada konu açmam gibi :(
 
Excel hücresini kullanıp sonuca gitmek sorun olmazsa alternatif çözüm verebilirim.
 
Korhan hocam.
Her türlü çözüm olabilir excel açtırmadan.
Aslında verdiğiniz linktekini denemiltim değişken atayıp son değeri buldurup ve bu değere göre aratıp yapmıştım nedense olmadı.
 
Alternatif,

C++:
Option Explicit

Sub Son_Satir_No_Bul()
    Dim XL_App As Object, XL_WorkBook As Object, XL_WorkSheet As Object
    Dim Dosya As String, Son_Satir_No As Long
    
    Set XL_App = CreateObject("Excel.Application")
    XL_App.Visible = False
    Set XL_WorkBook = XL_App.Workbooks.Add()
    Set XL_WorkSheet = XL_WorkBook.Worksheets(1)
    
    Dosya = ThisWorkbook.Path & Application.PathSeparator & "[kapali.xlsx]Sayfa1"

    With XL_WorkSheet.Range("A1")
        .Formula = "=LOOKUP(2,1/('" & Dosya & "'!A:A<>""""),ROW('" & Dosya & "'!A:A))"
        Son_Satir_No = .Value
    End With

    XL_WorkBook.Close 0
    XL_App.Quit

    Set XL_WorkSheet = Nothing
    Set XL_WorkBook = Nothing
    Set XL_App = Nothing

    MsgBox Son_Satir_No
End Sub
 
Korhan hocam o yöntemi biliyorum sağolunuz.Bana Ado ile lazım.

Kıdu öğleden sonra deneyeceğim inşAllah.
 
Ado'da kapalı dosyada veri depolarken belli kurallara uymanız gerekiyor.

Sütun başlıkları
Sütunda tek veri türü

Bunlar olduğu sürece sağlıklı sonuçlar alabilirsiniz.
 
Evet bunları biliyorum.
Aslı
Ado'da kapalı dosyada veri depolarken belli kurallara uymanız gerekiyor.

Sütun başlıkları
Sütunda tek veri türü

Bunlar olduğu sürece sağlıklı sonuçlar alabilirsiniz.
Evet bunla
Ado'da kapalı dosyada veri depolarken belli kurallara uymanız gerekiyor.

Sütun başlıkları
Sütunda tek veri türü

Bunlar olduğu sürece sağlıklı sonuçlar alabilirsiniz.
Evet bunları biliyorum.Aslında sanki önceden bir konuda çözüm bulunmuştu lakin heryeri taradım bulamadım.
 
Merhaba,

Sizin aradığınız konu aşağıdaki olabilir. Konuyu'da siz açmışsınız.
Sizin eklediğiniz dosyaya göre konudaki çözümlerin doğru sonuç vereceğini sanmıyorum.

https://www.excel.web.tr/threads/ado-ile-arananin-satir-numarasini-bulma.179814/

Aşağıdaki kod ile çözüm bulabilirsiniz ama sadece böyle çözüm olabilir diye paylaşmak istedim.

Kod:
Sub testt()
On Error Resume Next
    
Set con = VBA.CreateObject("adodb.Connection")

con.Open "provider=microsoft.ace.oledb.12.0;data source=" & _
ThisWorkbook.Path & "\kapali.xlsx" & ";extended properties=""Excel 12.0;hdr=no"""

x = 65536

Do

hcr = "sayfa1$" & "A" & x & ":" & "A" & x

sorgu = "select f1 from[" & hcr & "]"
Set rs = con.Execute(sorgu)

deg = Len(rs.Fields.Item(0))
x = x - 1

Loop Until deg > 0

MsgBox "A" & x + 1


End Sub
 
Korhan Beyin de dediği gibi, kapalı dosyayı eğer ADO ile ulaşarak veri tabanı olarak kullanmak istiyorsak, olmazsa olmazların başında sütun başlıkları, ve sütunlardaki verilerin aynı cinste olmaları gerekliliğidir. Ayrıca, hücrelerin boş olmaması da bir çok yönden kolaylık sağlar....

Benim daha önce önerdiğim kod, Zafer beyin verdiği örnek dosyada sütun başlığı olması halinde çalışıyordu ancak, eğer sayfada A sütununun yanındaki B sütununda da veriler varsa ve bunlar A sütunundan daha da aşağıya doğru giderse, ADO her 2 sütunu da tek 1 tablo olarak algılayıp, A sütunundaki en son veriyi "null" olarak algılıyordu. (B sütunundaki en son veriye karşılık gelen satırdaki A sütunu hücresi)

Bunu önlemek üzere, kodu biraz daha geliştirdim ve hız kazandırmak için döngü kullanmadım. Örnek dosyalar hem mesaj ekine hem de harici linke yüklenmiştir. Örnek olarak verilen dosyalardan "kitap.xlsx" dosyasındaki veriler "String" tipindedir....

Örnek dosya harici linki:

Link silindi...


.
 

Ekli dosyalar

Son düzenleme:
Merhaba.

Ekteki Ado ile son satir no exceli açıp butona tıklayınca kapali excelin A sütunundaki son dolu hücrenin adresi ve son satır numarası nasıl bulunur.

Alttaki kod son dolunun değerini buluyor adresi ve satır numarası lazım bana.


C#:
Private Sub CommandButton1_Click()
   
    Dim con As Object, rs As Object
    Dim sql As String

    Set con = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")
    con.Open = "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\kapali.xlsx" & _
                                        ";Extended Properties=""Excel 12.0;HDR=No;Imex=1;"""
                                       

    On Error Resume Next

    sql = "Select Last(F1) FROM [Sayfa1$A2:A65536]"
    Set rs = con.Execute(sql)

    MsgBox rs.Fields(0)


    con.Close
    Set con = Nothing
    Set rs = Nothing

End Sub

Kodu denedim 65536dan geriye doğru işlem yapıyor ve bayağı uzun sürüyor fakat doğru sonuç verdi yani bu durumda 65536 yada 1048576 yazınca iş karışıyor :)
 
Korhan Beyin de dediği gibi, kapalı dosyayı eğer ADO ile ulaşarak veri tabanı olarak kullanmak istiyorsak, olmazsa olmazların başında sütun başlıkları, ve sütunlardaki verilerin aynı cinste olmaları gerekliliğidir. Ayrıca, hücrelerin boş olmaması da bir çok yönden kolaylık sağlar....

Benim daha önce önerdiğim kod, Zafer beyin verdiği örnek dosyada sütun başlığı olması halinde çalışıyordu ancak, eğer sayfada A sütununun yanındaki B sütununda da veriler varsa ve bunlar A sütunundan daha da aşağıya doğru giderse, ADO her 2 sütunu da tek 1 tablo olarak algılayıp, A sütunundaki en son veriyi "null" olarak algılıyordu. (B sütunundaki en son veriye karşılık gelen satırdaki A sütunu hücresi)

Bunu önlemek üzere, kodu biraz daha geliştirdim ve hız kazandırmak için döngü kullanmadım. Örnek dosyalar hem mesaj ekine hem de harici linke yüklenmiştir. Örnek olarak verilen dosyalardan "kitap.xlsx" dosyasındaki veriler "String" tipindedir....

Örnek dosya harici linki:



.
Teşekkürler Haluk hocam tam istediğim gibi olmuş.
 
Erdem hocam ve Korhan hocam sizede teşekkürler.
 
Merhaba,

Benim eklediğim kod,ilk mesajdaki dosyaya göre hazırlanmış bir çözümdü. Eklediğim kodun dışındaki bir çözümde zaten olmazdı.Dosyanızı tam olarak paylaşmış olsaydınız daha kısa süren bir çözüm olabilirdi.
 
Merhaba.
Merhaba,

Benim eklediğim kod,ilk mesajdaki dosyaya göre hazırlanmış bir çözümdü. Eklediğim kodun dışındaki bir çözümde zaten olmazdı.Dosyanızı tam olarak paylaşmış olsaydınız daha kısa süren bir çözüm olabilirdi.
Merhaba
Dosya zaten ilk mesajda var.
 
Geri
Üst