Çekilen hücrelerde rakam varsa textleri göstermiyor.Yoksa gösteriyor.

Katılım
15 Mayıs 2007
Mesajlar
22
Excel Vers. ve Dili
Excel 2000 V 9.0
Çekilen hücrelerde rakam varsa textleri göstermiyor.Yoksa gösteriyor.

Data adlı excel dosyasından Veri adlı dosyaya veri çekmekteyim.Ancak çekilen hücrelerde rakam varsa textleri göstermiyor.Yoksa gösteriyor.

Dosyaya bir göz atın.

d:\VERİ olarak bir klasör açın ve her iki dosyayı ekleyin.

Veri dosyasında Çek butonu ile Datadaki bilgiler aynı range çekiliyor.

Kullanmış olduğum kod;

Kod:
Private Sub CommandButton1_Click()
Dim rs, MyString
Set baglanti1 = CreateObject("ADODB.Connection")
Yol = "DRIVER={Microsoft Excel Driver (*.xls)};" & "DBQ=d:\VERİ\Data.xls"
baglanti1.Open Yol
Set rs = baglanti1.Execute("[DATA$B2:E6]")
Worksheets("ANA").Range("C11:F14").CopyFromRecordset rs
rs.Close
baglanti1.Close
End Sub
 
Katılım
14 Şubat 2006
Mesajlar
3,426
Excel Vers. ve Dili
(Excel 2016 - İngilizce)
Altın Üyelik Bitiş Tarihi
30-11-2022
Bende hem 1'i, hemde rrr'leri aktardı.
 
Katılım
15 Mayıs 2007
Mesajlar
22
Excel Vers. ve Dili
Excel 2000 V 9.0
Merhaba Ripek,

Mesela Veri2 nin ilk hücresine 1 yazarsanız dördüncü hücresindeki rr ler gözükmeyecektir. :)

Veya ilk hücreye (rastgele) "www" yazın ikinci hücreye rakam "123" dördüncü hücreye " ttt" .Çekin , Rakamlar gözükmüyor. :)

"www" leri silin , sadece "123" gözüküyor.

anlamadım gitti.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Bu veri alma yönteminizden kaynaklanıyor. Veri alınırken ilk 10 değerin tipine bakılıp çoğunluk veri tipine uymayan veriler çağırılmıyor. Bu durumda veri çekme yöntemini değiştirmek gerekir, dosyanızdaki kodu aşağıdaki gibi değiştirerek deneyin. Tüm veriler string kabul edilerek çağırılacaktır.

Kod:
Private Sub CommandButton1_Click()
Dim rs, MyString
Set baglanti1 = CreateObject("ADODB.Connection")
Yol = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\VERİ\Data.xls;Extended Properties=""Excel 8.0;IMEX=1"";"
baglanti1.Open Yol
Set rs = baglanti1.Execute("[DATA$B2:E6]")
Worksheets("ANA").Range("C11:F14").CopyFromRecordset rs
rs.Close
baglanti1.Close
End Sub
Not: Bu daha önce benimde başıma gelmiş bir durumdu, yukarıda verdiğim cevabı ve kod önerisinide değerli dostum ve üstadım Sn Haluk beyden almıştım. Konuyla ilgili kendisi daha detaylı açıklama yaparsa bende memnun olurum.
 
Katılım
15 Mayıs 2007
Mesajlar
22
Excel Vers. ve Dili
Excel 2000 V 9.0
oh beee

O halde , hem size hem Haluk bey'e teşekkür ediyorum.

İnanın uyuz olmuştum :)
 
Katılım
15 Mayıs 2007
Mesajlar
22
Excel Vers. ve Dili
Excel 2000 V 9.0
Büyük rangelerde işe yaramıyor

Mevcut Kimya.xls de kodu denedim yine çalışmadı... ?!
(Küçük rangelerde mi acaba geçerli ? )

D:\K_Analiz klasörü açın ve ekli Kimya.xls ile Data.xls yükleyin.

ve deneyin.


V'nin altındaki sarı hücreye rakam , mavi hücreye txt girdiğinizde txt gözükmeyecek.

rakam girdiğinizde gözüküyor.

( Not: Spinbutton ile ileri geri , Kaydet ile Data.xls kayıt yapıyorsunuz. )
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Ben size daha garantili bir kod önereyim. Dosyanızdaki tüm kodları silin ve sadece spinbuttona aşağıdaki kodu yazın.

