Ado ile rakamların metin olarak gelmesi

Katılım
26 Ocak 2019
Mesajlar
70
Excel Vers. ve Dili
excel 2016
merhabalar, aşağıdaki kodu forumdan buldum, kapalı dosyadan veri alıyorum fakat rakamlar metin olarak geliyor, bunu nasıl düzeltebilirim. ikinci olarak kopyaladığı veriyi a1 e yapıştırıyor, bunu a sütünundaki ilk boş hücre olarak nasıl revize edebilirim.

Kod:
Sub al()
    Dim con As Object, rs As Object
    Dim dosya As String
    dosya = ThisWorkbook.Path & "\veri.xlsm"
    Set con = CreateObject("adodb.connection")
    Set rs = CreateObject("adodb.recordset")
    With Sayfa2
        con.Open "provider=microsoft.ACE.oledb.12.0;data source=" & dosya & _
        ";extended properties=""Excel 12.0;hdr=no"""
        rs.Open "select * from [Sayfa1$]", con, 1, 1
            If rs.RecordCount > 0 Then
                .Range("A1").CopyFromRecordset rs
            End If
        rs.Close: con.Close
    End With
    Sayfa2.Select
    Set rs = Nothing: Set con = Nothing
    dosya = vbNullString
End Sub
 

hmtstc

Altın Üye
Katılım
20 Şubat 2014
Mesajlar
315
Excel Vers. ve Dili
Excel 2016 - Türkçe
Altın Üyelik Bitiş Tarihi
10-04-2025
.range("A1") yerine

.range("A" & cells(rows.count,1).end(xlup).row+1) ile son satıra yazabilir.


Metin sayı olayını bilmiyorum maalesef
 
Katılım
26 Ocak 2019
Mesajlar
70
Excel Vers. ve Dili
excel 2016
yokmu bu konuyu bilen birisi arkadaşlar,
kaynak dosyadaki tarih, sayı ne olursa olsun metin olarak alıyor.
 

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
Örnek dosyanızı eklerseniz, birisi ilgilenebilir belki ...

.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,761
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bende bir sıkıntı olmadı. Sayılar sayı olarak geliyor. Tarihler için sütunu biçimlendirmeniz gerekir.

Alt alta veri aktarımı için .Range("A2").CopyFromRecordset rs satırını aşağıdaki gibi değiştiriniz.

.Cells(.Rows.Count, 1).End(3)(2, 1).CopyFromRecordset rs
 
Katılım
26 Ocak 2019
Mesajlar
70
Excel Vers. ve Dili
excel 2016
çok teşekkürler ilgilendiğiniz için korhan hocam, aynen dediğiniz şekilde çalıştı, sürekli metin olarak saklanan sayı diye uyarı veriyordu ama o da düzeldi benim dikkatsizliğim kusura bakmayın.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,761
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Başlıklar ve biçimlendirme için aşağıdaki gibi kullanabilirsiniz.

C++:
Option Explicit

Sub Kapali_Dosyadan_Verileri_Al()
    Dim Baglanti As Object, Kayit_Seti As Object, Dosya As String, X As Integer
   
    Dosya = ThisWorkbook.Path & "\veri.xlsm"
   
    Set Baglanti = CreateObject("AdoDb.Connection")
    Set Kayit_Seti = CreateObject("AdoDb.Recordset")
   
    Baglanti.Open "Provider=Microsoft.ACE.OleDb.12.0;Data Source=" & Dosya & _
    ";Extended Properties=""Excel 12.0;Hdr=Yes"""
   
    Kayit_Seti.Open "Select * From [Sayfa1$]", Baglanti, 1, 1
   
    If Kayit_Seti.RecordCount > 0 Then
        With Sayfa1
            .Cells(.Rows.Count, 1).End(3)(2, 1).CopyFromRecordset Kayit_Seti
            .Range("A2:A" & .Cells(.Rows.Count, 1).End(3).Row).NumberFormat = "dd.mm.yyyy"
             For X = 0 To Kayit_Seti.Fields.Count - 1
                .Cells(1, X + 1) = Kayit_Seti.Fields(X).Name
             Next
            .Range("A1:E1").Font.Bold = True
            .Columns.AutoFit
        End With
    End If
   
    Kayit_Seti.Close
    Baglanti.Close
   
    Set Kayit_Seti = Nothing
    Set Baglanti = Nothing
   
    MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
 
Katılım
26 Ocak 2019
Mesajlar
70
Excel Vers. ve Dili
excel 2016
çok teşekkürler hocam, birde sizi bulmuşken merak ettiğim birşey var.
ThisWorkbook.Path & "\veri.xlsm" bu kısımda anladığım kadarıyla bu dosyanın olduğu yerde veri.xlsm var diyoruz, bunun yerine bu dosyanın olduğu yerin bir üst klasöründe veri.xlsm var deme şansımız oluyormu ?
 

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
Şöyle olabilir....

