2013-06-20 81 views
0

我正在尋找一些幫助來編寫一個宏來搜索我的計算機中的文件夾,以查看文件夾中的任何文件是否包含指定的關鍵字,然後將文件名,路徑和上次修改日期返回到Excel工作表。Excel宏來搜索文件夾並返回包含特定關鍵字和最新版本的文件

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

例如(見上文),

我將在列A和B稱爲「水果」的文件夾的關鍵字和文件夾路徑包含名爲「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 

回答

0

這裏有一些代碼/佈局的問題。基本上不需要爲你重寫大部分的宏,這裏是你可以使用的方法。

---獲得具有關鍵字的單元格區域

(你與你rng已經這樣做了)---設置你的行計數器(你已經使用x變量來做到這一點)

---遍歷範圍內的每個單元格(你做這個已經使用了for each c in rng代碼)

然後這個循環中......

---獲取從B列中的文件路徑(你這樣做人準備當您設置fPath變量)

---搜索文件夾與關鍵字使用下面的代碼

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

這需要你的REF值,並將其插入目錄路徑的第一個文件。 *中的*表示您希望它返回任何文件類型(例如Apple.txt,Apple.pdf,Apple.mp3)

- 如果找到該文件,則填充上次修改的日期,路徑,文件名,和超鏈接(所有你知道的代碼的其餘部分指示如何已經這樣做)

- 重置您的文件和FileSystemObject的變量(ffs

最後,你的循環之外,你可以重置你的其他變量(即sh,rng)希望這有助於。

+0

我做了上述改變,但它沒有奏效。現在它只是抓取文件夾中的所有文件並忽略我的關鍵字。你知道爲什麼會發生這種情況嗎? – Futochan

+0

我重寫了我的答案,因爲有更多的需求,而不僅僅是我之前提供的更新。編輯的答案現在涵蓋了一切 – Jaycal

相關問題