Ado ile kapalı sayfaya veri atarken tarih ve sayı formatı sorunu

Katılım
18 Mart 2007
Mesajlar
171
Excel Vers. ve Dili
OFFICE 2016
Altın Üyelik Bitiş Tarihi
02-03-2024
Sevgili arkadaşlar,
Aşağıdaki kodlarla ThisWorkbook.Path & "\kapalı dosya.xls" adındaki excel sayfama ADO yöntemi ile veri gönderiyorum ancak tüm hücrelerin içeriği başında tırnak ' işareti olarak metin şeklinde geliyor. Cells(i, 1).Value tarih formatında olmasına rağmen metin olarak atması büyük sıkıntı. Buna paralel olarak Cells(i, 15), 16, 17 hepsi sayı formatında ancak bunlarda hücrede başında tırnak işareti olarak geldiği için metin formatında geliyor. ado ile veri atarken bunları sayı formatında nasıl atabiliriz. Yardımcı olursanız çok memnun olurum. İlginize şimdiden teşekkür ederim.

Bu arada rs.Fields(13).Value = FormatNumber(CDbl(Val(Cells(i, 18).Value)), 2) bu şekilde denedim ama olmadı beceremedim.

Kod:
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False

Dim con As Object, rs As Object, sorgu As String, i As Integer
Set con = CreateObject("adodb.connection")
Set rs = CreateObject("adodb.recordset")
con.Open "provider=Microsoft.ACE.OLEDB.12.0;data source=" & ThisWorkbook.Path & "\kapalı dosya.xls" & _
";extended properties=""excel 8.0;hdr=yes"""
sorgu = "select * from [A$]"
With rs
    .Open sorgu, con, 1, 3
'        For i = 2 To 146
        For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
            .AddNew
               rs.fields(0).Value = Cells(i, 1).Value
                rs.fields(1).Value = Cells(i, 2).Value
                rs.fields(2).Value = Cells(i, 3).Value
                rs.fields(3).Value = Cells(i, 4).Value
                rs.fields(4).Value = Cells(i, 5).Value
                rs.fields(5).Value = Cells(i, 6).Value
                rs.fields(6).Value = Cells(i, 7).Value
                rs.fields(7).Value = Cells(i, 8).Value
                rs.fields(8).Value = Cells(i, 9).Value
                rs.fields(9).Value = Cells(i, 10).Value
                rs.fields(10).Value = Cells(i, 11).Value
                rs.fields(11).Value = Cells(i, 12).Value
                rs.fields(12).Value = Cells(i, 13).Value
                rs.fields(13).Value = Cells(i, 14).Value
                rs.fields(14).Value = Cells(i, 15).Value
                rs.fields(15).Value = Cells(i, 16).Value
                rs.fields(16).Value = Cells(i, 17).Value
                rs.fields(17).Value = Cells(i, 18).Value
                rs.fields(18).Value = Cells(i, 19).Value
            .Update
        Next i
    .Close
        MsgBox "Verilerin aktarımı tamamlanmıştır.   ", vbInformation + vbOKOnly + vbMsgBoxHelpButton, "Www.ExcelVBA.Net", "http://www.excelvba.net", 0
    con.Close
        Set rs = Nothing
            Set rs = Nothing
                sorgu = vbNullString
End With
End Sub
 
Katılım
5 Kasım 2006
Mesajlar
601
Excel Vers. ve Dili
TÜRKCE Excel 2021 32bit
Alttaki gibi deneyin ve o sütunun formatını değiştirin sayı olarak.


rs.Fields(13).Value = CDbl(Val(Cells(i, 18).Value))
 

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
Bu problemle karşılaşmanız doğaldır.... çözüm için, verileri kapalı dosyaya yazdırdıktan sonra yine VBA ile açıp, string türü verileri nümerik hale getirecek başka bir kod kullanılabilir.

Ya da, yine ADO ile başka bir yol düşünülebilir ama örnek dosyaları görmek lazım....

.
 
Katılım
18 Mart 2007
Mesajlar
171
Excel Vers. ve Dili
OFFICE 2016
Altın Üyelik Bitiş Tarihi
02-03-2024
üstad cevap için teşekkürler allah razı olsun örnek dosyalık bir durum öyle çok elzem değil diye düşünüyorum a ve b adında iki excel dosyası açıp a exceline activex denetimlerinden command button ekleyip yukarıdaki kodları button click içine yerleştirmek ve koddaki dosya adlarını a ve b olacak şekilde değiştirmek yeterli 1 dk'yı almaz. içinde başka bir kod olmayacak. a2, b2 sütuna test için bir tarih, birde sayı içeren bir şey yazmak yeterli. Bunları b sayfasında numeric attırmak veya attırılamıyorsa bile attıktan sonra ado ile açıp o bölümleri sizin dediğiniz gibi çevirmek yeterli olacak. Benim platin üyeliğimin süresi bittiği için örnek yapıp ekleyemedim. Bundan daha acil bir durum oluştu üyelik yenilemem gerekebilir. Kapalı dosyada kaydedilecek a sütunundaki tarihleri kontrol edip o tarihe kayıtlar varsa baktırmak ve bu tarihli veriler daha önce kayıtlıdır diye baktırmak istiyorum ama adoya geçince bunları yaptıramadım. yardımcı olursanız çok mutlu olurum.
Bu problemle karşılaşmanız doğaldır.... çözüm için, verileri kapalı dosyaya yazdırdıktan sonra yine VBA ile açıp, string türü verileri nümerik hale getirecek başka bir kod kullanılabilir.

Ya da, yine ADO ile başka bir yol düşünülebilir ama örnek dosyaları görmek lazım....

.
 
Üst