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个月了-没有。