如何调试运行时错误13类型不匹配?

时间:2014-10-09 17:42:44

标签: vba

我需要在多个文件夹中重命名文件。如果文件名是“1”或“main”或“MAIN”,我想以不同方式重命名。如果我想重命名所有文件但现在显示类型不匹配错误,代码可以正常工作。

Sub rename()

    Dim fso, fsoFolder, fsoFile, strPath, strName, fsoSubFolder, i, a

    i = 1

    Set fso = CreateObject("Scripting.FileSystemObject")

    Set fsoFolder = fso.GetFolder("C:\Users\anu\Desktop\Black")

    For Each fsoSubFolder In fsoFolder.Subfolders

        For Each fsoFile In fsoSubFolder.Files

            strName = fsoFile.Name
            strPath = Left(fsoFile.Path, Len(fsoFile.Path) - Len(strName))
            a = fsoFile.Name
            If a = "main" Or "Main" Or "MAIN" Or "1" Then
                fso.CopyFile strPath & strName, strPath & fsoSubFolder.Name & "_" & "Main" & ".jpg"
                fso.DeleteFile strPath & strName
            Else
                fso.CopyFile strPath & strName, strPath & fsoSubFolder.Name & "_" & i & ".jpg"
                fso.DeleteFile strPath & strName
                i = i + 1
            End If

        Next
        i = 1
    Next

End Sub

如何在不收到错误的情况下检查该情况?

2 个答案:

答案 0 :(得分:1)

刚改变了这个,它对我来说很好。尝试:

Sub rename()

    Dim fso, fsoFolder, fsoFile, strPath, strName, fsoSubFolder, i, a

    i = 1

    Set fso = CreateObject("Scripting.FileSystemObject")

    Set fsoFolder = fso.GetFolder("C:\Users\anu\Desktop\Black")

    For Each fsoSubFolder In fsoFolder.Subfolders

        For Each fsoFile In fsoSubFolder.Files

            strName = fsoFile.Name
            strPath = Left(fsoFile.Path, Len(fsoFile.Path) - Len(strName))
            a = fsoFile.Name
            If ((a = "main") Or (a = "Main") Or (a = "MAIN") Or (a = "1")) Then '-----Line changed-----
                fso.CopyFile strPath & strName, strPath & fsoSubFolder.Name & "_" & "Main" & ".jpg"
                fso.DeleteFile strPath & strName
            Else
                fso.CopyFile strPath & strName, strPath & fsoSubFolder.Name & "_" & i & ".jpg"
                fso.DeleteFile strPath & strName
                i = i + 1
            End If

        Next
        i = 1
    Next

End Sub

答案 1 :(得分:0)

这条线很可能会给你一个问题。 (没有任何其他信息)

Dim fso, fsoFolder, fsoFile, strPath, strName, fsoSubFolder, i, a

作为最佳做法,您应养成输入所有变量的习惯,尤其是代码中需要Set的任何对象。

相反的东西(你可能需要确认类型,因为我不确切知道它们应该是什么)

Dim fso as 'insert your object here
Dim fsoFolder as 'insert your object here
Dim fsoFile as 'insert your object here
Dim strPath as String
Dim strName as String
Dim fsoSubFolder as  'insert your object here
Dim i as Integer
Dim a as String