Vba 用于排除zip文件的代码
我有以下代码,它将列出目录中的报告(文件和文件夹)。 我想从列表中排除一种类型:Vba 用于排除zip文件的代码,vba,Vba,我有以下代码,它将列出目录中的报告(文件和文件夹)。 我想从列表中排除一种类型:Zip文件夹 想知道如何以及在何处包含此排除 Dim iRow 子列表文件() iRow=2 调用ListMyFiles(范围(“F1”)、范围(“F2”)) 端接头 子列表MyFiles(mySourcePath,包括子文件夹) 设置MyObject=New Scripting.FileSystemObject 设置mySource=MyObject.GetFolder(mySourcePath) 出错时继续下一步
Zip
文件夹
想知道如何以及在何处包含此排除
Dim iRow
子列表文件()
iRow=2
调用ListMyFiles(范围(“F1”)、范围(“F2”))
端接头
子列表MyFiles(mySourcePath,包括子文件夹)
设置MyObject=New Scripting.FileSystemObject
设置mySource=MyObject.GetFolder(mySourcePath)
出错时继续下一步
对于mySource.Files中的每个myFile
iCol=1
单元格(iRow,iCol).Value=myFile.Path
iCol=iCol+1
单元格(iRow,iCol).Value=myFile.Name
iCol=iCol+1
单元格(iRow,iCol).Value=myFile.Size
iCol=iCol+1
单元格(iRow,iCol).Value=myFile.DateLastModified
iRow=iRow+1
下一个
如果包含子文件夹,则
对于mySource.SubFolders中的每个mySubFolder
调用ListMyFiles(mySubFolder.Path,True)
下一个
如果结束
端接头
首先,您需要确定当前文件的文件扩展名。
因此,我们可以从文件名右侧搜索第一个
(点):
InStrRev(myFile.Name, ".") 'position of the first dot
LCase$(Right$(myFile.Name, Len(myFile.Name) - InStrRev(myFile.Name, ".")))
'LCase is used to transform the extension to lower case letters so it is case insensitive
使用此位置,我们可以从文件名中提取文件扩展名:
InStrRev(myFile.Name, ".") 'position of the first dot
LCase$(Right$(myFile.Name, Len(myFile.Name) - InStrRev(myFile.Name, ".")))
'LCase is used to transform the extension to lower case letters so it is case insensitive
因此,通过检查文件扩展名,我们可以轻松地从列表中排除所有zip
文件:
If LCase$(Right$(myFile.Name, Len(myFile.Name) - InStrRev(myFile.Name, "."))) <> "zip" Then
'file is no zip file
End If
编辑:
根据@Ahmed Abdelhameeds的评论,您也可以使用
LCase$(MyObject.GetExtensionName(myFile.Path))
而不是
LCase$(Right$(myFile.Name, Len(myFile.Name) - InStrRev(myFile.Name, ".")))
从文件检索文件扩展名
GetExtensionName
甚至更快一点。回答得很好,投了赞成票。请注意:FileSystemObject
有一个GetExtensionName()
方法,所以我会使用它。@AhmedAbdelhameed当然,添加了它。它甚至更快一点。