2014-10-09 2 views
0

여러 폴더에있는 파일의 이름을 바꿔야합니다. 파일 이름이 "1"또는 "main"또는 "MAIN"인 경우 다르게 이름을 바꿉니다. 모든 파일의 이름을 바꾸려는 경우 코드가 올바르게 작동하지만 형식이 일치하지 않는 오류가 표시됩니다.런타임 오류 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

+0

전혀 실행되지 않습니다. 단지 런타임 오류 13을 보여줍니다. 즉, 조건을 확인하지 않고 If에서 Else로 파트를 제거하면 정상적으로 작동합니다. –

+3

This ->'a = "main"또는 "main"또는 "MAIN"또는 "1"Then 각각에 대해'a'를 테스트하지 않습니다. – crashmstr

답변

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

이 줄은 문제를 일으킬 수 있습니다. 당신이 모든 변수, 코드에 Set해야 특히 물건을 입력하는 습관을해야 가장 좋은 방법은

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 
관련 문제