2015-04-22 5 views
0

Я пытаюсь создать макрос, который сравнивает текстовые файлы. Однако мне нужен цикл для сравнения всех файлов в папке.VBA loop для вызова файлов в папке

Макрос, который я имею сейчас, сравнивает только между шаблоном1 и 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 

Спасибо заранее, как я очень новой для кодирования!

+0

Соответствует ли шаблонуX.docx и spoolX.txt друг другу, или вам нужно проверить все комбинации? Это работает иначе? – Comintern

+0

Да, они действительно соответствуют друг другу. Мне нужно, чтобы templateX сравнивался с spoolX, templateY с spoolY, например. Макрос, который у меня есть, только обрабатывает пару документов, мне нужен цикл для работы по всей папке. –

+0

Возможный дубликат [Цикл сравнения макросов] (http://stackoverflow.com/questions/29767537/loop-comparison-macro) –

ответ

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 

ПРИМЕЧАНИЯ: Я сократил имена каталогов, чтобы избавиться от боковой прокрутки - вам необходимо заменить их фактическим путем каталога.

+0

Извините, но спросить, но катушка * должна оставаться такой? Также templ следует изменить обратно к шаблону вправо? Я очень новичок в этом, поэтому приношу извинения, если я задаю очевидные вопросы. Строка кода, начинающаяся с документов Application.Compare, имеет ошибку, когда я меняю templ на шаблон. –

+0

Кроме того, я изменил Dim template_doc как Word.Document в Dim template_doc Как документы. Аналогично для катушки, так как файлы spool - это файлы .txt. Это влияет на что-либо? Большое спасибо за вашу помощь, Коминтерн! –

+0

@JunJie - Да. Это похоже на типизацию 'Dir spool * .txt' в окне консоли. 'templ' - это имя переменной, в которую входит соответствующее имя файла. – Comintern

Смежные вопросы