我需要逐个读取多个txt文件并从中读取数据并将其存储在excel表中 . 从第一个txt文件中获取最后一个值的问题,以及当我的宏正在读取第二个文件时,它会粘贴第一个txt文件的内容并截断第二个文件中的内容 . 你能告诉我吗?

看待

'sub copy_data()

Dim myFile As String,text as String,textline As String,posvalueFieldTagName As Integer,posnextFieldTagName As Integer,fieldTagValue As String

Dim dataFile,nextFieldTagName,startFieldTagName As String Dim y As Workbook

Dim z,i,j,lenTagValue,sample1,sample2 As Integer Dim FilePath,FileOnly,PathOnly As String

Dim cIn,cOut,cIO,a,b,c,d,rCount As Integer

Dim dataFileIn,dataFileOut,fieldVal As String

设置y = ThisWorkbook

For i = 1 To y.Sheets.Count

'Either we can put all names in an array , here we are printing all the names in Sheet 2

y.Sheets("sheetName").Range("A" & i) = y.Sheets(i).Name

Next i

y.Save

对于z = 1到y.Sheets(“sheetName”) . UsedRange.Rows.Count - 1

cIn = 0
    cOut = 0
    cIO = 0
    dataFile = y.Worksheets("sheetName").Cells(1, z).Value
    dataFileIn = dataFile & "I"
    dataFileOut = dataFile & "O"
    rCount = y.Sheets(dataFile).UsedRange.Rows.Count

    For a = 2 To rCount

    fieldVal = y.Worksheets(dataFile).Cells(a, 1).Value
    fieldVal = Trim(fieldVal)

            If fieldVal = dataFile & "I" Then
            cIn = cIn + 1
            End If

            If fieldVal = dataFile & "O" Then
            cOut = cOut + 1
            End If

            If fieldVal = dataFile Then
            cIO = cIO + 1
            End If

   Next a

   fieldVal = Trim(y.Worksheets(dataFile).Cells(z + 1, 1).Value)

If fieldVal = dataFile Then

                FilePath = ThisWorkbook.FullName
                FileOnly = ThisWorkbook.Name
                PathOnly = Left(FilePath, Len(FilePath) - Len(FileOnly))

                myFile = PathOnly & dataFile & ".txt"

                Open myFile For Input As #1

                                     Do Until EOF(1)
                                         Line Input #1, textline
                                         text = text & textline

                                     Loop
                                     MsgBox (text)
                                     Close #1

            For b = 2 To cIO - 1
                    startFieldTagName = y.Worksheets(dataFile).Range("F" & b).Value
                    If InStr(text, startFieldTagName) = 0 Then
                    Exit For
                    Else

                    nextFieldTagName = y.Worksheets(dataFile).Range("F" & b + 1).Value

                    posvalueFieldTagName = InStr(text, startFieldTagName) + 1 + Len(startFieldTagName)

                    posnextFieldTagName = InStr(text, nextFieldTagName)

                        If posnextFieldTagName = 0 Then
                        posnextFieldTagName = Len(text)
                        Else
                        posnextFieldTagName = InStr(text, nextFieldTagName)
                        End If

                    lenTagValue = posnextFieldTagName - posvalueFieldTagName

                    fieldTagValue = Mid(text, posvalueFieldTagName, lenTagValue)
                    y.Worksheets(dataFile).Range("I" & b).Value = CStr(fieldTagValue)
                    End If

                Next b
               y.Save
Else
   FilePath = ThisWorkbook.FullName
   FileOnly = ThisWorkbook.Name
   PathOnly = Left(FilePath, Len(FilePath) - Len(FileOnly))

   myFile = PathOnly & dataFile & "I" & ".txt"

   Open myFile For Input As #1

                        Do Until EOF(1)
                            Line Input #1, textline
                            text = text & textline

                        Loop
                        MsgBox (text)
                        Close #1
   For c = 2 To cIn - 1
                             startFieldTagName = y.Worksheets(dataFile).Range("F" & c).Value
                             If InStr(text, startFieldTagName) = 0 Then
                             Exit For
                             Else

                             nextFieldTagName = y.Worksheets(dataFile).Range("F" & c + 1).Value
                             posvalueFieldTagName = InStr(text, startFieldTagName) + 1 + Len(startFieldTagName)
                              posnextFieldTagName = InStr(text, nextFieldTagName)

                                If posnextFieldTagName = 0 Then
                                posnextFieldTagName = Len(text)
                                Else
                                posnextFieldTagName = InStr(text, nextFieldTagName)
                                End If
                              lenTagValue = posnextFieldTagName - posvalueFieldTagName
                             fieldTagValue = Mid(text, posvalueFieldTagName, lenTagValue)
                              y.Worksheets(dataFile).Range("I" & c).Value = CStr(fieldTagValue)


                            fieldTagValue = y.Worksheets(dataFile).Range("I" & c).Value
                            If fieldTagValue <> "" Then

                            y.Worksheets(dataFile).Range("J" & c).Value = "Y"

                            Else

                            y.Worksheets(dataFile).Range("J" & c).Value = "N"
                            y.Worksheets(dataFile).Range("G" & c).Value = "Blank Space"
                            y.Worksheets(dataFile).Range("I" & c).Value = "Blank Space"

                            End If


                            End If
             Next c
                            ' MsgBox (y.Worksheets(dataFile).Cells(8, i).Value)
                            y.Save

   myFile = PathOnly & dataFile & "O" & ".txt"

   Open myFile For Input As #2

                        Do Until EOF(2)
                            Line Input #2, textline
                            text = text & textline

                        Loop
                        MsgBox (text)
                        Close #2
    For d = cIn + 2 To cOut - 1
                             startFieldTagName = y.Worksheets(dataFile).Range("F" & d).Value
                             If InStr(text, startFieldTagName) = 0 Then
                             Exit For
                             Else

                             nextFieldTagName = y.Worksheets(dataFile).Range("F" & d + 1).Value
                             posvalueFieldTagName = InStr(text, startFieldTagName) + 1 + Len(startFieldTagName)
                             posnextFieldTagName = InStr(text, nextFieldTagName)

                             If posnextFieldTagName = 0 Then
                             posnextFieldTagName = Len(text)
                             Else
                             posnextFieldTagName = InStr(text, nextFieldTagName)
                             End If
                              lenTagValue = posnextFieldTagName - posvalueFieldTagName
                             fieldTagValue = Mid(text, posvalueFieldTagName, lenTagValue)
                             MsgBox (fieldTagValue)

                             y.Worksheets(dataFile).Range("I" & d).Value = CStr(fieldTagValue)
                            End If
            Next d
            y.Save

万一

下一个z

y.Save

y.Close

结束子'