반응형
반환된 파일의 순서에 대해서는 Dir()가 보증을 서주나요?
기존 코드를 정리하는 중입니다.
Sheets("Control").Select
MyDir = Cells(2, 1)
CopySheet = Cells(6, 2)
MyFileName = Dir(MyDir & "wp*.xls")
' when the loop breaks, we know that any subsequent call to Dir implies
' that the file need to be added to the list
While MyFileName <> LastFileName
MyFileName = Dir
Wend
MyFileName = Dir
While MyFileName <> ""
Cells(LastRow + 1, 1) = MyFileName
LastRow = LastRow + 1
MyFileName = Dir
Wend
제 질문은 어떻게 하면Dir
결과 및 결과 순서에 대한 보장이 있는 경우 를 반환합니다.사용시Dir
위와 같은 루프에서, 코드는 결과적으로 다음과 같은 호출을 암시합니다.Dir
이름순으로 정렬되어 있습니다.
~하지 않는 한Dir
이를 보장합니다. 고칠 필요가 있는 버그입니다.문제는 Dir()가 파일이 반환되는 순서에 대해 보증을 서느냐, 아니면 암묵적으로 보증을 서느냐는 것입니다.
해결책
@Frederic의 답변을 바탕으로 제가 생각해낸 해결책은 이것입니다.
이 퀵소트 알고리즘과 폴더의 모든 파일을 반환하는 함수를 함께 사용하면...
Dim allFiles As Variant
allFiles = GetFileList(MyDir & "wp*.xls")
If IsArray(allFiles) Then
Call QuickSort(allFiles, LBound(allFiles), UBound(allFiles))
End If
Dim x As Integer
Dim lstFile As String
x = 1
' still need to loop through results to get lastFile
While lstFile <> LastFileName
lstFile = allFiles(x)
x = x + 1
Wend
For i = x To UBound(allFiles)
MyFileName = allFiles(i)
Cells(LastRow + 1, 1) = MyFileName
LastRow = LastRow + 1
Next i
이 일이 일어난다는 보장은 없습니다.Dir()
는 특정 순서대로 파일을 반환합니다.MS Access VBA 설명서에는 다음과 같은 내용도 나와 있습니다.
팁파일 이름은 특정 순서로 검색되지 않으므로 반환된 파일 이름을 저장할 수 있습니다.
array
, 배열을 정렬합니다.
저는 이 게시물이 오래된 것을 알고 있지만 또한 짧은 해결책을 찾고 있는 사람들을 위해 제가 찾은 해결책을 공유합니다.
모든 파일명을 엑셀 시트란에 작성하고 파일명을 얻을 수 있는 변수를 사용합니다.그런 다음 루프를 실행하여 변수가 열에 작성한 순서에 따라 검색한 이름을 기준으로 각 파일을 엽니다.
For Row_Value = 1 To 10
NameFile= Range("N" & Row_Value).Value 'NameFile = "Worbook1"
MyFile = Dir("C\Desktop\Folder1\" & NameFile & ".xlsm")
Next Row_Value
이상 없길 바랍니다.
언급URL : https://stackoverflow.com/questions/4282940/does-dir-make-any-guarantee-on-the-order-of-files-returned
반응형
'source' 카테고리의 다른 글
요소의 모든 자식에게 스타일을 적용하려면 어떻게 해야 합니까? (0) | 2023.09.24 |
---|---|
ImageView - 높이와 일치하는 너비가 있습니까? (0) | 2023.09.24 |
Excel로 PDF 데이터 및 테이블 스크래핑 (0) | 2023.09.24 |
창이 없는 응용프로그램 만들기 (0) | 2023.09.24 |
쿼리가 오라클 10g을 중단합니다. (0) | 2023.09.24 |