Dir Befehl braucht ewig

Bild

Betrifft: Dir Befehl braucht ewig
von: Hannes Respondek
Geschrieben am: 08.10.2015 11:22:54

Halli Hallo Zusammen,
ich brauche mal wieder eure Hilfe :S
Ich erstelle mithilfe des Dir Befehls eine Liste aller Dateien im Ordner. Dabei sollen nur Dateien einer bestimmten Dateinamenlänge als auch Dateigröße eingelesen werden. Das tut auch sehr gut das ganze. Allerdings braucht es wirklich sehr lange.
Gibt es eine Möglichkeit dies schneller zu gestalten?
ZB Über Shell den DIR Befehl über CMD ausführen?
Vielleicht hat ja jemand ne Idee ;)
Hier mein Code.


'Durchlauf durch alle Dateien mit Endung .gz im Ordner GZORDNERPFAD
For Each objFile In objFolder.Files
    If Left(Right(objFile.Name, Len(objFile.Name) - InStrRev(objFile.Name, ".") + 1), 3) = ".gz" _
 _
 Then
        'Bedingung 1: Löschen falscher Dateinamen
        If Len(objFile.Name) <> 59 Then
            GoTo sprung
        End If
        'Bedingung 2: Löschen unbeschriebener Datei, welche sonst zu fehler führt
        If objFile.Size < 200 Then
            GoTo sprung
        End If
        'eintragen Dateiname und Datum ect.
        Cells(NextRow, 1).Value = objFile.Name
        Cells(NextRow, 2).FormulaR1C1 = "=LEFT(RC[-1],36)"
        Cells(NextRow, 6).FormulaR1C1 = "=DATE(LEFT(RIGHT(RC[-3],22),4),LEFT(RIGHT(RC[-3],18),2) _
 _
,LEFT(RIGHT(RC[-3],16),2))+TIME(LEFT(RIGHT(RC[-4],13),2),LEFT(RIGHT(RC[-4],11),2),LEFT(RIGHT(RC[ _
-4],9),2))"
        NextRow = NextRow + 1
        
sprung:      'Bedingung 1 /2 = wahr dann wird an diesen Punkt gesprungen | Kein Eintrag in der   _
_
Lsite vorgenommen
   End If
Next objFile

lg und vielen DANK

Bild

Betrifft: AW: Dir Befehl braucht ewig
von: Daniel
Geschrieben am: 08.10.2015 11:51:23
Hi
bist du sicher, das das DIR das langsame ist?
eine weiter Bremse ist in Excel auch immer das Eintragen von Werten in die Zellen.
bei dir würde sich anbieten, dass du die Dateinamen erst in einem Array sammelt und dann am Schluss die Dateinamen und die Formeln als Block für alle Fundstellen in einem Schritt einträgst.
ausserdem ist deine Programmierweise mit den Sprungmarken ungefähr so modern wie Breitcord-Schlaghosen.
der Code könnte etwa so aussehen:

Dim Dateien As String
Dim arrDat
For Each objFile In objFolder.Files
    If Left(Right(objFile.Name, Len(objFile.Name) - InStrRev(objFile.Name, ".") + 1), 3) = ".gz" _
 Then
        If Len(objFile.Name) = 59 Then
            If objFile.Size >= 200 Then
                Dateien = Dateien & "|" & objFile.Name
            End If
        End If
    End If
Next objFile
If Len(Dateien) > 0 Then
    arrDat = WorksheetFunction.Transpose(Split(Mid(Dateien, 2), "|"))
    With Cells(NextRow, 1).Resize(UBound(arrDat, 1), 1)
        .Value = arrDat
        .Offset(0, 1).FormulaR1C1 = "=LEFT(RC[-1],36)"
        .Offset(0, 5).FormulaR1C1 = "=DATE(... hier dann deine lange Formel ...)"
    End With
End If
ist natürlich nur ein Codefragment, basierend auf deinem Codefragment, in der Deklarierung stehen die zusätzlich von mir benötigten Variablen.
gruß Daniel

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Dir Befehl braucht ewig"