VBA宏搜索文件夹中的关键字

时间:2013-12-31 10:06:49

标签: excel vba excel-vba

我正在构建一个VBA宏,它将“搜索”一个文件夹中的关键词“燃料”,并从所有返回的文件中提取所有信息并将它们放入“数据”表中。

例如,我有一个文件夹周数(1 - 52年跨越,所以在新的一年,这将只包含一个文件夹,但随着年份的推移将构建和构建)所以我在这个文件夹中搜索所有.doc文件包含“燃料”一词。您只需在顶角的搜索功能中键入“fuel”即可通过Windows搜索执行此操作,它将显示所有文件名,所有文件中都包含“燃料”字样。

我目前有,但这只是搜索一个名称中含有“燃料”的文件,而不是包含它的内容。

Sub LoopThroughFiles()
    Dim MyObj As Object, MySource As Object, file As Variant
   file = Dir("c:\testfolder\")
   While (file <> "")
      If InStr(file, "fuel") > 0 Then
         MsgBox "found " & file
         Exit Sub
      End If
     file = Dir
  Wend
End Sub

我已经做了一些搜索,但我无法得到任何工作:(。我认为我的VB技能需要复习。

先谢谢你。

JB

1 个答案:

答案 0 :(得分:6)

这不是特别漂亮,但想想这样的事情应该有效:

Sub loopThroughFiles()
    Dim file As String
    file = FindFiles("C:\TestFolder", "fuel")
    If (file <> "") Then MsgBox file
End Sub

Function FindFiles(ByVal path As String, ByVal target As String) As String
    ' Run The Sheell Command And Get Output
    Dim files As String
    Dim lines
    files = CreateObject("Wscript.Shell").Exec("FIND """ & target & """ """ & path & "\*.*""").StdOut.ReadAll
    lines = Split(files, vbCrLf)

    ' Look for matching files
    Dim curFile As String
    Dim line
    For Each line In lines
        If (Left(line, 11) = "---------- ") Then
            curFile = Mid(line, 12)
        End If

        If (line = target) Then
            FindFiles = curFile
            Exit Function
        End If
    Next

    FindFiles = ""
End Function

使用FIND命令行然后读取输出(因此需要使用Wscript.Shell)并返回第一个匹配项,如果没有找到文件则返回空字符串

按照@ BLUEPIXY的命令FINDSTR / M,该功能可以替换为:

Function FindFiles(ByVal path As String, ByVal target As String) As String
    ' Run The Shell Command And Get Output
    Dim files As String
    files = CreateObject("Wscript.Shell").Exec("FINDSTR /M """ & target & """ """ & path & "\*.*""").StdOut.ReadAll

    FindFiles = ""
    If (files <> "") Then
        Dim idx As Integer
        idx = InStr(files, vbCrLf)
        FindFiles = Left(files, idx - 1)
    End If
End Function