Kod:
Private Sub SpinButton1_Change()
On Error Resume Next
[b9:o30].ClearContents
[b3] = SpinButton1.Value + 1
sat = ([b3] - 1) * 22 + 5
For a = 1 To 22
For b = 2 To 15
deger = ExecuteExcel4Macro("'C:\K_Analiz\[Data.xls]Data'!R" & sat + a - 1 & "C" & b)
If deger <> 0 Then Cells(a + 8, b) = deger
Next: Next
End Sub
 
Katılım
15 Mayıs 2007
Mesajlar
22
Excel Vers. ve Dili
Excel 2000 V 9.0
İşin bam teli zaten burası. :)

ExecuteExcel4Macro ile ağ paylaşımlı bir ortamda dataları çekemiyorsunuz.

For next döngüsü sistemi aşırı kasıyor.

Dolayısıyla ;

Kod:
Set baglanti1 = CreateObject("ADODB.Connection")
Yol = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\VERİ\Data.xls;Extended Properties=""Excel 8.0;IMEX=1"";"
baglanti1.Open Yol
Set rs = baglanti1.Execute("[DATA$B2:E6]")
Worksheets("ANA").Range("C11:F14").CopyFromRecordset rs
rs.Close
baglanti1.Close
ile verileri çekmek işi çözdü.

Ancak şimdi de mevcut sorun ortaya çıktı.

Eğer ExecuteExcel4Macro yu for next döngüsü kullanmadan direk range aralığını çekerek kullanabilirsek belki uygun olur.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Bu durumda Data.xls dosyas&#305;n&#305; arka planda a&#231;&#305;p verileri okuyup tekrar kapatan bir kodlama kullanmay&#305; deneyin.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Sorun san&#305;yorum ilk 1 nolu aral&#305;ktaki verilerden sonra ba&#351;l&#305;k tan&#305;mlanmad&#305;&#287;&#305;ndan ortaya &#231;&#305;k&#305;yor. Bu durumda &#351;&#246;yle bir &#231;&#246;z&#252;m daha geli&#351;tirilebilir, Kimya.xls dosyan&#305;zda bir sayfa daha olu&#351;turun, bu sayfaya data.xls dosyas&#305;ndaki t&#252;m verileri yukar&#305;da verdi&#287;im kod ile &#231;ekin, sonras&#305;nda spinbuttonla verileri bu sayfadaki listeden se&#231;ebilirsiniz.
 
Katılım
15 Mayıs 2007
Mesajlar
22
Excel Vers. ve Dili
Excel 2000 V 9.0
Sayın Leventm,

İlk önce ilginiz için teşekkürler.

http://www.excel.web.tr/showthread.php?t=35850

de en son sizin tavsiye etmiş olduğunuz yöntemi sayın Ripek de belirtmişti.

Ben en iyisi yapmak istemiş olduğum olayı anlatayım.

1.- Ağ paylaşımlı bir ortamda bir bilgisayarda Kimya.xls dosyası mevcut.Bu dosya sürekli açık ve dosya sürekli girilen değerlerle güncelleşiyor.

2.- Bu dosyadaki veriler Data.xls adlı dosyada kayıt ediliyor.Data.xls sürekli kapalı.

3.- Diğer ağ kullanıcılar kapalı olan Data.xls dosyasından hızlı bir şekilde verileri çekebilmeli.

Bütün mesajlarım bu konu ile alakalı idi.Ve bir noktaya kadar geldim.:)

ExecuteExcel4makro , ağ paylaşımlarında sorun çıkarıyor.Ve bilgileri for next döngüsü ile çekmek işi yavaşlatıyor.

Geriye ;

Kod:
 Set rs = baglanti.Execute("[Sayfa1$a1:e65536]")
 [a1].CopyFromRecordset rs
tipi kodlar ile hızlı bir şekilde ağlardan , range aralığındaki bilgileri çekebildim.

Diğer Ana bilgisayarın ( yani Kimya.xls ve Data.xls bulunduğu bilgisayar ) kayıt işini ise belirtmiş olduğunuz gibi Data.xls dosyası anlık açılıyor kayıt ediliyor ve tekrar kapatılıyor.Zaten aynı klasörde olduğundan bir sorun teşkil etmiyor.

Tüm sorun Range aralığına kayıt edilen rakamların veya txtlerin birlikte gözükmemiş olması.

Kod:
 Yol = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\VERİ\Data.xls;Extended Properties=""Excel 8.0;IMEX=1"";"
