VBA宏:替换所有子文件夹中的Word文件中的文本

问题描述:

我正在整理一个VBA宏:

I am putting together a VBA macro that:

1.读取一个文件夹

2.创建所有子文件夹的集合

2.creates a collection of all its subfolders

3.循环浏览所有子文件夹,并找到任何以.doc结尾的word文档

3.loops through all the subfolders and find any word document ending in .doc

4.在每个.doc文件中:替换一些文本并保存然后关闭文档.

4.in each .doc file: replace a bit of text and save then close the documents.

此宏无法正常工作:它不会替换子文件夹中任何Word文档中的文本. 它实际上并没有打开任何word文档,我不确定是否应该一个接一个地打开每个word文档,或者它是否在后台运行.

This macro doesn't work correctly: it doesn't replace the text in any word documents in the subfolders. It doesn't actual open any word document, I am unsure wether it should open each word doc one after another or if it runs in the background.

Sub DoLangesNow()
Dim file
Dim path As String
Dim strFolder As String
Dim strSubFolder As String
Dim strFile As String
Dim colSubFolders As New Collection
Dim varItem As Variant

 ' Parent folder including trailing backslash
 'YOU MUST EDIT THIS.
     strFolder = "G:\2009\09771\Design\ESD\Commercial Tower KSD1\Green Star As Built\Round 1 Submission - Draft\02. Indoor Environment Quality"

     ' Loop through the subfolders and fill Collection object
     strSubFolder = Dir(strFolder & "*", vbDirectory)
     Do While Not strSubFolder = ""
         Select Case strSubFolder
             Case ".", ".."
                 ' Current folder or parent folder - ignore
             Case Else
                 ' Add to collection
                 colSubFolders.Add Item:=strSubFolder, Key:=strSubFolder
         End Select
         ' On to the next one
         strSubFolder = Dir
     Loop
     ' Loop through the collection
     For Each varItem In colSubFolders
         ' Loop through word docs in subfolder
         'YOU MUST EDIT THIS if you want to change the files extension
         strFile = Dir(strFolder & varItem & "*.doc")
         Do While strFile <> ""
         Set file = Documents.Open(FileName:=strFolder & _
                 varItem & "\" & strFile)

' Start of macro 1replace text GS-XXXAB  with GS-1624AB
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Application.WindowState = wdWindowStateNormal
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "GS-XXXAB "
        .Replacement.Text = "GS-1624AB "
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
' End of macro 1
' Saves the file
ActiveDocument.Save
ActiveDocument.Close
' set file to next in Dir
strFile = Dir
         Loop
     Next varItem
 End Sub

您的代码为我完成了以下更改

Your code worked for me with below changes

  • 来自
    strFile = Dir(strFolder & varItem & "*.doc")

  strFile = Dir(strFolder & varItem & "\" & "*.doc")

  • 确保在strFolder变量中文件夹的路径正确.例如(strFolder = "C:\Users\Santosh\Desktop\tes\)
  • Make sure the path for folder is correct in strFolder Variable. Eg( strFolder = "C:\Users\Santosh\Desktop\tes\")