Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 用于排除zip文件的代码_Vba - Fatal编程技术网

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当然,添加了它。它甚至更快一点。