使用excel vba

时间:2016-08-26 23:50:15

标签: excel vba excel-vba csv

希望得到一个项目的帮助,我试图改进。我有一个函数我用来检索csv文件的最新日期(来自大约13000个文件的文件夹),使用工作簿中的两个单元格来查找文件路径和文件名。它工作得很好,会很快找到我正在寻找的文件。

为了改进这个工具,我需要查看csv并验证一些数字与我的工作簿中的另一个单元格匹配。我不知道如何告诉程序在哪里查看以及如何检查匹配。这些数字每次都在同一个位置,并且格式与我工作簿中的单元格完全相同。 csv也不使用逗号(如果重要的话)。例如,数字将位于第6列和第2行。我想在返回最近的日期之前检查我的A5单元格的值。如果不匹配,我想查看匹配的下一个最近日期,依此类推。当前功能I使用:

Function ReportTime(ByVal sESN As String, ByVal sFolder As String)
     Dim FileName As String
     Dim MostRecentFile As String
     Dim MostRecentDate As Date
     Dim oFSO As FileSystemObject

If Right(sFolder, 1) <> "\" Then sFolder = sFolder & "\"

Set oFSO = CreateObject("Scripting.FileSystemObject")
If oFSO.FolderExists(sFolder) Then
    FileName = Dir(sFolder & sESN & "*hdr.txt", 0)
    If FileName <> "" Then
        MostRecentFile = FileName
        MostRecentDate = FileDateTime(sFolder & FileName)
        Do While FileName <> ""
            If FileDateTime(sFolder & FileName) > MostRecentDate Then
                 MostRecentFile = FileName
                 MostRecentDate = FileDateTime(sFolder & FileName)
             End If
             FileName = Dir
             DoEvents
        Loop
    End If
Else
    MostRecentFile = "Err: folder not found."
End If
Set oFSO = Nothing

ReportTime = MostRecentDate
End Function

1 个答案:

答案 0 :(得分:1)

与您已有的相比,它同样容易实现。这是一个示例代码。它的作用是逐行查看文件。

Sub ReadTextFile()
    Dim fpath   As String
    Dim fline   As String
    Dim fnumb   As Long
    Dim i       As Long
    Dim Wanted  As String

    fpath = "C:\Test\Testfile.txt"
    fnumb = FreeFile
    Open fpath For Input As #fnumb
        i = 1
        Do While Not EOF(fnumb)
            Line Input #fnumb, fline
            If i = 2 Then
                Wanted = Split(fline, vbTab)(5) '<~~ here is the output
                Exit Do
            End If
            i = i + 1
        Loop
    Close #fnumb
End Sub

如果您想要关注文件的第2行,只需在i = 2

时捕获它

在第2行捕获文本后,如果您的文件是制表符分隔符,则可以使用split(fline, vbTab)(5)提取第6列中的内容;否则,如果您的文件是固定宽度文件,则只需使用MID函数。

获得所需内容后,只需exit do即可结束循环并快速结束该过程,而无需浏览整个文件。

HTH