• DİKKAT

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

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
 
.range("A1") yerine

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


Metin sayı olayını bilmiyorum maalesef
 
yokmu bu konuyu bilen birisi arkadaşlar,
kaynak dosyadaki tarih, sayı ne olursa olsun metin olarak alıyor.
 
Örnek dosyanızı eklerseniz, birisi ilgilenebilir belki ...

.
 
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
 
ç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.
 
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
 
ç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 ?
 
Şö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


.
 
@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"
 
Çok teşekkür ederim hocam ikinizede, çok hayır duamı aldınız. Hemen uyguluyorum kendi projeme göre.
 
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
 
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
 
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.
 
"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.
 
göremedim hocam o hücreleri, yinede sildim ama değişen bir şey olmadı şu an
 
"istasyona" sayfasında CTRL+END tuşlarına bastığınızda en son hücre hangisi görünüyor.
 
Geri
Üst