从txt文件读取数据并将其存储在excel文件中时发生macros问题
我需要逐个读取多个txt文件,并从中读取数据并将其存储在Excel表格中。 从第一个txt文件中获取最后一个值的问题,以及当我的macros正在读取第二个文件的时候,它会关注第一个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
End Sub'