首页 文章

Excel宏用于搜索文件夹并返回包含特定关键字和最新版本的文件

提问于
浏览
0

我正在寻找一些帮助来编写一个宏来搜索我的计算机中的文件夹以查看该文件夹中的任何文件是否包含指定的关键字,然后将文件名,路径和上次修改日期返回到Excel工作表 .

REF     FolderPath      REF FileName    LastModified FilePath  
Apple   C:\Fruits           
Kale    C:\Vegetables           
Spinach C:\Vegetables

例如(见上文),

我将在A列和B列中包含关键字和文件夹路径 . 名为“Fruits”的文件夹包含名为“Apple_v5.xls”的文件 . 所以我希望宏搜索关键字“Apple”,然后将名称,最新版本和文件路径(Col D,E,F)返回到同一个电子表格 . Col C将在Col A中再次列出他们的关键字.Macro还将继续关注关键字列表,直到它结束 .

这是我在互联网上进行研究后到目前为止所做的事情,但由于某种原因它没有用 . 请帮忙!谢谢!

Private Sub CommandButton1_Click()

    Dim sh As Worksheet, rng As Range, lr As Long, fPath As String
    Set sh = Sheets("Sheet2")
    lstRw = sh.Cells.Find(What:="*", After:=sh.Range("A1"), LookAt:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious,                 MatchCase:=False).Row
    Set rng = sh.Range("A2:A" & lstRw)

    For i = 1 To 100

    fPath = Sheets("Sheet2").Range("B" & i).Value

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

    fWb = Dir(fPath & "*.*")
    x = 2
    Do While fWb <> ""
    For Each c In rng
    If InStr(LCase(fWb), LCase(c.Value)) > 0 Then
    Worksheets("Sheet2").Range("C" & x) = fWb
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(fWb)
    Worksheets("Sheet2").Range("E" & x) = f.DateLastModified
    Worksheets("Sheet2").Range("F" & x) = f.Path
    Worksheets("sheet2").Range("D" & x) = c.Value
    Worksheets("sheet2").Hyperlinks.Add Anchor:=Worksheets("sheet2").Cells(x, 2), Address:=f.Path
    Columns("A:D").AutoFit
    Set fs = Nothing
    Set f = Nothing
    x = x + 1
    End If
    Next
    fWb = Dir
    Loop
    Set sh = Nothing
    Set rng = Nothing

    Next i

    Sheets("Sheet2").Activate

    End Sub

1 回答

  • 0

    你在这里遇到了一些代码/布局问题 . 没有基本上为您重写大部分宏,这里是您可以使用的方法 .

    ---获取具有关键字的单元格范围(您已经使用 rng 执行此操作)

    ---设置你的行计数器(你已经使用 x 变量来执行此操作)

    ---遍历范围内的每个单元格(您已经使用 for each c in rng 代码执行此操作)

    然后在那个循环中......

    ---从B列获取文件路径(在设置 fPath 变量时已经这样做了)

    ---使用以下代码在文件夹中搜索带有关键字的第一个文件

    fwb = Dir(fPath & c.Value & ".*")
    

    这将获取您的REF值并将其插入目录路径中 . “ . ”中的表示您希望它返回任何文件类型(例如Apple.txt,Apple.pdf,Apple.mp3)

    • 如果找到该文件,则填充上次修改的日期,路径,文件名和超链接(所有这些都知道如何执行,如其余代码所示)

    • 重置文件和文件系统对象变量( ffs

    最后,在你的循环之外,你可以重置你的其他变量(即 shrng )希望这会有所帮助 .

相关问题