在带有VBA

时间:2018-07-30 22:02:32

标签: vba

我有一个宏,它循环遍历文件夹中的每个文件,如果文件名中带有今天的日期,则可以执行一些操作。

下面是一段代码:

For Each objFile In objFolder.Files

If Left(objFile.Name, 8) = Format(Date, "dd-mm-yy") Then


        currSheet = Mid(objFile.Name, 10, 4)
        Sheets(currSheet).Activate
        'LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row
        'ActiveSheet.Range("A1:D" & LastRow).Clear
        With ActiveSheet.QueryTables.Add(Connection:= _
            "TEXT;" & FolderName & objFile.Name _
            , Destination:=Range("$A$1"))
            .Name = Left(objFile.Name, Len(objFile.Name) - 4)
           '. 
           '.
           '.
End If
Next objFile

我刚刚意识到找到今天的文件大约需要60秒钟,因为它会循环浏览文件夹中的所有文件(每个文件大约0.1秒,但是有很多文件)。

我想查找具有以下名称的文件(仅适用于今天的日期),我每天运行一次此宏,例如:

30-07-18 CA01 NEGS.txt
30-07-18 CA02 NEGS.txt
30-07-18 CA03 NEGS.txt
30-07-18 CA04 NEGS.txt

所以我知道名称模式。
同一日期最多有4个文件。 因此,如果我仅搜索这些文件(并检查是否存在),而不是遍历所有文件,那就太好了。有可能做到吗?任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

Dir函数接受通配符,并且可以返回与指定模式匹配的文件名。这是一个例子...

Option Explicit

Sub test()

    Dim strPath As String
    Dim strFile As String
    Dim strPattern As String

    strPattern = Format(Date, "dd-mm-yy")

    strPath = "C:\Users\Domenic\Desktop\"

    strFile = Dir(strPath & strPattern & "*.txt", vbNormal)
    Do While Len(strFile) > 0
        'Do stuff
        '
        '
        strFile = Dir
    Loop

End Sub