トリプルループで空のフォルダを削除しようとしています。トリプルループで空のフォルダを削除する
注文番号: 1.メインフォルダに入力します。 2.最初に見つかったフォルダ を確認します。3.メインフォルダの最初のサブフォルダを確認します。 4.そのサブフォルダに別のフォルダが含まれている場合は、このサブサブフォルダ に入力します。5.最後のフォルダで何も含まれていない場合は、プログラムによって削除されます。 5.1フォルダに何かが含まれている場合(ファイル、Excel、pdfは関係ありません)、次のsubSubFolderに移動します。 6.空のフォルダがなくなるまで続けます。
基本的に、コードには、ファイルを含むフォルダは変更されていない必要があります。
しかし、なぜコードが続かず、空のコードを削除せずに停止するのか分かりません。
これは、フォルダ構造です: Folder Path
そして、これは私があなたの時間のために:
Sub recursiveDeleting()
Dim sFldr As Object
Dim ssFldr As Object
Dim sssFldr As Object
Dim fs
Set fs = CreateObject("Scripting.FileSystemObject")
sFound = False
ssFound = False
sssFound = False
flPath = ActiveWorkbook.Path & "\"
YearPath = flPath & "2017\"
FARFIpath = YearPath & "\FAR_FI\"
For Each sFldr In CreateObject("Scripting.FileSystemobject").GetFolder(FARFIpath).SubFolders
For Each ssFldr In CreateObject("Scripting.FileSystemobject").GetFolder(sFldr).SubFolders
For Each sssFldr In CreateObject("Scripting.FileSystemobject").GetFolder(ssFldr).SubFolders
If Dir(sssFldr & "\*.*") = "" Then
RmDir (sssFldr)
Else
sssFound = True
End If
If sssFound = True Then
Exit For
End If
Next sssFldr
If fs.FolderExists(ssFldr) = "" Then
RmDir (ssFldr)
Else
ssFound = True
End If
If ssFound = True Then
Exit For
End If
Next ssFldr
If Dir(sFldr, vbDirectory) = "" Then
RmDir (sFldr)
sFound = True
End If
If sFound = True Then
Exit For
End If
Next sFldr
End Sub
感謝を使用し、良い一日持っているコードです! 。。
RmDirが括弧を使用していない可能性があります。 RmDir "MYDIR"またはRmDir sssFldr – mooseman
@moosemanを試してください。括弧は単に値として評価され、呼び出されたプロシージャに 'ByVal'を強制的に渡します。余分なカッコを導入する(悪い)癖があると、コンパイルエラー(複数の引数が指定されている場合)や実行時エラー(パラメータがオブジェクト参照の場合)が発生する可能性がありますが、ほとんどの場合、手続き識別子とその引数リストの間の奇妙な空白。 IOW、私はそれがそれに関連しているのか疑問です。 –