baglanti1.Open Yol
bu işi çözecek gibiydi.Küçük rangeler için işe yarıyor.

Biraz uzun oldu ,umarım derdimi anlatabildim.

:)
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
12 nolu mesaj&#305;m&#305; dikkate alman&#305;z&#305; &#246;neririm. Yani kapal&#305; dosyadan verilerin tamam&#305;n&#305; &#231;ekin ve s&#252;zme i&#351;lemini bu listeden yap&#305;n.
 
Katılım
15 Mayıs 2007
Mesajlar
22
Excel Vers. ve Dili
Excel 2000 V 9.0
Yine olmadı ,

Kimya.xls'e Data adlı sheet açtım ve bir button vasıtasıyla verileri vermiş olduğunuz kodla komple aktardım.Yine aynı hatayı veriyor.

Kod:
Private Sub CommandButton2_Click()
Dim rs, MyString

Set baglanti1 = CreateObject("ADODB.Connection")
Yol1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\K_Analiz\Data.xls;Extended Properties=""Excel 8.0;IMEX=1"";"
baglanti1.Open Yol1

Set rs = baglanti1.Execute("[Data$A1:O686]")
Worksheets("Data").Range("A1:O686").CopyFromRecordset rs
rs.Close
baglanti1.Close

End Sub
Aynı olayı ExecuteExcel4Macro ile denedim oldu ama verileri çekmesi 15 sn sürdü.Birde ağ üzerinden düşünürsek iyce kasacak.

Kod:
Private Sub CommandButton3_Click()
For a = 1 To 682
For b = 1 To 14
deger = ExecuteExcel4Macro("'D:\K_Analiz\[Data.xls]Data'!R" & a & "C" & b)
If deger <> 0 Then Worksheets("Data").Cells(a, b) = deger
Next
Next
End Sub
 
Katılım
15 Mayıs 2007
Mesajlar
22
Excel Vers. ve Dili
Excel 2000 V 9.0
En iyisi şunu öğrenmek.

"ExecuteExcel4Macro" kullanmadan kapalı bir excel dosyasından , belli bir range aralığını çekmek mümkün mü ?

Belki farklı bir yol vardır...

Not: Ağda kullanılacağı için dosya açılmaması gerekiyor.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Birde a&#351;a&#287;&#305;daki gibi denermisiniz.

Kod:
Private Sub CommandButton2_Click()
Dim rs, MyString
Set baglanti1 = CreateObject("ADODB.Connection")
Yol1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\K_Analiz\Data.xls;Extended Properties=""Excel 8.0;HDR=no;IMEX=1"";"
baglanti1.Open Yol1
Set rs = baglanti1.Execute("[Data$A1:O686]")
Worksheets("Data").Range("A1:O686").CopyFromRecordset rs
rs.Close
baglanti1.Close
End Sub
 
Katılım
14 Şubat 2006
Mesajlar
3,426
Excel Vers. ve Dili
(Excel 2016 - İngilizce)
Altın Üyelik Bitiş Tarihi
30-11-2022
Birde DONGU fonksiyonundaki;

gun = 5 + a * 22
gun1 = gun + 21

kodlar&#305;n&#305;

gun = 4 + a * 22
gun1 = gun + 22

yaparak denermisiniz?
 
Katılım
15 Mayıs 2007
Mesajlar
22
Excel Vers. ve Dili
Excel 2000 V 9.0
Sayın Levent bey,Sayın Ripek,

kodu denedim yine olmadı.

Ayrıca Levent beyin Spinbutton için vermiş olduğunuz kodları uyguladığımdan DONGU ye ihtiyaç kalmadı.(Yinede denedim olmadı)

Revize edilmiş dosyaları gönderiyorum.(karışıklık olmasın diye)

http://www.excel.web.tr/showthread.php?t=37739

Bu linkte sayın FPC , veritabanının tanımlanmış alanlarından bahsediyor.

Excel yerine Acces veritabanı olarak kullanmış olsak bu sorun gider mi ?
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Son verdi&#287;im kod, Data dosyas&#305;ndaki 1.sat&#305;ra ba&#351;l&#305;klar yazarsan&#305;z yani bo&#351; b&#305;rakmazsan&#305;z do&#287;ru &#231;al&#305;&#351;acakt&#305;r.

Not: Kodun do&#287;ru &#231;al&#305;&#351;mas&#305; i&#231;in tan&#305;mlanan aral&#305;ktaki ilk sekiz h&#252;creden en az birisinin dolu olmas&#305; gerekir.
 
Üst