Suche…
Einführung
Eine Funktion, die sich selbst aufruft, wird als rekursiv bezeichnet . Rekursive Logik kann oft auch als Schleife implementiert werden. Die Rekursion muss mit einem Parameter gesteuert werden, damit die Funktion weiß, wann die Rekursion und Vertiefung des Aufrufstapels unterbrochen werden muss. Unbegrenzte Rekursion führt schließlich zu einem Laufzeitfehler "28": "Nicht genügend Stapelspeicher".
Siehe Rekursion .
Bemerkungen
Rekursion ermöglicht wiederholte, selbstreferenzierende Aufrufe einer Prozedur.
Faktoren
Function Factorial(Value As Long) As Long
If Value = 0 Or Value = 1 Then
Factorial = 1
Else
Factorial = Factorial(Value - 1) * Value
End If
End Function
Folder Rekursion
Early Bound (mit einem Verweis auf Microsoft Scripting Runtime
)
Sub EnumerateFilesAndFolders( _
FolderPath As String, _
Optional MaxDepth As Long = -1, _
Optional CurrentDepth As Long = 0, _
Optional Indentation As Long = 2)
Dim FSO As Scripting.FileSystemObject
Set FSO = New Scripting.FileSystemObject
'Check the folder exists
If FSO.FolderExists(FolderPath) Then
Dim fldr As Scripting.Folder
Set fldr = FSO.GetFolder(FolderPath)
'Output the starting directory path
If CurrentDepth = 0 Then
Debug.Print fldr.Path
End If
'Enumerate the subfolders
Dim subFldr As Scripting.Folder
For Each subFldr In fldr.SubFolders
Debug.Print Space$((CurrentDepth + 1) * Indentation) & subFldr.Name
If CurrentDepth < MaxDepth Or MaxDepth = -1 Then
'Recursively call EnumerateFilesAndFolders
EnumerateFilesAndFolders subFldr.Path, MaxDepth, CurrentDepth + 1, Indentation
End If
Next subFldr
'Enumerate the files
Dim fil As Scripting.File
For Each fil In fldr.Files
Debug.Print Space$((CurrentDepth + 1) * Indentation) & fil.Name
Next fil
End If
End Sub
Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow