मुझे एकाधिक टेक्स्ट फ़ाइलों से एक मान चाहिए। उन पाठ फ़ाइलों को एक फ़ोल्डर (लगभग 1000 फ़ाइलें) में 5-अंकीय फ़ाइल नाम के साथ संग्रहीत किया जाता है और मैं एक मैक्रो बनाना चाहता हूं, जो इस फ़ोल्डर को फ़ाइलों के सबसेट के लिए स्कैन करता है और फिर एक व्यक्तिगत यूरो मान निकालता है।

screen

मुझे निष्कर्षण भाग मिल रहा है, लेकिन मैं इस प्रक्रिया को विभिन्न फ़ाइल नामों के माध्यम से अभी तक लूप करने में सक्षम नहीं हूं क्योंकि मैं वीबीए के लिए बिल्कुल नया हूं।

Sub ExtractData()
    Dim myFile As String, text As String, textline As String, Data As Integer, filename As String
    Dim myFolder As String

    myFolder = "C:\Folder\"
    filename = Range("A1").Value & ".txt"
    myFile = "C:\Folder\" & filename & ""

    Open myFile For Input As #1
    Do Until EOF(1)
        Line Input #1, textline
        text = text & textline
    Loop
    Close #1

    Data = InStr(text, "Euro")
    Range("B1").Value = Mid(text, Data + 6, 4)

End Sub

अगर कोई मुझे सही दिशा में इंगित करेगा तो मैं इसकी बहुत सराहना करूंगा। अभिवादन

3
Julian 11 नवम्बर 2019, 13:55

1 उत्तर

सबसे बढ़िया उत्तर

आप Scripting.FileSystemObject लक्ष्य फ़ोल्डर में फ़ाइलों को पुनरावृत्त करने के लिए, Like ऑपरेटर फ़ाइल नाम को मान्य करने के लिए और फिर हमेशा की तरह प्रत्येक फ़ाइल से मान प्राप्त करने के लिए।

यह काम करना चाहिए:

Sub ExtractData()
    Dim folderPath As String, filePath As String
    Dim textline As String, data As Integer
    folderPath = "C:\Folder\"

    Dim oFso As Object: Set oFso = CreateObject("Scripting.FileSystemObject")
    Dim oFolder As Object: Set oFolder = oFso.GetFolder(folderPath)
    Dim oFiles As Object: Set oFiles = oFolder.Files
    Dim oFile As Object

    Dim counter As Integer
    For Each oFile In oFiles
        If Not oFile.Name Like "#####.txt" Then GoTo ContinueFor

        data = 0
        counter = counter + 1
        Range("A" & counter).Value = oFile.Name
        filePath = folderPath & oFile.Name

        Open filePath For Input As #1
            Do Until EOF(1) Or data > 0
                Line Input #1, textline
                data = InStr(textline, "Euro")
            Loop
        Close #1

        If data > 0 Then Range("B" & counter).Value = Mid(textline, data + 6, 4)
ContinueFor:
    Next
End Sub

यह पहली पंक्ति से लक्ष्य मान निकालेगा जिसमें "यूरो" शब्द शामिल है। यदि आप जिस मान को निकालने का प्रयास कर रहे हैं, वह उसी पंक्ति में नहीं है, तो आप पूरा पाठ पढ़ सकते हैं (जैसा कि आपने मूल रूप से किया था) और फिर वह मान निकालें जो आप चाहते हैं:

Dim allText As String
' ...
' ...

Open filePath For Input As #1
    allText = Input(LOF(1), 1)
Close #1

data = InStr(allText, "Euro")
If data > 0 Then Range("B" & counter).Value = Mid(allText, data + 6, 4)

शायद बेहतर तरीके हैं लेकिन यह सब आपकी फ़ाइल की संरचना पर निर्भर करता है (जो आपने नहीं दिखाया है)। उदाहरण के लिए, यदि लक्ष्य मान अगली पंक्ति में है और आप उस पंक्ति में उसकी स्थिति जानते हैं, तो आप ऊपर दिए गए मूल कोड का उपयोग उस पंक्ति को पढ़ने के लिए कर सकते हैं जिसमें "यूरो" शब्द है, अगली पंक्ति पढ़ें, और फिर मान निकालें .

2
41686d6564 12 नवम्बर 2019, 14:48