2016-04-29 7 views
0

Ich habe den folgenden Code geschrieben, um alle Dateien in einem Verzeichnis durchzulaufen und bestimmte Werte von ihnen zu kopieren und sie wieder in die Hauptdatei einzufügen.Dateischleife überspringt fälschlicherweise Dateien

Das Problem, das ich habe, ist, dass der Code nie vollständig durch alle Dateien läuft und ich nie einen Fehler bekomme.

Da die Dateinamen dargestellt werden als 1 im Bild gezeigt - #####, dann 2 - #### usw.

Manchmal gibt es wie im Bild Vielfaches der ersten Reihe sind sind zwei 1 - ### 's, aber die Endzahlen sind immer noch unterschiedlich.

Das Problem ist, dass anstelle der tatsächlichen numerischen Reihenfolge der Code nur die erste Nummer und gehen von 1, 10, 11, 100 und vollständig überspringt den Rest.

Irgendwelche Ideen, wie man das löst?

Sub ReadDataFromCloseFile() 
    On Error GoTo ErrHandler 

    Application.EnableEvents = False 
    Application.ScreenUpdating = False 

    Dim FileType As String 
    Dim FilePath As String 

    FileType = "*.xlsm*" 'The file type to search for 
    FilePath = "\\filepath\" 'The folder to search 

    Dim src As Workbook 
    Dim OutputCol As Variant 
    Dim Curr_File As Variant 

    OutputCol = 9 'The first row of the active sheet to start writing to 

    Curr_File = Dir(FilePath & FileType) 

    Do Until Curr_File = "" 
    ' OPEN THE SOURCE EXCEL WORKBOOK IN "READ ONLY MODE". 
    Set src = Workbooks.Open(FilePath & Curr_File, True, True) 

    Sheets("Reporting").Range("I7:I750").Copy 

    Workbooks("Master.xlsm").Activate 
    Sheets("Sheet2").Select 
    Sheets("Sheet2").Cells(4, OutputCol).Select 
    ActiveCell.PasteSpecial Paste:=xlPasteValuesAndNumberFormats 
    Application.CutCopyMode = False 
    OutputCol = OutputCol + 1 

    ' CLOSE THE SOURCE FILE. 
    src.Close False    ' FALSE - DON'T SAVE THE SOURCE FILE. 
    Curr_File = Dir 
    Loop 
    Set src = Nothing 

    Application.EnableEvents = True 
    Application.ScreenUpdating = True 

    ErrHandler: 
    Application.EnableEvents = True 
    Application.ScreenUpdating = True 
End Sub 

Filepath

+0

Auch die Schleife erfasst die mehreren 1er und 10er. Es überspringt einfach alles mit 2-9 darin. –

+0

Sie haben dies ausprobiert, nachdem Sie das 'on error' kommentiert haben? In dem Moment kommst du einfach leise zurück, wenn etwas schief geht. –

+0

Ja, ich löschte diesen Teil von meinem Code, aber es ist immer noch nicht Fehler auf mich :( –

Antwort

0

Ich habe keine Ahnung, warum es nicht die 2-9-Dateien nicht öffnen. Diese Version fügt alle Dateipfade in eine Sammlung ein und durchläuft dann die Sammlung. Es tut auch mit der Auswahl der Blätter vor dem Einfügen weg usw.

Sub ReadDataFromCloseFile() 

    Dim FileType As String 
    Dim FilePath As String 
    Dim colFiles As Collection 
    Dim src As Workbook 
    Dim tgt As Workbook 
    Dim OutputCol As Variant 
    Dim Curr_File As Variant 

    Set colFiles = New Collection 

    FileType = "*.xlsm*" 'The file type to search for 
    FilePath = "\\filepath\" 'The folder to search 

    EnumerateFiles FilePath, FileType, colFiles 

    OutputCol = 9 'The first row of the active sheet to start writing to 

    'If Master.xlsm is the book containing this code then use '=ThisWorkbook' 
    Set tgt = Workbooks("Master.xlsm") 

    For Each Curr_File In colFiles 
     Set src = Workbooks.Open(Curr_File, True, True) 

     src.Worksheets("Reporting").Range("I7:I750").Copy 
     tgt.Worksheets("Sheet2").Cells(4, OutputCol).PasteSpecial xlPasteValuesAndNumberFormats 
     OutputCol = OutputCol + 1 

     src.Close False 

    Next Curr_File 

End Sub 

Sub EnumerateFiles(ByVal sDirectory As String, _ 
    ByVal sFileSpec As String, _ 
    ByRef cCollection As Collection) 

    Dim sTemp As String 

    sTemp = Dir$(sDirectory & sFileSpec) 
    Do While Len(sTemp) > 0 
     cCollection.Add sDirectory & sTemp 
     sTemp = Dir$ 
    Loop 
End Sub 
+0

Aus irgendeinem Grund überspringt sie auch diese und macht die gleichen wie zuvor. Wenn ich es in einem Ordner, wo die Datei Namen sind regulär 1,2,3,4,5 es funktioniert. Aber dieser Ordner, der 1 - ####, 1 - ####, 2 - ### hat es nicht. –

+0

Ich konnte ändern ein bisschen mehr und dann fing es an zu arbeiten Vielen Dank –

0

Es könnte für Sie einfacher sein, eine Schleife durch die Dateien, die unter Schleife.

Sub LoopFiles() 

Dim FSO As New FileSystemObject 
Dim Fldr As Folder 
Dim Fl As File 

'Loop through files in folder 
For Each Fl In FSO.GetFolder(filePath).Files 
    'Check for file type 
    If Fl.Type = "Excel Macro-Enabled Workbook" Then 
     'Open file & do procedure 
    End If 
Next 
Set FSO = Nothing 

End Sub 
+0

Ich habe es versucht, aber es gibt mir immer einen Fehler Ich wüsste, wie man den Code, den ich hatte, in diesen einbaut ??? kann posten, was ich versucht habe, es zu modifizieren, da ich Code in Kommentaren nicht schreiben kann –

0

Versuchen Sie, Ihre Variable OutputCol als Integer und nicht als Variante zu deklarieren. Wenn Sie wissen, dass Ihre Daten immer eine Nummer sein werden, ist es nie eine gute Idee, eine Variante zu verwenden. Es braucht mehr Ressourcen, um den Code auszuführen, und Sie kennen nicht die gesamte interne Logik, die hinter den Kulissen abläuft. Es gibt Ihnen auch mehr Kontrolle über die Ausführung des Codes und wird Ihnen wahrscheinlich keine Kopfschmerzen wie diese geben. Verwenden Sie nur eine Variante, wenn Sie nicht wissen, welche Daten Sie ausgeben werden.

Hoffe, das hilft!

+0

Das sollte mit der Leistung helfen, aber es behebt das Überspringen-Problem nicht.Ich schätze den Leistungsrat obwohl! –

+0

Ich werde es betrachten etwas mehr und lassen Sie wissen, was ich sehe. – Karlomanio