2016-11-22 1 views
0

У меня есть следующий код VBA, предназначенный для прокрутки данной папки и скомпилирования всех файлов определенного типа в один рабочий лист.VBA Script останавливает часть пути через список файлов

Sub cons_data() 

Dim Master As Workbook 
Dim sourceBook As Workbook 
Dim sourceData As Worksheet 
Dim CurrentFileName As String 
Dim myPath As String 
Dim LastRow As Long 
Dim lRow As Long 
Dim i As Long 

Application.ScreenUpdating = False 
Application.DisplayAlerts = False 

'The folder containing the files to be recap'd 
myPath = "path" 

'Finds the name of the first file of type .xls in the current directory 
CurrentFileName = Dir(myPath & "\*.txt*") 

'Create a workbook for the recap report 
Set Master = ThisWorkbook 

For i = 1 To Master.Worksheets.Count 
    With Master.Worksheets(i) 
     lRow = .Range("A" & .Rows.Count).End(xlUp).Row 
     If lRow > 1 Then .Rows("2:" & lRow).ClearContents 
    End With 
Next i 

Do 
    Workbooks.Open (myPath & "\" & CurrentFileName) 
    Set sourceBook = Workbooks(CurrentFileName) 
    For i = 1 To sourceBook.Worksheets.Count 
     Set sourceData = sourceBook.Worksheets(i) 

     With sourceData 
      LastRow = Master.Worksheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row 
      lRow = .Range("A" & .Rows.Count).End(xlUp).Row 
      .Rows("2:" & lRow).Copy Master.Worksheets("Sheet1").Rows(LastRow + 1) 
     End With 
    Next i 

    sourceBook.Close 

'Calling DIR w/o argument finds the next .txt file within the current directory. 
CurrentFileName = Dir() 
Loop While CurrentFileName <> "" 

MsgBox "Done" 

Application.ScreenUpdating = True 
Application.DisplayAlerts = True 

End Sub 

Этот сценарий отлично работает на определенных типов файлов, но по какой-то причине при запуске его в списке текстовых файлов с помощью стандартного формата (некоторые из которых являются дубликатами) он останавливается и представляет самую последнюю запись это было работая в отдельном листе Excel. Есть ли очевидная причина в том, что код может произойти?

+1

Я просто побежал этот код на одном из моих папок и не было проблем. Возможно, вы можете добавить некоторые debug.prints. Что вы подразумеваете под «некоторые из них являются дубликатами»? –

+0

То же самое здесь выполнялось несколько раз без проблем. Только один вопрос, почему вы очищаете все листы в книге «Мастер», если используется только один («Лист1»)? – EEM

+0

@ WayneG.Dunn Я просто имею в виду, что есть файлы, имеющие одинаковое имя и контент. Хорошая точка на debug.prints. Если это помогает, у меня есть что-то вроде 20 000 файлов, которые я ищу, - может это создать некоторые проблемы? – 114

ответ

-1

Вы должны убить старые процессы и разрядить ресурсы память путем добавления после:

Set sourceBook = nothing 

После

sourceBook.close 

Надеется, что это может помочь

+0

См. [это сообщение в блоге] (https://blogs.msdn.microsoft.com/ericlippert/2004/04/28/when-are-you-required-to-set-objects-to- ничего/). Ссылка выдается каждый раз через цикл. – Comintern

+0

Я обработал пакет файлов Excel с помощью SSIS. Эти файлы имели разный формат и, кроме того, они были в режиме общего доступа, другие - в эксклюзивном режиме. У меня несколько сбоев, и, наблюдая за моим диспетчером задач, я заметил оставшиеся процессы файлов, которые все еще присутствовали и которые вызывают крах моей обработки SSIS. Использование этого синтаксиса SET SET appExcel = ничего не исправить мою проблему обработки. Именно в этом точном контексте обработки большой массы файлов Excel, где этот синтаксис (даже больше не используемый) может быть использован. Прошу, чтобы ваша оценка моих 2 баллов была пересмотрена. – Mohamad

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