excel 2007 vba,删除匹配的文件夹名称

excel 2007 vba,删除匹配的文件夹名称,excel,excel-2007,vba,Excel,Excel 2007,Vba,我正在尝试压缩文件夹并删除与名称匹配的子文件夹。目录的结构如下所示 <starting path> <starting path>\<main folder> <starting path>\<main folder>\<sub folder> \ \\ 我有下面的VBA,它工作到第一个匹配和删除。在这一点之后,我得到一个路径未找到的错误。我不确定的是如何(在删除文件夹后)将它提升到起始路径,或者只是移动到下一个主文件

我正在尝试压缩文件夹并删除与名称匹配的子文件夹。目录的结构如下所示

<starting path>
<starting path>\<main folder>
<starting path>\<main folder>\<sub folder>

\
\\
我有下面的VBA,它工作到第一个匹配和删除。在这一点之后,我得到一个路径未找到的错误。我不确定的是如何(在删除文件夹后)将它提升到起始路径,或者只是移动到下一个主文件夹,让它再次滚动

'Looping Through Folders and Files in VBA
Public ObjFolder As Object

Public objFso As Object
Public objFldLoop As Object
Public lngCounter As Long
Public objFl As Object


'===================================================================
'A procedure to call the Function  LoopThroughEachFolder(objFolder)
'===================================================================

Sub GetFolderStructure()
'
    lngCounter = 0
    Set objFso = CreateObject("Scripting.FileSystemObject")
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Show
        Set ObjFolder = objFso.GetFolder(.SelectedItems(1))
    End With
    LoopThroughEachFolder ObjFolder

End Sub
'===================================================
'Function to Loop through each Sub Folders
'===================================================

Function LoopThroughEachFolder(fldFolder As Object)
Dim P As Long

    For Each objFldLoop In fldFolder.subFolders
    lngCounter = lngCounter + 1
    P = InStr(1, objFldLoop.Path, "\TREATS")

    If P <> 0 Then
           Range("A1").Offset(lngCounter).Value = Mid(objFldLoop.Path, P, 10)
           MsgBox objFldLoop.Path
           objFso.DeleteFolder objFldLoop
    End If
        LoopThroughEachFolder objFldLoop
    Next

End Function
在VBA中循环浏览文件夹和文件 作为对象的公用文件夹 作为对象的公共objFso 作为对象的公共objFldLoop 公共lngCounter尽可能长 作为对象的公共objFl '=================================================================== '调用函数LoopThroughEachFolder(objFolder)的过程 '=================================================================== 子GetFolderStructure() ' lngCounter=0 设置objFso=CreateObject(“Scripting.FileSystemObject”) 使用Application.FileDialog(msoFileDialogFolderPicker) 显示 设置ObjFolder=objFso.GetFolder(.SelectedItems(1)) 以 LoopThroughEachFolder ObjFolder 端接头 '=================================================== '函数循环遍历每个子文件夹 '=================================================== 函数LoopThroughEachFolder(fldFolder作为对象) 变暗P为长 对于fldFolder.subFolders中的每个objFldLoop lngCounter=lngCounter+1 P=InStr(1,objFldLoop.Path,“\TREATS”) 如果p0那么 范围(“A1”)。偏移量(lngCounter)。值=中间(objFldLoop.Path,P,10) MsgBox objFldLoop.Path objFso.DeleteFolder objFldLoop 如果结束 LoopthroughHeachFolder objFldLoop 下一个 端函数 ==更新的工作代码=====

'Looping Through Folders and Files in VBA
Public ObjFolder As Object

Public objFso As Object
Public objFldLoop As Object
Public lngCounter As Long
Public objFl As Object


'===================================================================
'A procedure to call the Function  LoopThroughEachFolder(objFolder)
'===================================================================

Sub GetFolderStructure()
'
    lngCounter = 0
    Set objFso = CreateObject("Scripting.FileSystemObject")
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Show
        Set ObjFolder = objFso.GetFolder(.SelectedItems(1))
    End With
   LoopThroughEachFolder ObjFolder

End Sub
'===================================================
'Function to Loop through each Sub Folders
'===================================================

Function LoopThroughEachFolder(fldFolder As Object)
Dim P As Long

    For Each objFldLoop In fldFolder.subFolders

    P = InStr(1, objFldLoop.Path, "\TREATS")
    If P <> 0 Then
           objFso.DeleteFolder objFldLoop
    Else
           LoopThroughEachFolder objFldLoop
    End If

    Next

End Function
在VBA中循环浏览文件夹和文件 作为对象的公用文件夹 作为对象的公共objFso 作为对象的公共objFldLoop 公共lngCounter尽可能长 作为对象的公共objFl '=================================================================== '调用函数LoopThroughEachFolder(objFolder)的过程 '=================================================================== 子GetFolderStructure() ' lngCounter=0 设置objFso=CreateObject(“Scripting.FileSystemObject”) 使用Application.FileDialog(msoFileDialogFolderPicker) 显示 设置ObjFolder=objFso.GetFolder(.SelectedItems(1)) 以 LoopThroughEachFolder ObjFolder 端接头 '=================================================== '函数循环遍历每个子文件夹 '=================================================== 函数LoopThroughEachFolder(fldFolder作为对象) 变暗P为长 对于fldFolder.subFolders中的每个objFldLoop P=InStr(1,objFldLoop.Path,“\TREATS”) 如果p0那么 objFso.DeleteFolder objFldLoop 其他的 LoopthroughHeachFolder objFldLoop 如果结束 下一个 端函数
我不确定您是否需要在函数中使用附加的
循环chfolder objFldLoop
,在函数完成第一个循环(在
下一个
命令)之前,您将再次调用函数,其中包含您刚刚删除的变量谢谢您的回复。评论说它没有任何视觉效果。没有其他消息框会弹出下一个匹配项(大约有100个匹配项),并且不会删除任何其他内容。我试着注释掉第一个文件夹,效果也一样。如果你删除了一个文件夹,会发生什么?接下来要做的事情是对刚删除的文件夹调用
LoopThroughEachFolder
。您需要在
结束前的
Else
块中添加它,如果
谢谢,这就是我提到需要跳出当前目录结构的原因。我稍微整理了一下代码,我会发布working.pnuts-考虑到我甚至不记得这是干什么的-因为它已经差不多15个月了-没有。