Ado ile rakamların metin olarak gelmesi

Murat OSMA

Altın Üye
Altın Üye
Katılım
23 Mayıs 2011
Mesajlar
5,508
Excel Vers. ve Dili
Microsoft 365 TR-EN
Altın Üyelik Bitiş Tarihi
31-12-2028
Öncelikle data dosyasının boyutu (14.6 MB) gereksiz fazla, tüm sayfalardaki dolu hücreler haricindeki tüm satırları silin, dosyanın boyutu ~30KB'ye düşecektir.

Ardından sorguyu bu şekilde değiştirip deneyin.
SQL:
Kayit_Seti.Open "Select format(f1,'dd.mm.yyyy hh:mm'),f2,f3,f4,f5,f6*1 From [istasyona$a2:f" & kayit & "]", Baglanti, 1, 1
Hatta öncesine bir de şu kodları eklerseniz daha verimli olur.
SQL:
    Kayit_Seti.Open "Select count(*) from [istasyona$]", Baglanti, 1, 1
    kayit = Kayit_Seti.Fields(0): Kayit_Seti.Close
Data dosyasının da temiz hâlini iletiyorum. Sizdeki ile bunun boyut farkına bakın.
 

Ekli dosyalar

Katılım
26 Ocak 2019
Mesajlar
70
Excel Vers. ve Dili
excel 2016
"istasyona" sayfasında CTRL+END tuşlarına bastığınızda en son hücre hangisi görünüyor.
f60000 oluyor hocam, ne yaptımsa da silemedim. :(

Sayın murat osma indiremiyorum ama dosyanın neden şiştiğini tahmin ediyorum, orada kullandığım bir kopyala yapıştır yaptırdığım aktar makrosu boş satırlarla şişiriyor sanırım.

Aslında yapmak istediğim şeyin veritabanı kullanılması gerektiğini tahmin ediyorum ama bende o bilgi yok.
4 tane excel dosyam var ve bunlar birbiri arasında para transferi yapıyor, data.xlsm gönderilen paraları okuyarak kaydetsin ve diğer kullanıcı data.xlsm yi okuyarak havaleyi alsın istemiştim ama olmuyor.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,763
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
4. satırı mouse ile seçin.

CTRL+SHIFT+AŞAĞI OK TUŞU kombinasyonuna basın.

Tüm satırlar seçili hale gelecektir.

Seçili alan üzerinde sağ tıklayıp SİL komutunu çalıştırın.
 

Murat OSMA

Altın Üye
Altın Üye
Katılım
23 Mayıs 2011
Mesajlar
5,508
Excel Vers. ve Dili
Microsoft 365 TR-EN
Altın Üyelik Bitiş Tarihi
31-12-2028
Sayın murat osma indiremiyorum ama dosyanın neden şiştiğini tahmin ediyorum, orada kullandığım bir kopyala yapıştır yaptırdığım aktar makrosu boş satırlarla şişiriyor sanırım.

Aslında yapmak istediğim şeyin veritabanı kullanılması gerektiğini tahmin ediyorum ama bende o bilgi yok.
4 tane excel dosyam var ve bunlar birbiri arasında para transferi yapıyor, data.xlsm gönderilen paraları okuyarak kaydetsin ve diğer kullanıcı data.xlsm yi okuyarak havaleyi alsın istemiştim ama olmuyor.
En son sizin eklediğiniz dosyaları indirdim. Korhan Bey'in dediği işlemi yaptım ve kodları da önceki mesajımda belirttiğim gibi değiştirdim.
Hem dosyanın boyutu oldukça düştü, hem anlık verileri çekebiliyorum, hem de istediğiniz gibi tarih/saat ve sayı formatı da sorunsuz geliyor.

Siz de yaptığım ve yönlendirdiğim gibi yapın çözülecektir.
 
Katılım
26 Ocak 2019
Mesajlar
70
Excel Vers. ve Dili
excel 2016
hocam bir ricam olacak bu çalışmayla ilgili, ben formüllerle yaptığım için çok sağlıksız oluyor.

Ortaktan sayfasında A2 ile F sütununda veri var
D sütunundaki "galeri" yazan satırları kopyalayıp
Galeriye sayfasının A2 den itibaren ilk boş satırdan başlayarak yapıştıracağız

ben diğer sayfalarım için çoğaltacağım. Bu kod olursa benim dosyamı çok hafifletecek.
 

Korhan Ayhan

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

C++:
Option Explicit

Sub Galerlye_Aktar()
    Dim Baglanti As Object, Kayit_Seti As Object, Dosya As String, X As Integer
   
    Dosya = ThisWorkbook.FullName
   
    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=No"""
   
    Kayit_Seti.Open "Select * From [ortaktan$A2:F20000] Where F4 = 'galeri'", Baglanti, 1, 1
   
    If Kayit_Seti.RecordCount > 0 Then
        With Sheets("galeriden")
            .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 hh:mm"
        End With
    End If
   
    Kayit_Seti.Close
    Baglanti.Close
   
    Set Kayit_Seti = Nothing
    Set Baglanti = Nothing
End Sub
 
Katılım
26 Ocak 2019
Mesajlar
70
Excel Vers. ve Dili
excel 2016
Hocam çok teşekkürler, ürettiğiniz kod sayesinde kaldırdığım formüllü satırlar sonucunda dosyam 40 kb a düştü

sanırım sadece ado ya özgü sütünların f1 f2 gibi isimlendirildiğini görüyorum, D sütunu için F4 diyoruz sanırım. Yeni şeyler öğreniyorum sayenizde
diğer sayfalardan da benzer işlemi yaparak kodu bu şekilde üretiyorum, çalışıyor ama çalışıyor olmasının her zaman düzgün ve sağlıklı olduğu anlamına gelmediğini öğrendiğim için bir danışayım istedim.

C++:
Sub Galerlye_Aktar()
    Dim Baglanti As Object, Kayit_Seti As Object, Dosya As String, X As Integer
 
    Dosya = ThisWorkbook.FullName
 
    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=No"""
 
    Kayit_Seti.Open "Select * From [ortaktan$a2:f" & kayit & "] Where F4 = 'galeri'", Baglanti, 1, 1
    If Kayit_Seti.RecordCount > 0 Then
        With Sheets("galeriye")
            .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 hh:mm"
        End With
    End If
    Kayit_Seti.Close
    Kayit_Seti.Open "select * From [istasyondan$a2:f" & kayit & "] Where F4 = 'galeri'", Baglanti, 1, 1
 
    If Kayit_Seti.RecordCount > 0 Then
        With Sheets("galeriye")
            .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 hh:mm"
        End With
    End If
 
    Kayit_Seti.Close
    Baglanti.Close
 
    Set Kayit_Seti = Nothing
    Set Baglanti = Nothing
End Sub
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,763
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
ADO normalde başlıksız verilerde çalışıyor. Ama veritabanı sorgulama yöntemi olduğu için belli kurallara uymak gerekiyor.

Yani ben excel tablosunu kafama göre doldurayım ADO bana istediğim veriyi getirsin dediğiniz vakit sorunlarla karşılaşma olasılığı yüksek oluyor.

Çünkü veritabanlarında görsellik yoktur. Birleştirilmiş hücre yoktur. Biçim mümkün mertebe az kullanılır. Daha çok salt veriden oluşur.

Bu sebeple excelde yapılan çalışmalarıda bu yönde tasarlayarak kullanmakta fayda var. Yoksa birçok sorun karşımıza çıkabilir.
 
Katılım
26 Ocak 2019
Mesajlar
70
Excel Vers. ve Dili
excel 2016
Hocam kodumuzda 'galeri' kelimesi olan satırları alıyoruz da eğer sayfanın birinde hiç yoksa hata veriyor, bunun için ne yazabiliriz.
 
Katılım
26 Ocak 2019
Mesajlar
70
Excel Vers. ve Dili
excel 2016
hocam 10 dk geçtiği için düzenleyemedim mesajımı, hata kelimeyi aradığı sayfa tamamen boşsa meydana geliyor.
şöyle kullanmıştım ama olmadı sanırım
C++:
 Kayit_Seti.Open "Select count(*) from [galeriden$]", Baglanti, 1, 1
    kayit = Kayit_Seti.Fields(0): Kayit_Seti.Close
    Kayit_Seti.Open "select * From [galeriden$a2:f" & kayit & "] Where F4 = 'istasyon'", Baglanti, 1, 1
 
Katılım
26 Ocak 2019
Mesajlar
70
Excel Vers. ve Dili
excel 2016
tamam hocam hatamı buldum, kod da arattığım kelimedeki istasyon kelimesinin i harfine büyük/küçük harf hassasiyeti varmış.
 
Üst