Kod:
Sub Test()
    Dim myPath As String
    myPath = ThisWorkbook.Path & "\.."
    MsgBox Dir(myPath & "\Veri.xlsx")
End Sub

Veya, başka bir örnek;

Kod:
Sub Test2()
    Dim myFile As String
    myFile = ThisWorkbook.Path & "\..\Veri.xlsx"
    Workbooks.Open myFile
End Sub

.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,761
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
@Haluk beyin çözümüne ek olarak;

Bir üst klasör için aşağıdaki gibi kullanabilirsiniz.

Üstteki mesajımda ki Dosya değişkenini değiştiriniz.

1. Yöntem;
C++:
Dosya = Left(ThisWorkbook.Path, InStrRev(ThisWorkbook.Path, "\") - 1) & "\veri.xlsm"
2. Yöntem;
C++:
Set FSO = CreateObject("Scripting.FileSystemObject")
Dosya = FSO.GetParentFolderName(ThisWorkbook.Path) & "\veri.xlsm"
3. Yöntem; (Bu yöntemdeki tanımlamaları kod içinde en üst satıra alabilirsiniz.)
C++:
Dim Yol As Variant, Dosya As String
Yol = Split(ThisWorkbook.Path, "\")
ReDim Preserve Yol(0 To UBound(Yol) - 1)
Dosya = Join(Yol, "\") & "\veri.xlsm"
 
Katılım
26 Ocak 2019
Mesajlar
70
Excel Vers. ve Dili
excel 2016
Çok teşekkür ederim hocam ikinizede, çok hayır duamı aldınız. Hemen uyguluyorum kendi projeme göre.
 
Katılım
26 Ocak 2019
Mesajlar
70
Excel Vers. ve Dili
excel 2016
Hocam bir sorum daha olacak bu konuyla ilgili; veri.xlsm den sayfa1 i komple almak yerine oradan bir hücre aralığı alabiliyormuyuz, C7:H10000 gibi mesela
 

Korhan Ayhan

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

Deneyiniz.

C++:
Option Explicit

Sub Kapali_Dosyadan_Verileri_Al()
    Dim Baglanti As Object, Kayit_Seti As Object, Dosya As String, X As Integer
    
    Dosya = Left(ThisWorkbook.Path, InStrRev(ThisWorkbook.Path, "\") - 1) & "\veri.xlsm"
    
    Set Baglanti = CreateObject("AdoDb.Connection")
    Set Kayit_Seti = CreateObject("AdoDb.Recordset")
    
    Baglanti.Open "Provider=Microsoft.ACE.OleDb.12.0;Data Source=" & Dosya & _
    ";Extended Properties=""Excel 12.0;Hdr=Yes"""
    
    Kayit_Seti.Open "Select * From [Sayfa1$C7:H10000]", Baglanti, 1, 1
    
    If Kayit_Seti.RecordCount > 0 Then
        With Sayfa1
            .Cells(.Rows.Count, 1).End(3)(2, 1).CopyFromRecordset Kayit_Seti
            .Range("A2:A" & .Cells(.Rows.Count, 1).End(3).Row).NumberFormat = "dd.mm.yyyy"
             For X = 0 To Kayit_Seti.Fields.Count - 1
                .Cells(1, X + 1) = Kayit_Seti.Fields(X).Name
             Next
            .Range("A1:E1").Font.Bold = True
            .Columns.AutoFit
        End With
    End If
    
    Kayit_Seti.Close
    Baglanti.Close
    
    Set Kayit_Seti = Nothing
    Set Baglanti = Nothing
    
    MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
 
Katılım
26 Ocak 2019
Mesajlar
70
Excel Vers. ve Dili
excel 2016
korhan hocam size zahmet dosyama bir bakabilirmisiniz, daha önce sorduğum rakamların metin olarak gelmesi konusunda,
sizin yazdığınız kodlar başka yerde çok güzel çalışıyor ama benim dosyamda bir sorun var.
herapetrol.xlsm dosyamdaki istasyona makrosu sayı ve tarih olarak biçimli hücrelere metin olarak giriş yapıyor, nereyi yanlış yapıyorum bakarsanız çok sevinirim.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,761
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
"data" dosyanızda "istasyona" sayfasında 4. satırdan itibaren boş gibi görünen hücreler var. Bu satırların tümünü SİLEREK dosyayı kaydettikten sonra tekrar deneyiniz.

ADO kullanmak istiyorsanız bazı kurallara uymak zorundasınız. Yoksa sürekli problem yaşarsınız.
 
Katılım
26 Ocak 2019
Mesajlar
70
Excel Vers. ve Dili
excel 2016
göremedim hocam o hücreleri, yinede sildim ama değişen bir şey olmadı şu an
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,761
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
"istasyona" sayfasında CTRL+END tuşlarına bastığınızda en son hücre hangisi görünüyor.
 
Üst