1

我是英语系的教授,我的作文学生经常写多份论文草稿。我使用 Word 2010 来跟踪他们的更改。

我在另一个站点(位于此处)上发现了 VBA 代码。我创建了一个新宏。它正确提示我输入基本文件夹、新文件夹和比较文件夹,但输出为空。

我在基本文件夹和新文件夹中都有相同名称的文件,并以 .doc 格式保存。我还将 Word 中的信任中心选项设置为 1) 启用所有宏和 2) 信任对 VBA 项目对象模型的访问。

Sub CompareAllFiles()
    Dim strFolderA As String
    Dim strFolderB As String
    Dim strFolderC As String
    Dim strFileSpec As String
    Dim strFileName As String
    Dim objDocA As Word.Document
    Dim objDocB As Word.Document
    Dim objDocC As Word.Document
    strFolderA = InputBox("Enter path to base documents:")
    strFolderB = InputBox("Enter path to new documents:")
    strFolderC = InputBox("Enter path for document comparisons to be saved:")
    strFileSpec = "*.doc"
    strFileName = Dir(strFolderA & strFileSpec)
    Do While strFileName <> vbNullString
        Set objDocA = Documents.Open(strFolderA & strFileName)
        Set objDocB = Documents.Open(strFolderB & strFileName)
        Application.CompareDocuments _
            OriginalDocument:=objDocA, _
            RevisedDocument:=objDocB, _
            Destination:=wdCompareDestinationNew
        objDocA.Close
        objDocB.Close
        Set objDocC = ActiveDocument
        objDocC.SaveAs FileName:=strFolderC & strFileName
        objDocC.Close SaveChanges:=False
        strFileName = Dir
    Loop
    Set objDocA = Nothing
    Set objDocB = Nothing
End Sub
4

2 回答 2

0

某种 VBA 大师为我解决了这个问题:我需要在文件夹路径的末尾输入一个 \。如果没有最后的反斜杠,脚本无法找到文件夹,因此它不会处理任何文件。将最后的 \ 添加到所有三个文件夹路径后,代码运行完美。

作为奖励,该代码同时处理 .doc 和 .docx 文件。我以为我必须在处理之前将所有 .docx 文件转换为 .doc,但代码比这更聪明。

尤里卡!

于 2013-10-13T14:50:24.063 回答
0

如果您和您的学生使用 Word 2010,那么扩展很可能是.docx

strFileSpec = "*.docx"

您是否尝试过使用 VBA 调试器逐步运行代码,以查看确切的故障点是什么?有关简单介绍,请参见此处(在标题为Stepping Through Code的部分下)。

于 2013-10-13T07:21:36.400 回答