如何在目录文件/文件夹列表VBA代码中排除Zip文件夹?
嘿,我来帮你搞定这个VBA里排除Zip文件/文件夹的问题!其实很简单,咱们只需要在遍历文件和子文件夹的环节加个判断,跳过Zip类型的项目就行。下面一步步给你说:
如何在你的VBA代码中排除Zip
首先得明确:通常Windows里的Zip压缩包在FileSystemObject里是被当作文件的(后缀是.zip),但如果有特殊情况被识别成文件夹,咱们也一起处理。
1. 修改文件遍历的核心逻辑
你原来的代码里有个For Each myFile In mySource.Files的循环,就在这个循环里加个判断——只要是Zip文件就跳过,不加入列表。用FileSystemObject自带的GetExtensionName方法来判断扩展名,比自己截字符串靠谱多了,还能忽略大小写(比如.ZIP、.Zip都能识别)。
修改后的循环代码如下:
For Each myFile In mySource.Files ' 核心判断:排除所有Zip文件 If LCase(MyObject.GetExtensionName(myFile.Name)) <> "zip" Then iCol = 1 ' 这里放你原来写的那些把文件信息写到单元格的代码 ' 比如 Cells(iRow, iCol).Value = myFile.Name 之类的逻辑 iRow = iRow + 1 End If Next myFile
2. 递归子文件夹时的排除逻辑(如果需要)
你的代码里有IncludeSubfolders参数,说明会递归遍历子文件夹。如果遇到那种被误识别成文件夹的Zip包(这种情况很少见,但以防万一),咱们在遍历子文件夹的循环里也加个判断:
If IncludeSubfolders Then For Each mySubFolder In mySource.SubFolders ' 排除名字以.zip结尾的文件夹 If Not LCase(Right(mySubFolder.Name, 4)) = ".zip" Then Call ListMyFiles(mySubFolder.Path, IncludeSubfolders) End If Next mySubFolder End If
整合后的完整示例代码
把这些修改拼到你的代码里,完整的ListMyFiles子程序大概是这样:
Sub ListMyFiles(mySourcePath, IncludeSubfolders) Set MyObject = New Scripting.FileSystemObject Set mySource = MyObject.GetFolder(mySourcePath) On Error Resume Next ' 遍历文件,跳过Zip For Each myFile In mySource.Files If LCase(MyObject.GetExtensionName(myFile.Name)) <> "zip" Then iCol = 1 ' 这里替换成你原来的单元格赋值代码 Cells(iRow, iCol).Value = myFile.Name iCol = iCol + 1 Cells(iRow, iCol).Value = myFile.Path ' ... 其他你需要展示的文件属性 iRow = iRow + 1 End If Next myFile ' 递归遍历子文件夹(如果开启),跳过Zip文件夹 If IncludeSubfolders Then For Each mySubFolder In mySource.SubFolders If Not LCase(Right(mySubFolder.Name, 4)) = ".zip" Then Call ListMyFiles(mySubFolder.Path, IncludeSubfolders) End If Next mySubFolder End If End Sub
小提示
LCase()是为了兼容各种大小写的扩展名,比如用户把Zip改成大写.ZIP也能被排除;- 如果你的场景里根本不会有被识别成文件夹的Zip,那只需要修改文件遍历的部分就行,子文件夹的判断可以去掉。
内容的提问来源于stack exchange,提问作者leebird
相关产品推荐
相关产品推荐

