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
Hier die Funktion, die aufgerufen wird
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 252304
Url: https://administrator.de/contentid/252304
Ausgedruckt am: 04.12.2024 um 07:12 Uhr
5 Kommentare
Neuester Kommentar
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
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
Moin,
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.
Wäre gut wenn du die Dateitypen im Vorhinein einschränken würdest - mit der DIR-Funktion hast du ja die Möglichkeit dazu.
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.