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

Vba 如何调试运行时错误13类型不匹配?,vba,Vba,我需要重命名多个文件夹中的文件。如果文件名为“1”或“main”或“main”,我希望以不同的方式重命名它。如果我想重命名所有文件,但现在显示类型不匹配错误,代码可以正常工作 Sub rename() Dim fso, fsoFolder, fsoFile, strPath, strName, fsoSubFolder, i, a i = 1 Set fso = CreateObject("Scripting.FileSystemObject") Set

我需要重命名多个文件夹中的文件。如果文件名为“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

如何在不出现错误的情况下检查该条件?

刚刚更改了此项,对我来说工作正常。尝试:

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

这一行可能会给您带来问题。(无任何附加信息)

作为最佳实践,您应该养成键入所有变量的习惯,尤其是需要在代码中设置的任何对象

类似于此(您可能需要确认类型,因为我不知道它们应该是什么)


你能告诉我它在哪里坏了吗?它根本不跑。它只显示运行时错误13。如果我在不检查该条件的情况下从If-to-Else(即从If-to-Else)中移除零件,它工作正常。如果a=“main”或“main”或“main”或“main”或“1”,则不会对每个零件进行测试。如果a=“main”或a=“main”或a=“main”或a=“1”根本没有运行,请尝试此操作。是的,它是,否则你不会得到一个错误。当您收到错误时,按下按钮进行调试,这将突出显示引起错误的行。干杯
Dim fso, fsoFolder, fsoFile, strPath, strName, fsoSubFolder, i, a
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