用于调用文件夹中文件的VBA循环

时间:2015-04-22 03:04:29

标签: vba loops ms-word word-vba

我正在尝试创建一个比较文本文件的宏。但是,我需要一个循环来比较文件夹中的所有文件。

我现在只在template1和spool1之间进行比较。 我需要一个循环,比较template1与spool1 .. template2与spool2等。任何想法如何这样做?

我想我必须首先将这些文件添加到一个集合中然后再调用它。但我不确定。

这是我的代码

ChangeFileOpenDirectory "D:\Users\tmp4jj\Desktop\ComparisonTool\"
Dim template1 As Word.Document
Dim spool1 As Word.Document
Set template1 = Documents.Open("D:\Users\tmp4jj\Desktop\ComparisonTool\template1.docx")
Set spool1 = Documents.Open("D:\Users\tmp4jj\Desktop\ComparisonTool\spool1.txt")

Application.CompareDocuments OriginalDocument:=Documents("template1.docx") _
    , RevisedDocument:=Documents("spool1.txt"), Destination:= _
    wdCompareDestinationNew, Granularity:=wdGranularityWordLevel, _
    CompareFormatting:=False, CompareCaseChanges:=True, CompareWhitespace:= _
    False, CompareTables:=True, CompareHeaders:=True, CompareFootnotes:=True, _
     CompareTextboxes:=True, CompareFields:=True, CompareComments:=True, _
    CompareMoves:=False, RevisedAuthor:="UOB", IgnoreAllComparisonWarnings:= _
    False

提前感谢,因为我对编码很陌生!

1 个答案:

答案 0 :(得分:0)

如果文件名始终对应,则可以使用带通配符的Dir $()函数查找对中的一个或另一个,然后在结果中构建另一个文件名。 Dir $()返回后续调用的下一个结果,然后在返回所有文件时返回一个空字符串。这样可以轻松构建循环:

ChangeFileOpenDirectory "D:\...\ComparisonTool\"
Dim template_doc As Word.Document
Dim spool_doc As Word.Document

Dim spool As String
Dim templ As String
spool = Dir$("D:\...\ComparisonTool\spool*.txt")
Do While spool <> vbNullString
    templ = "template" & Left$(Left$(Right$(spool, Len(spool) - 5), _
            Len(spool) - 4), Len(spool) - 9) & ".docx"
    Set template_doc = Documents.Open("D:\...\ComparisonTool\" & templ)
    Set spool_doc = Documents.Open("D:\...\ComparisonTool\" & spool)

    Application.CompareDocuments OriginalDocument:=Documents(templ) _
        , RevisedDocument:=Documents(spool), Destination:= _
        wdCompareDestinationNew, Granularity:=wdGranularityWordLevel, _
        CompareFormatting:=False, CompareCaseChanges:=True, _
        CompareWhitespace:=False, CompareTables:=True, CompareHeaders:=True, _
        CompareFootnotes:=True, CompareTextboxes:=True, CompareFields:=True, _
        CompareComments:=True, CompareMoves:=False, RevisedAuthor:="UOB", _
        IgnoreAllComparisonWarnings:=False

    spool = Dir$
Loop

注意:我缩短了目录名称以摆脱侧面滚动 - 您需要将它们替换为实际的目录路径。