2016-11-22 4 views
0

Ich habe den folgenden VBA-Code, der einen bestimmten Ordner durchläuft und alle Dateien eines bestimmten Typs in einem einzigen Arbeitsblatt kompiliert.VBA-Skript stoppt Teilweise durch Dateiliste

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 

Dieses Skript funktioniert auf bestimmten Dateitypen in Ordnung, aber aus irgendeinem Grunde, wenn es auf einer Liste von Textdateien mit einem Standardformat (einige davon sind Duplikate) läuft es stoppt und stellt den jüngsten Eintrag war es in einem separaten Excel-Arbeitsblatt arbeiten. Gibt es einen offensichtlichen Grund dafür, den Code zu betrachten, dass dies passieren könnte?

+1

Ich lief gerade diesen Code auf einem meiner Ordner und hatte kein Problem. Vielleicht könnten Sie einige debug.prints hinzufügen. Was meinst du mit "einige sind Duplikate"? –

+0

Das gleiche lief hier mehrmals ohne Probleme. Nur eine Frage, warum löschen Sie alle Arbeitsblätter in der Arbeitsmappe 'Master', wenn nur eine (' Sheet1') verwendet wird? – EEM

+0

@ WayneG.Dunn Ich meine nur, dass es einige Dateien gibt, die den gleichen Namen und Inhalt haben. Guter Punkt auf den debug.prints. Wenn es hilft, habe ich etwa 20.000 Dateien, die ich durchgehen möchte. Könnte das ein paar Probleme verursachen? – 114

Antwort

-1

Sie müssen alte Prozesse beenden und Ressourcen Speicher entladen durch Zugabe nach:

Set sourceBook = nothing 

Nach

sourceBook.close 

Hope this helfen kann

+0

Siehe [this blog post] (https://blogs.msdn.microsoft.com/ericlippert/2004/04/28/when-are-you-required-to-set-objects-to- nichts/). Die Referenz wird jedes Mal durch die Schleife freigegeben. – Comintern

+0

Ich habe Stapel von Excel-Dateien von SSIS manipuliert. Diese Dateien hatten ein anderes Format und zusätzlich gab es im gemeinsamen Modus, andere im exklusiven Modus. Ich habe einige Abstürze und durch die Überwachung meines Tasks-Managers habe ich bemerkt, dass die verbleibenden Dateiprozesse immer noch da waren und den Absturz meiner SSIS-Verarbeitung verursacht haben. Mit dieser SET-Syntax hat SET appExcel = nothing mein Bearbeitungsproblem behoben. Es ist in diesem präzisen Kontext der Verarbeitung einer großen Masse von Excel-Dateien, wo diese Syntax (sogar nicht mehr verwendet werden könnte) verwendet werden könnte. Ich bitte darum, dass deine Bewertung meiner 2 Punkte neu überdacht werden muss. – Mohamad

Verwandte Themen