시나리오 - OutFolder에는 생성 된 날짜 시간 (20140524110115, 20140524110120, 20140524110122 등)에 따라 이름이 지정된 XML 파일이 들어 있습니다. ID 및 작업 태그 값을 기반으로 파일의 이름을 바꾸고 싶습니다 (또한 중복을 확인하십시오).FSO 파일 이름 바꾸기 코드가 두 번 실행됩니다.
문제 - 다음 코드를 실행하면 루프가 폴더의 파일 수보다 두 배 이상 실행됩니다. 현재 폴더에는 67 개의 파일이 있고 루프는 134 번 실행됩니다. 따라서 파일은 루프가 두 번 실행되는 이유는 무엇
ID11_New_1.xml ID11_Used_1.xml ID12_New_1.xml ID12_Sold_1.xml ... and so on
를 기다리고 있었다
ID11_New_2.xml ID11_Used_2.xml ID12_New_2.xml ID12_Sold_2.xml ... and so on
로 이름이 변경? 당신이 중복 테스트 폴더가 올바른 (내가 폴더를 포함 모르는)이지만, 어쩌면 THER 첫 번째 줄에 당신이 OutFolder
을 변경해야하는 경우
Sub Test(OutFolder)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.SetProperty "SelectionLanguage", "XPath"
xmlDoc.Async = False
Set objFiles = objFSO.GetFolder(OutFolder).Files
i = 1
For Each FileXML In objFiles
Debug.Print i
xmlDoc.Load (FileXML.Path)
Set varID = xmlDoc.GetElementsByTagName("Id")
Set varAction = xmlDoc.GetElementsByTagName("Action")
If varID.Length > 0 And varAction.Length > 0 Then 'if file is of correct format
FileCtr = 1
varFileName = varID(0).Text & "_" & varAction(0).Text & "_" & FileCtr & ".xml"
'check for duplicates
While objFSO.FileExists(objFSO.BuildPath(OutFolder, varFileName))
varFileName = varID(0).Text & "_" & varAction(0).Text & "_" & FileCtr & ".xml"
FileCtr = FileCtr + 1
Wend
'FileXML.Name = varFileName
With objFSO
.MoveFile .BuildPath(FileXML.ParentFolder, FileXML.Name), .BuildPath(FileXML.ParentFolder, varFileName)
End With
End If
i = i + 1
Next
End Sub
동시에 개체를 반복하면서 개체 집합의 콘텐츠를 변경하지 않는 것이 좋습니다. 소스 파일 이름을 먼저 콜렉션에 덤프 한 다음 처리하십시오. –