我需要逐个读取多个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
End Sub “