meierjo
Goto Top

Excel VBA CreateObject("Scripting.FileSystemObject") auf Netzlaufwerk dauert ewig

Hallo zusammen

Habe ein Excel-Makro, welches auf einem Netzlaufwerk ein Verzeichnis und ein Unterverzeichnis nach dem Vorhanden sein einer Txt-Datei durchsucht.
Je nachdem, ob die Datei vorhanden ist oder nicht, verzweigt das Makro.

Liegt das zu durchsuchende Verzeichnis lokal auf dem PC, läuft das Makro gewohnt schnell ( ~ 3000 Dateien im Verzeichnis und nochmals ca ~ 4000 Dateien im Unterverzeichnis). Das Makro ist mit dem Durchsuchen innerhalb ca 2 Sec fertig.

Liegen aber nun Verzeichnis und Unterverzeichnis auf einem Netzlaufwerk, dauert die Laufzeit des Makros ca 30 Sec, also um ein vielfaches länger.


Hier ein Ausschnitt aus dem Code

Set objFSO = CreateObject("Scripting.FileSystemObject")  
        Set objdir = objFSO.getfolder(Pfad)
        dirInfo objdir, Datei, True 'inkl. Unterordner  

Hier die Funktion, die aufgerufen wird

Public Sub dirInfo(ByVal objCurrentDir As Object, ByVal strName As String, _
    Optional ByVal blnTMP As Boolean = False)
    Dim varTMP As Variant
    For Each varTMP In objCurrentDir.Files
        If varTMP.Name Like strName Then
            If varTMP.Name <> ActiveWorkbook.Name Then
                If Left(varTMP.Name, 1) <> "~" Then  
                    TempPfad = varTMP.ParentFolder.Path
                    ' Hier jetzt der Code um mit der Datei etwas zu machen  
                    ' z. B. Öffnen, etwas auslesen oder was auch immer...  
                    If ActiveWorkbook.Name = ODatei Then
                        ReDim Preserve Strlist(0 To 1, lngCount)
                        Strlist(0, lngCount) = varTMP.Name
                        Strlist(1, lngCount) = varTMP.Path
                        lngCount = lngCount + 1
                    End If
                    Exit For
                End If
            End If
        End If
    Next varTMP
    If blnTMP = True Then
        For Each varTMP In objCurrentDir.SubFolders
            dirInfo varTMP, strName, blnTMP
        Next varTMP
    End If
End Sub


Was kann ich tun, damit das schneller läuft??

- SBS 2011 Domäne, Client Win7, 64 Bit, Office 2010
- Netzwerkperformance sollte auch gut sein, das Kopieren einer ~ 4GB grossen Datei läuft mit > 100'000 kBytes/Sec
- Virenscanner habe ich auf dem Server und auf dem Client deaktiviert, keine Aenderung

Danke und Gruss Urs

Content-ID: 252304

Url: https://administrator.de/contentid/252304

Ausgedruckt am: 04.12.2024 um 07:12 Uhr

colinardo
Lösung colinardo 17.10.2014, aktualisiert am 20.10.2014 um 10:13:13 Uhr
Goto Top
Hallo Urs,
das Problem hast nicht nur du:
http://www.mrexcel.com/forum/excel-questions/656026-better-way-listing- ...
Probier es mal mit der Dir() Variante auf der zweiten Seite des Threads ganz am Ende.

Grüße Uwe
Meierjo
Meierjo 17.10.2014 um 17:45:16 Uhr
Goto Top
Hallo Uwe

Herzlichen Dank dir Excel-Spezi face-smile face-smile

Werde die verschiedenen Varianten mal durchprobieren.

Danke und schönes Weekend

Gruss Urs
Meierjo
Meierjo 20.10.2014 um 06:47:23 Uhr
Goto Top
Guten morgen, Uwe

Habe mir die Excel Tabelle mal heruntergeladen, und heute morgen bei der Arbeit ausprobiert:

Lokal
Files listed: 6'908 ET: 0:00:02 Files/s: 6282 Directories queued: 0

Netzwerk
Files listed: 6'907 ET: 0:00:15 Files/s: 454 Directories queued: 0

Ist das wirklich normal, dass es im Netzwerk soviel länger dauert?
Kannst du das zb bei dir mal nachprüfen?

Gruss
colinardo
Lösung colinardo 20.10.2014 aktualisiert um 10:13:15 Uhr
Goto Top
Moin,
Zitat von @Meierjo:
Ist das wirklich normal, dass es im Netzwerk soviel länger dauert?
yip, das Script muss ja jedes File einzeln anfassen, und da gehen nun mal viele kleine Pakete über die Leitung, deren Ack's Zeit kosten.
Kannst du das zb bei dir mal nachprüfen?
Ist hier genauso ...

Wäre gut wenn du die Dateitypen im Vorhinein einschränken würdest - mit der DIR-Funktion hast du ja die Möglichkeit dazu.
Meierjo
Meierjo 20.10.2014 um 10:13:08 Uhr
Goto Top
Hallo Uwe

Danke für's Feedback. Bin beruhigt, dass es bei dir auch viel länger dauert übers Netz, wie lokal. Dann muss ich wenigstens nicht auf Fehlersuche im Netz gehen face-smile face-smile

Einschränken geht nicht, da alles TXT-Dateien sind. Werde ich halt den Code umstricken müssen

Danke dir

Gruss Urs