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

Katılım
5 Kasım 2006
Mesajlar
580
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
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,190
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
İnceleyiniz.

 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
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:
Katılım
5 Kasım 2006
Mesajlar
580
Excel Vers. ve Dili
TÜRKCE Excel 2021 32bit
İ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.
 
Katılım
5 Kasım 2006
Mesajlar
580
Excel Vers. ve Dili
TÜRKCE Excel 2021 32bit
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 :)
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
İ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.

.
 
Katılım
5 Kasım 2006
Mesajlar
580
Excel Vers. ve Dili
TÜRKCE Excel 2021 32bit
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 :(
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,190
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Excel hücresini kullanıp sonuca gitmek sorun olmazsa alternatif çözüm verebilirim.
 
Katılım
5 Kasım 2006
Mesajlar
580
Excel Vers. ve Dili
TÜRKCE Excel 2021 32bit
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ı.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,190
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
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
 
Katılım
5 Kasım 2006
Mesajlar
580
Excel Vers. ve Dili
TÜRKCE Excel 2021 32bit
Korhan hocam o yöntemi biliyorum sağolunuz.Bana Ado ile lazım.

Kıdu öğleden sonra deneyeceğim inşAllah.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,190
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
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.
 
Katılım
5 Kasım 2006
Mesajlar
580
Excel Vers. ve Dili
TÜRKCE Excel 2021 32bit
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.
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,623
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
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
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
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:
Katılım
5 Kasım 2006
Mesajlar
580
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
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 :)
 
Katılım
5 Kasım 2006
Mesajlar
580
Excel Vers. ve Dili
TÜRKCE Excel 2021 32bit
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ş.
 
Katılım
5 Kasım 2006
Mesajlar
580
Excel Vers. ve Dili
TÜRKCE Excel 2021 32bit
Erdem hocam ve Korhan hocam sizede teşekkürler.
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,623
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
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.
 
Katılım
5 Kasım 2006
Mesajlar
580
Excel Vers. ve Dili
TÜRKCE Excel 2021 32bit
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.
 
Üst