• DİKKAT

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

Klasör isimlerini alırken tarih kısıtı hk.

Katılım
12 Eylül 2015
Mesajlar
96
Excel Vers. ve Dili
excel 2013 tr
Merhaba,

Aşağıda ki kodlar ile sabit olarak belirttiğim C:\cim klasörü içerisinde ki dosya isimlerini alıyorum. Kodu yine bu siteden alıp kendimce uyarlamaya çalıştım. Ancak cim klasörü içerisinde binlerce dosya bulunmakta. Ben sadece son iki günde oluşturulan dosyalar veya da son 50 dosya gibi bir kısıt ile hız kazanmak istiyorum.Kodun içerisinde ki
Kod:
If CDate(Format(CreateObject("Scripting.FileSystemObject").GetFile(yol & "\" & Dosya).DateCreated, "dd.mm.yyyy")) < CDate(Date - 2) Then GoTo 1
satırı ile veri almadan geç dedim ancak yine de binlerce dosyayı tek tek gezip tarihine baktığı için yine yavaş oldu. Aslında istediğim şu da olabilir; Veri almaya eski tarihlerden değilde son oluşturulanlar dan başlarsa for döngüsünü 50 ye kadar yapar ve çözbilirim. Ancak yeni tarihlilerden başlamak kısmında da işin içinden çıkamadım.

Yardımcı olabilecek arkadaşlara şimdiden çok teşekkür ederim.

Kod şu şekildedir;


Kod:
Public sat As Long
Option Private Module
Sub dosyaListele()
Set s1 = ThisWorkbook.Sheets("Sayfa2")
Kaynak = "C:\cim"
If InStr(1, Kaynak, "{") > 0 Then GoTo Atla
s1.Cells.ClearContents
s1.Range("A1") = "Dosya Yolu"
s1.Range("B1") = "Dosya Adı"
s1.Range("C1") = "Dosya Tipi"
s1.Range("D1") = "Dosya Boyutu"
s1.Range("E1") = "Oluşturulma Tarihi"
s1.Range("F1") = "Son Erişim Tarihi"
s1.Range("G1") = "Son Düzenleme Tarihi"
s1.Range("H1") = "Son Düzenleme Zamanı"
AltListe (Kaynak)
MsgBox "işlem tamam !", vbInformation, "DİKKAT"
Atla:
Set Obj = Nothing
Set klasor = Nothing
Exit Sub
Hata: MsgBox Err.Description, vbExclamation, "Error #" & Err.Number
End Sub
Private Sub AltListe(yol As String)
Dim klsrAra, klsrLst As Object, Dosya
Set s1 = ThisWorkbook.Sheets("Sayfa2")
Set klsrLst = CreateObject("Scripting.FileSystemObject").GetFolder(yol).subfolders
Dosya = Dir(yol & "\*.*")
Set nesne = CreateObject("Scripting.FileSystemObject")
Set klasor = nesne.GetFolder(yol)
Set dosyalar = klasor.Files
dosyasayısı = dosyalar.Count
For i = 1 To dosyasayısı
DoEvents
If CDate(Format(CreateObject("Scripting.FileSystemObject").GetFile(yol & "\" & Dosya).DateCreated, "dd.mm.yyyy")) < CDate(Date - 2) Then GoTo 1
sat = s1.[B65000].End(3).Row + 1
s1.Cells(sat, 2) = Dosya
On Error Resume Next
With CreateObject("Scripting.FileSystemObject").GetFile(yol & "\" & Dosya)
s1.Range("C" & sat) = .Type
s1.Range("E" & sat) = Format(.DateCreated, "dd.mm.yyyy")
End With
1:
Dosya = Dir
Next i
On Error GoTo sonraki
sonraki:
End Sub
 
Merhaba.

Koşul satırını aşağıdakiyle değiştirerek deneyin.
.
Kod:
If CDate(CreateObject("Scripting.FileSystemObject").GetFile(yol & "\" & Dosya).DateCreated) <= CDate(Date - 2) Then GoTo 1
 
Ömer bey selam,
PC başına geçemedim henüz ancak mazur görürseniz bir sorum olacak,
Bu kod satırı benimkinden çok farklı değil gibi, format kalkmış ve küçük eşit denilmiş tarihler arasında, hıza etkisi olurmu acaba bilemedim ????
Birazdan deneyip tekrar sonuç yazacağım. Teşekkürler.
 
Ömer bey selam tekrar,
Herhangi bir iyileştirme olmadı maalesef :(
Acaba isteğimi anlatamamış olabilir miyim diye düşünüyorum.
 
Tekrar merhaba.

İsteğiniz, pek uğraştığım bir konu değildi aslında ve ben sadece tarih kısıtlaması içen kod değişikliği önermiştim.

Kod'un yavaş çalışması için bir neden göremiyorum ama bir de;
-- koddaki s1.Range("A1") = "Dosya Yolu" satırından önce
Application.ScreenUpdating = False: Application.Calculation = xlCalculationManual
satırını,
-- koddaki Atla: satırından sonra da,
Application.ScreenUpdating = True: Application.Calculation =xlCalculationAutomatic
satırını ekleyerek deneyin isterseniz.
.
 
Kod, istediğinizi mi yapmıyor yoksa çalışması çok uzun mu sürüyor?
 
Merhaba,
Aslında yavaş çalışmasından kastım istediğim sonucu uzun sürede alıyor olmam. Kod aslında hızlı çalışıyor. Ancak klasörde binlerce dosya olduğu için döngü kurduğumuzda binlerce kaydı gereksiz yere tarıyor. Benim istediğim şey belirttiğim klasöre son eklenen 50 dosyayı bir sheet veya listboxa almak. Bunu bu kodla yapıyorum 2 gün tarih kısıtlaması bunu çözüyor. Ancak bu kodda taramaya ilk eklenen dosyalardan başladığı için her makroyu calistirmamda dakikalarca tarama yapıyor ve son iki günde oluşan dosyaları alıyor. Ben ise taramaya son eklenenlerden başlayacak bir kod düşünüyorum. Ki kısa sürede son eklenen istediğim sayıda dosyayi elde edebileyim. Anlatabildiysem çok mutlu olacağım.
 
Sayın GÜRSOY mutlaka pratik bir çözüm önerecektir (bu tür konularda en iyilerdendir diye düşünüyorum)
ama fikrim şöyle cmd komutu ile hızlıca dizin içeriği txt olarak alınabiliyor diye biliyorum.
Bu txt'den de gerekli verilerin excel'e kolaylıkla alınabilmesi lazım.
.
 
Şu komut satırını çalıştırın. Sonuç, D:\rapor.txt olarak çıkaracaktır. Sonuç istediğiniz hızda ise "rapor" isimli dosyadan bir liste çıkaracak kod yazılabilir.
Sonuçta "dir" fonksiyonu da tüm dosyaları tarıyor ancak listeleme hızlıdır.



Kod:
dir C:\cim /o-d>D:\rapor.txt
 
Sayın hocalarım yardım ve yönlendirmeleriniz için çok teşekkür ederim. Verileri gayet hızlı şekilde txt dosyasına aktardım. Şimdi bu txt doyasından userform uzerinde bir listbox a almak kaldı. Veya excel de olabilir ben listbox a tekrar aktarırım. Oluşan txt doyasının resim çıktısı ve sadeleştirilmiş txt dosyası ekte, ekte de işaretlediğim gibi 2018 ile başlayan kısmı 1.sütuna ve oluşturma tarihini 2.sütuna gelecek şekilde excel veya listbox a almak istiyorum. Yardımcı olursanız çok makbule geçecek, tekrar teşekkür ederim.


http://s3.dosya.tc/server16/u0s36y/2.jpg.html


http://s3.dosya.tc/server16/u0s36y/rapor.txt.html
 
Merhabalar tekrar,

Tam bütün sorunu hallettik derken bir sorunumuz daha çıktı, excel den komut istemini ( cmd ) yi tetiklerken diğer arkadaşlarım pclerinde ki güvenlik uygulamalarına takıldı. Alternatif arayış içerisine tekrar girdim, önerilerinizi beklemekteyim. :???:
 
Geri
Üst