私のオフィスではフォルダが移動するという問題が繰り返し発生しており、フォルダを追跡する簡単な方法が必要です。フォルダーが見つかったら終了する方法がわからないことを除いて、期待どおりに実行される次の関数があります。これは、すべてのインスタンスを検索する再帰的なディレクトリ検索をモデルにしています。問題は、1 つのインスタンスを見つけて終了したいということです。
クラスモジュールを入れたり、イベントや状態モニターにフックしたりせずに、このことを自分自身の呼び出しを停止させることは可能ですか? もしそうなら、どうすればそれを達成できますか?
Function FindFolder(CurrentDirectory As Scripting.Folder, FolderName As String) As Scripting.Folder
On Error GoTo errHandler
Dim fold As Scripting.Folder
If CurrentDirectory.SubFolders.Count > 0 Then
For Each fold In CurrentDirectory.SubFolders
Debug.Print fold.Path
If fold.Name = FolderName Then
Set FindFolder = fold: Exit Function
Else
Set FindFolder = FindFolder(fold, FolderName)
End If
Next fold
End If
Exit Function
errHandler:
If Err.Number = 70 Then Resume Next 'Dont have permission to check this directory
End Function
使用例はこちら
Sub FindEm()
Dim FSO As Scripting.FileSystemObject
Set FSO = New Scripting.FileSystemObject
Dim startFold As Scripting.Folder
Set startFold = FSO.GetFolder("C:\")
Dim searchFold As Scripting.Folder
Set searchFold = FindFolder(startFold, "SomeExactFolderName")
Debug.Print searchFold.Path
End Sub
何か案は?