VBA验证文件扩展名为excel文件?

时间:2017-09-05 11:08:37

标签: excel vba excel-vba

我运行这个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

对此的任何帮助都将非常感激

4 个答案:

答案 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