在子文件夹上应用样式重置宏

时间:2018-03-06 17:32:01

标签: vba ms-word automation

首先:是的,我知道,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

它按预期工作...除了由于某种原因,它拒绝触摸它正在处理的文件夹中存在的任何子文件夹。我应该在上面的代码中添加什么来修复它?

1 个答案:

答案 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
相关问题