【问题标题】:Search a folder for keyword在文件夹中搜索关键字
【发布时间】:2021-01-25 16:14:55
【问题描述】:

我希望在文件夹中搜索关键字词“燃料”,以将返回文件中的信息提取到“数据”表中。

例如,我有一个文件夹的周数(1 - 52 跨年,所以在新的一年里这将包含一个文件夹,但会随着时间的推移而构建)。
我在此文件夹中搜索所有包含“燃料”一词的 .doc 文件。
您可以通过 Windows 搜索执行此操作,方法是在右上角的搜索功能中键入“fuel”,它将显示所有文件名和所有包含单词“fuel”的文件。

我有这个用于搜索名称中包含“燃料”但内部没有的文件。

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

【问题讨论】:

  • 您希望 Excel VBA 宏检查 Word 文件吗??

标签: vba excel


【解决方案1】:

它不是特别漂亮,但认为这样的东西应该可以工作:

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

【讨论】:

  • 易于使用findStr /M word path 代替FIND
  • 不知道那个,一个更好的命令会为它修改 VBA
  • +1 我今天学到了一些新东西。虽然第二个代码似乎只找到一个匹配项?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-28
  • 2014-05-23
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
相关资源
最近更新 更多