Excel VBA effiziente Funktion zum Abrufen von Dateinamen

8

Ich brauche eine Sammlung von Dateinamen aus einem Ordner auf einem Remote-Server mit VBA in Excel 2010. Ich habe eine Funktion, die funktioniert und in den meisten Fällen würde es die Aufgabe erledigen, aber der Remote-Server hat oft schrecklich , schreckliche Netzwerkleistungsprobleme. Das bedeutet, dass das Durchschleifen von etwa 300 Dateien, um ihre Namen in eine Sammlung aufzunehmen, 10 Minuten dauern kann. Die Anzahl der Dateien im Ordner wird wahrscheinlich auf Tausende steigen, so dass dies nicht funktioniert. Ich brauche einen Weg, alle Dateinamen zu erhalten in einer einzigen Netzwerkanforderung und nicht Schleife. Ich glaube, dass seine Verbindung mit dem Remote-Server, der sich die Zeit nimmt, eine einzige Anfrage in der Lage sein sollte, alle Dateien in einem Durchlauf ziemlich schnell zu bekommen.

Dies ist die Funktion, die ich derzeit habe:

%Vor%     
Coder375 08.10.2014, 17:34
quelle

3 Antworten

0

Ok, ich habe eine Lösung gefunden, die für meine Situation geeignet ist, und vielleicht finden es andere auch nützlich. Diese Version verwendet die Windows-API und ruft die Dateinamen in 1 Sekunde oder weniger ab, während die FSO-Methode mehrere Minuten benötigt. Es ist immer noch eine Schleife, so dass ich nicht sicher bin, warum es so viel schneller ist, aber es ist.

Dies nimmt einen Pfad wie "c: \ windows \" und gibt eine Sammlung aller Dateien (und Verzeichnisse) in diesem Ordner zurück. Die genauen Parameter, die ich verwendet habe, erfordern Windows 7 oder neuer, siehe die Kommentare in den Deklarationen.

%Vor%     
Coder375 13.10.2014, 11:19
quelle
8

Dieser ist blitzschnell:

%Vor%

Was diese Funktion aufruft:

%Vor%     
tbur 08.10.2014 18:19
quelle
0

Ich dachte, dass es eine API geben würde, die mir die Dateinamen in einem Verzeichnis ohne Schleifen bringen könnte, aber nicht finden konnte. All der Code, den ich kenne, beinhaltet Schleifen entweder mit fso oder dir .

So ist es möglich, die Dateinamen ohne Schleifen zu erhalten. Ich denke ja ... Hier ist eine Art, die ich mir vorstellen kann ...

Wenn Sie den folgenden Befehl in der DOS-Eingabeaufforderung eingeben, wird die gesamte Dateistruktur an eine Textdatei gesendet

%Vor%

Das obige von VBA tun

%Vor%

Zum Beispiel (Dies ist, was in MyFile.Txt gespeichert wird)

%Vor%

Nun müssen Sie lediglich die Textdatei aus dem Remote-Ordner in Ihren Ordner kopieren und einfach analysieren, um die Dateinamen zu erhalten.

    
Siddharth Rout 08.10.2014 18:10
quelle