使用VBA读取文本行的特定部分

时间:2019-01-28 10:31:42

标签: excel vba

我正在尝试从文本文件中获取第827行以写入单元格。有很多这样的文件,所以这就是为什么我尝试使用宏的原因。文本文件看起来像这样

"Drag Convergence"
"Iterations" "cd"
1     7.74776e-01
2     6.51021e-01
3     5.58885e-01
.....
824     3.57617e-01
825     3.57617e-01

我只想在单元格中写入数字“ 3.57617e-01”。我可以自己进行单元格排列,但是我没有很好的方法来读取该值,然后将其写入单元格,说(1,1)

我的文件位置是

strFile = "D:\Analiz\Database\NACA63220_" & Mach(k) & Alpha(j) & Letter(i) & ".txt"

我所做的是

strPath = "D:\Analiz\Database\"
strExt = ".txt"
strSection = "Lift Convergence"
strValue = "825     "

With shtResult
     .Cells(1,1).Value = strValue
End With

strFile = "D:\Analiz\Database\NACA63220_" & Mach(k) & Alpha(j) & Letter(i) & ".txt"

Set data=shtSource.QueryTables.Add(Connection:TEXT;" & strPath & strFile, Destination:=shtSource.Cells(1, 1))

With data
.TextFileStartRow = 1
.TextFileParseType = xkDelimited
.TextFileVonsecutiveDelimeter = False
.TextFileTabDelimiter = False
.Text FileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.TextFileTrailingMinusNumbers = True

.Refresh BackgroundQuery:=False
End With

Set fndSection = data.ResultRange.Find(strSection)
Set fndValue = data.ResultRange.Find(strValue, fndSection)
shtResult.Cells(shtResult.Rows.Count, 1).End(xkUp).Offset(1).Value = Replace(findValue, strValue, "")

这会导致运行时错误1004,当我按debug时,它会以.Refresh BackgroundQuery突出显示该行

我没有把尺寸标注等所有内容放在这里,因为我必须使用手机访问此站点,所以我要用手机再次编写所有代码。

编辑:我添加了更多行,当我按debug时,问题突出显示了“刷新背景查询”行。 我实际上是在尝试通过调整问题来实现这一目标:

Importing data from multiple text files into Excel VBA

2 个答案:

答案 0 :(得分:1)

使用此功能从文本文件读取特定行

    ' read specific line no.
    ' RESULT : searched text (string)
    Function ReadLine(FilePath, LineNumber) As String
    Dim i As Integer, count As Long
    Dim strLine As String
    i = FreeFile
    Open FilePath For Input As #i
    count = 0

    While Not EOF(i)
        Line Input #i, strLine
        count = count + 1
        If count = LineNumber Then
            ReadLine = strLine
            Close #i
            Exit Function
        End If
    Wend

Close i
End Function

在执行方面您还有其他问题吗?请澄清

第二个代码用于字符串拆分

     Function BreakString(a As String, pos As Integer) As String
     Dim WrdArray() As String
     WrdArray() = Split(a, "     ")
     BreakString = WrdArray(pos)
     End Function

Dim Text, Part1, Part2 As String
Text = "827     3.57617e-01"
Part1 = BreakString(CStr(Text), 0)
Part2 = BreakString(CStr(Text), 1)

答案 1 :(得分:0)

我建议您不要在此问题上使用标准的VBA文件处理:VBA文件处理从第一行开始读取文件,然后逐行继续,直到到达您要查找的行。由于您需要阅读827行,因此等待答复的时间太长了827。

相反,我会尝试找到一个可以处理此问题的命令行,例如:

tail -1 <filename> >output.txt (or head -827 <filename> | tail -1 >output.txt)

将其翻译成Excel VBA,类似:

Shell "tail -f <filename> >output.txt" //pseudo-code

然后,使用VBA标准文本处理读取output.txt。