首先:是的,我知道,Word 2007是#34;古代&#34 ;;我在2012年买回的笔记本电脑上做了我所有的工作,当时我还没有真正热衷于在新发布的Office 2010上试试我的运气,以防它被证明有瑕疵。
现在,把它放在一边......经过大量的互联网挖掘和应用试错法后,我终于设法在Word 2007中构建一个宏,自动浏览文件夹中的所有Word文档并重置它们样式与他们分配给的模板中的样式相匹配,因此我不必手动为我的计算机上存在的数百个文档执行此操作。
Sub UpdateStylesAllDocuments()
Dim JName As String
Dialogs(wdDialogFileOpen).Show
Application.ScreenUpdating = False
JName = Dir("*.docx")
While (JName > "")
Application.Documents.Open FileName:=JName
ActiveDocument.UpdateStyles
ActiveDocument.Close SaveChanges:=wdSaveChanges
JName = Dir()
Wend
Application.ScreenUpdating = True
End Sub
它按预期工作...除了由于某种原因,它拒绝触摸它正在处理的文件夹中存在的任何子文件夹。我应该在上面的代码中添加什么来修复它?
答案 0 :(得分:0)
你需要让它递归。首先递归子目录,然后处理文件。这将确保每个目录都有一个线程。为此,您的 wdDialogFileOpen 需要返回所选路径的字符串。
Sub UpdateStylesAllDocuments()
Dim JName As String
Dim thePath As String
thePath = Dialogs(wdDialogFileOpen).Show
doSubfolders thePath
End Sub
Sub doSubfolders(sPath As String)
'The recursive call to self
Dim sDir As String
sDir = Dir(sPath, vbDirectory)
ChDir sPath
Do Until LenB(sDir) = 0
doSubfolders sDir
sDir = Dir
Loop
Application.ScreenUpdating = False
JName = Dir("*.docx")
While (JName > "")
Application.Documents.Open Filename:=JName
ActiveDocument.UpdateStyles
ActiveDocument.Close SaveChanges:=wdSaveChanges
JName = Dir()
Wend
Application.ScreenUpdating = True
End Sub