我想在文件夹中搜索包含指定关键字的文件,然后将文件名,上次修改日期和路径返回到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
答案 0 :(得分:0)
这里有一些代码/布局的问题。没有基本上为您重写大部分宏,这里是您可以使用的方法。
---获取包含关键字的单元格范围(您已使用rng
执行此操作)
---设置你的行计数器(你已经使用x
变量来执行此操作)
---遍历范围内的每个单元格(您已经使用for each c in rng
代码执行此操作)
然后在那个循环中......
---从B列获取文件路径(在设置fPath
变量时已经这样做了)
---使用以下代码
在文件夹中搜索包含关键字的第一个文件fwb = Dir(fPath & c.Value & ".*")
这将获取您的REF值并将其插入目录路径中。 “。*”中的*表示您希望它返回任何文件类型(例如Apple.txt,Apple.pdf,Apple.mp3)
- 如果找到了该文件,则填充上次修改的日期,路径,文件名和超链接(所有这些都知道如何执行,如其余代码所示)
- 重置文件和文件系统对象变量(f
和fs
)
最后,在你的循环之外,你可以重置其他变量(例如sh
,rng
)希望这会有所帮助。