excel - VBA का उपयोग कर फ़ोल्डर में फ़ाइलों के माध्यम से लूप?




3 Answers

इसके बजाय फ़ंक्शन के रूप में मेरी व्याख्या यहां दी गई है:

'#######################################################################
'# LoopThroughFiles
'# Function to Loop through files in current directory and return filenames
'# Usage: LoopThroughFiles ActiveWorkbook.Path, "txt" 'inputDirectoryToScanForFile
'# https://stackoverflow.com/questions/10380312/loop-through-files-in-a-folder-using-vba
'#######################################################################
Function LoopThroughFiles(inputDirectoryToScanForFile, filenameCriteria) As String

    Dim StrFile As String
    'Debug.Print "in LoopThroughFiles. inputDirectoryToScanForFile: ", inputDirectoryToScanForFile

    StrFile = Dir(inputDirectoryToScanForFile & "\*" & filenameCriteria)
    Do While Len(StrFile) > 0
        Debug.Print StrFile
        StrFile = Dir

    Loop

End Function

मैं Excel 2010 में vba का उपयोग कर निर्देशिका की फ़ाइलों के माध्यम से लूप करना चाहता हूं।

लूप में, मुझे इसकी आवश्यकता होगी

  • फ़ाइल नाम, और
  • जिस तारीख को फ़ाइल स्वरूपित किया गया था।

मैंने निम्नलिखित कोडों को कोड किया है जो फ़ोल्डर में 50 से अधिक फाइलें नहीं हैं, अन्यथा यह हास्यास्पद रूप से धीमा है (मुझे इसे 10000 फाइलों के साथ फ़ोल्डर के साथ काम करने की आवश्यकता है)। इस कोड की एकमात्र समस्या यह है कि file.name को देखने के लिए ऑपरेशन बहुत अधिक समय लेता है।

कोड जो काम करता है लेकिन waaaaayay बहुत धीमा है (प्रति 100 फाइलों में 15 सेकंड):


Sub LoopThroughFiles()
   Dim MyObj As Object, MySource As Object, file As Variant
   Set MySource = MyObj.GetFolder("c:\testfolder\")
   For Each file In MySource.Files
      If InStr(file.name, "test") > 0 Then
         MsgBox "found"
         Exit Sub
      End If
   Next file
End Sub

समस्या सुलझ गयी:

  1. मेरी समस्या को किसी विशेष तरीके से Dir (15000 फ़ाइलों के लिए 20 सेकंड) का उपयोग करके नीचे दिए गए समाधान द्वारा हल किया गया है और FileDateTime का उपयोग करके टाइम स्टैंप की जांच के लिए।
  2. खाते में 20 सेकंड के नीचे से एक और जवाब लेना 1 सेकंड से भी कम हो गया है।



Dir बहुत तेज लगता है।

Sub LoopThroughFiles()
    Dim MyObj As Object, MySource As Object, file As Variant
   file = Dir("c:\testfolder\")
   While (file <> "")
      If InStr(file, "test") > 0 Then
         MsgBox "found " & file
         Exit Sub
      End If
     file = Dir
  Wend
End Sub



जब मैं अन्य फ़ोल्डरों से फ़ाइलों को संभाल और संसाधित करता हूं तो Dir फ़ंक्शन आसानी से ध्यान केंद्रित करता है।

मैं घटक FileSystemObject साथ बेहतर परिणाम प्राप्त कर लिया है।

पूरा उदाहरण यहां दिया गया है:

http://www.xl-central.com/list-files-fso.html

माइक्रोसॉफ्ट स्क्रिप्टिंग रनटाइम (टूल्स> संदर्भों का उपयोग करके) में विजुअल बेसिक एडिटर में एक संदर्भ सेट करना न भूलें

कोशिश करो!




Related

excel vba excel-vba excel-2010