2014-10-09 153 views
0

我需要重命名多个文件夹中的文件。如果文件名是“1”或“主”或“主”,我想重新命名为不同。如果我想要重命名所有文件,但现在显示的类型不匹配错误,代码将正常工作。如何调试运行时错误13类型不匹配?

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 

如何在没有发现错误的情况下检查该状况?

+0

你能告诉我它打破? – NMK 2014-10-09 17:49:52

+0

它没有运行。它只是显示运行时错误13.如果我从If If Else中删除部分,即不检查该条件,它工作正常。 – 2014-10-09 17:53:25

+3

这个 - >'如果a =“main”或者“Main”或者“MAIN”或者“1”Then''不会对每个都测试'a'。 – crashmstr 2014-10-09 17:53:46

回答

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