在所有子文件夹中替换word文件中的文本 [英] Replace text in word file in all sub folders
问题描述
我正在整理一个 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\
")
这篇关于在所有子文件夹中替换word文件中的文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!