1

我想在文件夹中搜索包含指定关键字的文件,然后返回文件名、上次修改日期和 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 中的关键字。宏也将继续沿关键字列表向下移动,直到到达末尾。

这就是我到目前为止所拥有的。

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
4

1 回答 1

0

这里的一些代码/布局有一些问题。基本上无需为您重写大部分宏,这是您可以使用的方法。

---获取包含您的关键字的单元格范围(您已经使用您的rng

---设置你的行计数器(你已经使用x变量来做到这一点)

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

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

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

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

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

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

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

-- 重置你的文件和文件系统对象变量(ffs

最后,在循环之外,您可以重置其他变量(即sh, rng)希望这会有所帮助。

于 2013-06-20T22:33:25.203 回答