我运行这个vba,它通过文件夹并将数据汇总在一个大表中。我的问题是我收到了名为thumbs.db的隐藏文件的错误,我需要添加一些东西,以便它验证它只是拉动xlsx扩展名的文件。以下是我正在使用的代码。
Sub DoFolder(Folder)
Dim SubFolder As Folder
Dim i As Integer
Dim CopyR As Range
For Each SubFolder In Folder.SubFolders
DoFolder SubFolder
Next
If Folder.SubFolders.Count = 0 Then
If Folder.Files.Count = 1 Then
If Mid(Folder.Files, Len(Folder.Files) - 3, 4) = "xlsx" Then
Else: MsgBox "2+ files: " & Folder.Path
End If
End If
For Each File In Folder.Files
Hoover File
Next
Else
End If
End Sub
我遇到问题的方法是
If Mid(Folder.Files, Len(Folder.Files) - 3, 4) = "xlsx" Then
对此的任何帮助都将非常感激
答案 0 :(得分:3)
Folder.Files
是一个不是字符串的集合。
Sub DoFolder(FolderName As String, Optional fso As Object)
Dim f As Object, MySubFolder As Object, RootFolder As Object
Dim cFiles As Collection
If fso Is Nothing Then Set fso = CreateObject("Scripting.FileSystemObject")
Set RootFolder = fso.GetFolder(FolderName)
For Each MySubFolder In RootFolder.SubFolders
DoFolder MySubFolder.Path, fso
Next
Set cFiles = New Collection
For Each f In RootFolder.Files
If f.Name Like "*xls*" Then cFiles.Add f
Next
If cFiles.Count > 0 Then
MsgBox cFiles.Count & " files found in " & RootFolder.Name
For Each f In cFiles
Hoover f
Next
End If
End Sub
答案 1 :(得分:1)
快速解决方案只是检查文件名中包含的xlsx
。像这样:
If InStr(1,"FileName","xlsx",vbTextCompare)<1 then
因此,除非有人将thumbs.db
重命名为thumbsxlsx.db
,否则您将处于安全的一面。
答案 2 :(得分:1)
假设您正在使用FileSystemObject,即使我们无法查看声明,您也可以使用FileSystemObject,并假设您只想为.xlsx文件调用Hoover,您可以使用以下代码
If Right(File.Name, 4) = "xlsx" Then
Hoover File
End If
答案 3 :(得分:0)
作为对user6432984答案的进一步改进。.FSO确实具有获取文件扩展名的功能,但是该功能不是File对象的一部分,而是fso.GetExtensionName()
您希望可以使用File.Type
属性,但这会提供与该文件扩展名关联的应用程序名称-不太有用。
If f.Type Like "*xls*" Then cFiles.Add f
但是,基于FSO的功能的工作原理如下:
For Each f In RootFolder.Files
If fso.GetExtensionName(f.Path) Like "*xls*" Then cFiles.Add f
Next