Clever-Excel-Forum

Normale Version: Wieso klettert Dir
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

vielleicht kann mir jemand von euch bitte mal erklären, wieso die Funktion Dir durch ein gegebenes Verzeichnis klettert.

Habe ich untenstehenden Code, wird mit debug.print strDatei im entsprechenden Vereichnis ein Dateiname nach dem anderen

angezeigt.  Aber wieso?


Code:
Sub Klettern()
Dim i%, strDatei$

strDatei = Dir("C:\Testen\")
Do While strDatei <> ""
Debug.Print strDatei
strDatei = Dir()
Loop

End Sub
Hi,

weil der Code solange durch Dein Verzeichnis läuft, bis er keine Datei mehr findet. Wenn Du das nicht programmiert hast, sondern nur abkopiert, dann solltest Du Dich mal hier durcharbeiten:

http://www.online-excel.de/excel/singsel_vba.php?f=92 u.weitere
Weil dein Programm das verlangt, Algor! :)
Do … Loop ist eine Schleife, die erst beendet wird, wenn Dir nichts mehr findet. Solange das nicht der Fall ist, geht's weiter und das Programm setzt die Datei-Variable immer auf den neuesten Dir-Stand, also ins nächste Unterverzeichnis, sofern noch eins vorhanden ist.
Gruß, Castor
Sorry Leute,

aber ich verstehe es nicht. Den Code habe ich schon selbst geschrieben, aber nur weil ich es weiß, nicht weil ich es verstehe!

Wenn ich so etwas mal ohne Schleife (rein zur Veranschaulichung!!!!), also while oder for programmiere sieht das Ganze so aus:


Code:
Sub Ohne_Schleife()
Dim strDatei$
strDatei = Dir("C:\Testen\")
Debug.Print strDatei
strDatei = Dir
Debug.Print strDatei
strDatei = Dir
Debug.Print strDatei
strDatei = Dir
Debug.Print strDatei
strDatei = Dir
Debug.Print strDatei
strDatei = Dir
Debug.Print strDatei
strDatei = Dir
Debug.Print strDatei
strDatei = Dir
Debug.Print strDatei
strDatei = Dir
Debug.Print strDatei
.
.
.
.

End Sub


Wie macht die Funktion Dir das? Weil sie überladen wurde??
Hallo,

das schreibt Microsoft dazu:


Zitat:Beim ersten Aufruf der Dir-Funktion müssen Sie einen PathName angeben. Um das nächste Element abzurufen, können Sie die Dir-Funktion nachfolgend ohne Parameter aufrufen.
@Atilla
dank deines Zitates bekomme ich zumindest eine grobe Vorstellung davon. Obwohl das "innere" der Dir Funktion, also das "wie" natürlich noch völlig verborgen bleibt.

Zeigt auch mein Code:
Code:
Sub Von_Element_zu_Element()
Debug.Print Dir("C:\Testen\")
Debug.Print Dir
Debug.Print Dir
Debug.Print Dir
Debug.Print Dir
Debug.Print Dir
Debug.Print Dir
Debug.Print Dir
Debug.Print Dir
Debug.Print Dir
.
.
.
End Sub

Das "nachfolgende" Dir weiß vom "vorausfolgenden" welchen Wert es hat.
Weil es die VBA übersetzung ist von MS-DOS:


Code:
sub M_snb()
  msgbox createobject("wscript.shell").exec("cmd /c Dir C:\Testen\*.* /b/a-d").stdout.readall
End Sub