PDA

Vollständige Version anzeigen : Was macht die Schleife ?


wizardtornado
29.04.2011, 10:12
Hallo erstmal,

habe folgendes Problem, in Access 97 gab es With Application.FileSearch Anweisung welche in Access2007 fehlt, Schade, aber mein alter Code lautet so:

With Application.FileSearch
.NewSearch
.FileName = ".ps"
.LookIn = strDir
If .Execute() > 0 Then
LookForPs = .FoundFiles(1)
Else
LookForPs = "0"
End If
End With
End Function

Damit habe ich aus einem Verzeichnis die letzte Datei mit einer Endung *.ps ausgelesen und diese übergeben.Nun in Access 2007 habe ich das ganze so gelöst aber komme nicht weiter:

Public Function LookForPs(strDir As String, Optional sExtension As String = "*.ps") As String

Dim sResult As String
Dim i As Long

If Right(strDir, 1) <> "\" Then strDir = strDir & "\"

sResult = dir(strDir & sExtension, vbNormal)

Do While sResult <> vbNullString
i = i + 1
sResult = dir
Debug.Print sResult
Loop

LookForPs = i

End Function

Aber nun diese Schleife wirft mir nicht zum Schluß den Namen raus sondern nur ein "" was mache ich falsch.

Ich möchte ganz einfach erreichen das in meinem Verzeichnis was mit strdir übergeben wird die letzte Datei gefunden wird und diese mit LookForPs zum Schluß übernommen wird.

Danke im voraus

FW
29.04.2011, 10:17
... setze Debug.Print sResult mal vor sResult = dir...

wizardtornado
29.04.2011, 10:21
Habe ich gemacht ich lasse durchlaufen und das Resultat ist

Public Function LookForPs(strDir As String, Optional sExtension As String = "*.ps") As String

Dim sResult As String
Dim i As Long

If Right(strDir, 1) <> "\" Then strDir = strDir & "\"

sResult = dir(strDir & sExtension, vbNormal)

Do While sResult <> vbNullString
i = i + 1
Debug.Print sResult
sResult = dir

Loop

LookForPs = i <<<<==== LookForPs = ""

End Function

Das kommt dabei heraus LookForPs = "", mache ich noch etwas falsch ?

P.S Wenn die Schleife losgeht sehe ich im DebugModus Einzelschritt sResult "000001.ps" dann weiter sResult "000002.ps" usw.habe insgesamt 6 Dateien in diesem Verzeichnis,aber immer
wenn der letzte erreicht ist geht es weiter und es wird daraus LookForPs = "" , ich brauche aber den Dateinamen weil ich diesen übergben muss, so ist es ja nichts was ich übergebe.

Atrus2711
29.04.2011, 10:29
Hi,

deine Schleife läuft einen Schritt zu weit.

Dir sucht nach der nächsten passenden Datei. Es merkt nicht, wenn der letzte Treffer gefunden ist. Du loopst While sResult <> vbNullString. Das ist auch ok, um die letzte Datei zu finden. Aber da müsste die Schleife eben aufhören. Tut sie aber nicht, da der letzte Treffer eben nicht "", sondern den Dateinamen liefert. Nach der letzten Datei wird Dir eben nochmal ausgeführt, liefert "" - und erst dann wird die Schleife beendet. Behaviour by design.

Du könntest den letzten Treffer in einer "Mitschleppvariable" speichern und die dann als Ergebnis ausgeben.

wizardtornado
29.04.2011, 10:44
Danke Atrus2711 habe es jetzt gelöst dank deiner Hilfe, habe einfach eine Mitschleppvariable mit eingebaut unter die While Schleife gepackt und diese speichert mir den letzte Dateinamen, vielen Dank an Euch alle.

Jepp, mein Wochenende ist gerettet, Danke