在文件夹中查找和替换多个文本文件上的多个文本字符串

时间:2018-03-28 13:28:58

标签: vba excel-vba word-vba excel

我正在处理vba代码以完成以下任务

  1. Word文档从文件夹
  2. 打开文本文件
  3. 根据excel表格找到并替换文本(多个文本)(已查找内容并替换为)
  4. 处理文件夹中的所有文本文件并保存。
  5. 我想根据上述要求自定义以下代码,

    我正在使用Office 2016,我认为我必须将脚本中的Application.FileSearch替换为2003年的ApplicationFileSearch和以前的办公室版本。

    我尝试使用单词宏录音机完成并使用了记事本++,我也记录在Notepad ++中它适用于一个文件,我想批量处理文件夹中的所有文件并在更换后保存文本。

    由于有太多的行要替换超过30行或更多行来替换,我希望代码从excel文件中查找文本,例如查找内容并替换为列。

     Sub FindReplaceAllDocsInFolder( )
     Dim i As Integer
     Dim doc As Document
     Dim rng As Range
    
     With Application.FileSearch
    .NewSearch
    .LookIn = "C:\My Documents"
    .SearchSubFolders = False
    .FileType = msoFileTypeWordDocuments
    If Not .Execute( ) = 0 Then
        For i = 1 To .FoundFiles.Count
             Set doc = Documents.Open(.FoundFiles(i))
                For Each rng In doc.StoryRanges
                 With rng.Find
                    .ClearFormatting
                    .Replacement.ClearFormatting
                    .Text = "Dewey & Cheatem"
                    .Replacement.Text = "Dewey, Cheatem & Howe"
                    .Forward = True
                    .Wrap = wdFindContinue
                    .Format = False
                    .MatchCase = False
                    .MatchWholeWord = False
                    .MatchWildcards = False
                    .MatchSoundsLike = False
                    .MatchAllWordForms = False
                    .Execute Replace:=wdReplaceAll
                 End With
                Next rng
             doc.Save
             doc.Close
    
             Set rng = Nothing
             Set doc = Nothing
        Next i
    Else
        MsgBox "No files matched " & .FileName
    End If
     End With
     End Sub
    

    由于 杰

2 个答案:

答案 0 :(得分:1)

借鉴https://social.msdn.microsoft.com/Forums/en-US/62fceda5-b21a-40b6-857c-ad28f12c1b23/use-excel-vba-to-open-a-text-file-and-search-it-for-a-specific-string?forum=isvvba

Sub SearchTextFile()
    Const strFileName = "C:\MyFiles\TextFile.txt"
    Const strSearch = "Some Text"
    Dim strLine As String
    Dim f As Integer
    Dim lngLine As Long
    Dim blnFound As Boolean
    f = FreeFile
    Open strFileName For Input As #f
    Do While Not EOF(f)
        lngLine = lngLine + 1
        Line Input #f, strLine
        If InStr(1, strLine, strSearch, vbBinaryCompare) > 0 Then
            MsgBox "Search string found in line " & lngLine, vbInformation
            blnFound = True
            Exit Do
        End If
    Loop
    Close #f
    If Not blnFound Then
        MsgBox "Search string not found", vbInformation
    End If
End Sub

这只是找到匹配。您可以使用内置功能“替换”,它可以完成整个修复。您还必须使用“循环文件”代码,这是一个代码段。

Dim StrFile As String
StrFile = Dir(pathtofile & "\*" & ".txt")
Do While Len(StrFile) > 0
    Debug.Print StrFile
    StrFile = Dir
Loop

我想把它作为评论,但文字太多了。这并不是一个完整的答案,只是给你自己所需的部分。

答案 1 :(得分:1)

感谢您的帮助。我找到了使用下面的EXE的替代解决方案。 FART.exe(FART - 查找和替换文本)。我用下面的命令示例创建了一个批处理文件。

https://emtunc.org/blog/03/2011/farting-the-easy-way-find-and-replace-text/

http://fart-it.sourceforge.net/

示例:

放屁" C:\ APRIL2011 \ Scripts \ someFile.txt" oldText newText

该行指示FART简单地用newText替换字符串oldText。

fart -i -r" C:\ APRIL2011 \ Scripts * .prm" march2011 APRIL2011

此行将指示FART以递归方式(-r)搜索\ Scripts文件夹中具有.prm扩展名的任何文件。 -i标志告诉FART在查找字符串时忽略区分大小写。